GDB: problem debugging 32 bit binary on 64 bit machine

Jeff Kenton
Wed Nov 30 13:35:00 GMT 2011

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?


> 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

More information about the Gdb mailing list