|
|
@@ -87,6 +87,11 @@ static inline uint8_t elf_sym__type(const GElf_Sym *sym)
|
|
|
return GELF_ST_TYPE(sym->st_info);
|
|
|
}
|
|
|
|
|
|
+static inline uint8_t elf_sym__visibility(const GElf_Sym *sym)
|
|
|
+{
|
|
|
+ return GELF_ST_VISIBILITY(sym->st_other);
|
|
|
+}
|
|
|
+
|
|
|
#ifndef STT_GNU_IFUNC
|
|
|
#define STT_GNU_IFUNC 10
|
|
|
#endif
|
|
|
@@ -111,7 +116,9 @@ static inline int elf_sym__is_label(const GElf_Sym *sym)
|
|
|
return elf_sym__type(sym) == STT_NOTYPE &&
|
|
|
sym->st_name != 0 &&
|
|
|
sym->st_shndx != SHN_UNDEF &&
|
|
|
- sym->st_shndx != SHN_ABS;
|
|
|
+ sym->st_shndx != SHN_ABS &&
|
|
|
+ elf_sym__visibility(sym) != STV_HIDDEN &&
|
|
|
+ elf_sym__visibility(sym) != STV_INTERNAL;
|
|
|
}
|
|
|
|
|
|
static bool elf_sym__filter(GElf_Sym *sym)
|