Hi Jakub,
> On Thu, Nov 26, 2020 at 02:26:58PM +0100, Rainer Orth wrote:
>> which shows that the problem is detected in the depths of
>> libbacktrace's DWARF reader. There's something completely off in
>> places, like line numbers well beyond the end of dwarf.c.
>>
>> TBH, I don't really feel like diving into the innards of libbacktrace
>> and DWARF at this point to investigate.
>
> Perhaps try binutils readelf -wi or dwarflint etc. to find out where things
> go wrong, and then just look at the assembly and whether it matches what as
> made out of it?
that was certainly easier than getting into libbacktrace. I've looked
for the smallest object linked into libgo that showed readelf -wi
differences. errors.o had
--- build.no-leb128/sparc-sun-solaris2.11/libgo/errors.o.readelf-wi
2020-11-26 14:55:17.792533040 +0000
+++ build.leb128/sparc-sun-solaris2.11/libgo/errors.o.readelf-wi
2020-11-26 14:54:59.099964700 +0000
@@ -957,7 +957,7 @@
<7b1> DW_AT_decl_line : 89
<7b2> DW_AT_decl_column : 2
<7b3> DW_AT_type : <0x314>
- <7b7> DW_AT_location : 3 byte block: 91 94 7f (DW_OP_fbreg:
-108)
+ <7b7> DW_AT_location : 3 byte block: 91 54 7f (DW_OP_fbreg:
-44; DW_OP_breg15 (r15): 0)
<3><7bb>: Abbrev Number: 35 (DW_TAG_lexical_block)
<7bc> DW_AT_ranges : 0x98
<7c0> DW_AT_sibling : <0x806>
The corresponding assembler is
.byte 0x3 ! uleb128 0x3; DW_AT_location
.byte 0x91 ! DW_OP_fbreg
.byte 0x94,0x7f ! sleb128 -108
without leb128 directives and
.uleb128 0x3 ! DW_AT_location
.byte 0x91 ! DW_OP_fbreg
.sleb128 -108
with them. Solaris/SPARC as emits 54 7f for the .sleb128, not 94 7f.
No wonder things go astray from there...
Rainer
--
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University