Hi folks,
Rainer Orth <r...@cebitec.uni-bielefeld.de> wrote:
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
No wonder things go astray from there…
maybe this is enough to cover all bases without having to do any version or
target checks. (untested)
objdump is not available on quite a few Darwin versions with perfectly
functional
uleb128 - so I don’t want to punt on those for absence of it. We already
check for
otool elsewhere.
thoughts?
Iain
-----
# Check if we have .[us]leb128, and support symbol arithmetic with it.
# Older versions of GAS and some tools based on those, have a bugs handling
# these directive, even when they appear to accept them.
gcc_GAS_CHECK_FEATURE([.sleb128 and .uleb128], gcc_cv_as_leb128,
[elf,2,11,0],,
[ .data
.uleb128 L2 - L1
L1:
.uleb128 1280
.sleb128 -1010
L2:
.uleb128 0x8000000000000000
],
[[
if test "x$gcc_cv_objdump" != x; then
if $gcc_cv_objdump --full-contents conftest.o 2>/dev/null \
| grep '04800a8e 78808080 80808080 808001' >/dev/null; then
gcc_cv_as_leb128=yes
fi
elif test "x$gcc_cv_otool" != x; then
if $gcc_cv_otool -d conftest.o 2>/dev/null \
| grep '04 80 0a 8e 78 80 80 80 80 80 80 80 80 80 01' >/dev/null; then
gcc_cv_as_leb128=yes
fi
else
# play safe, assume the assembler is broken.
:
fi
]],
[AC_DEFINE(HAVE_AS_LEB128, 1,
[Define if your assembler supports .sleb128 and .uleb128.])],
[AC_DEFINE(HAVE_AS_LEB128, 0,
[Define if your assembler supports .sleb128 and .uleb128.])])