https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96973
--- Comment #7 from Francois-Xavier Coudert <fxcoudert at gcc dot gnu.org> --- Actually we're not using the other members. So how about simply: diff --git a/libbacktrace/macho.c b/libbacktrace/macho.c index bd737226ca6..7f093f309fb 100644 --- a/libbacktrace/macho.c +++ b/libbacktrace/macho.c @@ -793,40 +793,33 @@ macho_add_fat (struct backtrace_state *state, const char *filename, for (i = 0; i < nfat_arch; ++i) { - struct macho_fat_arch_64 fat_arch; uint32_t fcputype; + uint64_t foffset; if (is_64) - memcpy (&fat_arch, - (const char *) arch_view.data + i * arch_size, - arch_size); + { + struct macho_fat_arch_64 fat_arch; + memcpy (&fat_arch, + (const char *) arch_view.data + i * arch_size, + arch_size); + + foffset = swapped ? __builtin_bswap64 (fat_arch.offset) : fat_arch.offset; + fcputype = swapped ? __builtin_bswap32 (fat_arch.cputype) : fat_arch.cputype; + } else { struct macho_fat_arch fat_arch_32; - memcpy (&fat_arch_32, (const char *) arch_view.data + i * arch_size, arch_size); - fat_arch.cputype = fat_arch_32.cputype; - fat_arch.cpusubtype = fat_arch_32.cpusubtype; - fat_arch.offset = (uint64_t) fat_arch_32.offset; - fat_arch.size = (uint64_t) fat_arch_32.size; - fat_arch.align = fat_arch_32.align; - fat_arch.reserved = 0; - } - fcputype = fat_arch.cputype; - if (swapped) - fcputype = __builtin_bswap32 (fcputype); + foffset = swapped ? __builtin_bswap32 (fat_arch_32.offset) : fat_arch_32.offset; + fcputype = swapped ? __builtin_bswap32 (fat_arch_32.cputype) : fat_arch_32.cputype; + } if (fcputype == cputype) { - uint64_t foffset; - /* FIXME: What about cpusubtype? */ - foffset = fat_arch.offset; - if (swapped) - foffset = __builtin_bswap64 (foffset); backtrace_release_view (state, &arch_view, error_callback, data); return macho_add (state, filename, descriptor, foffset, match_uuid, base_address, skip_symtab, error_callback, data,