X-Git-Url: https://git.alrj.org/?p=bold.git;a=blobdiff_plain;f=Bold%2Felf.py;fp=Bold%2Felf.py;h=0ff4602bab1cd736cbb71dd1d51410e8f77b2e9d;hp=1d73ec7175c5db71dc12f2fbcb8b9f7932818787;hb=c0dd0c5834446604965b0be3a9b0bcd78ecf458d;hpb=d07ad8e0ae9ba865c00f3b794fce10a61bd5b288 diff --git a/Bold/elf.py b/Bold/elf.py index 1d73ec7..0ff4602 100644 --- a/Bold/elf.py +++ b/Bold/elf.py @@ -40,6 +40,7 @@ class Elf64(object): self.local_symbols = {} self.global_symbols = {} self.undefined_symbols = [] + self.common_symbols = [] if path: self.filename = path @@ -106,6 +107,11 @@ class Elf64(object): continue if symbol.st_shndx == SHN_ABS: continue + if symbol.st_shndx == SHN_COMMON: + if symbol.name: + sym = (symbol.name, symbol.st_size, symbol.st_value) + self.common_symbols.append(sym) + continue if symbol.st_shndx == SHN_UNDEF: if symbol.name: self.undefined_symbols.append(symbol.name) @@ -132,8 +138,8 @@ class Elf64(object): target = sh.target.content for reloc in sh.content.relatab: - if reloc.symbol.st_shndx == SHN_UNDEF: - # This is an extern symbol, find it in all_global_symbols + if reloc.symbol.st_shndx in [SHN_UNDEF, SHN_COMMON]: + # This is an extern or common symbol, find it in all_global_symbols sym_address = all_global_symbols[reloc.symbol.name] else: # source == in which section it is defined