mirror of
https://github.com/ianlancetaylor/libbacktrace.git
synced 2026-04-03 16:09:07 +08:00
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.
This commit is contained in:
16
macho.c
16
macho.c
@@ -271,12 +271,14 @@ struct macho_nlist_64
|
|||||||
|
|
||||||
/* Value found in nlist n_type field. */
|
/* Value found in nlist n_type field. */
|
||||||
|
|
||||||
#define MACH_O_N_EXT 0x01 /* Extern symbol */
|
|
||||||
#define MACH_O_N_ABS 0x02 /* Absolute symbol */
|
|
||||||
#define MACH_O_N_SECT 0x0e /* Defined in section */
|
|
||||||
|
|
||||||
#define MACH_O_N_TYPE 0x0e /* Mask for type bits */
|
|
||||||
#define MACH_O_N_STAB 0xe0 /* Stabs debugging 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 from n_sect field */
|
||||||
|
|
||||||
|
|
||||||
/* Information we keep for a Mach-O 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)
|
if ((type & MACH_O_N_STAB) != 0)
|
||||||
return 0;
|
return 0;
|
||||||
if ((type & MACH_O_N_EXT) != 0)
|
|
||||||
return 0;
|
|
||||||
switch (type & MACH_O_N_TYPE)
|
switch (type & MACH_O_N_TYPE)
|
||||||
{
|
{
|
||||||
|
case MACH_O_N_UNDF:
|
||||||
|
return 0;
|
||||||
case MACH_O_N_ABS:
|
case MACH_O_N_ABS:
|
||||||
return 1;
|
return 1;
|
||||||
case MACH_O_N_SECT:
|
case MACH_O_N_SECT:
|
||||||
|
|||||||
Reference in New Issue
Block a user