This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
[ppc64 help] Convert breakpoint's into addresses
- From: Andrew Cagney <ac131313 at redhat dot com>
- To: gdb-patches at sources dot redhat dot com
- Date: Fri, 19 Sep 2003 15:40:58 -0400
- Subject: [ppc64 help] Convert breakpoint's into addresses
Hello,
I think the ppc64 ELF ABI is officially wierd.
For "main" the minimal symbol table contains two symbols vis:
main: points at descriptor in .opd sectoin
.main: points at main's code entry point
Consequently, given only a minimal symbol table, GDB, when given:
(gdb) break main
will try to insert the breakpoint in the descriptor, and not the
function. Trying to enter:
(gdb) break .main
gets you no where (syntax error :-/)
Adding to the fun, GCC's debug info contains the symbol "main" which
points at the code address (and not the descriptor) and consequently
debugging with symbols works. Yes, this means that "main" has two
different values, arrrghghgh!!
Attatched is a hack to breakpoint.c that applies "convert from func ptr
addr" to any address. This causing the breakpoint code to convert
"main" into ".main" and hence work.
I don't know if its a right fix, good fix, or of any other alternative
fix. However it does work ...
help!
Andrew
2003-09-17 Andrew Cagney <cagney@redhat.com>
* breakpoint.c (set_raw_breakpoint): Apply
CONVERT_FROM_FUNC_PTR_ADDR to the breakpoint address.
(breakpoint_re_set_one): Ditto.
Index: breakpoint.c
===================================================================
RCS file: /cvs/src/src/gdb/breakpoint.c,v
retrieving revision 1.129
diff -u -r1.129 breakpoint.c
--- breakpoint.c 14 Sep 2003 16:32:12 -0000 1.129
+++ breakpoint.c 19 Sep 2003 15:43:52 -0000
@@ -3866,7 +3866,7 @@
b = (struct breakpoint *) xmalloc (sizeof (struct breakpoint));
memset (b, 0, sizeof (*b));
- b->address = sal.pc;
+ b->address = CONVERT_FROM_FUNC_PTR_ADDR (sal.pc);
if (sal.symtab == NULL)
b->source_file = NULL;
else
@@ -6838,7 +6838,7 @@
savestring (sals.sals[i].symtab->filename,
strlen (sals.sals[i].symtab->filename));
b->line_number = sals.sals[i].line;
- b->address = sals.sals[i].pc;
+ b->address = CONVERT_FROM_FUNC_PTR_ADDR (sals.sals[i].pc);
/* Used to check for duplicates here, but that can
cause trouble, as it doesn't check for disabled