Hi Wookey (and hi Petr, see below, this is a debian elfutils aarch64
backend bug report, see for full context http://bugs.debian.org/753552
but the below is probably all you'll need)

On Thu, 2014-07-03 at 17:32 +0100, Wookey wrote:
> (/lib/aarch64-linux-gnu/libc-2.19.so)
> round_away: /home/buildd/packages/elfutils-0.159/tests/funcretval:
> dwfl_module_return_value_location: cannot handle DWARF type
> description

OK. Next step is looking at the return type of round_away.
The DWARF debuginfo is located either
in /lib/aarch64-linux-gnu/libc-2.19.so or the separate debug file (I
assume the later). Could you use eu-readelf (or binutils readelf if you
like) to investigate a little. On my x86_64 fedora rawhide system things
look as follows:

$ eu-readelf
--debug-dump=info /usr/lib/debug/lib64/libc-2.19.90.so.debug

 [ 75b5d]    subprogram
             name                 (strp) "round_away"
             decl_file            (data1) 4
             decl_line            (data1) 43
             prototyped           (flag_present) Yes
             type                 (ref4) [ 75515]
             inline               (data1) inlined (1)

So the return type can be found in the DIE at offset 75515. Which is:

 [ 75515]    base_type
             byte_size            (data1) 1
             encoding             (data1) boolean (2)
             name                 (strp) "_Bool"

aha. that is probably it... How odd none of the backends seem to handle
DW_ATE_boolean hmmm... The difference with the aarch64 backend is that
it explicitly returns -2 (weird type) if it encounters a boolean as
return value.

I think a boolean is just like other integral types and so the following
is probably the correct fix (but I CCed Petr who wrote the original
backend and probably knows for sure).

diff --git a/backends/aarch64_retval.c b/backends/aarch64_retval.c
index 0ed7d56..68de307 100644
--- a/backends/aarch64_retval.c
+++ b/backends/aarch64_retval.c
@@ -357,6 +357,7 @@ aarch64_return_value_location (Dwarf_Die
*functypedie, const Dwarf_Op **locp)
                 size of the argument is less than or equal to 8 bytes
                 [...] the argument is copied to the least significant
                 bits in x[NGRN].  */
+           case DW_ATE_boolean:
            case DW_ATE_signed:
            case DW_ATE_unsigned:
            case DW_ATE_unsigned_char:

Would you be able to test with that?

Thanks,

Mark


-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to