X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Flinux-thread-db.c;h=3c71bea25db65ae26eb81ef7a6d6752455dd6d21;hb=16451949d7083391405bb46c06a2fadac01f5c42;hp=6bd5b429fcbf08f8f3dee35d1f5ec22bbf24838e;hpb=4d443107ba8c5dccc370a701135e4bacd2adc9a4;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/linux-thread-db.c b/gdb/linux-thread-db.c index 6bd5b429fc..3c71bea25d 100644 --- a/gdb/linux-thread-db.c +++ b/gdb/linux-thread-db.c @@ -36,6 +36,7 @@ #include "target.h" #include "regcache.h" #include "solib-svr4.h" +#include "gdbcore.h" #ifdef HAVE_GNU_LIBC_VERSION_H #include @@ -505,9 +506,14 @@ enable_thread_event (td_thragent_t *thread_agent, int event, CORE_ADDR *bp) return err; /* Set up the breakpoint. */ - (*bp) = gdbarch_convert_from_func_ptr_addr (current_gdbarch, - (CORE_ADDR) notify.u.bptaddr, - ¤t_target); + gdb_assert (exec_bfd); + (*bp) = (gdbarch_convert_from_func_ptr_addr + (current_gdbarch, + /* Do proper sign extension for the target. */ + (bfd_get_sign_extend_vma (exec_bfd) > 0 + ? (CORE_ADDR) (intptr_t) notify.u.bptaddr + : (CORE_ADDR) (uintptr_t) notify.u.bptaddr), + ¤t_target)); create_thread_event_breakpoint ((*bp)); return TD_OK; @@ -1277,7 +1283,11 @@ thread_db_get_thread_local_address (ptid_t ptid, (("%s")), thread_db_err_str (err)); /* Cast assuming host == target. Joy. */ - return (CORE_ADDR) address; + /* Do proper sign extension for the target. */ + gdb_assert (exec_bfd); + return (bfd_get_sign_extend_vma (exec_bfd) > 0 + ? (CORE_ADDR) (intptr_t) address + : (CORE_ADDR) (uintptr_t) address); } if (target_beneath->to_get_thread_local_address)