Widen psaddr_t from uintptr_t to uint64_t. This results in an

ABI change on ILP32 platforms and relating to events.  However
it's harmless on little-endian ILP32 platforms in the sense
that it doesn't cause breakages.  Old ILP32 thread libraries
write a 32-bit th_p and new thread libraries write a 64-bit
th_p.  But due to the fact that we have an unused 32-bit data
field right after th_p and that field is always initialized to
zero, little-endian ILP32 machines effectively have a valid
64-bit th_p by accident. Likewise for new thread libraries and
old libthread_db: little endian ILP32 is unaffected.

At this time we don't support big-endian threaded applications
in GDB, so the breakage for the ILP32 case goes unnoticed.
This commit is contained in:
Marcel Moolenaar 2008-09-14 16:52:42 +00:00
parent 0c888aa9f7
commit 93898f2b2d
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=183023
2 changed files with 8 additions and 7 deletions

View file

@ -710,7 +710,7 @@ check_event (ptid_t ptid)
error ("Cannot get thread event message: %s",
thread_db_err_str (err));
}
err = td_thr_get_info_p (msg.th_p, &ti);
err = td_thr_get_info_p ((void *)(uintptr_t)msg.th_p, &ti);
if (err != TD_OK)
error ("Cannot get thread info: %s", thread_db_err_str (err));
ptid = BUILD_THREAD (ti.ti_tid, GET_PID (ptid));
@ -720,7 +720,7 @@ check_event (ptid_t ptid)
/* We may already know about this thread, for instance when the
user has issued the `info threads' command before the SIGTRAP
for hitting the thread creation breakpoint was reported. */
attach_thread (ptid, msg.th_p, &ti, 1);
attach_thread (ptid, (void *)(uintptr_t)msg.th_p, &ti, 1);
break;
case TD_DEATH:
if (!in_thread_list (ptid))
@ -1178,13 +1178,14 @@ fbsd_thread_pid_to_str (ptid_t ptid)
if (ti.ti_lid != 0)
{
snprintf (buf, sizeof (buf), "Thread %p (LWP %d)",
th.th_thread, ti.ti_lid);
snprintf (buf, sizeof (buf), "Thread %llx (LWP %d)",
(unsigned long long)th.th_thread, ti.ti_lid);
}
else
{
snprintf (buf, sizeof (buf), "Thread %p (%s)",
th.th_thread, thread_db_state_str (ti.ti_state));
snprintf (buf, sizeof (buf), "Thread %llx (%s)",
(unsigned long long)th.th_thread,
thread_db_state_str (ti.ti_state));
}
return buf;

View file

@ -80,6 +80,6 @@ typedef struct prpsinfo {
char pr_psargs[PRARGSZ+1]; /* Arguments, null terminated (1) */
} prpsinfo_t;
typedef uintptr_t psaddr_t; /* An address in the target process. */
typedef uint64_t psaddr_t; /* An address in the target process. */
#endif /* _SYS_PROCFS_H_ */