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

Re: GDB: problem debugging 32 bit binary on 64 bit machine


On 11/29/2011 04:11 PM, Jan Kratochvil wrote:
On Tue, 29 Nov 2011 21:58:14 +0100, Jeff Kenton wrote:
0x400000008" (address is above the 32 bit limit).  This is caused by
a call to extract_typed_address() from scan_dyntag() reading an 8
byte type when it should only be reading 4 bytes.
ARCH_SIZE there should be 32 and TARGET_GDBARCH should be 32-bit.

This sounds like the basic problem. Building the 32 bit target_gdbarch is easy. What's the best way (place in the code) to detect 32 bit vs. 64 bit binaries and switch between different gdbarch's?


Thanks.



I guess for some reasons your GDB found wrong (64-bit) library for your 32-bit program. See the settings like `set solib-search-path', `set sysroot' etc.

I have two questions:
1. is tweaking extract_typed_address() the right way to handle 32
bit addresses on a 64 bit machine?
No. If ARCH_SIZE and TARGET_GDBARCH are set right it will work.


2. what's going wrong with dl_main()?
There is called a notification new library has been loaded in the inferior,
therefore GDB tries to load a matching symbol file (=the library itself) on
the GDB side.


3. meta-question: is this a generic bug in gdb's handling of 32 bit
binaries, or is there likely something I missed while porting?
It 32-on-64 normally works, at least in Fedora, no custom patches for it
there.


Regards, Jan


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