[fpc-devel] Bug: Alignment issue with dwarf debug_info on mipsel(-embedded)?? code
Michael Ring
mail at michael-ring.org
Sun Jul 7 11:00:55 CEST 2013
I guess this applies at least to all dwarf related code in mips targets.
I found the following post:
http://sourceware.org/ml/binutils/2010-07/msg00096.html
there the author says:
A brief look at the contents of your .debug_info section reveals
non-standard usage of platform-specific GAS directives to emit DWARF-2
records. You should be using .2byte, .4byte, etc., that have been
invented specifically for DWARF records, rather than .short, .long, etc.,
whose behaviour (size, alignment) is target-dependent.
also, .2byte and .4byte and .8byte are already (kind of) implemented in
aggas.pas:
{ Generic unaligned pseudo-instructions, seems ELF specific }
use_ua_elf_systems =
[system_mipsel_linux,system_mipseb_linux,system_mipsel_embedded,system_mipseb_embedded];
ait_ua_elf_const2str :
array[aitconst_16bit_unaligned..aitconst_64bit_unaligned]
of string[20]=(
#9'.2byte'#9,#9'.4byte'#9,#9'.8byte'#9
);
Am 07.07.13 09:26, schrieb Florian Klämpfl:
> Am 05.07.2013 22:23, schrieb Michael Ring:
>> I have now found out why debug symbols get discarded by
>> pic32mx-elf32-gdb. The problem is a bug in the generation of
>> dwarf-debuginfo. My guess is that the problem should also exist in linux
>> target.
>>
>> For mips unaligned data in dward debug info needs to be defined as
>> .4byte and .2byte instead of .long and .short.
>>
>> This is implemented in most places but it seems not everywhere.
>>
>> When I compile this program:
>>
>> program hello;
>> var
>> i : integer;
>> begin
>> end.
>>
>> the symbol I has one entry with .long, the resulting binary does not
>> load in gdb with the error-message: Dwarf Error: wrong version in
>> compilation unit header (is 10752, should be 2, 3, or 4)
>>
>> # Syms - Begin Staticsymtable
>> # Symbol SYSTEM
>> # Symbol OBJPAS
>> # Symbol PIC32MX2XXFXXXC
>> # Symbol HELLO
>> # Symbol main
>> # Symbol I
>> .uleb128 2
>> .ascii "I\000"
>> .byte 5
>> .byte 3
>> .long U_$P$HELLO_$$_I
>> .4byte _$HELLO$_Ld1
>> # Syms - End Staticsymtable
>>
>> when I replace the '.long' with '.4byte' and recompile then the
>> resulting hello.elf loads fine into gdb. I could see before with readelf
>> that the dwarf info was misaligned compared to the dwarf imfo when I
>> compile the same code for arm-embedded
>>
>> Can anybody help with a fix?
> Do I understand it correctly, that it is sufficient so replace .long by
> .4byte and .short by .2byte at all locations? Does it apply to all targets?
>
> _______________________________________________
> fpc-devel maillist - fpc-devel at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20130707/7907420f/attachment.html>
More information about the fpc-devel
mailing list