This is the mail archive of the
gdb-prs@sourceware.org
mailing list for the GDB project.
Re: symtab/2069: gdb can't handle PIE
- From: Alex Bennee <kernel-hacker at bennee dot com>
- To: nobody at sources dot redhat dot com
- Cc: gdb-prs at sources dot redhat dot com,
- Date: 1 Oct 2007 10:28:01 -0000
- Subject: Re: symtab/2069: gdb can't handle PIE
- Reply-to: Alex Bennee <kernel-hacker at bennee dot com>
The following reply was made to PR symtab/2069; it has been noted by GNATS.
From: Alex Bennee <kernel-hacker@bennee.com>
To: gdb-gnats@sources.redhat.com
Cc:
Subject: Re: symtab/2069: gdb can't handle PIE
Date: Mon, 01 Oct 2007 11:22:45 +0100
This also occurs if you build your executable with the following:
CFLAGS = -fpic -shared
LDFLAGS = -Wl,-e,_start
$ gdb ourprog
This GDB was configured as "x86_64-linux-gnu"...
Using host libthread_db library "/lib/libthread_db.so.1".
(gdb) start
Breakpoint 1 at 0x32e753: file ourprog/main.cc, line 67.
Starting program: ourprog
Warning:
Cannot insert breakpoint 1.
Error accessing memory address 0x32e753: Input/output error.
This is to be expected of course as our executable live way up high:
$ cat /proc/123456/map
<snip>
2b8268e6a000-2b8268fb1000 r-xp 00000000 08:01
1733565 /lib/libc-2.5.so
2b8268fb1000-2b82691b1000 ---p 00147000 08:01
1733565 /lib/libc-2.5.so
2b82691b1000-2b82691b4000 r-xp 00147000 08:01
1733565 /lib/libc-2.5.so
2b82691b4000-2b82691b6000 rwxp 0014a000 08:01
1733565 /lib/libc-2.5.so
2b82691b6000-2b82691bd000 rwxp 2b82691b6000 00:00 0
2b82691bd000-2b82691be000 ---p 2b82691bd000 00:00 0
2b82691be000-2b82692fe000 rwxp 2b82691be000 00:00 0
2b82692fe000-2b82692ff000 r-xp 00000000 00:12
29833155 /tmp/dynaEcmyWf (deleted)
2b82692ff000-2b82695c3000 rwxp 2b82692ff000 00:00 0
555555554000-555555a32000 r-xp 00000000 08:04 12649433
ourprog
555555b32000-555555b79000 rwxp 004de000 08:04 12649433
ourprog
555555b79000-555555c77000 rwxp 555555b79000 00:00 0
[heap]
7fff42c04000-7fff42c1a000 rwxp 7fff42c04000 00:00 0
[stack]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0
[vdso]
Running the binary with "r" works fine although you can't set any
breakpoints in the code.
I suspect this is because the symbols in our shared object are relative.
It looks like the add-symbol-file should be able to handle this but I'm
not seeing it work.
(gdb) add-symbol-file ourprog 0x555555554000
add symbol table from file "ourprog" at
.text_addr = 0x555555554000
(y or n) y
Reading symbols from ourprog...done
(gdb) x/5i main
0x32e740 <main>: push %rbp
0x32e741 <main+1>: mov %rsp,%rbp