This is the mail archive of the gdb@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]

gdb 5.1 with shared libraries


Hi,

I'm having a number of problems with shared libraries that worked fine in 5.0 
but are problems in 5.1. 

I haven't seen anyone else with similar problems.. I'm wondering if it's to do 
with my system setup, or the way I'm linking my libraries.

Problem 1 (Linux 2.4/libc 2.2.4/Debian Woody):
value of a double (in static data section of exe) get's changed when run 
through 5.1.

Problem 2 (Linux 2.4/libc 2.2.4/Debian Woody):
Symbol addresses from shared library are coming up as offsets from 0 rather 
than offsets from start of text segment.

Problem 3 (Solaris 8):
symbol/address mapping seems to only work in one direction for shared libaries. 
(EG can get address from line, but not line from address).

------------------

Problem 1 (Linux 2.4/libc 2.2.4/Debian Woody):
value of a double (in static data section of exe) get's changed when run 
through 5.1.

Ok in 5.0:
----------------
$ /opt/gdb-5.0/bin/gdb tester
GNU gdb 5.0 (UI_OUT)
Copyright 2000 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i686-pc-linux-gnu"...
(gdb) break mogtest
Breakpoint 1 at 0x804b882: file main.cpp, line 95.
(gdb) r
Starting program: /home/andrewd/gomic/engine/tester 
[New Thread 1024 (LWP 29708)]
[Switching to Thread 1024 (LWP 29708)]

Breakpoint 1, mogtest () at main.cpp:95
95              double d = 3.5;
(gdb) n
96              var x;
(gdb) p d
$1 = 3.5
(gdb)

----------------
But not in 5.1:
----------------

$ /opt/gdb-5.1/bin/gdb tester 
GNU gdb 5.1
Copyright 2001 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i686-pc-linux-gnu"...
(gdb) break mogtest  
Breakpoint 1 at 0x804b882: file main.cpp, line 95.
(gdb) r
Starting program: /home/andrewd/gomic/engine/tester 
Error while mapping shared library sections:
liboraofs.so: Success.
[New Thread 1024 (LWP 29710)]
[Switching to Thread 1024 (LWP 29710)]

Breakpoint 1, mogtest () at main.cpp:95
95              double d = 3.5;
(gdb) n
96              var x;
(gdb) p d
$1 = -nan(0x8000000000000)
(gdb) 
----------------

Problem 2 (Linux 2.4/libc 2.2.4/Debian Woody)

Symbol addresses from shared library are coming up as offsets from 0 rather 
than offsets from start of text segment.

----------
$ /opt/gdb-5.1/bin/gdb tester
GNU gdb 5.1
Copyright 2001 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i686-pc-linux-gnu"...
(gdb) break main       
Breakpoint 1 at 0x8049141: file main.cpp, line 113.
(gdb) r
Starting program: /home/andrewd/gomic/engine/tester 
Error while mapping shared library sections:
libgomic.so: Success.
b
Breakpoint 1, main (argc=1, argv=0xbffffcd4) at main.cpp:113
113             signal(SIGINT, sigint);
(gdb) break var.cpp:495
Breakpoint 2 at 0x33a7d: file var.cpp, line 495.
(gdb) c
Continuing.
warning: Cannot insert breakpoint 2:
Cannot access memory at address 0x33a7d
(gdb) delete 2
(gdb) call getpid()
$1 = 718
(gdb) shell cat /proc/718/maps 
08048000-0804a000 r-xp 00000000 03:05 
16403      /home/andrewd/gomic/engine/tester
0804a000-0804c000 rw-p 00001000 03:05 
16403      /home/andrewd/gomic/engine/tester
0804c000-080c4000 rwxp 00000000 00:00 0
40000000-40014000 r-xp 00000000 03:02 20584      /lib/ld-2.2.4.so
40014000-40015000 rw-p 00013000 03:02 20584      /lib/ld-2.2.4.so
40015000-40016000 rwxp 00000000 00:00 0
40016000-40088000 r-xp 00000000 03:05 
16398      /home/andrewd/gomic/engine/libgomic.so
40088000-40098000 rw-p 00071000 03:05 
16398      /home/andrewd/gomic/engine/libgomic.so
40098000-40099000 rw-p 00000000 00:00 0
4009c000-40113000 r-xp 00000000 03:02 18913      /usr/lib/libstdc++.so.3.0.2
40113000-40127000 rw-p 00076000 03:02 18913      /usr/lib/libstdc++.so.3.0.2
40127000-4012c000 rw-p 00000000 00:00 0
4012c000-4014d000 r-xp 00000000 03:02 20606      /lib/libm-2.2.4.so
4014d000-4014e000 rw-p 00020000 03:02 20606      /lib/libm-2.2.4.so
4014e000-4014f000 rw-p 00000000 00:00 0
4014f000-40155000 r-xp 00000000 03:02 20674      /lib/libgcc_s.so.1
40155000-40157000 rw-p 00005000 03:02 20674      /lib/libgcc_s.so.1
40157000-4026f000 r-xp 00000000 03:02 20595      /lib/libc-2.2.4.so
4026f000-40275000 rw-p 00117000 03:02 20595      /lib/libc-2.2.4.so
40275000-4027a000 rw-p 00000000 00:00 0
4027a000-4027c000 r-xp 00000000 03:02 20605      /lib/libdl-2.2.4.so
4027c000-4027e000 rw-p 00001000 03:02 20605      /lib/libdl-2.2.4.so
bfffe000-c0000000 rwxp fffff000 00:00 0
(gdb) p 0x40016000 + 0x33a7d
$2 = 1074043517
(gdb) b *1074043517
Breakpoint 3 at 0x40049a7d
(gdb) c
Continuing.
Test:test_var_comparison(1 runs): 0.001327 secs
Test:test_dynarray(1 runs): 0.000469 secs
Test:test_del(1 runs): 0.000032 secs

Breakpoint 3, 0x40049a7d in ?? ()
(gdb)
------------
in 5.0
------------
andrewd@scrappy:~/gomic/engine$ /opt/gdb-5.0/bin/gdb tester 
GNU gdb 5.0 (UI_OUT)
Copyright 2000 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i686-pc-linux-gnu"...
(gdb) break main
Breakpoint 1 at 0x8049141: file main.cpp, line 113.
(gdb) r
Starting program: /home/andrewd/gomic/engine/tester 

Breakpoint 1, main (argc=1, argv=0xbffffcd4) at main.cpp:113
113             signal(SIGINT, sigint);
(gdb) break var.cpp:495
Breakpoint 2 at 0x40049a7d: file var.cpp, line 495.
(gdb) c
Continuing.
Test:test_var_comparison(1 runs): 0.001331 secs
Test:test_dynarray(1 runs): 0.000467 secs
Test:test_del(1 runs): 0.000033 secs

Breakpoint 2, _ZNK3vardvEd (this=0xbffffbc0, x=2.5) at var.cpp:495
495             return l;
(gdb) 

-------------
Problem 3 (Solaris 8)

symbol/address mapping seems to only work in one direction for shared libaries. 
(EG can get address from line, but not line from address).

$ /opt/gdb-5.1/bin/gdb tester 
GNU gdb 5.1
Copyright 2001 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "sparc-sun-solaris2.8"...
(gdb) b main
Breakpoint 1 at 0x1130c: file main.cpp, line 103.
(gdb) r
Starting program: /home/andrewd/gt_cpp/engine/tester 

Breakpoint 1, main (argc=1, argv=0xffbef9e4) at main.cpp:103
103             signal(SIGINT, sigint);
(gdb) b var.cpp:495
Breakpoint 2 at 0xf993f8b8: file var.cpp, line 495.
(gdb) c
Continuing.
Test:test_var_comparison(1 runs): 0.001972 secs
Test:test_dynarray(1 runs): 0.000660 secs
Test:test_del(1 runs): 0.000034 secs

Program received signal SIGTRAP, Trace/breakpoint trap.
0xf993f8b8 in ?? ()
(gdb) bt
#0  0xf993f8b8 in ?? ()
#1  0xf9953adc in ?? ()
#2  0x0001146c in main (argc=1, argv=0x11c00) at cppmv.h:62
(gdb) info line var.cpp:495
Line 495 of "var.cpp" starts at address 0xf993f8b8 <_ZNK3vardvEd+56> and ends 
at 0xf993f8e0 <_ZNK3vardvEd+96>.
(gdb) info line *0xf993f8b8 
No line number information available for address 0xf993f8b8

------------

I'm building with:

g++-3.0 -v -g -pipe -shared -o libgomic.so basefuncs.o basefuncs_test.o 
charset.o date.o dynarraytest.o file.o iconv.o selectlist.o var.o vocmanager.o 
drivers/csv.o drivers/dir.o driverlist.o call.o error.o oconv.o format.o 
execute.o matrix.o locate.o var_test.o locate_test.o file_test.o transaction.o 
msl.o liboraofs.so
Reading specs from /usr/lib/gcc-lib/i386-linux/3.0.2/specs
Configured with: ../src/configure -v --enable-
languages=c,c++,java,f77,proto,objc --prefix=/usr --infodir=/share/info --
mandir=/share/man --enable-shared --with-gnu-as --with-gnu-ld --with-system-
zlib --enable-long-long --enable-nls --without-included-gettext --disable-
checking --enable-threads=posix --enable-java-gc=boehm --with-cpp-install-
dir=bin --enable-objc-gc i386-linux
Thread model: posix
gcc version 3.0.2 20010922 (Debian prerelease)
 /usr/lib/gcc-lib/i386-linux/3.0.2/collect2 -m elf_i386 -shared -o 
libgomic.so /usr/lib/gcc-lib/i386-linux/3.0.2/../../../crti.o /usr/lib/gcc-
lib/i386-linux/3.0.2/crtbeginS.o -L/usr/lib/gcc-lib/i386-linux/3.0.2 -
L/usr/lib/gcc-lib/i386-linux/3.0.2/../../.. basefuncs.o basefuncs_test.o 
charset.o date.o dynarraytest.o file.o iconv.o selectlist.o var.o vocmanager.o 
drivers/csv.o drivers/dir.o driverlist.o call.o error.o oconv.o format.o 
execute.o matrix.o locate.o var_test.o locate_test.o file_test.o transaction.o 
msl.o liboraofs.so -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc-
lib/i386-linux/3.0.2/crtendS.o /usr/lib/gcc-lib/i386-linux/3.0.2/../../../crtn.o

And:

g++-3.0 -v -g -pipe -o tester -L. -lgomic main.o stacktrace.o
Reading specs from /usr/lib/gcc-lib/i386-linux/3.0.2/specs
Configured with: ../src/configure -v --enable-
languages=c,c++,java,f77,proto,objc --prefix=/usr --infodir=/share/info --
mandir=/share/man --enable-shared --with-gnu-as --with-gnu-ld --with-system-
zlib --enable-long-long --enable-nls --without-included-gettext --disable-
checking --enable-threads=posix --enable-java-gc=boehm --with-cpp-install-
dir=bin --enable-objc-gc i386-linux
Thread model: posix
gcc version 3.0.2 20010922 (Debian prerelease)
 /usr/lib/gcc-lib/i386-linux/3.0.2/collect2 -m elf_i386 -dynamic-linker /lib/ld-
linux.so.2 -o tester /usr/lib/gcc-lib/i386-
linux/3.0.2/../../../crt1.o /usr/lib/gcc-lib/i386-
linux/3.0.2/../../../crti.o /usr/lib/gcc-lib/i386-linux/3.0.2/crtbegin.o -L. -
L/usr/lib/gcc-lib/i386-linux/3.0.2 -L/usr/lib/gcc-lib/i386-
linux/3.0.2/../../.. -lgomic main.o stacktrace.o -lstdc++ -lm -lgcc_s -lgcc -
lc -lgcc_s -lgcc /usr/lib/gcc-lib/i386-linux/3.0.2/crtend.o /usr/lib/gcc-
lib/i386-linux/3.0.2/../../../crtn.o

It's a problem with both g++ 3.0.2 and 2.95.4.

------------

Can someone give me some pointers as to what could be wrong / how to debug / is 
it a gdb problem?

Thanks
Brendan


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