public inbox for gdb@sourceware.org
 help / color / mirror / Atom feed
* Change in relocation of debug info
@ 2021-05-30 17:51 Rodney M. Bates
  2021-05-31 15:08 ` Simon Marchi
  0 siblings, 1 reply; 5+ messages in thread
From: Rodney M. Bates @ 2021-05-30 17:51 UTC (permalink / raw)
  To: gdb

I am maintaining a debugger, derived from gdb-6.4, with
additions for Modula-3.  A recent change in the way gcc
and gdb handle addresses of souce code line numbers in
stabs notation has broken breakpoint insertion.  I need
help understanding what has happened.

This could be a gcc problem, but I am starting here, because
modern gdb appears to at least partly overcome what has
changed in gcc, suggesting at least a coordinated change.

In a reduced example, I have an object file SetElem_m.o,
with the following:

   $objdump -g SetElem_m.o:
     ...
     /* file ../src/SetElem.m3 line 11 addr 0x11 */
     ...

When I link using gcc 5.4:

   $gcc --version:
   gcc (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609,

giving executable named prog I see:

   $objdump -g prog
   ...
   /* file ../src/SetElem.m3 line 11 addr 0x4008ee */
   ...

I can set a breakpoint at SetElem.m3:11, and all works as
expected using either m3gdb or gdb:

   $m3gdb prog
   GNU gdb plus Modula-3 6.4
   ...
   (m3gdb) break SetElem.m3:11
   Breakpoint 1 at 0x4008ee: file ../src/SetElem.m3, line 11.
   (m3gdb) run
   Breakpoint 1, P (...) at ../src/SetElem.m3:11
   11	      RETURN SetTyp { Elem }
   (m3gdb) info reg rip
   rip            0x4008ee	0x4008ee <P+17>

But when linking with gcc 9.3:

   $gcc --version:
   gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0

I see:

   $objdump -g prog
   ...
   /* file ../src/SetElem.m3 line 11 addr 0x9b1 */
   ...

neither unrelocated from the .o file nor where line 11
ends up (I think).  m3gdb tries to insert the breakpoint
at this address, failing, I presume because it is
not a writable address:

   $m3gdb prog
   GNU gdb plus Modula-3 6.4
   ...
   (m3gdb) break SetElem.m3:11
   Breakpoint 1 at 0x9b1: file ../src/SetElem.m3, line 11.
   (m3gdb) run
   Starting program: /home/rodney/proj/m3/exp/setelem/AMD64_LINUX-ig-m3cc/prog
   Warning:
   Cannot insert breakpoint 1.
   Error accessing memory address 0x9b1: Input/output error.

In constast, modern gdb inserts the breakpoint and stops,
showing the correct source line number, although not all is
right here either:

   $ gdb prog
   GNU gdb (Ubuntu 9.2-0ubuntu1~20.04) 9.2
   ...
   (gdb) break SetElem.m3:11
   Breakpoint 1 at 0x9b1: file ../src/SetElem.m3, line 11.
   (gdb) run
   Starting program: /home/rodney/proj/m3/exp/setelem/AMD64_LINUX-ig-m3cc/prog
   ...
   Breakpoint 1, SetElem__P (M3_AuNps8_Elem=<error reading variable>,
     M3_A6gO1v__result=<error reading variable>) at ../src/SetElem.m3:11
   11	      RETURN SetTyp { Elem }
   (gdb) info reg rip
   rip            <error reading variable> <error reading variable>

So I can't tell where the actual code was relocated to.  But it runs
to completion normally, by itself or under either debugger without
breakpoints.

Any help would be appreciated.

-- 
Rodney Bates
rodney.m.bates@acm.org

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-06-03 19:42 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-30 17:51 Change in relocation of debug info Rodney M. Bates
2021-05-31 15:08 ` Simon Marchi
2021-06-03 18:54   ` Rodney M. Bates
2021-06-03 19:02     ` Simon Marchi
2021-06-03 19:41       ` Rodney M. Bates

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).