summaryrefslogtreecommitdiff
path: root/lib/spack/external/macholib/SymbolTable.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/spack/external/macholib/SymbolTable.py')
-rw-r--r--lib/spack/external/macholib/SymbolTable.py104
1 files changed, 0 insertions, 104 deletions
diff --git a/lib/spack/external/macholib/SymbolTable.py b/lib/spack/external/macholib/SymbolTable.py
deleted file mode 100644
index 006abab59f..0000000000
--- a/lib/spack/external/macholib/SymbolTable.py
+++ /dev/null
@@ -1,104 +0,0 @@
-"""
-Class to read the symbol table from a Mach-O header
-"""
-from __future__ import with_statement
-
-import sys
-
-from macholib.mach_o import (
- MH_CIGAM_64,
- MH_MAGIC_64,
- dylib_module,
- dylib_reference,
- dylib_table_of_contents,
- nlist,
- nlist_64,
- relocation_info,
-)
-
-__all__ = ["SymbolTable"]
-
-if sys.version_info[0] == 2:
- range = xrange # noqa: F821
-
-
-class SymbolTable(object):
- def __init__(self, macho, header=None, openfile=None):
- if openfile is None:
- openfile = open
- if header is None:
- header = macho.headers[0]
- self.macho_header = header
- with openfile(macho.filename, "rb") as fh:
- self.symtab = header.getSymbolTableCommand()
- self.dysymtab = header.getDynamicSymbolTableCommand()
-
- if self.symtab is not None:
- self.nlists = self.readSymbolTable(fh)
-
- if self.dysymtab is not None:
- self.readDynamicSymbolTable(fh)
-
- def readSymbolTable(self, fh):
- cmd = self.symtab
- fh.seek(self.macho_header.offset + cmd.stroff)
- strtab = fh.read(cmd.strsize)
- fh.seek(self.macho_header.offset + cmd.symoff)
- nlists = []
-
- if self.macho_header.MH_MAGIC in [MH_MAGIC_64, MH_CIGAM_64]:
- cls = nlist_64
- else:
- cls = nlist
-
- for _i in range(cmd.nsyms):
- cmd = cls.from_fileobj(fh, _endian_=self.macho_header.endian)
- if cmd.n_un == 0:
- nlists.append((cmd, ""))
- else:
- nlists.append(
- (
- cmd,
- strtab[cmd.n_un : strtab.find(b"\x00", cmd.n_un)], # noqa: E203
- )
- )
- return nlists
-
- def readDynamicSymbolTable(self, fh):
- cmd = self.dysymtab
- nlists = self.nlists
-
- self.localsyms = nlists[
- cmd.ilocalsym : cmd.ilocalsym + cmd.nlocalsym # noqa: E203
- ]
- self.extdefsyms = nlists[
- cmd.iextdefsym : cmd.iextdefsym + cmd.nextdefsym # noqa: E203
- ]
- self.undefsyms = nlists[
- cmd.iundefsym : cmd.iundefsym + cmd.nundefsym # noqa: E203
- ]
- if cmd.tocoff == 0:
- self.toc = None
- else:
- self.toc = self.readtoc(fh, cmd.tocoff, cmd.ntoc)
-
- def readtoc(self, fh, off, n):
- fh.seek(self.macho_header.offset + off)
- return [dylib_table_of_contents.from_fileobj(fh) for i in range(n)]
-
- def readmodtab(self, fh, off, n):
- fh.seek(self.macho_header.offset + off)
- return [dylib_module.from_fileobj(fh) for i in range(n)]
-
- def readsym(self, fh, off, n):
- fh.seek(self.macho_header.offset + off)
- refs = []
- for _i in range(n):
- ref = dylib_reference.from_fileobj(fh)
- isym, flags = divmod(ref.isym_flags, 256)
- refs.append((self.nlists[isym], flags))
- return refs
-
- def readrel(self, fh, off, n):
- fh.seek(self.macho_header.offset + off)
- return [relocation_info.from_fileobj(fh) for i in range(n)]