Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Andrew Cagney <ac131313@redhat.com>
To: Kevin Buettner <kevinb@redhat.com>
Cc: gdb-patches@sources.redhat.com
Subject: Re: [patch, rfa:ppc64, rfa:breakpoint] Add non-verbose breakpoint adjustment
Date: Wed, 29 Oct 2003 22:03:00 -0000	[thread overview]
Message-ID: <3FA03943.6090805@redhat.com> (raw)
In-Reply-To: <1031029163018.ZM6880@localhost.localdomain>

[-- Attachment #1: Type: text/plain, Size: 1187 bytes --]

> On Oct 28, 11:08am, Andrew Cagney wrote:
> 
> 
>> > As a user, it annoyed me :-)
> 
>> >> 
>> >> If you'd prefer I'll let PPC64 print both warnings as well.
> 
>> > 
>> > ppc and frv are very different.
> 
>> 
>> I'm not so sure.  Here's the interaction:
>> 
>> (gdb) print &main
>> $1 = (<data variable, no debug info> *) 0x104e5a60
>> (gdb) break main
>> Breakpoint 2 at 0x100895d0
>> (gdb) run
>> Starting program: 
>> /home/cagney/PENDING/YYYY-MM-DD-target-convert-func/64/gdb/stripped.gdb
>> ...
>> Breakpoint 2, 0x00000000100895d0 in .main ()
>> (gdb)
>> 
>> (I've yet to figure out why GDB keeps reporting those breakpoints).

Oops, lost the message.  GDB sometimes prints:

Breakpoint 2 at 0x100895d0

which, I think is from GDB doing a "if breakpoint.one_addr != 
breakpoint.second_addr then print message" comparison everytime a shared 
library breakpoint is hit.

>> Notice how "main" is in the data space yet GDB set a code space 
>> breakpoint (and even stopped on a different symbol).  Might as well 
>> notify the user of this adjustment.
> 
> 
> Okay, I see your point.  This is surprising enough to merit a warning.

Attached is a much simplified patch.  Ok?

Andrew


[-- Attachment #2: diffs --]
[-- Type: text/plain, Size: 4871 bytes --]

2003-10-29  Andrew Cagney  <cagney@redhat.com>

	* rs6000-tdep.c (rs6000_gdbarch_init): For 64-bit ABI, set
	adjust_breakpoint_address.
	* Makefile.in (ppc-sysv-tdep.o): Add $(target_h).
	* ppc-tdep.h (ppc64_sysv_abi_adjust_breakpoint_address): Declare.
	* ppc-sysv-tdep.c: Include "target.h".  Update copyright.
	(ppc64_sysv_abi_adjust_breakpoint_address): New function.

Index: Makefile.in
===================================================================
RCS file: /cvs/src/src/gdb/Makefile.in,v
retrieving revision 1.463
diff -u -r1.463 Makefile.in
--- Makefile.in	24 Oct 2003 20:24:05 -0000	1.463
+++ Makefile.in	29 Oct 2003 22:00:30 -0000
@@ -2126,7 +2126,8 @@
 	$(target_h) $(breakpoint_h) $(value_h) $(osabi_h) $(ppc_tdep_h) \
 	$(ppcnbsd_tdep_h) $(nbsd_tdep_h) $(solib_svr4_h)
 ppc-sysv-tdep.o: ppc-sysv-tdep.c $(defs_h) $(gdbcore_h) $(inferior_h) \
-	$(regcache_h) $(value_h) $(gdb_string_h) $(gdb_assert_h) $(ppc_tdep_h)
+	$(regcache_h) $(value_h) $(gdb_string_h) $(gdb_assert_h) \
+	$(ppc_tdep_h) $(target_h)
 printcmd.o: printcmd.c $(defs_h) $(gdb_string_h) $(frame_h) $(symtab_h) \
 	$(gdbtypes_h) $(value_h) $(language_h) $(expression_h) $(gdbcore_h) \
 	$(gdbcmd_h) $(target_h) $(breakpoint_h) $(demangle_h) $(valprint_h) \
Index: ppc-sysv-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/ppc-sysv-tdep.c,v
retrieving revision 1.17
diff -u -r1.17 ppc-sysv-tdep.c
--- ppc-sysv-tdep.c	20 Oct 2003 15:38:02 -0000	1.17
+++ ppc-sysv-tdep.c	29 Oct 2003 22:00:31 -0000
@@ -1,7 +1,7 @@
 /* Target-dependent code for PowerPC systems using the SVR4 ABI
    for GDB, the GNU debugger.
 
-   Copyright 2000, 2001, 2002 Free Software Foundation, Inc.
+   Copyright 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -28,6 +28,7 @@
 #include "gdb_string.h"
 #include "gdb_assert.h"
 #include "ppc-tdep.h"
+#include "target.h"
 
 /* Pass the arguments in either registers, or in the stack. Using the
    ppc sysv ABI, the first eight words of the argument list (that might
@@ -1012,4 +1013,22 @@
 {
   if (!ppc64_sysv_abi_return_value (valtype, regbuf, valbuf, NULL))
     error ("Function return value location unknown");
+}
+
+CORE_ADDR
+ppc64_sysv_abi_adjust_breakpoint_address (struct gdbarch *gdbarch,
+					  CORE_ADDR bpaddr)
+{
+  /* PPC64 SYSV specifies that the minimal-symbol "FN" should point at
+     a function-descriptor while the corresponding minimal-symbol
+     ".FN" should point at the entry point.  Consequently, a command
+     like "break FN" applied to an object file with only minimal
+     symbols, will insert the breakpoint into the descriptor at "FN"
+     and not the function at ".FN".  Avoid this confusion by adjusting
+     any attempt to set a descriptor breakpoint into a corresponding
+     function breakpoint.  Note that GDB warns the user when this
+     adjustment is applied - that's ok as otherwise the user will have
+     no way of knowing why their breakpoint at "FN" resulted in the
+     program stopping at ".FN".  */
+  return gdbarch_convert_from_func_ptr_addr (gdbarch, bpaddr, &current_target);
 }
Index: ppc-tdep.h
===================================================================
RCS file: /cvs/src/src/gdb/ppc-tdep.h,v
retrieving revision 1.22
diff -u -r1.22 ppc-tdep.h
--- ppc-tdep.h	10 Oct 2003 21:32:47 -0000	1.22
+++ ppc-tdep.h	29 Oct 2003 22:00:31 -0000
@@ -61,6 +61,8 @@
 					  struct value **args, CORE_ADDR sp,
 					  int struct_return,
 					  CORE_ADDR struct_addr);
+CORE_ADDR ppc64_sysv_abi_adjust_breakpoint_address (struct gdbarch *gdbarch,
+						    CORE_ADDR bpaddr);
 int ppc_linux_memory_remove_breakpoint (CORE_ADDR addr, char *contents_cache);
 struct link_map_offsets *ppc_linux_svr4_fetch_link_map_offsets (void);
 void ppc_linux_supply_gregset (char *buf);
Index: rs6000-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/rs6000-tdep.c,v
retrieving revision 1.170
diff -u -r1.170 rs6000-tdep.c
--- rs6000-tdep.c	22 Oct 2003 23:54:11 -0000	1.170
+++ rs6000-tdep.c	29 Oct 2003 22:00:31 -0000
@@ -2895,6 +2895,15 @@
   set_gdbarch_function_start_offset (gdbarch, 0);
   set_gdbarch_breakpoint_from_pc (gdbarch, rs6000_breakpoint_from_pc);
 
+  /* Handle the 64-bit SVR4 minimal-symbol convention of using "FN"
+     for the descriptor and ".FN" for the entry-point -- a user
+     specifying "break FN" will unexpectedly end up with a breakpoint
+     on the descriptor and not the function.  This architecture method
+     transforms any breakpoints on descriptors into breakpoints on the
+     corresponding entry point.  */
+  if (sysv_abi && wordsize == 8)
+    set_gdbarch_adjust_breakpoint_address (gdbarch, ppc64_sysv_abi_adjust_breakpoint_address);
+
   /* Not sure on this. FIXMEmgo */
   set_gdbarch_frame_args_skip (gdbarch, 8);
 

  reply	other threads:[~2003-10-29 22:03 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-10-28 17:41 Andrew Cagney
2003-10-28 20:59 ` Kevin Buettner
2003-10-28 23:39   ` Andrew Cagney
2003-10-29  3:27     ` Kevin Buettner
2003-10-29 16:09       ` Andrew Cagney
2003-10-29 16:30         ` Kevin Buettner
2003-10-29 22:03           ` Andrew Cagney [this message]
2003-10-30 23:29             ` Kevin Buettner
2003-10-31 16:39               ` Andrew Cagney

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=3FA03943.6090805@redhat.com \
    --to=ac131313@redhat.com \
    --cc=gdb-patches@sources.redhat.com \
    --cc=kevinb@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