This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: [patch, rfa:ppc64, rfa:breakpoint] Add non-verbose breakpointadjustment
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
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, ¤t_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);
- References:
- [patch, rfa:ppc64, rfa:breakpoint] Add non-verbose breakpoint adjustment
- Re: [patch, rfa:ppc64, rfa:breakpoint] Add non-verbose breakpoint adjustment
- Re: [patch, rfa:ppc64, rfa:breakpoint] Add non-verbose breakpointadjustment
- Re: [patch, rfa:ppc64, rfa:breakpoint] Add non-verbose breakpoint adjustment
- Re: [patch, rfa:ppc64, rfa:breakpoint] Add non-verbose breakpointadjustment
- Re: [patch, rfa:ppc64, rfa:breakpoint] Add non-verbose breakpoint adjustment