]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libbacktrace: correctly gather Mach-O symbol table
authorIan Lance Taylor <iant@golang.org>
Fri, 12 Jul 2024 00:50:18 +0000 (17:50 -0700)
committerIan Lance Taylor <iant@golang.org>
Fri, 12 Jul 2024 00:54:43 +0000 (17:54 -0700)
For PR libbacktrace/97082.
* macho.c (MACH_O_N_EXT): Don't define.
(MACH_O_N_UNDF): Define.
(macho_defined_symbol): Don't discard N_EXT symbols.  Do
discard N_UNDF symbols.

libbacktrace/macho.c

index 5ceff05b29a5037c9c7c423cd90168883070fdc2..8f768f14a579ff76b17a669566d8146ec86e2d99 100644 (file)
@@ -271,12 +271,14 @@ struct macho_nlist_64
 
 /* Value found in nlist n_type field.  */
 
-#define MACH_O_N_EXT   0x01    /* Extern symbol */
+#define MACH_O_N_STAB  0xe0    /* Stabs debugging symbol */
+#define MACH_O_N_TYPE  0x0e    /* Mask for type bits */
+
+/* Values found after masking with MACH_O_N_TYPE.  */
+#define MACH_O_N_UNDF  0x00    /* Undefined symbol */
 #define MACH_O_N_ABS   0x02    /* Absolute symbol */
-#define MACH_O_N_SECT  0x0e    /* Defined in section */
+#define MACH_O_N_SECT  0x0e    /* Defined in section from n_sect field */
 
-#define MACH_O_N_TYPE  0x0e    /* Mask for type bits */
-#define MACH_O_N_STAB  0xe0    /* Stabs debugging symbol */
 
 /* Information we keep for a Mach-O symbol.  */
 
@@ -492,10 +494,10 @@ macho_defined_symbol (uint8_t type)
 {
   if ((type & MACH_O_N_STAB) != 0)
     return 0;
-  if ((type & MACH_O_N_EXT) != 0)
-    return 0;
   switch (type & MACH_O_N_TYPE)
     {
+    case MACH_O_N_UNDF:
+      return 0;
     case MACH_O_N_ABS:
       return 1;
     case MACH_O_N_SECT: