diff mbox series

libbacktrace patch committed: Correctly gather Mach-O symbols

Message ID CAOyqgcXZsP41ihHAr69T9KTe8oQ2+d9vyozLDP2ZrzUz9qSwAw@mail.gmail.com
State New
Headers show
Series libbacktrace patch committed: Correctly gather Mach-O symbols | expand

Commit Message

Ian Lance Taylor July 12, 2024, 12:55 a.m. UTC
The libbacktrace symbol table code was incorrectly discarding global
Mach-O symbols.  This patch fixes the problem.  Tested on macOS on the
compile farm, and also on x86_64-pc-linux-gnu.  Committed to mainline.

Ian

            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.
af827b2ab90b9d726c7182c41fa2409005909db8
diff mbox series

Patch

diff --git a/libbacktrace/macho.c b/libbacktrace/macho.c
index 5ceff05b29a..8f768f14a57 100644
--- a/libbacktrace/macho.c
+++ b/libbacktrace/macho.c
@@ -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: