This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]