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,

Reply via email to