It looks like fregs.vregs[] is an array of double? Casting to Dwarf_Word instead of & 0xFFFFFFF should do. --- a/backends/aarch64_initreg.c 2015-11-27 14:36:29.000000000 +0100 +++ b/backends/aarch64_initreg.c 2016-08-09 03:47:25.428560159 +0200 @@ -33,7 +33,6 @@ #include "system.h" #include #ifdef __aarch64__ -# include # include # include /* Deal with old glibc defining user_pt_regs instead of user_regs_struct. */ @@ -82,7 +82,7 @@ Dwarf_Word dwarf_fregs[32]; for (int r = 0; r < 32; r++) - dwarf_fregs[r] = fregs.vregs[r] & 0xFFFFFFFF; + dwarf_fregs[r] = (Dwarf_Word)fregs.vregs[r]; if (! setfunc (64, 32, dwarf_fregs, arg)) return false;