https://gcc.gnu.org/g:b870086904cfd480cf4297525ece00d169482ec7

commit r15-1984-gb870086904cfd480cf4297525ece00d169482ec7
Author: Ian Lance Taylor <i...@golang.org>
Date:   Thu Jul 11 17:50:18 2024 -0700

    libbacktrace: correctly gather Mach-O symbol table
    
            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.

Diff:
---
 libbacktrace/macho.c | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/libbacktrace/macho.c b/libbacktrace/macho.c
index 5ceff05b29a5..8f768f14a579 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:

Reply via email to