diff options
author | Kevin Buettner <kevinb@redhat.com> | 2002-07-15 20:06:12 +0000 |
---|---|---|
committer | Kevin Buettner <kevinb@redhat.com> | 2002-07-15 20:06:12 +0000 |
commit | 42cc437fb04186530a2f58374e1b95efed47b3ce (patch) | |
tree | 1c7e637452050d396a749d4b66ec4e6e581d24e1 /gdb/aix-thread.c | |
parent | 8e2c28d425ac7edcfc34422d8b0ba1cc1b8ea92f (diff) | |
download | gdb-42cc437fb04186530a2f58374e1b95efed47b3ce.zip gdb-42cc437fb04186530a2f58374e1b95efed47b3ce.tar.gz gdb-42cc437fb04186530a2f58374e1b95efed47b3ce.tar.bz2 |
* aix-thread.c (ptrace_check): Eliminate goto.
(sync_threadlists): Eliminate gotos. Also, fix array overrun
problem.
Diffstat (limited to 'gdb/aix-thread.c')
-rw-r--r-- | gdb/aix-thread.c | 76 |
1 files changed, 44 insertions, 32 deletions
diff --git a/gdb/aix-thread.c b/gdb/aix-thread.c index 2fa9ec2..1eb366e 100644 --- a/gdb/aix-thread.c +++ b/gdb/aix-thread.c @@ -249,17 +249,17 @@ ptrace_check (int req, int id, int ret) case PTT_READ_FPRS: case PTT_READ_SPRS: if (ret == -1 && errno == EPERM) - goto strange; + { + if (debug_aix_thread) + fprintf_unfiltered (gdb_stdlog, "ptrace (%d, %d) = %d (errno = %d)", + req, id, ret, errno); + return ret == -1 ? 0 : 1; + } break; } error ("aix-thread: ptrace (%d, %d) returned %d (errno = %d %s)", req, id, ret, errno, strerror (errno)); - - strange: - if (debug_aix_thread) - fprintf_unfiltered (gdb_stdlog, "ptrace (%d, %d) = %d (errno = %d)", - req, id, ret, errno); - return ret == -1 ? 0 : 1; + return 0; /* not reached. */ } /* Call ptracex(REQ, ID, ADDR, DATA, BUF). Return success. */ @@ -643,7 +643,6 @@ sync_threadlists (void) pthdb_pthread_t pdtid; pthread_t pthid; pthdb_tid_t tid; - ptid_t pptid, gptid; /* Accumulate an array of libpthdebug threads sorted by pthread id. */ @@ -694,39 +693,52 @@ sync_threadlists (void) infpid = PIDGET (inferior_ptid); for (pi = gi = 0; pi < pcount || gi < gcount;) { - pptid = BUILD_THREAD (pbuf[pi].pthid, infpid); - gptid = gbuf[gi]->ptid; - pdtid = pbuf[pi].pdtid; - tid = pbuf[pi].tid; - if (pi == pcount) - goto del; - if (gi == gcount) - goto add; - - if (ptid_equal (pptid, gptid)) { - gbuf[gi]->private->pdtid = pdtid; - gbuf[gi]->private->tid = tid; - pi++; + delete_thread (gbuf[gi]->ptid); gi++; } - else if (ptid_cmp (pptid, gptid) > 0) - { - del: - delete_thread (gptid); - gi++; - } - else + else if (gi == gcount) { - add: - thread = add_thread (pptid); + thread = add_thread (BUILD_THREAD (pbuf[pi].pthid, infpid)); thread->private = xmalloc (sizeof (struct private_thread_info)); - thread->private->pdtid = pdtid; - thread->private->tid = tid; + thread->private->pdtid = pbuf[pi].pdtid; + thread->private->tid = pbuf[pi].tid; pi++; } + else + { + ptid_t pptid, gptid; + int cmp_result; + + pptid = BUILD_THREAD (pbuf[pi].pthid, infpid); + gptid = gbuf[gi]->ptid; + pdtid = pbuf[pi].pdtid; + tid = pbuf[pi].tid; + cmp_result = ptid_cmp (pptid, gptid); + + if (cmp_result == 0) + { + gbuf[gi]->private->pdtid = pdtid; + gbuf[gi]->private->tid = tid; + pi++; + gi++; + } + else if (cmp_result > 0) + { + delete_thread (gptid); + gi++; + } + else + { + thread = add_thread (pptid); + thread->private = xmalloc (sizeof (struct private_thread_info)); + thread->private->pdtid = pdtid; + thread->private->tid = tid; + pi++; + } + } } xfree (pbuf); |