This is the mail archive of the
gdb@sourceware.org
mailing list for the GDB project.
Debugging 32bit apps with 64bit target gdb
- From: Paul Smith <psmith at gnu dot org>
- To: gdb at sourceware dot org
- Date: Thu, 19 May 2011 16:17:44 -0400
- Subject: Debugging 32bit apps with 64bit target gdb
- Reply-to: psmith at gnu dot org
Hi all;
Maybe this is a naive question. I have an environment (x86) with both
32bit and 64bit applications running in it. I would like to use the
same GDB binary to debug both types of applications. Ideally, though,
GDB would be a 32bit application because sometimes I run on 32bit
systems (obviously the 64bit applications do not run and cannot be
debugged on those systems, but the 32bit ones can).
I will also be doing remote debugging (with gdbserver) from a 32bit host
to a 64bit target (at least I would like to be able to do that).
I configured GDB (7.2) with --host=i686-generic-linux-gnu and
--target=x86_64-generic-linux-gnu (and --enable-targets=all but I don't
know if GDB configure groks this flag).
This compiled just fine, but when I have a 32bit core file and I try to
access it with GDB, I get an error:
warning: Could not load shared library symbols for 8 libraries, e.g. /lib/tls/librt.so.1.
Use the "info sharedlibrary" command to see the complete listing.
Do you need "set solib-search-path" or "set sysroot"?
warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code.
Core was generated by `app32bit'.
Program terminated with signal 11, Segmentation fault.
#0 0x00b187a2 in ?? ()
#0 0x00b187a2 in ?? ()
#1 0x00d9c6f4 in ?? ()
#2 0x00000000 in ?? ()
and I can't get a backtrace or anything. "info sharedlibrary" shows:
>From To Syms Read Shared Object Library
No /lib/tls/librt.so.1
No /usr/lib/libz.so.1
No /lib/libdl.so.2
No /lib/tls/libpthread.so.0
No /lib/tls/libm.so.6
No /lib/tls/libc.so.6
No /lib/ld-linux.so.2
No /lib/libgcc_s.so.1
which are all perfectly reasonable 32bit shared libs.
On the other hand, if I build a 32bit GDB (same version of code but
compiled on a 32bit Linux without the --target=x6_64-generic-linux-gnu
flag) then I get a perfectly usable backtrace for this identical
coredump on the same system.
Is what I want to do simply not possible? Or am I missing some trick?
It seems to me that on the 64bit multiarch Linux systems I've used, the
GDB versions that come with them can debug 32bit applications. Or am I
just imagining that this is possible?
--
-------------------------------------------------------------------------------
Paul D. Smith <psmith@gnu.org> Find some GNU make tips at:
http://www.gnu.org http://make.mad-scientist.net
"Please remain calm...I may be mad, but I am a professional." --Mad Scientist