aboutsummaryrefslogtreecommitdiff
path: root/gdb/aix-thread.c
diff options
context:
space:
mode:
authorKevin Buettner <kevinb@redhat.com>2002-07-15 20:06:12 +0000
committerKevin Buettner <kevinb@redhat.com>2002-07-15 20:06:12 +0000
commit42cc437fb04186530a2f58374e1b95efed47b3ce (patch)
tree1c7e637452050d396a749d4b66ec4e6e581d24e1 /gdb/aix-thread.c
parent8e2c28d425ac7edcfc34422d8b0ba1cc1b8ea92f (diff)
downloadgdb-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.c76
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);