Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Andreas Schwab <schwab@suse.de>
To: gdb-patches@sources.redhat.com
Subject: Broken cast in linux-thread-db
Date: Wed, 12 Oct 2005 14:13:00 -0000	[thread overview]
Message-ID: <jebr1uu8lk.fsf@sykes.suse.de> (raw)

Casting a pointer to CORE_ADDR results in implementation defined behaviour
when the latter is wider than a pointer.  The implementation's behaviour
might be to sign extend which is not what we want here.  Tested on
i386-suse-linux with --enable-64-bit-bfd.

Andreas.

2005-10-12  Andreas Schwab  <schwab@suse.de>

	* linux-thread-db.c (enable_thread_event): Cast pointer to
	uintptr_t to avoid implementation defined behaviour.
	(thread_db_get_thread_local_address): Likewise.

--- gdb/linux-thread-db.c.~1.10.~	2005-09-12 11:04:57.000000000 +0200
+++ gdb/linux-thread-db.c	2005-10-12 15:16:06.000000000 +0200
@@ -505,9 +505,13 @@ enable_thread_event (td_thragent_t *thre
     return err;
 
   /* Set up the breakpoint.  */
-  (*bp) = gdbarch_convert_from_func_ptr_addr (current_gdbarch,
-					      (CORE_ADDR) notify.u.bptaddr,
-					      &current_target);
+  (*bp) = (gdbarch_convert_from_func_ptr_addr
+	   (current_gdbarch,
+	    /* Don't cast directly to CORE_ADDR, which may be wider than a
+	       pointer and results in implementation defined
+	       behaviour.  */
+	    (uintptr_t) notify.u.bptaddr,
+	    &current_target));
   create_thread_event_breakpoint ((*bp));
 
   return TD_OK;
@@ -1277,7 +1281,10 @@ thread_db_get_thread_local_address (ptid
                      (("%s")), thread_db_err_str (err));
 
       /* Cast assuming host == target.  Joy.  */
-      return (CORE_ADDR) address;
+      /* Don't cast directly to CORE_ADDR, which may be wider than a
+	 pointer and results in implementation defined behaviour.  GCC
+	 would sign extend the value which is not what we want here.  */
+      return (uintptr_t) address;
     }
 
   if (target_beneath->to_get_thread_local_address)

-- 
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany
Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."


             reply	other threads:[~2005-10-12 14:13 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-10-12 14:13 Andreas Schwab [this message]
2005-10-12 14:24 ` Daniel Jacobowitz
2005-10-12 14:33   ` Andreas Schwab
2005-10-12 14:41     ` Daniel Jacobowitz
2005-10-12 15:59       ` Andreas Schwab
2005-10-12 17:43         ` Daniel Jacobowitz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=jebr1uu8lk.fsf@sykes.suse.de \
    --to=schwab@suse.de \
    --cc=gdb-patches@sources.redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox