pax_global_header00006660000000000000000000000064135722045730014522gustar00rootroot0000000000000052 comment=15bdb4ee3f0443e46d9cc03b6f1268fefc0433cf pyelftools-0.26/000077500000000000000000000000001357220457300136515ustar00rootroot00000000000000pyelftools-0.26/.gitignore000066400000000000000000000001141357220457300156350ustar00rootroot00000000000000*.pyc .coverage .tox htmlcov tags build dist MANIFEST *.sublime-workspace pyelftools-0.26/.travis.yml000066400000000000000000000001541357220457300157620ustar00rootroot00000000000000language: python python: - "2.7" - "3.4" - "3.5" - "3.6" - "3.7" script: python test/all_tests.py pyelftools-0.26/.vimrc000066400000000000000000000004221357220457300147700ustar00rootroot00000000000000" Force indentation styles for this directory autocmd FileType python set shiftwidth=4 autocmd FileType python set tabstop=4 autocmd FileType python set softtabstop=4 autocmd FileType c set shiftwidth=2 autocmd FileType c set tabstop=2 autocmd FileType c set softtabstop=2 pyelftools-0.26/CHANGES000066400000000000000000000075411357220457300146530ustar00rootroot00000000000000Changelog ========= + Version 0.26 (2019.12.05) - Call relocation for ARM v3 (#194) - More complete architecture coverage for ENUM_E_MACHINE (#206) - Support for .debug_pubtypes and .debug_pubnames sections (#208) - Support for DWARF v4 location lists (#214) - Decode strings in dynamic string tables (#217) - Improve symbol table handling in dynamic segments (#219) - Improved handling of location information (#225) - Avoid deprecation warnings in Python 3.7+ - Add DWARF v5 OPs (#240) - Handle many new translation forms and constants - Lazy DIE parsing to speed up partial parsing of DWARF info (#249) + Version 0.25 (2018.09.01) - Make parsing of SH_TYPE and PT_TYPE fields dependent on the machine (e_machine header field), making it possible to support conflicting type enums between different machines (#71 and #121). - Add parsing and readelf dumping for .eh_frame (#155) - Support compressed sections (#152) - Better support for parsing core dumps (#147) - More comprehensive handling of ARM relocations (#121) - Convert all ascii encoding to utf-8 encoding (#182) - Don't attempt to hex/string dump SHT_NOBITS sections in readelf (#119). - Test with Python 3.6 - Minor bugfixes (#118) - Cleanup: Use argparse instead of optparse - Make readelf comparison tests run in parallel using multiprocessing; cuts testing time 3-5x - Improvements in MIPS flags handling (#165) + Version 0.24 (2016.08.04) - Retrieve symbols by name - get_symbol_by_name (#58). - Symbol/section names are strings internally now, not bytestrings (this may affect API usage in Python 3) (#76). - Added DT_MIPS_* constants to ENUM_D_TAG (#79) - Made dwarf_decode_address example a bit more useful for command-line invocation. - More DWARF v4 support w.r.t decoding function ranges; DW_AT_high_pc value is now either absolute or relative to DW_AT_low_pc, depending on the class of the form encoded in the file. Also #89. - Support for SHT_NOTE sections (#109) - Support for .debug_aranges section (#108) - Support for zlib-compressed debug sections (#102) - Support for DWARF v4 line programs (#82) + Version 0.23 (2014.11.08) - Minimal Python 2.x version raised to 2.7 - Basic support for MIPS (contributed by Karl Vogel). - Support for PT_NOTE segment parsing (contributed by Alex Deymo). - Support for parsing symbol table in dynamic segment (contributed by Nam T. Nguyen). + Version 0.22 (2014.03.30) - pyelftools repository moved to https://github.com/eliben/pyelftools - Support for version sections - contributed by Yann Rouillard. - Better ARM support (including AArch64) - contributed by Dobromir Stefanov. - Added some initial support for parsing Solaris OpenCSW ELF files (contributed by Yann Rouillard). - Added some initial support for DWARF4 (as generated by gcc 4.8) and DWARF generated by recent versions of Clang (3.3). - Added the get_full_path utility method to DIEs that have an associated file name / path (based on pull request #16 by Shaheed Haque). - Set up Travis CI integration. + Version 0.21 (2013.04.17) - Added new example: dwarf_decode_address - decode function name and file & line information from an address. - Issue #7: parsing incorrect DWARF was made a bit more forgiving for cases where serialized DIE trees have extra NULLs at the end. - Very initial support for ARM ELF files (Matthew Fernandez - pull request #6). - Support for dumping the dynamic section (Mike Frysinger - pull request #7). - Output of scripts/readelf.py now matches that of binutils 2.23.52. - Added more machine EM_ values to ENUM_E_TYPE. + Version 0.20 (2012.01.27) - Python 3 support - Fixed some problems with running tests - Issue #2: made all examples run (and test/run_examples_test.py pass) on Windows. + Version 0.10 - Initial public release (2012.01.06) pyelftools-0.26/LICENSE000066400000000000000000000027761357220457300146720ustar00rootroot00000000000000pyelftools is in the public domain (see below if you need more details). pyelftools uses the construct library for structured parsing of a binary stream. construct is packaged in pyelftools/construct - see its LICENSE file for the license. ------------------------------------------------------------------------------- This is free and unencumbered software released into the public domain. Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means. In jurisdictions that recognize copyright laws, the author or authors of this software dedicate any and all copyright interest in the software to the public domain. We make this dedication for the benefit of the public at large and to the detriment of our heirs and successors. We intend this dedication to be an overt act of relinquishment in perpetuity of all present and future rights to this software under copyright law. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. For more information, please refer to pyelftools-0.26/MANIFEST.in000066400000000000000000000003411357220457300154050ustar00rootroot00000000000000recursive-include elftools *.py recursive-include scripts *.py recursive-include examples *.py *.elf *.out recursive-include test *.py *.elf *.arm *.mips *.o include README.rst include LICENSE include CHANGES include tox.ini pyelftools-0.26/README.rst000066400000000000000000000040561357220457300153450ustar00rootroot00000000000000Introduction: what is pyelftools? --------------------------------- **pyelftools** is a pure-Python library for parsing and analyzing ELF files and DWARF debugging information. See the `User's guide `_ for more details. Pre-requisites -------------- As a user of **pyelftools**, one only needs Python to run. It works with Python versions 2.7 and 3.x (x >= 4). For hacking on **pyelftools** the requirements are a bit more strict, please see the `hacking guide `_. Installing ---------- **pyelftools** can be installed from PyPI (Python package index):: > pip install pyelftools Alternatively, you can download the source distribution for the most recent and historic versions from the *Downloads* tab on the `pyelftools project page `_ (by going to *Tags*). Then, you can install from source, as usual:: > python setup.py install Since **pyelftools** is a work in progress, it's recommended to have the most recent version of the code. This can be done by downloading the `master zip file `_ or just cloning the Git repository. Since **pyelftools** has no external dependencies, it's also easy to use it without installing, by locally adjusting ``PYTHONPATH``. How to use it? -------------- **pyelftools** is a regular Python library: you import and invoke it from your own code. For a detailed usage guide and links to examples, please consult the `user's guide `_. License ------- **pyelftools** is open source software. Its code is in the public domain. See the ``LICENSE`` file for more details. CI Status --------- **pyelftools** has automatic testing enabled through the convenient `Travis CI project `_. Here is the latest build status: .. image:: https://travis-ci.org/eliben/pyelftools.png?branch=master :align: center :target: https://travis-ci.org/eliben/pyelftools pyelftools-0.26/TODO000077500000000000000000000017231357220457300143470ustar00rootroot00000000000000New version ----------- * Update elftools/__init__.py * Update setup.py * Update CHANGES * Tag in git (v0.xx) construct --------- construct seems to be maintained again - they also backported my Python 3 fixes. Theoretically, I can remove construct from pyelftools and use it as a dependency instead. I don't really have time to play with this now, but may do so in the future. Distribution ------------ 1. First install Twine (https://packaging.python.org/tutorials/packaging-projects/) 2. python3 -m twine upload dist/* Credentials for PyPI are stored in ~/.pypirc Preparing a new release ----------------------- * Run 'tox' tests (with '-r' to create new venvs) * Make sure new version was updated everywhere appropriate * Run ``python setup.py build sdist bdist_wheel`` (no 'upload' yet) * Untar the created ``dist/pyelftools-x.y.tar.gz`` and make sure everything looks ok * Now build with upload to send it to PyPi * Test with pip install from some new virtualenv pyelftools-0.26/elftools/000077500000000000000000000000001357220457300155005ustar00rootroot00000000000000pyelftools-0.26/elftools/__init__.py000066400000000000000000000004131357220457300176070ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- __version__ = '0.26' pyelftools-0.26/elftools/common/000077500000000000000000000000001357220457300167705ustar00rootroot00000000000000pyelftools-0.26/elftools/common/__init__.py000066400000000000000000000000001357220457300210670ustar00rootroot00000000000000pyelftools-0.26/elftools/common/construct_utils.py000066400000000000000000000055301357220457300226110ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools: common/construct_utils.py # # Some complementary construct utilities # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- from ..construct import ( Subconstruct, ConstructError, ArrayError, Adapter, Field, RepeatUntil, Rename ) class RepeatUntilExcluding(Subconstruct): """ A version of construct's RepeatUntil that doesn't include the last element (which casued the repeat to exit) in the return value. Only parsing is currently implemented. P.S. removed some code duplication """ __slots__ = ["predicate"] def __init__(self, predicate, subcon): Subconstruct.__init__(self, subcon) self.predicate = predicate self._clear_flag(self.FLAG_COPY_CONTEXT) self._set_flag(self.FLAG_DYNAMIC) def _parse(self, stream, context): obj = [] try: context_for_subcon = context if self.subcon.conflags & self.FLAG_COPY_CONTEXT: context_for_subcon = context.__copy__() while True: subobj = self.subcon._parse(stream, context_for_subcon) if self.predicate(subobj, context): break obj.append(subobj) except ConstructError as ex: raise ArrayError("missing terminator", ex) return obj def _build(self, obj, stream, context): raise NotImplementedError('no building') def _sizeof(self, context): raise SizeofError("can't calculate size") def _LEB128_reader(): """ Read LEB128 variable-length data from the stream. The data is terminated by a byte with 0 in its highest bit. """ return RepeatUntil( lambda obj, ctx: ord(obj) < 0x80, Field(None, 1)) class _ULEB128Adapter(Adapter): """ An adapter for ULEB128, given a sequence of bytes in a sub-construct. """ def _decode(self, obj, context): value = 0 for b in reversed(obj): value = (value << 7) + (ord(b) & 0x7F) return value class _SLEB128Adapter(Adapter): """ An adapter for SLEB128, given a sequence of bytes in a sub-construct. """ def _decode(self, obj, context): value = 0 for b in reversed(obj): value = (value << 7) + (ord(b) & 0x7F) if ord(obj[-1]) & 0x40: # negative -> sign extend value |= - (1 << (7 * len(obj))) return value def ULEB128(name): """ A construct creator for ULEB128 encoding. """ return Rename(name, _ULEB128Adapter(_LEB128_reader())) def SLEB128(name): """ A construct creator for SLEB128 encoding. """ return Rename(name, _SLEB128Adapter(_LEB128_reader())) pyelftools-0.26/elftools/common/exceptions.py000066400000000000000000000010111357220457300215140ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools: common/exceptions.py # # Exception classes for elftools # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- class ELFError(Exception): pass class ELFRelocationError(ELFError): pass class ELFParseError(ELFError): pass class ELFCompressionError(ELFError): pass class DWARFError(Exception): pass pyelftools-0.26/elftools/common/py3compat.py000066400000000000000000000037371357220457300212730ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools: common/py3compat.py # # Python 2/3 compatibility code # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- import sys PY3 = sys.version_info[0] == 3 if PY3: import io StringIO = io.StringIO BytesIO = io.BytesIO # Functions for acting on bytestrings and strings. In Python 2 and 3, # strings and bytes are the same and chr/ord can be used to convert between # numeric byte values and their string pepresentations. In Python 3, bytes # and strings are different types and bytes hold numeric values when # iterated over. def bytes2str(b): return b.decode('latin-1') def str2bytes(s): return s.encode('latin-1') def int2byte(i): return bytes((i,)) def byte2int(b): return b def iterbytes(b): """Return an iterator over the elements of a bytes object. For example, for b'abc' yields b'a', b'b' and then b'c'. """ for i in range(len(b)): yield b[i:i+1] ifilter = filter maxint = sys.maxsize else: import cStringIO StringIO = BytesIO = cStringIO.StringIO def bytes2str(b): return b def str2bytes(s): return s int2byte = chr byte2int = ord def iterbytes(b): return iter(b) from itertools import ifilter maxint = sys.maxint def iterkeys(d): """Return an iterator over the keys of a dictionary.""" return getattr(d, 'keys' if PY3 else 'iterkeys')() def itervalues(d): """Return an iterator over the values of a dictionary.""" return getattr(d, 'values' if PY3 else 'itervalues')() def iteritems(d): """Return an iterator over the items of a dictionary.""" return getattr(d, 'items' if PY3 else 'iteritems')() try: from collections.abc import Mapping # python >= 3.3 except ImportError: from collections import Mapping # python < 3.3 pyelftools-0.26/elftools/common/utils.py000066400000000000000000000066211357220457300205070ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools: common/utils.py # # Miscellaneous utilities for elftools # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- from contextlib import contextmanager from .exceptions import ELFParseError, ELFError, DWARFError from .py3compat import int2byte from ..construct import ConstructError def merge_dicts(*dicts): "Given any number of dicts, merges them into a new one.""" result = {} for d in dicts: result.update(d) return result def bytelist2string(bytelist): """ Convert a list of byte values (e.g. [0x10 0x20 0x00]) to a bytes object (e.g. b'\x10\x20\x00'). """ return b''.join(int2byte(b) for b in bytelist) def struct_parse(struct, stream, stream_pos=None): """ Convenience function for using the given struct to parse a stream. If stream_pos is provided, the stream is seeked to this position before the parsing is done. Otherwise, the current position of the stream is used. Wraps the error thrown by construct with ELFParseError. """ try: if stream_pos is not None: stream.seek(stream_pos) return struct.parse_stream(stream) except ConstructError as e: raise ELFParseError(str(e)) def parse_cstring_from_stream(stream, stream_pos=None): """ Parse a C-string from the given stream. The string is returned without the terminating \x00 byte. If the terminating byte wasn't found, None is returned (the stream is exhausted). If stream_pos is provided, the stream is seeked to this position before the parsing is done. Otherwise, the current position of the stream is used. Note: a bytes object is returned here, because this is what's read from the binary file. """ if stream_pos is not None: stream.seek(stream_pos) CHUNKSIZE = 64 chunks = [] found = False while True: chunk = stream.read(CHUNKSIZE) end_index = chunk.find(b'\x00') if end_index >= 0: chunks.append(chunk[:end_index]) found = True break else: chunks.append(chunk) if len(chunk) < CHUNKSIZE: break return b''.join(chunks) if found else None def elf_assert(cond, msg=''): """ Assert that cond is True, otherwise raise ELFError(msg) """ _assert_with_exception(cond, msg, ELFError) def dwarf_assert(cond, msg=''): """ Assert that cond is True, otherwise raise DWARFError(msg) """ _assert_with_exception(cond, msg, DWARFError) @contextmanager def preserve_stream_pos(stream): """ Usage: # stream has some position FOO (return value of stream.tell()) with preserve_stream_pos(stream): # do stuff that manipulates the stream # stream still has position FOO """ saved_pos = stream.tell() yield stream.seek(saved_pos) def roundup(num, bits): """ Round up a number to nearest multiple of 2^bits. The result is a number where the least significant bits passed in bits are 0. """ return (num - 1 | (1 << bits) - 1) + 1 #------------------------- PRIVATE ------------------------- def _assert_with_exception(cond, msg, exception_type): if not cond: raise exception_type(msg) pyelftools-0.26/elftools/construct/000077500000000000000000000000001357220457300175245ustar00rootroot00000000000000pyelftools-0.26/elftools/construct/LICENSE000066400000000000000000000020721357220457300205320ustar00rootroot00000000000000Copyright (C) 2009 Tomer Filiba, 2010-2011 Corbin Simpson Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. pyelftools-0.26/elftools/construct/README000066400000000000000000000012761357220457300204120ustar00rootroot00000000000000construct is a Python library for declarative parsing and building of binary data. This is my fork of construct 2, with some modifications for Python 3 and bug fixes. The construct website is http://construct.readthedocs.org pyelftools carries construct around because construct has been abandoned for a long time and didn't get bugfixes; it also didn't work with Python 3. These days (Feb 2018) construct is maintained again, but its APIs have underwent extensive changes that would require rewriting all of the construct-facing code in pyelftools. I'm still evaluating the pros/cons of this effort. See https://github.com/eliben/pyelftools/issues/180 for details. LICENSE is the original license. pyelftools-0.26/elftools/construct/__init__.py000066400000000000000000000110021357220457300216270ustar00rootroot00000000000000""" #### #### ## #### ## ## #### ###### ##### ## ## #### ###### ## ## ## ## ## ### ## ## ## ## ## ## ## ## ## #### ## ## ## ## ###### ### ## ##### ## ## ## ## ## ## ## ## ## ### ## ## ## ## ## ## ## ## ## #### #### ## ## #### ## ## ## ##### #### ## ###### Parsing made even more fun (and faster too) Homepage: http://construct.wikispaces.com (including online tutorial) Typical usage: >>> from construct import * Hands-on example: >>> from construct import * >>> s = Struct("foo", ... UBInt8("a"), ... UBInt16("b"), ... ) >>> s.parse("\\x01\\x02\\x03") Container(a = 1, b = 515) >>> print s.parse("\\x01\\x02\\x03") Container: a = 1 b = 515 >>> s.build(Container(a = 1, b = 0x0203)) "\\x01\\x02\\x03" """ from .core import * from .adapters import * from .macros import * from .debug import Probe, Debugger #=============================================================================== # Metadata #=============================================================================== __author__ = "tomer filiba (tomerfiliba [at] gmail.com)" __maintainer__ = "Corbin Simpson " __version__ = "2.06" #=============================================================================== # Shorthand expressions #=============================================================================== Bits = BitField Byte = UBInt8 Bytes = Field Const = ConstAdapter Tunnel = TunnelAdapter Embed = Embedded #=============================================================================== # Deprecated names # Next scheduled name cleanout: 2.1 #=============================================================================== import functools, warnings def deprecated(f): @functools.wraps(f) def wrapper(*args, **kwargs): warnings.warn( "This name is deprecated, use %s instead" % f.__name__, DeprecationWarning, stacklevel=2) return f(*args, **kwargs) return wrapper MetaBytes = deprecated(MetaField) GreedyRepeater = deprecated(GreedyRange) OptionalGreedyRepeater = deprecated(OptionalGreedyRange) Repeater = deprecated(Range) StrictRepeater = deprecated(Array) MetaRepeater = deprecated(Array) OneOfValidator = deprecated(OneOf) NoneOfValidator = deprecated(NoneOf) #=============================================================================== # exposed names #=============================================================================== __all__ = [ 'AdaptationError', 'Adapter', 'Alias', 'Aligned', 'AlignedStruct', 'Anchor', 'Array', 'ArrayError', 'BFloat32', 'BFloat64', 'Bit', 'BitField', 'BitIntegerAdapter', 'BitIntegerError', 'BitStruct', 'Bits', 'Bitwise', 'Buffered', 'Byte', 'Bytes', 'CString', 'CStringAdapter', 'Const', 'ConstAdapter', 'ConstError', 'Construct', 'ConstructError', 'Container', 'Debugger', 'Embed', 'Embedded', 'EmbeddedBitStruct', 'Enum', 'ExprAdapter', 'Field', 'FieldError', 'Flag', 'FlagsAdapter', 'FlagsContainer', 'FlagsEnum', 'FormatField', 'GreedyRange', 'GreedyRepeater', 'HexDumpAdapter', 'If', 'IfThenElse', 'IndexingAdapter', 'LFloat32', 'LFloat64', 'LazyBound', 'LengthValueAdapter', 'ListContainer', 'MappingAdapter', 'MappingError', 'MetaArray', 'MetaBytes', 'MetaField', 'MetaRepeater', 'NFloat32', 'NFloat64', 'Nibble', 'NoneOf', 'NoneOfValidator', 'Octet', 'OnDemand', 'OnDemandPointer', 'OneOf', 'OneOfValidator', 'OpenRange', 'Optional', 'OptionalGreedyRange', 'OptionalGreedyRepeater', 'PaddedStringAdapter', 'Padding', 'PaddingAdapter', 'PaddingError', 'PascalString', 'Pass', 'Peek', 'Pointer', 'PrefixedArray', 'Probe', 'Range', 'RangeError', 'Reconfig', 'Rename', 'RepeatUntil', 'Repeater', 'Restream', 'SBInt16', 'SBInt32', 'SBInt64', 'SBInt8', 'SLInt16', 'SLInt32', 'SLInt64', 'SLInt8', 'SNInt16', 'SNInt32', 'SNInt64', 'SNInt8', 'Select', 'SelectError', 'Sequence', 'SizeofError', 'SlicingAdapter', 'StaticField', 'StrictRepeater', 'String', 'StringAdapter', 'Struct', 'Subconstruct', 'Switch', 'SwitchError', 'SymmetricMapping', 'Terminator', 'TerminatorError', 'Tunnel', 'TunnelAdapter', 'UBInt16', 'UBInt32', 'UBInt64', 'UBInt8', 'ULInt16', 'ULInt32', 'ULInt64', 'ULInt8', 'UNInt16', 'UNInt32', 'UNInt64', 'UNInt8', 'Union', 'ValidationError', 'Validator', 'Value', "Magic", ] pyelftools-0.26/elftools/construct/adapters.py000066400000000000000000000403331357220457300217040ustar00rootroot00000000000000from .core import Adapter, AdaptationError, Pass from .lib import int_to_bin, bin_to_int, swap_bytes from .lib import FlagsContainer, HexString from .lib.py3compat import BytesIO, decodebytes #=============================================================================== # exceptions #=============================================================================== class BitIntegerError(AdaptationError): __slots__ = [] class MappingError(AdaptationError): __slots__ = [] class ConstError(AdaptationError): __slots__ = [] class ValidationError(AdaptationError): __slots__ = [] class PaddingError(AdaptationError): __slots__ = [] #=============================================================================== # adapters #=============================================================================== class BitIntegerAdapter(Adapter): """ Adapter for bit-integers (converts bitstrings to integers, and vice versa). See BitField. Parameters: * subcon - the subcon to adapt * width - the size of the subcon, in bits * swapped - whether to swap byte order (little endian/big endian). default is False (big endian) * signed - whether the value is signed (two's complement). the default is False (unsigned) * bytesize - number of bits per byte, used for byte-swapping (if swapped). default is 8. """ __slots__ = ["width", "swapped", "signed", "bytesize"] def __init__(self, subcon, width, swapped = False, signed = False, bytesize = 8): Adapter.__init__(self, subcon) self.width = width self.swapped = swapped self.signed = signed self.bytesize = bytesize def _encode(self, obj, context): if obj < 0 and not self.signed: raise BitIntegerError("object is negative, but field is not signed", obj) obj2 = int_to_bin(obj, width = self.width) if self.swapped: obj2 = swap_bytes(obj2, bytesize = self.bytesize) return obj2 def _decode(self, obj, context): if self.swapped: obj = swap_bytes(obj, bytesize = self.bytesize) return bin_to_int(obj, signed = self.signed) class MappingAdapter(Adapter): """ Adapter that maps objects to other objects. See SymmetricMapping and Enum. Parameters: * subcon - the subcon to map * decoding - the decoding (parsing) mapping (a dict) * encoding - the encoding (building) mapping (a dict) * decdefault - the default return value when the object is not found in the decoding mapping. if no object is given, an exception is raised. if `Pass` is used, the unmapped object will be passed as-is * encdefault - the default return value when the object is not found in the encoding mapping. if no object is given, an exception is raised. if `Pass` is used, the unmapped object will be passed as-is """ __slots__ = ["encoding", "decoding", "encdefault", "decdefault"] def __init__(self, subcon, decoding, encoding, decdefault = NotImplemented, encdefault = NotImplemented): Adapter.__init__(self, subcon) self.decoding = decoding self.encoding = encoding self.decdefault = decdefault self.encdefault = encdefault def _encode(self, obj, context): try: return self.encoding[obj] except (KeyError, TypeError): if self.encdefault is NotImplemented: raise MappingError("no encoding mapping for %r [%s]" % ( obj, self.subcon.name)) if self.encdefault is Pass: return obj return self.encdefault def _decode(self, obj, context): try: return self.decoding[obj] except (KeyError, TypeError): if self.decdefault is NotImplemented: raise MappingError("no decoding mapping for %r [%s]" % ( obj, self.subcon.name)) if self.decdefault is Pass: return obj return self.decdefault class FlagsAdapter(Adapter): """ Adapter for flag fields. Each flag is extracted from the number, resulting in a FlagsContainer object. Not intended for direct usage. See FlagsEnum. Parameters * subcon - the subcon to extract * flags - a dictionary mapping flag-names to their value """ __slots__ = ["flags"] def __init__(self, subcon, flags): Adapter.__init__(self, subcon) self.flags = flags def _encode(self, obj, context): flags = 0 for name, value in self.flags.items(): if getattr(obj, name, False): flags |= value return flags def _decode(self, obj, context): obj2 = FlagsContainer() for name, value in self.flags.items(): setattr(obj2, name, bool(obj & value)) return obj2 class StringAdapter(Adapter): """ Adapter for strings. Converts a sequence of characters into a python string, and optionally handles character encoding. See String. Parameters: * subcon - the subcon to convert * encoding - the character encoding name (e.g., "utf8"), or None to return raw bytes (usually 8-bit ASCII). """ __slots__ = ["encoding"] def __init__(self, subcon, encoding = None): Adapter.__init__(self, subcon) self.encoding = encoding def _encode(self, obj, context): if self.encoding: obj = obj.encode(self.encoding) return obj def _decode(self, obj, context): if self.encoding: obj = obj.decode(self.encoding) return obj class PaddedStringAdapter(Adapter): r""" Adapter for padded strings. See String. Parameters: * subcon - the subcon to adapt * padchar - the padding character. default is b"\x00". * paddir - the direction where padding is placed ("right", "left", or "center"). the default is "right". * trimdir - the direction where trimming will take place ("right" or "left"). the default is "right". trimming is only meaningful for building, when the given string is too long. """ __slots__ = ["padchar", "paddir", "trimdir"] def __init__(self, subcon, padchar = b"\x00", paddir = "right", trimdir = "right"): if paddir not in ("right", "left", "center"): raise ValueError("paddir must be 'right', 'left' or 'center'", paddir) if trimdir not in ("right", "left"): raise ValueError("trimdir must be 'right' or 'left'", trimdir) Adapter.__init__(self, subcon) self.padchar = padchar self.paddir = paddir self.trimdir = trimdir def _decode(self, obj, context): if self.paddir == "right": obj = obj.rstrip(self.padchar) elif self.paddir == "left": obj = obj.lstrip(self.padchar) else: obj = obj.strip(self.padchar) return obj def _encode(self, obj, context): size = self._sizeof(context) if self.paddir == "right": obj = obj.ljust(size, self.padchar) elif self.paddir == "left": obj = obj.rjust(size, self.padchar) else: obj = obj.center(size, self.padchar) if len(obj) > size: if self.trimdir == "right": obj = obj[:size] else: obj = obj[-size:] return obj class LengthValueAdapter(Adapter): """ Adapter for length-value pairs. It extracts only the value from the pair, and calculates the length based on the value. See PrefixedArray and PascalString. Parameters: * subcon - the subcon returning a length-value pair """ __slots__ = [] def _encode(self, obj, context): return (len(obj), obj) def _decode(self, obj, context): return obj[1] class CStringAdapter(StringAdapter): r""" Adapter for C-style strings (strings terminated by a terminator char). Parameters: * subcon - the subcon to convert * terminators - a sequence of terminator chars. default is b"\x00". * encoding - the character encoding to use (e.g., "utf8"), or None to return raw-bytes. the terminator characters are not affected by the encoding. """ __slots__ = ["terminators"] def __init__(self, subcon, terminators = b"\x00", encoding = None): StringAdapter.__init__(self, subcon, encoding = encoding) self.terminators = terminators def _encode(self, obj, context): return StringAdapter._encode(self, obj, context) + self.terminators[0:1] def _decode(self, obj, context): return StringAdapter._decode(self, b''.join(obj[:-1]), context) class TunnelAdapter(Adapter): """ Adapter for tunneling (as in protocol tunneling). A tunnel is construct nested upon another (layering). For parsing, the lower layer first parses the data (note: it must return a string!), then the upper layer is called to parse that data (bottom-up). For building it works in a top-down manner; first the upper layer builds the data, then the lower layer takes it and writes it to the stream. Parameters: * subcon - the lower layer subcon * inner_subcon - the upper layer (tunneled/nested) subcon Example: # a pascal string containing compressed data (zlib encoding), so first # the string is read, decompressed, and finally re-parsed as an array # of UBInt16 TunnelAdapter( PascalString("data", encoding = "zlib"), GreedyRange(UBInt16("elements")) ) """ __slots__ = ["inner_subcon"] def __init__(self, subcon, inner_subcon): Adapter.__init__(self, subcon) self.inner_subcon = inner_subcon def _decode(self, obj, context): return self.inner_subcon._parse(BytesIO(obj), context) def _encode(self, obj, context): stream = BytesIO() self.inner_subcon._build(obj, stream, context) return stream.getvalue() class ExprAdapter(Adapter): """ A generic adapter that accepts 'encoder' and 'decoder' as parameters. You can use ExprAdapter instead of writing a full-blown class when only a simple expression is needed. Parameters: * subcon - the subcon to adapt * encoder - a function that takes (obj, context) and returns an encoded version of obj * decoder - a function that takes (obj, context) and returns an decoded version of obj Example: ExprAdapter(UBInt8("foo"), encoder = lambda obj, ctx: obj / 4, decoder = lambda obj, ctx: obj * 4, ) """ __slots__ = ["_encode", "_decode"] def __init__(self, subcon, encoder, decoder): Adapter.__init__(self, subcon) self._encode = encoder self._decode = decoder class HexDumpAdapter(Adapter): """ Adapter for hex-dumping strings. It returns a HexString, which is a string """ __slots__ = ["linesize"] def __init__(self, subcon, linesize = 16): Adapter.__init__(self, subcon) self.linesize = linesize def _encode(self, obj, context): return obj def _decode(self, obj, context): return HexString(obj, linesize = self.linesize) class ConstAdapter(Adapter): """ Adapter for enforcing a constant value ("magic numbers"). When decoding, the return value is checked; when building, the value is substituted in. Parameters: * subcon - the subcon to validate * value - the expected value Example: Const(Field("signature", 2), "MZ") """ __slots__ = ["value"] def __init__(self, subcon, value): Adapter.__init__(self, subcon) self.value = value def _encode(self, obj, context): if obj is None or obj == self.value: return self.value else: raise ConstError("expected %r, found %r" % (self.value, obj)) def _decode(self, obj, context): if obj != self.value: raise ConstError("expected %r, found %r" % (self.value, obj)) return obj class SlicingAdapter(Adapter): """ Adapter for slicing a list (getting a slice from that list) Parameters: * subcon - the subcon to slice * start - start index * stop - stop index (or None for up-to-end) * step - step (or None for every element) """ __slots__ = ["start", "stop", "step"] def __init__(self, subcon, start, stop = None): Adapter.__init__(self, subcon) self.start = start self.stop = stop def _encode(self, obj, context): if self.start is None: return obj return [None] * self.start + obj def _decode(self, obj, context): return obj[self.start:self.stop] class IndexingAdapter(Adapter): """ Adapter for indexing a list (getting a single item from that list) Parameters: * subcon - the subcon to index * index - the index of the list to get """ __slots__ = ["index"] def __init__(self, subcon, index): Adapter.__init__(self, subcon) if type(index) is not int: raise TypeError("index must be an integer", type(index)) self.index = index def _encode(self, obj, context): return [None] * self.index + [obj] def _decode(self, obj, context): return obj[self.index] class PaddingAdapter(Adapter): r""" Adapter for padding. Parameters: * subcon - the subcon to pad * pattern - the padding pattern (character as byte). default is b"\x00" * strict - whether or not to verify, during parsing, that the given padding matches the padding pattern. default is False (unstrict) """ __slots__ = ["pattern", "strict"] def __init__(self, subcon, pattern = b"\x00", strict = False): Adapter.__init__(self, subcon) self.pattern = pattern self.strict = strict def _encode(self, obj, context): return self._sizeof(context) * self.pattern def _decode(self, obj, context): if self.strict: expected = self._sizeof(context) * self.pattern if obj != expected: raise PaddingError("expected %r, found %r" % (expected, obj)) return obj #=============================================================================== # validators #=============================================================================== class Validator(Adapter): """ Abstract class: validates a condition on the encoded/decoded object. Override _validate(obj, context) in deriving classes. Parameters: * subcon - the subcon to validate """ __slots__ = [] def _decode(self, obj, context): if not self._validate(obj, context): raise ValidationError("invalid object", obj) return obj def _encode(self, obj, context): return self._decode(obj, context) def _validate(self, obj, context): raise NotImplementedError() class OneOf(Validator): """ Validates that the object is one of the listed values. :param ``Construct`` subcon: object to validate :param iterable valids: a set of valid values >>> OneOf(UBInt8("foo"), [4,5,6,7]).parse("\\x05") 5 >>> OneOf(UBInt8("foo"), [4,5,6,7]).parse("\\x08") Traceback (most recent call last): ... construct.core.ValidationError: ('invalid object', 8) >>> >>> OneOf(UBInt8("foo"), [4,5,6,7]).build(5) '\\x05' >>> OneOf(UBInt8("foo"), [4,5,6,7]).build(9) Traceback (most recent call last): ... construct.core.ValidationError: ('invalid object', 9) """ __slots__ = ["valids"] def __init__(self, subcon, valids): Validator.__init__(self, subcon) self.valids = valids def _validate(self, obj, context): return obj in self.valids class NoneOf(Validator): """ Validates that the object is none of the listed values. :param ``Construct`` subcon: object to validate :param iterable invalids: a set of invalid values >>> NoneOf(UBInt8("foo"), [4,5,6,7]).parse("\\x08") 8 >>> NoneOf(UBInt8("foo"), [4,5,6,7]).parse("\\x06") Traceback (most recent call last): ... construct.core.ValidationError: ('invalid object', 6) """ __slots__ = ["invalids"] def __init__(self, subcon, invalids): Validator.__init__(self, subcon) self.invalids = invalids def _validate(self, obj, context): return obj not in self.invalids pyelftools-0.26/elftools/construct/core.py000066400000000000000000001267241357220457300210420ustar00rootroot00000000000000from struct import Struct as Packer from .lib.py3compat import BytesIO, advance_iterator, bchr from .lib import Container, ListContainer, LazyContainer #=============================================================================== # exceptions #=============================================================================== class ConstructError(Exception): __slots__ = [] class FieldError(ConstructError): __slots__ = [] class SizeofError(ConstructError): __slots__ = [] class AdaptationError(ConstructError): __slots__ = [] class ArrayError(ConstructError): __slots__ = [] class RangeError(ConstructError): __slots__ = [] class SwitchError(ConstructError): __slots__ = [] class SelectError(ConstructError): __slots__ = [] class TerminatorError(ConstructError): __slots__ = [] #=============================================================================== # abstract constructs #=============================================================================== class Construct(object): """ The mother of all constructs. This object is generally not directly instantiated, and it does not directly implement parsing and building, so it is largely only of interest to subclass implementors. The external user API: * parse() * parse_stream() * build() * build_stream() * sizeof() Subclass authors should not override the external methods. Instead, another API is available: * _parse() * _build() * _sizeof() There is also a flag API: * _set_flag() * _clear_flag() * _inherit_flags() * _is_flag() And stateful copying: * __getstate__() * __setstate__() Attributes and Inheritance ========================== All constructs have a name and flags. The name is used for naming struct members and context dictionaries. Note that the name can either be a string, or None if the name is not needed. A single underscore ("_") is a reserved name, and so are names starting with a less-than character ("<"). The name should be descriptive, short, and valid as a Python identifier, although these rules are not enforced. The flags specify additional behavioral information about this construct. Flags are used by enclosing constructs to determine a proper course of action. Flags are inherited by default, from inner subconstructs to outer constructs. The enclosing construct may set new flags or clear existing ones, as necessary. For example, if FLAG_COPY_CONTEXT is set, repeaters will pass a copy of the context for each iteration, which is necessary for OnDemand parsing. """ FLAG_COPY_CONTEXT = 0x0001 FLAG_DYNAMIC = 0x0002 FLAG_EMBED = 0x0004 FLAG_NESTING = 0x0008 __slots__ = ["name", "conflags"] def __init__(self, name, flags = 0): if name is not None: if type(name) is not str: raise TypeError("name must be a string or None", name) if name == "_" or name.startswith("<"): raise ValueError("reserved name", name) self.name = name self.conflags = flags def __repr__(self): return "%s(%r)" % (self.__class__.__name__, self.name) def _set_flag(self, flag): """ Set the given flag or flags. :param int flag: flag to set; may be OR'd combination of flags """ self.conflags |= flag def _clear_flag(self, flag): """ Clear the given flag or flags. :param int flag: flag to clear; may be OR'd combination of flags """ self.conflags &= ~flag def _inherit_flags(self, *subcons): """ Pull flags from subconstructs. """ for sc in subcons: self._set_flag(sc.conflags) def _is_flag(self, flag): """ Check whether a given flag is set. :param int flag: flag to check """ return bool(self.conflags & flag) def __getstate__(self): """ Obtain a dictionary representing this construct's state. """ attrs = {} if hasattr(self, "__dict__"): attrs.update(self.__dict__) slots = [] c = self.__class__ while c is not None: if hasattr(c, "__slots__"): slots.extend(c.__slots__) c = c.__base__ for name in slots: if hasattr(self, name): attrs[name] = getattr(self, name) return attrs def __setstate__(self, attrs): """ Set this construct's state to a given state. """ for name, value in attrs.items(): setattr(self, name, value) def __copy__(self): """returns a copy of this construct""" self2 = object.__new__(self.__class__) self2.__setstate__(self.__getstate__()) return self2 def parse(self, data): """ Parse an in-memory buffer. Strings, buffers, memoryviews, and other complete buffers can be parsed with this method. """ return self.parse_stream(BytesIO(data)) def parse_stream(self, stream): """ Parse a stream. Files, pipes, sockets, and other streaming sources of data are handled by this method. """ return self._parse(stream, Container()) def _parse(self, stream, context): """ Override me in your subclass. """ raise NotImplementedError() def build(self, obj): """ Build an object in memory. """ stream = BytesIO() self.build_stream(obj, stream) return stream.getvalue() def build_stream(self, obj, stream): """ Build an object directly into a stream. """ self._build(obj, stream, Container()) def _build(self, obj, stream, context): """ Override me in your subclass. """ raise NotImplementedError() def sizeof(self, context=None): """ Calculate the size of this object, optionally using a context. Some constructs have no fixed size and can only know their size for a given hunk of data; these constructs will raise an error if they are not passed a context. :param ``Container`` context: contextual data :returns: int of the length of this construct :raises SizeofError: the size could not be determined """ if context is None: context = Container() try: return self._sizeof(context) except Exception as e: raise SizeofError(e) def _sizeof(self, context): """ Override me in your subclass. """ raise SizeofError("Raw Constructs have no size!") class Subconstruct(Construct): """ Abstract subconstruct (wraps an inner construct, inheriting its name and flags). Parameters: * subcon - the construct to wrap """ __slots__ = ["subcon"] def __init__(self, subcon): Construct.__init__(self, subcon.name, subcon.conflags) self.subcon = subcon def _parse(self, stream, context): return self.subcon._parse(stream, context) def _build(self, obj, stream, context): self.subcon._build(obj, stream, context) def _sizeof(self, context): return self.subcon._sizeof(context) class Adapter(Subconstruct): """ Abstract adapter: calls _decode for parsing and _encode for building. Parameters: * subcon - the construct to wrap """ __slots__ = [] def _parse(self, stream, context): return self._decode(self.subcon._parse(stream, context), context) def _build(self, obj, stream, context): self.subcon._build(self._encode(obj, context), stream, context) def _decode(self, obj, context): raise NotImplementedError() def _encode(self, obj, context): raise NotImplementedError() #=============================================================================== # Fields #=============================================================================== def _read_stream(stream, length): if length < 0: raise ValueError("length must be >= 0", length) data = stream.read(length) if len(data) != length: raise FieldError("expected %d, found %d" % (length, len(data))) return data def _write_stream(stream, length, data): if length < 0: raise ValueError("length must be >= 0", length) if len(data) != length: raise FieldError("expected %d, found %d" % (length, len(data))) stream.write(data) class StaticField(Construct): """ A fixed-size byte field. :param str name: field name :param int length: number of bytes in the field """ __slots__ = ["length"] def __init__(self, name, length): Construct.__init__(self, name) self.length = length def _parse(self, stream, context): return _read_stream(stream, self.length) def _build(self, obj, stream, context): _write_stream(stream, self.length, obj) def _sizeof(self, context): return self.length class FormatField(StaticField): """ A field that uses ``struct`` to pack and unpack data. See ``struct`` documentation for instructions on crafting format strings. :param str name: name of the field :param str endianness: format endianness string; one of "<", ">", or "=" :param str format: a single format character """ __slots__ = ["packer"] def __init__(self, name, endianity, format): if endianity not in (">", "<", "="): raise ValueError("endianity must be be '=', '<', or '>'", endianity) if len(format) != 1: raise ValueError("must specify one and only one format char") self.packer = Packer(endianity + format) StaticField.__init__(self, name, self.packer.size) def __getstate__(self): attrs = StaticField.__getstate__(self) attrs["packer"] = attrs["packer"].format return attrs def __setstate__(self, attrs): attrs["packer"] = Packer(attrs["packer"]) return StaticField.__setstate__(attrs) def _parse(self, stream, context): try: return self.packer.unpack(_read_stream(stream, self.length))[0] except Exception as ex: raise FieldError(ex) def _build(self, obj, stream, context): try: _write_stream(stream, self.length, self.packer.pack(obj)) except Exception as ex: raise FieldError(ex) class MetaField(Construct): """ A variable-length field. The length is obtained at runtime from a function. :param str name: name of the field :param callable lengthfunc: callable that takes a context and returns length as an int >>> foo = Struct("foo", ... Byte("length"), ... MetaField("data", lambda ctx: ctx["length"]) ... ) >>> foo.parse("\\x03ABC") Container(data = 'ABC', length = 3) >>> foo.parse("\\x04ABCD") Container(data = 'ABCD', length = 4) """ __slots__ = ["lengthfunc"] def __init__(self, name, lengthfunc): Construct.__init__(self, name) self.lengthfunc = lengthfunc self._set_flag(self.FLAG_DYNAMIC) def _parse(self, stream, context): return _read_stream(stream, self.lengthfunc(context)) def _build(self, obj, stream, context): _write_stream(stream, self.lengthfunc(context), obj) def _sizeof(self, context): return self.lengthfunc(context) #=============================================================================== # arrays and repeaters #=============================================================================== class MetaArray(Subconstruct): """ An array (repeater) of a meta-count. The array will iterate exactly `countfunc()` times. Will raise ArrayError if less elements are found. See also Array, Range and RepeatUntil. Parameters: * countfunc - a function that takes the context as a parameter and returns the number of elements of the array (count) * subcon - the subcon to repeat `countfunc()` times Example: MetaArray(lambda ctx: 5, UBInt8("foo")) """ __slots__ = ["countfunc"] def __init__(self, countfunc, subcon): Subconstruct.__init__(self, subcon) self.countfunc = countfunc self._clear_flag(self.FLAG_COPY_CONTEXT) self._set_flag(self.FLAG_DYNAMIC) def _parse(self, stream, context): obj = ListContainer() c = 0 count = self.countfunc(context) try: if self.subcon.conflags & self.FLAG_COPY_CONTEXT: while c < count: obj.append(self.subcon._parse(stream, context.__copy__())) c += 1 else: while c < count: obj.append(self.subcon._parse(stream, context)) c += 1 except ConstructError as ex: raise ArrayError("expected %d, found %d" % (count, c), ex) return obj def _build(self, obj, stream, context): count = self.countfunc(context) if len(obj) != count: raise ArrayError("expected %d, found %d" % (count, len(obj))) if self.subcon.conflags & self.FLAG_COPY_CONTEXT: for subobj in obj: self.subcon._build(subobj, stream, context.__copy__()) else: for subobj in obj: self.subcon._build(subobj, stream, context) def _sizeof(self, context): return self.subcon._sizeof(context) * self.countfunc(context) class Range(Subconstruct): """ A range-array. The subcon will iterate between `mincount` to `maxcount` times. If less than `mincount` elements are found, raises RangeError. See also GreedyRange and OptionalGreedyRange. The general-case repeater. Repeats the given unit for at least mincount times, and up to maxcount times. If an exception occurs (EOF, validation error), the repeater exits. If less than mincount units have been successfully parsed, a RangeError is raised. .. note:: This object requires a seekable stream for parsing. :param int mincount: the minimal count :param int maxcount: the maximal count :param Construct subcon: the subcon to repeat >>> c = Range(3, 7, UBInt8("foo")) >>> c.parse("\\x01\\x02") Traceback (most recent call last): ... construct.core.RangeError: expected 3..7, found 2 >>> c.parse("\\x01\\x02\\x03") [1, 2, 3] >>> c.parse("\\x01\\x02\\x03\\x04\\x05\\x06") [1, 2, 3, 4, 5, 6] >>> c.parse("\\x01\\x02\\x03\\x04\\x05\\x06\\x07") [1, 2, 3, 4, 5, 6, 7] >>> c.parse("\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\x09") [1, 2, 3, 4, 5, 6, 7] >>> c.build([1,2]) Traceback (most recent call last): ... construct.core.RangeError: expected 3..7, found 2 >>> c.build([1,2,3,4]) '\\x01\\x02\\x03\\x04' >>> c.build([1,2,3,4,5,6,7,8]) Traceback (most recent call last): ... construct.core.RangeError: expected 3..7, found 8 """ __slots__ = ["mincount", "maxcout"] def __init__(self, mincount, maxcout, subcon): Subconstruct.__init__(self, subcon) self.mincount = mincount self.maxcout = maxcout self._clear_flag(self.FLAG_COPY_CONTEXT) self._set_flag(self.FLAG_DYNAMIC) def _parse(self, stream, context): obj = ListContainer() c = 0 try: if self.subcon.conflags & self.FLAG_COPY_CONTEXT: while c < self.maxcout: pos = stream.tell() obj.append(self.subcon._parse(stream, context.__copy__())) c += 1 else: while c < self.maxcout: pos = stream.tell() obj.append(self.subcon._parse(stream, context)) c += 1 except ConstructError as ex: if c < self.mincount: raise RangeError("expected %d to %d, found %d" % (self.mincount, self.maxcout, c), ex) stream.seek(pos) return obj def _build(self, obj, stream, context): if len(obj) < self.mincount or len(obj) > self.maxcout: raise RangeError("expected %d to %d, found %d" % (self.mincount, self.maxcout, len(obj))) cnt = 0 try: if self.subcon.conflags & self.FLAG_COPY_CONTEXT: for subobj in obj: if isinstance(obj, bytes): subobj = bchr(subobj) self.subcon._build(subobj, stream, context.__copy__()) cnt += 1 else: for subobj in obj: if isinstance(obj, bytes): subobj = bchr(subobj) self.subcon._build(subobj, stream, context) cnt += 1 except ConstructError as ex: if cnt < self.mincount: raise RangeError("expected %d to %d, found %d" % (self.mincount, self.maxcout, len(obj)), ex) def _sizeof(self, context): raise SizeofError("can't calculate size") class RepeatUntil(Subconstruct): """ An array that repeats until the predicate indicates it to stop. Note that the last element (which caused the repeat to exit) is included in the return value. Parameters: * predicate - a predicate function that takes (obj, context) and returns True if the stop-condition is met, or False to continue. * subcon - the subcon to repeat. Example: # will read chars until b\x00 (inclusive) RepeatUntil(lambda obj, ctx: obj == b"\x00", Field("chars", 1) ) """ __slots__ = ["predicate"] def __init__(self, predicate, subcon): Subconstruct.__init__(self, subcon) self.predicate = predicate self._clear_flag(self.FLAG_COPY_CONTEXT) self._set_flag(self.FLAG_DYNAMIC) def _parse(self, stream, context): obj = [] try: if self.subcon.conflags & self.FLAG_COPY_CONTEXT: while True: subobj = self.subcon._parse(stream, context.__copy__()) obj.append(subobj) if self.predicate(subobj, context): break else: while True: subobj = self.subcon._parse(stream, context) obj.append(subobj) if self.predicate(subobj, context): break except ConstructError as ex: raise ArrayError("missing terminator", ex) return obj def _build(self, obj, stream, context): terminated = False if self.subcon.conflags & self.FLAG_COPY_CONTEXT: for subobj in obj: self.subcon._build(subobj, stream, context.__copy__()) if self.predicate(subobj, context): terminated = True break else: for subobj in obj: subobj = bchr(subobj) self.subcon._build(subobj, stream, context.__copy__()) if self.predicate(subobj, context): terminated = True break if not terminated: raise ArrayError("missing terminator") def _sizeof(self, context): raise SizeofError("can't calculate size") #=============================================================================== # structures and sequences #=============================================================================== class Struct(Construct): """ A sequence of named constructs, similar to structs in C. The elements are parsed and built in the order they are defined. See also Embedded. Parameters: * name - the name of the structure * subcons - a sequence of subconstructs that make up this structure. * nested - a keyword-only argument that indicates whether this struct creates a nested context. The default is True. This parameter is considered "advanced usage", and may be removed in the future. Example: Struct("foo", UBInt8("first_element"), UBInt16("second_element"), Padding(2), UBInt8("third_element"), ) """ __slots__ = ["subcons", "nested"] def __init__(self, name, *subcons, **kw): self.nested = kw.pop("nested", True) if kw: raise TypeError("the only keyword argument accepted is 'nested'", kw) Construct.__init__(self, name) self.subcons = subcons self._inherit_flags(*subcons) self._clear_flag(self.FLAG_EMBED) def _parse(self, stream, context): if "" in context: obj = context[""] del context[""] else: obj = Container() if self.nested: context = Container(_ = context) for sc in self.subcons: if sc.conflags & self.FLAG_EMBED: context[""] = obj sc._parse(stream, context) else: subobj = sc._parse(stream, context) if sc.name is not None: obj[sc.name] = subobj context[sc.name] = subobj return obj def _build(self, obj, stream, context): if "" in context: del context[""] elif self.nested: context = Container(_ = context) for sc in self.subcons: if sc.conflags & self.FLAG_EMBED: context[""] = True subobj = obj elif sc.name is None: subobj = None else: subobj = getattr(obj, sc.name) context[sc.name] = subobj sc._build(subobj, stream, context) def _sizeof(self, context): if self.nested: context = Container(_ = context) return sum(sc._sizeof(context) for sc in self.subcons) class Sequence(Struct): """ A sequence of unnamed constructs. The elements are parsed and built in the order they are defined. See also Embedded. Parameters: * name - the name of the structure * subcons - a sequence of subconstructs that make up this structure. * nested - a keyword-only argument that indicates whether this struct creates a nested context. The default is True. This parameter is considered "advanced usage", and may be removed in the future. Example: Sequence("foo", UBInt8("first_element"), UBInt16("second_element"), Padding(2), UBInt8("third_element"), ) """ __slots__ = [] def _parse(self, stream, context): if "" in context: obj = context[""] del context[""] else: obj = ListContainer() if self.nested: context = Container(_ = context) for sc in self.subcons: if sc.conflags & self.FLAG_EMBED: context[""] = obj sc._parse(stream, context) else: subobj = sc._parse(stream, context) if sc.name is not None: obj.append(subobj) context[sc.name] = subobj return obj def _build(self, obj, stream, context): if "" in context: del context[""] elif self.nested: context = Container(_ = context) objiter = iter(obj) for sc in self.subcons: if sc.conflags & self.FLAG_EMBED: context[""] = True subobj = objiter elif sc.name is None: subobj = None else: subobj = advance_iterator(objiter) context[sc.name] = subobj sc._build(subobj, stream, context) class Union(Construct): """ a set of overlapping fields (like unions in C). when parsing, all fields read the same data; when building, only the first subcon (called "master") is used. Parameters: * name - the name of the union * master - the master subcon, i.e., the subcon used for building and calculating the total size * subcons - additional subcons Example: Union("what_are_four_bytes", UBInt32("one_dword"), Struct("two_words", UBInt16("first"), UBInt16("second")), Struct("four_bytes", UBInt8("a"), UBInt8("b"), UBInt8("c"), UBInt8("d") ), ) """ __slots__ = ["parser", "builder"] def __init__(self, name, master, *subcons, **kw): Construct.__init__(self, name) args = [Peek(sc) for sc in subcons] args.append(MetaField(None, lambda ctx: master._sizeof(ctx))) self.parser = Struct(name, Peek(master, perform_build = True), *args) self.builder = Struct(name, master) def _parse(self, stream, context): return self.parser._parse(stream, context) def _build(self, obj, stream, context): return self.builder._build(obj, stream, context) def _sizeof(self, context): return self.builder._sizeof(context) #=============================================================================== # conditional #=============================================================================== class Switch(Construct): """ A conditional branch. Switch will choose the case to follow based on the return value of keyfunc. If no case is matched, and no default value is given, SwitchError will be raised. See also Pass. Parameters: * name - the name of the construct * keyfunc - a function that takes the context and returns a key, which will ne used to choose the relevant case. * cases - a dictionary mapping keys to constructs. the keys can be any values that may be returned by keyfunc. * default - a default value to use when the key is not found in the cases. if not supplied, an exception will be raised when the key is not found. You can use the builtin construct Pass for 'do-nothing'. * include_key - whether or not to include the key in the return value of parsing. defualt is False. Example: Struct("foo", UBInt8("type"), Switch("value", lambda ctx: ctx.type, { 1 : UBInt8("spam"), 2 : UBInt16("spam"), 3 : UBInt32("spam"), 4 : UBInt64("spam"), } ), ) """ class NoDefault(Construct): def _parse(self, stream, context): raise SwitchError("no default case defined") def _build(self, obj, stream, context): raise SwitchError("no default case defined") def _sizeof(self, context): raise SwitchError("no default case defined") NoDefault = NoDefault("No default value specified") __slots__ = ["subcons", "keyfunc", "cases", "default", "include_key"] def __init__(self, name, keyfunc, cases, default = NoDefault, include_key = False): Construct.__init__(self, name) self._inherit_flags(*cases.values()) self.keyfunc = keyfunc self.cases = cases self.default = default self.include_key = include_key self._inherit_flags(*cases.values()) self._set_flag(self.FLAG_DYNAMIC) def _parse(self, stream, context): key = self.keyfunc(context) obj = self.cases.get(key, self.default)._parse(stream, context) if self.include_key: return key, obj else: return obj def _build(self, obj, stream, context): if self.include_key: key, obj = obj else: key = self.keyfunc(context) case = self.cases.get(key, self.default) case._build(obj, stream, context) def _sizeof(self, context): case = self.cases.get(self.keyfunc(context), self.default) return case._sizeof(context) class Select(Construct): """ Selects the first matching subconstruct. It will literally try each of the subconstructs, until one matches. Notes: * requires a seekable stream. Parameters: * name - the name of the construct * subcons - the subcons to try (order-sensitive) * include_name - a keyword only argument, indicating whether to include the name of the selected subcon in the return value of parsing. default is false. Example: Select("foo", UBInt64("large"), UBInt32("medium"), UBInt16("small"), UBInt8("tiny"), ) """ __slots__ = ["subcons", "include_name"] def __init__(self, name, *subcons, **kw): include_name = kw.pop("include_name", False) if kw: raise TypeError("the only keyword argument accepted " "is 'include_name'", kw) Construct.__init__(self, name) self.subcons = subcons self.include_name = include_name self._inherit_flags(*subcons) self._set_flag(self.FLAG_DYNAMIC) def _parse(self, stream, context): for sc in self.subcons: pos = stream.tell() context2 = context.__copy__() try: obj = sc._parse(stream, context2) except ConstructError: stream.seek(pos) else: context.__update__(context2) if self.include_name: return sc.name, obj else: return obj raise SelectError("no subconstruct matched") def _build(self, obj, stream, context): if self.include_name: name, obj = obj for sc in self.subcons: if sc.name == name: sc._build(obj, stream, context) return else: for sc in self.subcons: stream2 = BytesIO() context2 = context.__copy__() try: sc._build(obj, stream2, context2) except Exception: pass else: context.__update__(context2) stream.write(stream2.getvalue()) return raise SelectError("no subconstruct matched", obj) def _sizeof(self, context): raise SizeofError("can't calculate size") #=============================================================================== # stream manipulation #=============================================================================== class Pointer(Subconstruct): """ Changes the stream position to a given offset, where the construction should take place, and restores the stream position when finished. See also Anchor, OnDemand and OnDemandPointer. Notes: * requires a seekable stream. Parameters: * offsetfunc: a function that takes the context and returns an absolute stream position, where the construction would take place * subcon - the subcon to use at `offsetfunc()` Example: Struct("foo", UBInt32("spam_pointer"), Pointer(lambda ctx: ctx.spam_pointer, Array(5, UBInt8("spam")) ) ) """ __slots__ = ["offsetfunc"] def __init__(self, offsetfunc, subcon): Subconstruct.__init__(self, subcon) self.offsetfunc = offsetfunc def _parse(self, stream, context): newpos = self.offsetfunc(context) origpos = stream.tell() stream.seek(newpos) obj = self.subcon._parse(stream, context) stream.seek(origpos) return obj def _build(self, obj, stream, context): newpos = self.offsetfunc(context) origpos = stream.tell() stream.seek(newpos) self.subcon._build(obj, stream, context) stream.seek(origpos) def _sizeof(self, context): return 0 class Peek(Subconstruct): """ Peeks at the stream: parses without changing the stream position. See also Union. If the end of the stream is reached when peeking, returns None. Notes: * requires a seekable stream. Parameters: * subcon - the subcon to peek at * perform_build - whether or not to perform building. by default this parameter is set to False, meaning building is a no-op. Example: Peek(UBInt8("foo")) """ __slots__ = ["perform_build"] def __init__(self, subcon, perform_build = False): Subconstruct.__init__(self, subcon) self.perform_build = perform_build def _parse(self, stream, context): pos = stream.tell() try: return self.subcon._parse(stream, context) except FieldError: pass finally: stream.seek(pos) def _build(self, obj, stream, context): if self.perform_build: self.subcon._build(obj, stream, context) def _sizeof(self, context): return 0 class OnDemand(Subconstruct): """ Allows for on-demand (lazy) parsing. When parsing, it will return a LazyContainer that represents a pointer to the data, but does not actually parses it from stream until it's "demanded". By accessing the 'value' property of LazyContainers, you will demand the data from the stream. The data will be parsed and cached for later use. You can use the 'has_value' property to know whether the data has already been demanded. See also OnDemandPointer. Notes: * requires a seekable stream. Parameters: * subcon - * advance_stream - whether or not to advance the stream position. by default this is True, but if subcon is a pointer, this should be False. * force_build - whether or not to force build. If set to False, and the LazyContainer has not been demaned, building is a no-op. Example: OnDemand(Array(10000, UBInt8("foo")) """ __slots__ = ["advance_stream", "force_build"] def __init__(self, subcon, advance_stream = True, force_build = True): Subconstruct.__init__(self, subcon) self.advance_stream = advance_stream self.force_build = force_build def _parse(self, stream, context): obj = LazyContainer(self.subcon, stream, stream.tell(), context) if self.advance_stream: stream.seek(self.subcon._sizeof(context), 1) return obj def _build(self, obj, stream, context): if not isinstance(obj, LazyContainer): self.subcon._build(obj, stream, context) elif self.force_build or obj.has_value: self.subcon._build(obj.value, stream, context) elif self.advance_stream: stream.seek(self.subcon._sizeof(context), 1) class Buffered(Subconstruct): """ Creates an in-memory buffered stream, which can undergo encoding and decoding prior to being passed on to the subconstruct. See also Bitwise. Note: * Do not use pointers inside Buffered Parameters: * subcon - the subcon which will operate on the buffer * encoder - a function that takes a string and returns an encoded string (used after building) * decoder - a function that takes a string and returns a decoded string (used before parsing) * resizer - a function that takes the size of the subcon and "adjusts" or "resizes" it according to the encoding/decoding process. Example: Buffered(BitField("foo", 16), encoder = decode_bin, decoder = encode_bin, resizer = lambda size: size / 8, ) """ __slots__ = ["encoder", "decoder", "resizer"] def __init__(self, subcon, decoder, encoder, resizer): Subconstruct.__init__(self, subcon) self.encoder = encoder self.decoder = decoder self.resizer = resizer def _parse(self, stream, context): data = _read_stream(stream, self._sizeof(context)) stream2 = BytesIO(self.decoder(data)) return self.subcon._parse(stream2, context) def _build(self, obj, stream, context): size = self._sizeof(context) stream2 = BytesIO() self.subcon._build(obj, stream2, context) data = self.encoder(stream2.getvalue()) assert len(data) == size _write_stream(stream, self._sizeof(context), data) def _sizeof(self, context): return self.resizer(self.subcon._sizeof(context)) class Restream(Subconstruct): """ Wraps the stream with a read-wrapper (for parsing) or a write-wrapper (for building). The stream wrapper can buffer the data internally, reading it from- or writing it to the underlying stream as needed. For example, BitStreamReader reads whole bytes from the underlying stream, but returns them as individual bits. See also Bitwise. When the parsing or building is done, the stream's close method will be invoked. It can perform any finalization needed for the stream wrapper, but it must not close the underlying stream. Note: * Do not use pointers inside Restream Parameters: * subcon - the subcon * stream_reader - the read-wrapper * stream_writer - the write wrapper * resizer - a function that takes the size of the subcon and "adjusts" or "resizes" it according to the encoding/decoding process. Example: Restream(BitField("foo", 16), stream_reader = BitStreamReader, stream_writer = BitStreamWriter, resizer = lambda size: size / 8, ) """ __slots__ = ["stream_reader", "stream_writer", "resizer"] def __init__(self, subcon, stream_reader, stream_writer, resizer): Subconstruct.__init__(self, subcon) self.stream_reader = stream_reader self.stream_writer = stream_writer self.resizer = resizer def _parse(self, stream, context): stream2 = self.stream_reader(stream) obj = self.subcon._parse(stream2, context) stream2.close() return obj def _build(self, obj, stream, context): stream2 = self.stream_writer(stream) self.subcon._build(obj, stream2, context) stream2.close() def _sizeof(self, context): return self.resizer(self.subcon._sizeof(context)) #=============================================================================== # miscellaneous #=============================================================================== class Reconfig(Subconstruct): """ Reconfigures a subconstruct. Reconfig can be used to change the name and set and clear flags of the inner subcon. Parameters: * name - the new name * subcon - the subcon to reconfigure * setflags - the flags to set (default is 0) * clearflags - the flags to clear (default is 0) Example: Reconfig("foo", UBInt8("bar")) """ __slots__ = [] def __init__(self, name, subcon, setflags = 0, clearflags = 0): Construct.__init__(self, name, subcon.conflags) self.subcon = subcon self._set_flag(setflags) self._clear_flag(clearflags) class Anchor(Construct): """ Returns the "anchor" (stream position) at the point where it's inserted. Useful for adjusting relative offsets to absolute positions, or to measure sizes of constructs. absolute pointer = anchor + relative offset size = anchor_after - anchor_before See also Pointer. Notes: * requires a seekable stream. Parameters: * name - the name of the anchor Example: Struct("foo", Anchor("base"), UBInt8("relative_offset"), Pointer(lambda ctx: ctx.relative_offset + ctx.base, UBInt8("data") ) ) """ __slots__ = [] def _parse(self, stream, context): return stream.tell() def _build(self, obj, stream, context): context[self.name] = stream.tell() def _sizeof(self, context): return 0 class Value(Construct): """ A computed value. Parameters: * name - the name of the value * func - a function that takes the context and return the computed value Example: Struct("foo", UBInt8("width"), UBInt8("height"), Value("total_pixels", lambda ctx: ctx.width * ctx.height), ) """ __slots__ = ["func"] def __init__(self, name, func): Construct.__init__(self, name) self.func = func self._set_flag(self.FLAG_DYNAMIC) def _parse(self, stream, context): return self.func(context) def _build(self, obj, stream, context): context[self.name] = self.func(context) def _sizeof(self, context): return 0 #class Dynamic(Construct): # """ # Dynamically creates a construct and uses it for parsing and building. # This allows you to create change the construction tree on the fly. # Deprecated. # # Parameters: # * name - the name of the construct # * factoryfunc - a function that takes the context and returns a new # construct object which will be used for parsing and building. # # Example: # def factory(ctx): # if ctx.bar == 8: # return UBInt8("spam") # if ctx.bar == 9: # return String("spam", 9) # # Struct("foo", # UBInt8("bar"), # Dynamic("spam", factory), # ) # """ # __slots__ = ["factoryfunc"] # def __init__(self, name, factoryfunc): # Construct.__init__(self, name, self.FLAG_COPY_CONTEXT) # self.factoryfunc = factoryfunc # self._set_flag(self.FLAG_DYNAMIC) # def _parse(self, stream, context): # return self.factoryfunc(context)._parse(stream, context) # def _build(self, obj, stream, context): # return self.factoryfunc(context)._build(obj, stream, context) # def _sizeof(self, context): # return self.factoryfunc(context)._sizeof(context) class LazyBound(Construct): """ Lazily bound construct, useful for constructs that need to make cyclic references (linked-lists, expression trees, etc.). Parameters: Example: foo = Struct("foo", UBInt8("bar"), LazyBound("next", lambda: foo), ) """ __slots__ = ["bindfunc", "bound"] def __init__(self, name, bindfunc): Construct.__init__(self, name) self.bound = None self.bindfunc = bindfunc def _parse(self, stream, context): if self.bound is None: self.bound = self.bindfunc() return self.bound._parse(stream, context) def _build(self, obj, stream, context): if self.bound is None: self.bound = self.bindfunc() self.bound._build(obj, stream, context) def _sizeof(self, context): if self.bound is None: self.bound = self.bindfunc() return self.bound._sizeof(context) class Pass(Construct): """ A do-nothing construct, useful as the default case for Switch, or to indicate Enums. See also Switch and Enum. Notes: * this construct is a singleton. do not try to instatiate it, as it will not work... Example: Pass """ __slots__ = [] def _parse(self, stream, context): pass def _build(self, obj, stream, context): assert obj is None def _sizeof(self, context): return 0 Pass = Pass(None) class Terminator(Construct): """ Asserts the end of the stream has been reached at the point it's placed. You can use this to ensure no more unparsed data follows. Notes: * this construct is only meaningful for parsing. for building, it's a no-op. * this construct is a singleton. do not try to instatiate it, as it will not work... Example: Terminator """ __slots__ = [] def _parse(self, stream, context): if stream.read(1): raise TerminatorError("expected end of stream") def _build(self, obj, stream, context): assert obj is None def _sizeof(self, context): return 0 Terminator = Terminator(None) pyelftools-0.26/elftools/construct/debug.py000066400000000000000000000100241357220457300211610ustar00rootroot00000000000000""" Debugging utilities for constructs """ from __future__ import print_function import sys import traceback import pdb import inspect from .core import Construct, Subconstruct from .lib import HexString, Container, ListContainer class Probe(Construct): """ A probe: dumps the context, stack frames, and stream content to the screen to aid the debugging process. See also Debugger. Parameters: * name - the display name * show_stream - whether or not to show stream contents. default is True. the stream must be seekable. * show_context - whether or not to show the context. default is True. * show_stack - whether or not to show the upper stack frames. default is True. * stream_lookahead - the number of bytes to dump when show_stack is set. default is 100. Example: Struct("foo", UBInt8("a"), Probe("between a and b"), UBInt8("b"), ) """ __slots__ = [ "printname", "show_stream", "show_context", "show_stack", "stream_lookahead" ] counter = 0 def __init__(self, name = None, show_stream = True, show_context = True, show_stack = True, stream_lookahead = 100): Construct.__init__(self, None) if name is None: Probe.counter += 1 name = "" % (Probe.counter,) self.printname = name self.show_stream = show_stream self.show_context = show_context self.show_stack = show_stack self.stream_lookahead = stream_lookahead def __repr__(self): return "%s(%r)" % (self.__class__.__name__, self.printname) def _parse(self, stream, context): self.printout(stream, context) def _build(self, obj, stream, context): self.printout(stream, context) def _sizeof(self, context): return 0 def printout(self, stream, context): obj = Container() if self.show_stream: obj.stream_position = stream.tell() follows = stream.read(self.stream_lookahead) if not follows: obj.following_stream_data = "EOF reached" else: stream.seek(-len(follows), 1) obj.following_stream_data = HexString(follows) print if self.show_context: obj.context = context if self.show_stack: obj.stack = ListContainer() frames = [s[0] for s in inspect.stack()][1:-1] frames.reverse() for f in frames: a = Container() a.__update__(f.f_locals) obj.stack.append(a) print("=" * 80) print("Probe", self.printname) print(obj) print("=" * 80) class Debugger(Subconstruct): """ A pdb-based debugger. When an exception occurs in the subcon, a debugger will appear and allow you to debug the error (and even fix on-the-fly). Parameters: * subcon - the subcon to debug Example: Debugger( Enum(UBInt8("foo"), a = 1, b = 2, c = 3 ) ) """ __slots__ = ["retval"] def _parse(self, stream, context): try: return self.subcon._parse(stream, context) except Exception: self.retval = NotImplemented self.handle_exc("(you can set the value of 'self.retval', " "which will be returned)") if self.retval is NotImplemented: raise else: return self.retval def _build(self, obj, stream, context): try: self.subcon._build(obj, stream, context) except Exception: self.handle_exc() def handle_exc(self, msg = None): print("=" * 80) print("Debugging exception of %s:" % (self.subcon,)) print("".join(traceback.format_exception(*sys.exc_info())[1:])) if msg: print(msg) pdb.post_mortem(sys.exc_info()[2]) print("=" * 80) pyelftools-0.26/elftools/construct/lib/000077500000000000000000000000001357220457300202725ustar00rootroot00000000000000pyelftools-0.26/elftools/construct/lib/__init__.py000066400000000000000000000004101357220457300223760ustar00rootroot00000000000000from .binary import ( int_to_bin, bin_to_int, swap_bytes, encode_bin, decode_bin) from .bitstream import BitStreamReader, BitStreamWriter from .container import (Container, FlagsContainer, ListContainer, LazyContainer) from .hex import HexString, hexdump pyelftools-0.26/elftools/construct/lib/binary.py000066400000000000000000000056171357220457300221410ustar00rootroot00000000000000from .py3compat import int2byte def int_to_bin(number, width=32): r""" Convert an integer into its binary representation in a bytes object. Width is the amount of bits to generate. If width is larger than the actual amount of bits required to represent number in binary, sign-extension is used. If it's smaller, the representation is trimmed to width bits. Each "bit" is either '\x00' or '\x01'. The MSBit is first. Examples: >>> int_to_bin(19, 5) b'\x01\x00\x00\x01\x01' >>> int_to_bin(19, 8) b'\x00\x00\x00\x01\x00\x00\x01\x01' """ if number < 0: number += 1 << width i = width - 1 bits = bytearray(width) while number and i >= 0: bits[i] = number & 1 number >>= 1 i -= 1 return bytes(bits) _bit_values = { 0: 0, 1: 1, 48: 0, # '0' 49: 1, # '1' # The following are for Python 2, in which iteration over a bytes object # yields single-character bytes and not integers. '\x00': 0, '\x01': 1, '0': 0, '1': 1, } def bin_to_int(bits, signed=False): r""" Logical opposite of int_to_bin. Both '0' and '\x00' are considered zero, and both '1' and '\x01' are considered one. Set sign to True to interpret the number as a 2-s complement signed integer. """ number = 0 bias = 0 ptr = 0 if signed and _bit_values[bits[0]] == 1: bits = bits[1:] bias = 1 << len(bits) for b in bits: number <<= 1 number |= _bit_values[b] return number - bias def swap_bytes(bits, bytesize=8): r""" Bits is a b'' object containing a binary representation. Assuming each bytesize bits constitute a bytes, perform a endianness byte swap. Example: >>> swap_bytes(b'00011011', 2) b'11100100' """ i = 0 l = len(bits) output = [b""] * ((l // bytesize) + 1) j = len(output) - 1 while i < l: output[j] = bits[i : i + bytesize] i += bytesize j -= 1 return b"".join(output) _char_to_bin = {} _bin_to_char = {} for i in range(256): ch = int2byte(i) bin = int_to_bin(i, 8) # Populate with for both keys i and ch, to support Python 2 & 3 _char_to_bin[ch] = bin _char_to_bin[i] = bin _bin_to_char[bin] = ch def encode_bin(data): """ Create a binary representation of the given b'' object. Assume 8-bit ASCII. Example: >>> encode_bin('ab') b"\x00\x01\x01\x00\x00\x00\x00\x01\x00\x01\x01\x00\x00\x00\x01\x00" """ return b"".join(_char_to_bin[ch] for ch in data) def decode_bin(data): """ Locical opposite of decode_bin. """ if len(data) & 7: raise ValueError("Data length must be a multiple of 8") i = 0 j = 0 l = len(data) // 8 chars = [b""] * l while j < l: chars[j] = _bin_to_char[data[i:i+8]] i += 8 j += 1 return b"".join(chars) pyelftools-0.26/elftools/construct/lib/bitstream.py000066400000000000000000000037471357220457300226510ustar00rootroot00000000000000from .binary import encode_bin, decode_bin class BitStreamReader(object): __slots__ = ["substream", "buffer", "total_size"] def __init__(self, substream): self.substream = substream self.total_size = 0 self.buffer = "" def close(self): if self.total_size % 8 != 0: raise ValueError("total size of read data must be a multiple of 8", self.total_size) def tell(self): return self.substream.tell() def seek(self, pos, whence = 0): self.buffer = "" self.total_size = 0 self.substream.seek(pos, whence) def read(self, count): if count < 0: raise ValueError("count cannot be negative") l = len(self.buffer) if count == 0: data = "" elif count <= l: data = self.buffer[:count] self.buffer = self.buffer[count:] else: data = self.buffer count -= l bytes = count // 8 if count & 7: bytes += 1 buf = encode_bin(self.substream.read(bytes)) data += buf[:count] self.buffer = buf[count:] self.total_size += len(data) return data class BitStreamWriter(object): __slots__ = ["substream", "buffer", "pos"] def __init__(self, substream): self.substream = substream self.buffer = [] self.pos = 0 def close(self): self.flush() def flush(self): bytes = decode_bin("".join(self.buffer)) self.substream.write(bytes) self.buffer = [] self.pos = 0 def tell(self): return self.substream.tell() + self.pos // 8 def seek(self, pos, whence = 0): self.flush() self.substream.seek(pos, whence) def write(self, data): if not data: return if type(data) is not str: raise TypeError("data must be a string, not %r" % (type(data),)) self.buffer.append(data) pyelftools-0.26/elftools/construct/lib/container.py000066400000000000000000000075541357220457300226410ustar00rootroot00000000000000""" Various containers. """ from pprint import pformat from .py3compat import MutableMapping def recursion_lock(retval, lock_name = "__recursion_lock__"): def decorator(func): def wrapper(self, *args, **kw): if getattr(self, lock_name, False): return retval setattr(self, lock_name, True) try: return func(self, *args, **kw) finally: setattr(self, lock_name, False) wrapper.__name__ = func.__name__ return wrapper return decorator class Container(MutableMapping): """ A generic container of attributes. Containers are the common way to express parsed data. """ def __init__(self, **kw): self.__dict__ = kw # The core dictionary interface. def __getitem__(self, name): return self.__dict__[name] def __delitem__(self, name): del self.__dict__[name] def __setitem__(self, name, value): self.__dict__[name] = value def keys(self): return self.__dict__.keys() def __len__(self): return len(self.__dict__.keys()) # Extended dictionary interface. def update(self, other): self.__dict__.update(other) __update__ = update def __contains__(self, value): return value in self.__dict__ # Rich comparisons. def __eq__(self, other): try: return self.__dict__ == other.__dict__ except AttributeError: return False def __ne__(self, other): return not self == other # Copy interface. def copy(self): return self.__class__(**self.__dict__) __copy__ = copy # Iterator interface. def __iter__(self): return iter(self.__dict__) def __repr__(self): return "%s(%s)" % (self.__class__.__name__, repr(self.__dict__)) def __str__(self): return "%s(%s)" % (self.__class__.__name__, str(self.__dict__)) class FlagsContainer(Container): """ A container providing pretty-printing for flags. Only set flags are displayed. """ @recursion_lock("<...>") def __str__(self): d = dict((k, self[k]) for k in self if self[k] and not k.startswith("_")) return "%s(%s)" % (self.__class__.__name__, pformat(d)) class ListContainer(list): """ A container for lists. """ __slots__ = ["__recursion_lock__"] @recursion_lock("[...]") def __str__(self): return pformat(self) class LazyContainer(object): __slots__ = ["subcon", "stream", "pos", "context", "_value"] def __init__(self, subcon, stream, pos, context): self.subcon = subcon self.stream = stream self.pos = pos self.context = context self._value = NotImplemented def __eq__(self, other): try: return self._value == other._value except AttributeError: return False def __ne__(self, other): return not (self == other) def __str__(self): return self.__pretty_str__() def __pretty_str__(self, nesting = 1, indentation = " "): if self._value is NotImplemented: text = "" elif hasattr(self._value, "__pretty_str__"): text = self._value.__pretty_str__(nesting, indentation) else: text = str(self._value) return "%s: %s" % (self.__class__.__name__, text) def read(self): self.stream.seek(self.pos) return self.subcon._parse(self.stream, self.context) def dispose(self): self.subcon = None self.stream = None self.context = None self.pos = None def _get_value(self): if self._value is NotImplemented: self._value = self.read() return self._value value = property(_get_value) has_value = property(lambda self: self._value is not NotImplemented) pyelftools-0.26/elftools/construct/lib/hex.py000066400000000000000000000024361357220457300214350ustar00rootroot00000000000000from .py3compat import byte2int, int2byte, bytes2str # Map an integer in the inclusive range 0-255 to its string byte representation _printable = dict((i, ".") for i in range(256)) _printable.update((i, bytes2str(int2byte(i))) for i in range(32, 128)) def hexdump(data, linesize): """ data is a bytes object. The returned result is a string. """ prettylines = [] if len(data) < 65536: fmt = "%%04X %%-%ds %%s" else: fmt = "%%08X %%-%ds %%s" fmt = fmt % (3 * linesize - 1,) for i in range(0, len(data), linesize): line = data[i : i + linesize] hextext = " ".join('%02x' % byte2int(b) for b in line) rawtext = "".join(_printable[byte2int(b)] for b in line) prettylines.append(fmt % (i, str(hextext), str(rawtext))) return prettylines class HexString(bytes): """ Represents bytes that will be hex-dumped to a string when its string representation is requested. """ def __init__(self, data, linesize = 16): self.linesize = linesize def __new__(cls, data, *args, **kwargs): return bytes.__new__(cls, data) def __str__(self): if not self: return "''" sep = "\n" return sep + sep.join( hexdump(self, self.linesize)) pyelftools-0.26/elftools/construct/lib/py3compat.py000066400000000000000000000030521357220457300225630ustar00rootroot00000000000000#------------------------------------------------------------------------------- # py3compat.py # # Some Python2&3 compatibility code #------------------------------------------------------------------------------- import sys PY3 = sys.version_info[0] == 3 try: from collections.abc import MutableMapping # python >= 3.3 except ImportError: from collections import MutableMapping # python < 3.3 if PY3: import io StringIO = io.StringIO BytesIO = io.BytesIO def bchr(i): """ When iterating over b'...' in Python 2 you get single b'_' chars and in Python 3 you get integers. Call bchr to always turn this to single b'_' chars. """ return bytes((i,)) def u(s): return s def int2byte(i): return bytes((i,)) def byte2int(b): return b def str2bytes(s): return s.encode("latin-1") def str2unicode(s): return s def bytes2str(b): return b.decode('latin-1') def decodebytes(b, encoding): return bytes(b, encoding) advance_iterator = next else: import cStringIO StringIO = BytesIO = cStringIO.StringIO int2byte = chr byte2int = ord bchr = lambda i: i def u(s): return unicode(s, "unicode_escape") def str2bytes(s): return s def str2unicode(s): return unicode(s, "unicode_escape") def bytes2str(b): return b def decodebytes(b, encoding): return b.decode(encoding) def advance_iterator(it): return it.next() pyelftools-0.26/elftools/construct/macros.py000066400000000000000000000516201357220457300213660ustar00rootroot00000000000000from .lib.py3compat import int2byte from .lib import (BitStreamReader, BitStreamWriter, encode_bin, decode_bin) from .core import (Struct, MetaField, StaticField, FormatField, OnDemand, Pointer, Switch, Value, RepeatUntil, MetaArray, Sequence, Range, Select, Pass, SizeofError, Buffered, Restream, Reconfig) from .adapters import (BitIntegerAdapter, PaddingAdapter, ConstAdapter, CStringAdapter, LengthValueAdapter, IndexingAdapter, PaddedStringAdapter, FlagsAdapter, StringAdapter, MappingAdapter) #=============================================================================== # fields #=============================================================================== def Field(name, length): """ A field consisting of a specified number of bytes. :param str name: the name of the field :param length: the length of the field. the length can be either an integer (StaticField), or a function that takes the context as an argument and returns the length (MetaField) """ if callable(length): return MetaField(name, length) else: return StaticField(name, length) def BitField(name, length, swapped = False, signed = False, bytesize = 8): """ BitFields, as the name suggests, are fields that operate on raw, unaligned bits, and therefore must be enclosed in a BitStruct. Using them is very similar to all normal fields: they take a name and a length (in bits). :param str name: name of the field :param int length: number of bits in the field, or a function that takes the context as its argument and returns the length :param bool swapped: whether the value is byte-swapped :param bool signed: whether the value is signed :param int bytesize: number of bits per byte, for byte-swapping >>> foo = BitStruct("foo", ... BitField("a", 3), ... Flag("b"), ... Padding(3), ... Nibble("c"), ... BitField("d", 5), ... ) >>> foo.parse("\\xe1\\x1f") Container(a = 7, b = False, c = 8, d = 31) >>> foo = BitStruct("foo", ... BitField("a", 3), ... Flag("b"), ... Padding(3), ... Nibble("c"), ... Struct("bar", ... Nibble("d"), ... Bit("e"), ... ) ... ) >>> foo.parse("\\xe1\\x1f") Container(a = 7, b = False, bar = Container(d = 15, e = 1), c = 8) """ return BitIntegerAdapter(Field(name, length), length, swapped=swapped, signed=signed, bytesize=bytesize ) def Padding(length, pattern = b"\x00", strict = False): r"""a padding field (value is discarded) * length - the length of the field. the length can be either an integer, or a function that takes the context as an argument and returns the length * pattern - the padding pattern (character/byte) to use. default is b"\x00" * strict - whether or not to raise an exception is the actual padding pattern mismatches the desired pattern. default is False. """ return PaddingAdapter(Field(None, length), pattern = pattern, strict = strict, ) def Flag(name, truth = 1, falsehood = 0, default = False): """ A flag. Flags are usually used to signify a Boolean value, and this construct maps values onto the ``bool`` type. .. note:: This construct works with both bit and byte contexts. .. warning:: Flags default to False, not True. This is different from the C and Python way of thinking about truth, and may be subject to change in the future. :param str name: field name :param int truth: value of truth (default 1) :param int falsehood: value of falsehood (default 0) :param bool default: default value (default False) """ return SymmetricMapping(Field(name, 1), {True : int2byte(truth), False : int2byte(falsehood)}, default = default, ) #=============================================================================== # field shortcuts #=============================================================================== def Bit(name): """a 1-bit BitField; must be enclosed in a BitStruct""" return BitField(name, 1) def Nibble(name): """a 4-bit BitField; must be enclosed in a BitStruct""" return BitField(name, 4) def Octet(name): """an 8-bit BitField; must be enclosed in a BitStruct""" return BitField(name, 8) def UBInt8(name): """unsigned, big endian 8-bit integer""" return FormatField(name, ">", "B") def UBInt16(name): """unsigned, big endian 16-bit integer""" return FormatField(name, ">", "H") def UBInt32(name): """unsigned, big endian 32-bit integer""" return FormatField(name, ">", "L") def UBInt64(name): """unsigned, big endian 64-bit integer""" return FormatField(name, ">", "Q") def SBInt8(name): """signed, big endian 8-bit integer""" return FormatField(name, ">", "b") def SBInt16(name): """signed, big endian 16-bit integer""" return FormatField(name, ">", "h") def SBInt32(name): """signed, big endian 32-bit integer""" return FormatField(name, ">", "l") def SBInt64(name): """signed, big endian 64-bit integer""" return FormatField(name, ">", "q") def ULInt8(name): """unsigned, little endian 8-bit integer""" return FormatField(name, "<", "B") def ULInt16(name): """unsigned, little endian 16-bit integer""" return FormatField(name, "<", "H") def ULInt32(name): """unsigned, little endian 32-bit integer""" return FormatField(name, "<", "L") def ULInt64(name): """unsigned, little endian 64-bit integer""" return FormatField(name, "<", "Q") def SLInt8(name): """signed, little endian 8-bit integer""" return FormatField(name, "<", "b") def SLInt16(name): """signed, little endian 16-bit integer""" return FormatField(name, "<", "h") def SLInt32(name): """signed, little endian 32-bit integer""" return FormatField(name, "<", "l") def SLInt64(name): """signed, little endian 64-bit integer""" return FormatField(name, "<", "q") def UNInt8(name): """unsigned, native endianity 8-bit integer""" return FormatField(name, "=", "B") def UNInt16(name): """unsigned, native endianity 16-bit integer""" return FormatField(name, "=", "H") def UNInt32(name): """unsigned, native endianity 32-bit integer""" return FormatField(name, "=", "L") def UNInt64(name): """unsigned, native endianity 64-bit integer""" return FormatField(name, "=", "Q") def SNInt8(name): """signed, native endianity 8-bit integer""" return FormatField(name, "=", "b") def SNInt16(name): """signed, native endianity 16-bit integer""" return FormatField(name, "=", "h") def SNInt32(name): """signed, native endianity 32-bit integer""" return FormatField(name, "=", "l") def SNInt64(name): """signed, native endianity 64-bit integer""" return FormatField(name, "=", "q") def BFloat32(name): """big endian, 32-bit IEEE floating point number""" return FormatField(name, ">", "f") def LFloat32(name): """little endian, 32-bit IEEE floating point number""" return FormatField(name, "<", "f") def NFloat32(name): """native endianity, 32-bit IEEE floating point number""" return FormatField(name, "=", "f") def BFloat64(name): """big endian, 64-bit IEEE floating point number""" return FormatField(name, ">", "d") def LFloat64(name): """little endian, 64-bit IEEE floating point number""" return FormatField(name, "<", "d") def NFloat64(name): """native endianity, 64-bit IEEE floating point number""" return FormatField(name, "=", "d") #=============================================================================== # arrays #=============================================================================== def Array(count, subcon): """ Repeats the given unit a fixed number of times. :param int count: number of times to repeat :param ``Construct`` subcon: construct to repeat >>> c = Array(4, UBInt8("foo")) >>> c.parse("\\x01\\x02\\x03\\x04") [1, 2, 3, 4] >>> c.parse("\\x01\\x02\\x03\\x04\\x05\\x06") [1, 2, 3, 4] >>> c.build([5,6,7,8]) '\\x05\\x06\\x07\\x08' >>> c.build([5,6,7,8,9]) Traceback (most recent call last): ... construct.core.RangeError: expected 4..4, found 5 """ if callable(count): con = MetaArray(count, subcon) else: con = MetaArray(lambda ctx: count, subcon) con._clear_flag(con.FLAG_DYNAMIC) return con def PrefixedArray(subcon, length_field = UBInt8("length")): """an array prefixed by a length field. * subcon - the subcon to be repeated * length_field - a construct returning an integer """ return LengthValueAdapter( Sequence(subcon.name, length_field, Array(lambda ctx: ctx[length_field.name], subcon), nested = False ) ) def OpenRange(mincount, subcon): from sys import maxsize return Range(mincount, maxsize, subcon) def GreedyRange(subcon): """ Repeats the given unit one or more times. :param ``Construct`` subcon: construct to repeat >>> from construct import GreedyRange, UBInt8 >>> c = GreedyRange(UBInt8("foo")) >>> c.parse("\\x01") [1] >>> c.parse("\\x01\\x02\\x03") [1, 2, 3] >>> c.parse("\\x01\\x02\\x03\\x04\\x05\\x06") [1, 2, 3, 4, 5, 6] >>> c.parse("") Traceback (most recent call last): ... construct.core.RangeError: expected 1..2147483647, found 0 >>> c.build([1,2]) '\\x01\\x02' >>> c.build([]) Traceback (most recent call last): ... construct.core.RangeError: expected 1..2147483647, found 0 """ return OpenRange(1, subcon) def OptionalGreedyRange(subcon): """ Repeats the given unit zero or more times. This repeater can't fail, as it accepts lists of any length. :param ``Construct`` subcon: construct to repeat >>> from construct import OptionalGreedyRange, UBInt8 >>> c = OptionalGreedyRange(UBInt8("foo")) >>> c.parse("") [] >>> c.parse("\\x01\\x02") [1, 2] >>> c.build([]) '' >>> c.build([1,2]) '\\x01\\x02' """ return OpenRange(0, subcon) #=============================================================================== # subconstructs #=============================================================================== def Optional(subcon): """an optional construct. if parsing fails, returns None. * subcon - the subcon to optionally parse or build """ return Select(subcon.name, subcon, Pass) def Bitwise(subcon): """converts the stream to bits, and passes the bitstream to subcon * subcon - a bitwise construct (usually BitField) """ # subcons larger than MAX_BUFFER will be wrapped by Restream instead # of Buffered. implementation details, don't stick your nose in :) MAX_BUFFER = 1024 * 8 def resizer(length): if length & 7: raise SizeofError("size must be a multiple of 8", length) return length >> 3 if not subcon._is_flag(subcon.FLAG_DYNAMIC) and subcon.sizeof() < MAX_BUFFER: con = Buffered(subcon, encoder = decode_bin, decoder = encode_bin, resizer = resizer ) else: con = Restream(subcon, stream_reader = BitStreamReader, stream_writer = BitStreamWriter, resizer = resizer) return con def Aligned(subcon, modulus = 4, pattern = b"\x00"): r"""aligns subcon to modulus boundary using padding pattern * subcon - the subcon to align * modulus - the modulus boundary (default is 4) * pattern - the padding pattern (default is \x00) """ if modulus < 2: raise ValueError("modulus must be >= 2", modulus) def padlength(ctx): return (modulus - (subcon._sizeof(ctx) % modulus)) % modulus return SeqOfOne(subcon.name, subcon, # ?????? # ?????? # ?????? # ?????? Padding(padlength, pattern = pattern), nested = False, ) def SeqOfOne(name, *args, **kw): """a sequence of one element. only the first element is meaningful, the rest are discarded * name - the name of the sequence * args - subconstructs * kw - any keyword arguments to Sequence """ return IndexingAdapter(Sequence(name, *args, **kw), index = 0) def Embedded(subcon): """embeds a struct into the enclosing struct. * subcon - the struct to embed """ return Reconfig(subcon.name, subcon, subcon.FLAG_EMBED) def Rename(newname, subcon): """renames an existing construct * newname - the new name * subcon - the subcon to rename """ return Reconfig(newname, subcon) def Alias(newname, oldname): """creates an alias for an existing element in a struct * newname - the new name * oldname - the name of an existing element """ return Value(newname, lambda ctx: ctx[oldname]) #=============================================================================== # mapping #=============================================================================== def SymmetricMapping(subcon, mapping, default = NotImplemented): """defines a symmetrical mapping: a->b, b->a. * subcon - the subcon to map * mapping - the encoding mapping (a dict); the decoding mapping is achieved by reversing this mapping * default - the default value to use when no mapping is found. if no default value is given, and exception is raised. setting to Pass would return the value "as is" (unmapped) """ reversed_mapping = dict((v, k) for k, v in mapping.items()) return MappingAdapter(subcon, encoding = mapping, decoding = reversed_mapping, encdefault = default, decdefault = default, ) def Enum(subcon, **kw): """a set of named values mapping. * subcon - the subcon to map * kw - keyword arguments which serve as the encoding mapping * _default_ - an optional, keyword-only argument that specifies the default value to use when the mapping is undefined. if not given, and exception is raised when the mapping is undefined. use `Pass` to pass the unmapped value as-is """ return SymmetricMapping(subcon, kw, kw.pop("_default_", NotImplemented)) def FlagsEnum(subcon, **kw): """a set of flag values mapping. * subcon - the subcon to map * kw - keyword arguments which serve as the encoding mapping """ return FlagsAdapter(subcon, kw) #=============================================================================== # structs #=============================================================================== def AlignedStruct(name, *subcons, **kw): """a struct of aligned fields * name - the name of the struct * subcons - the subcons that make up this structure * kw - keyword arguments to pass to Aligned: 'modulus' and 'pattern' """ return Struct(name, *(Aligned(sc, **kw) for sc in subcons)) def BitStruct(name, *subcons): """a struct of bitwise fields * name - the name of the struct * subcons - the subcons that make up this structure """ return Bitwise(Struct(name, *subcons)) def EmbeddedBitStruct(*subcons): """an embedded BitStruct. no name is necessary. * subcons - the subcons that make up this structure """ return Bitwise(Embedded(Struct(None, *subcons))) #=============================================================================== # strings #=============================================================================== def String(name, length, encoding=None, padchar=None, paddir="right", trimdir="right"): """ A configurable, fixed-length string field. The padding character must be specified for padding and trimming to work. :param str name: name :param int length: length, in bytes :param str encoding: encoding (e.g. "utf8") or None for no encoding :param str padchar: optional character to pad out strings :param str paddir: direction to pad out strings; one of "right", "left", or "both" :param str trim: direction to trim strings; one of "right", "left" >>> from construct import String >>> String("foo", 5).parse("hello") 'hello' >>> >>> String("foo", 12, encoding = "utf8").parse("hello joh\\xd4\\x83n") u'hello joh\\u0503n' >>> >>> foo = String("foo", 10, padchar = "X", paddir = "right") >>> foo.parse("helloXXXXX") 'hello' >>> foo.build("hello") 'helloXXXXX' """ con = StringAdapter(Field(name, length), encoding=encoding) if padchar is not None: con = PaddedStringAdapter(con, padchar=padchar, paddir=paddir, trimdir=trimdir) return con def PascalString(name, length_field=UBInt8("length"), encoding=None): """ A length-prefixed string. ``PascalString`` is named after the string types of Pascal, which are length-prefixed. Lisp strings also follow this convention. The length field will appear in the same ``Container`` as the ``PascalString``, with the given name. :param str name: name :param ``Construct`` length_field: a field which will store the length of the string :param str encoding: encoding (e.g. "utf8") or None for no encoding >>> foo = PascalString("foo") >>> foo.parse("\\x05hello") 'hello' >>> foo.build("hello world") '\\x0bhello world' >>> >>> foo = PascalString("foo", length_field = UBInt16("length")) >>> foo.parse("\\x00\\x05hello") 'hello' >>> foo.build("hello") '\\x00\\x05hello' """ return StringAdapter( LengthValueAdapter( Sequence(name, length_field, Field("data", lambda ctx: ctx[length_field.name]), ) ), encoding=encoding, ) def CString(name, terminators=b"\x00", encoding=None, char_field=Field(None, 1)): """ A string ending in a terminator. ``CString`` is similar to the strings of C, C++, and other related programming languages. By default, the terminator is the NULL byte (b``0x00``). :param str name: name :param iterable terminators: sequence of valid terminators, in order of preference :param str encoding: encoding (e.g. "utf8") or None for no encoding :param ``Construct`` char_field: construct representing a single character >>> foo = CString("foo") >>> foo.parse(b"hello\\x00") b'hello' >>> foo.build(b"hello") b'hello\\x00' >>> foo = CString("foo", terminators = b"XYZ") >>> foo.parse(b"helloX") b'hello' >>> foo.parse(b"helloY") b'hello' >>> foo.parse(b"helloZ") b'hello' >>> foo.build(b"hello") b'helloX' """ return Rename(name, CStringAdapter( RepeatUntil(lambda obj, ctx: obj in terminators, char_field), terminators=terminators, encoding=encoding, ) ) #=============================================================================== # conditional #=============================================================================== def IfThenElse(name, predicate, then_subcon, else_subcon): """an if-then-else conditional construct: if the predicate indicates True, `then_subcon` will be used; otherwise `else_subcon` * name - the name of the construct * predicate - a function taking the context as an argument and returning True or False * then_subcon - the subcon that will be used if the predicate returns True * else_subcon - the subcon that will be used if the predicate returns False """ return Switch(name, lambda ctx: bool(predicate(ctx)), { True : then_subcon, False : else_subcon, } ) def If(predicate, subcon, elsevalue = None): """an if-then conditional construct: if the predicate indicates True, subcon will be used; otherwise, `elsevalue` will be returned instead. * predicate - a function taking the context as an argument and returning True or False * subcon - the subcon that will be used if the predicate returns True * elsevalue - the value that will be used should the predicate return False. by default this value is None. """ return IfThenElse(subcon.name, predicate, subcon, Value("elsevalue", lambda ctx: elsevalue) ) #=============================================================================== # misc #=============================================================================== def OnDemandPointer(offsetfunc, subcon, force_build = True): """an on-demand pointer. * offsetfunc - a function taking the context as an argument and returning the absolute stream position * subcon - the subcon that will be parsed from the `offsetfunc()` stream position on demand * force_build - see OnDemand. by default True. """ return OnDemand(Pointer(offsetfunc, subcon), advance_stream = False, force_build = force_build ) def Magic(data): return ConstAdapter(Field(None, len(data)), data) pyelftools-0.26/elftools/dwarf/000077500000000000000000000000001357220457300166035ustar00rootroot00000000000000pyelftools-0.26/elftools/dwarf/__init__.py000066400000000000000000000000001357220457300207020ustar00rootroot00000000000000pyelftools-0.26/elftools/dwarf/abbrevtable.py000066400000000000000000000047621357220457300214370ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools: dwarf/abbrevtable.py # # DWARF abbreviation table # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- from ..common.utils import struct_parse, dwarf_assert class AbbrevTable(object): """ Represents a DWARF abbreviation table. """ def __init__(self, structs, stream, offset): """ Create new abbreviation table. Parses the actual table from the stream and stores it internally. structs: A DWARFStructs instance for parsing the data stream, offset: The stream and offset into the stream where this abbreviation table lives. """ self.structs = structs self.stream = stream self.offset = offset self._abbrev_map = self._parse_abbrev_table() def get_abbrev(self, code): """ Get the AbbrevDecl for a given code. Raise KeyError if no declaration for this code exists. """ return self._abbrev_map[code] def _parse_abbrev_table(self): """ Parse the abbrev table from the stream """ map = {} self.stream.seek(self.offset) while True: decl_code = struct_parse( struct=self.structs.Dwarf_uleb128(''), stream=self.stream) if decl_code == 0: break declaration = struct_parse( struct=self.structs.Dwarf_abbrev_declaration, stream=self.stream) map[decl_code] = AbbrevDecl(decl_code, declaration) return map class AbbrevDecl(object): """ Wraps a parsed abbreviation declaration, exposing its fields with dict-like access, and adding some convenience methods. The abbreviation declaration represents an "entry" that points to it. """ def __init__(self, code, decl): self.code = code self.decl = decl def has_children(self): """ Does the entry have children? """ return self['children_flag'] == 'DW_CHILDREN_yes' def iter_attr_specs(self): """ Iterate over the attribute specifications for the entry. Yield (name, form) pairs. """ for attr_spec in self['attr_spec']: yield attr_spec.name, attr_spec.form def __getitem__(self, entry): return self.decl[entry] pyelftools-0.26/elftools/dwarf/aranges.py000066400000000000000000000104451357220457300206010ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools: dwarf/aranges.py # # DWARF aranges section decoding (.debug_aranges) # # Dorothy Chen (dorothchen@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- import os from collections import namedtuple from ..common.utils import struct_parse from bisect import bisect_right import math # An entry in the aranges table; # begin_addr: The beginning address in the CU # length: The length of the address range in this entry # info_offset: The CU's offset into .debug_info # see 6.1.2 in DWARF4 docs for explanation of the remaining fields ARangeEntry = namedtuple('ARangeEntry', 'begin_addr length info_offset unit_length version address_size segment_size') class ARanges(object): """ ARanges table in DWARF stream, size: A stream holding the .debug_aranges section, and its size structs: A DWARFStructs instance for parsing the data """ def __init__(self, stream, size, structs): self.stream = stream self.size = size self.structs = structs # Get entries of aranges table in the form of ARangeEntry tuples self.entries = self._get_entries() # Sort entries by the beginning address self.entries.sort(key=lambda entry: entry.begin_addr) # Create list of keys (first addresses) for better searching self.keys = [entry.begin_addr for entry in self.entries] def cu_offset_at_addr(self, addr): """ Given an address, get the offset of the CU it belongs to, where 'offset' refers to the offset in the .debug_info section. """ tup = self.entries[bisect_right(self.keys, addr) - 1] return tup.info_offset #------ PRIVATE ------# def _get_entries(self): """ Populate self.entries with ARangeEntry tuples for each range of addresses """ self.stream.seek(0) entries = [] offset = 0 # one loop == one "set" == one CU while offset < self.size : aranges_header = struct_parse(self.structs.Dwarf_aranges_header, self.stream, offset) addr_size = self._get_addr_size_struct(aranges_header["address_size"]) # No segmentation if aranges_header["segment_size"] == 0: # pad to nearest multiple of tuple size tuple_size = aranges_header["address_size"] * 2 fp = self.stream.tell() seek_to = int(math.ceil(fp/float(tuple_size)) * tuple_size) self.stream.seek(seek_to) # entries in this set/CU addr = struct_parse(addr_size('addr'), self.stream) length = struct_parse(addr_size('length'), self.stream) while addr != 0 or length != 0: # 'begin_addr length info_offset version address_size segment_size' entries.append( ARangeEntry(begin_addr=addr, length=length, info_offset=aranges_header["debug_info_offset"], unit_length=aranges_header["unit_length"], version=aranges_header["version"], address_size=aranges_header["address_size"], segment_size=aranges_header["segment_size"])) addr = struct_parse(addr_size('addr'), self.stream) length = struct_parse(addr_size('length'), self.stream) # Segmentation exists in executable elif aranges_header["segment_size"] != 0: raise NotImplementedError("Segmentation not implemented") offset = (offset + aranges_header.unit_length + self.structs.initial_length_field_size()) return entries def _get_addr_size_struct(self, addr_header_value): """ Given this set's header value (int) for the address size, get the Construct representation of that size """ if addr_header_value == 4: return self.structs.Dwarf_uint32 else: assert addr_header_value == 8 return self.structs.Dwarf_uint64 pyelftools-0.26/elftools/dwarf/callframe.py000066400000000000000000000663471357220457300211230ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools: dwarf/callframe.py # # DWARF call frame information # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- import copy from collections import namedtuple from ..common.utils import (struct_parse, dwarf_assert, preserve_stream_pos) from ..common.py3compat import iterbytes, iterkeys from ..construct import Struct, Switch from .enums import DW_EH_encoding_flags from .structs import DWARFStructs from .constants import * class CallFrameInfo(object): """ DWARF CFI (Call Frame Info) Note that this also supports unwinding information as found in .eh_frame sections: its format differs slightly from the one in .debug_frame. See . stream, size: A stream holding the .debug_frame section, and the size of the section in it. address: Virtual address for this section. This is used to decode relative addresses. base_structs: The structs to be used as the base for parsing this section. Eventually, each entry gets its own structs based on the initial length field it starts with. The address_size, however, is taken from base_structs. This appears to be a limitation of the DWARFv3 standard, fixed in v4. A discussion I had on dwarf-discuss confirms this. So for DWARFv4 we'll take the address size from the CIE header, but for earlier versions will use the elfclass of the containing file; more sophisticated methods are used by libdwarf and others, such as guessing which CU contains which FDEs (based on their address ranges) and taking the address_size from those CUs. """ def __init__(self, stream, size, address, base_structs, for_eh_frame=False): self.stream = stream self.size = size self.address = address self.base_structs = base_structs self.entries = None # Map between an offset in the stream and the entry object found at this # offset. Useful for assigning CIE to FDEs according to the CIE_pointer # header field which contains a stream offset. self._entry_cache = {} # The .eh_frame and .debug_frame section use almost the same CFI # encoding, but there are tiny variations we need to handle during # parsing. self.for_eh_frame = for_eh_frame def get_entries(self): """ Get a list of entries that constitute this CFI. The list consists of CIE or FDE objects, in the order of their appearance in the section. """ if self.entries is None: self.entries = self._parse_entries() return self.entries #------------------------- def _parse_entries(self): entries = [] offset = 0 while offset < self.size: entries.append(self._parse_entry_at(offset)) offset = self.stream.tell() return entries def _parse_entry_at(self, offset): """ Parse an entry from self.stream starting with the given offset. Return the entry object. self.stream will point right after the entry. """ if offset in self._entry_cache: return self._entry_cache[offset] entry_length = struct_parse( self.base_structs.Dwarf_uint32(''), self.stream, offset) if self.for_eh_frame and entry_length == 0: return ZERO(offset) dwarf_format = 64 if entry_length == 0xFFFFFFFF else 32 entry_structs = DWARFStructs( little_endian=self.base_structs.little_endian, dwarf_format=dwarf_format, address_size=self.base_structs.address_size) # Read the next field to see whether this is a CIE or FDE CIE_id = struct_parse( entry_structs.Dwarf_offset(''), self.stream) if self.for_eh_frame: is_CIE = CIE_id == 0 else: is_CIE = ( (dwarf_format == 32 and CIE_id == 0xFFFFFFFF) or CIE_id == 0xFFFFFFFFFFFFFFFF) # Parse the header, which goes up to and excluding the sequence of # instructions. if is_CIE: header_struct = (entry_structs.EH_CIE_header if self.for_eh_frame else entry_structs.Dwarf_CIE_header) header = struct_parse( header_struct, self.stream, offset) else: header = self._parse_fde_header(entry_structs, offset) # If this is DWARF version 4 or later, we can have a more precise # address size, read from the CIE header. if not self.for_eh_frame and entry_structs.dwarf_version >= 4: entry_structs = DWARFStructs( little_endian=entry_structs.little_endian, dwarf_format=entry_structs.dwarf_format, address_size=header.address_size) # If the augmentation string is not empty, hope to find a length field # in order to skip the data specified augmentation. if is_CIE: aug_bytes, aug_dict = self._parse_cie_augmentation( header, entry_structs) else: cie = self._parse_cie_for_fde(offset, header, entry_structs) aug_bytes = self._read_augmentation_data(entry_structs) # For convenience, compute the end offset for this entry end_offset = ( offset + header.length + entry_structs.initial_length_field_size()) # At this point self.stream is at the start of the instruction list # for this entry instructions = self._parse_instructions( entry_structs, self.stream.tell(), end_offset) if is_CIE: self._entry_cache[offset] = CIE( header=header, instructions=instructions, offset=offset, augmentation_dict=aug_dict, augmentation_bytes=aug_bytes, structs=entry_structs) else: # FDE cie = self._parse_cie_for_fde(offset, header, entry_structs) self._entry_cache[offset] = FDE( header=header, instructions=instructions, offset=offset, augmentation_bytes=aug_bytes, structs=entry_structs, cie=cie) return self._entry_cache[offset] def _parse_instructions(self, structs, offset, end_offset): """ Parse a list of CFI instructions from self.stream, starting with the offset and until (not including) end_offset. Return a list of CallFrameInstruction objects. """ instructions = [] while offset < end_offset: opcode = struct_parse(structs.Dwarf_uint8(''), self.stream, offset) args = [] primary = opcode & _PRIMARY_MASK primary_arg = opcode & _PRIMARY_ARG_MASK if primary == DW_CFA_advance_loc: args = [primary_arg] elif primary == DW_CFA_offset: args = [ primary_arg, struct_parse(structs.Dwarf_uleb128(''), self.stream)] elif primary == DW_CFA_restore: args = [primary_arg] # primary == 0 and real opcode is extended elif opcode in (DW_CFA_nop, DW_CFA_remember_state, DW_CFA_restore_state): args = [] elif opcode == DW_CFA_set_loc: args = [ struct_parse(structs.Dwarf_target_addr(''), self.stream)] elif opcode == DW_CFA_advance_loc1: args = [struct_parse(structs.Dwarf_uint8(''), self.stream)] elif opcode == DW_CFA_advance_loc2: args = [struct_parse(structs.Dwarf_uint16(''), self.stream)] elif opcode == DW_CFA_advance_loc4: args = [struct_parse(structs.Dwarf_uint32(''), self.stream)] elif opcode in (DW_CFA_offset_extended, DW_CFA_register, DW_CFA_def_cfa, DW_CFA_val_offset): args = [ struct_parse(structs.Dwarf_uleb128(''), self.stream), struct_parse(structs.Dwarf_uleb128(''), self.stream)] elif opcode in (DW_CFA_restore_extended, DW_CFA_undefined, DW_CFA_same_value, DW_CFA_def_cfa_register, DW_CFA_def_cfa_offset): args = [struct_parse(structs.Dwarf_uleb128(''), self.stream)] elif opcode == DW_CFA_def_cfa_offset_sf: args = [struct_parse(structs.Dwarf_sleb128(''), self.stream)] elif opcode == DW_CFA_def_cfa_expression: args = [struct_parse( structs.Dwarf_dw_form['DW_FORM_block'], self.stream)] elif opcode in (DW_CFA_expression, DW_CFA_val_expression): args = [ struct_parse(structs.Dwarf_uleb128(''), self.stream), struct_parse( structs.Dwarf_dw_form['DW_FORM_block'], self.stream)] elif opcode in (DW_CFA_offset_extended_sf, DW_CFA_def_cfa_sf, DW_CFA_val_offset_sf): args = [ struct_parse(structs.Dwarf_uleb128(''), self.stream), struct_parse(structs.Dwarf_sleb128(''), self.stream)] else: dwarf_assert(False, 'Unknown CFI opcode: 0x%x' % opcode) instructions.append(CallFrameInstruction(opcode=opcode, args=args)) offset = self.stream.tell() return instructions def _parse_cie_for_fde(self, fde_offset, fde_header, entry_structs): """ Parse the CIE that corresponds to an FDE. """ # Determine the offset of the CIE that corresponds to this FDE if self.for_eh_frame: # CIE_pointer contains the offset for a reverse displacement from # the section offset of the CIE_pointer field itself (not from the # FDE header offset). cie_displacement = fde_header['CIE_pointer'] cie_offset = (fde_offset + entry_structs.dwarf_format // 8 - cie_displacement) else: cie_offset = fde_header['CIE_pointer'] # Then read it with preserve_stream_pos(self.stream): return self._parse_entry_at(cie_offset) def _parse_cie_augmentation(self, header, entry_structs): """ Parse CIE augmentation data from the annotation string in `header`. Return a tuple that contains 1) the augmentation data as a string (without the length field) and 2) the augmentation data as a dict. """ augmentation = header.get('augmentation') if not augmentation: return ('', {}) # Augmentation parsing works in minimal mode here: we need the length # field to be able to skip unhandled augmentation fields. assert augmentation.startswith(b'z'), ( 'Unhandled augmentation string: {}'.format(repr(augmentation))) available_fields = { b'z': entry_structs.Dwarf_uleb128('length'), b'L': entry_structs.Dwarf_uint8('LSDA_encoding'), b'R': entry_structs.Dwarf_uint8('FDE_encoding'), b'S': True, b'P': Struct( 'personality', entry_structs.Dwarf_uint8('encoding'), Switch('function', lambda ctx: ctx.encoding & 0x0f, { enc: fld_cons('function') for enc, fld_cons in self._eh_encoding_to_field(entry_structs).items()})), } # Build the Struct we will be using to parse the augmentation data. # Stop as soon as we are not able to match the augmentation string. fields = [] aug_dict = {} for b in iterbytes(augmentation): try: fld = available_fields[b] except KeyError: break if fld is True: aug_dict[fld] = True else: fields.append(fld) # Read the augmentation twice: once with the Struct, once for the raw # bytes. Read the raw bytes last so we are sure we leave the stream # pointing right after the augmentation: the Struct may be incomplete # (missing trailing fields) due to an unknown char: see the KeyError # above. offset = self.stream.tell() struct = Struct('Augmentation_Data', *fields) aug_dict.update(struct_parse(struct, self.stream, offset)) self.stream.seek(offset) aug_bytes = self._read_augmentation_data(entry_structs) return (aug_bytes, aug_dict) def _read_augmentation_data(self, entry_structs): """ Read augmentation data. This assumes that the augmentation string starts with 'z', i.e. that augmentation data is prefixed by a length field, which is not returned. """ if not self.for_eh_frame: return b'' augmentation_data_length = struct_parse( Struct('Dummy_Augmentation_Data', entry_structs.Dwarf_uleb128('length')), self.stream)['length'] return self.stream.read(augmentation_data_length) def _parse_fde_header(self, entry_structs, offset): """ Compute a struct to parse the header of the current FDE. """ if not self.for_eh_frame: return struct_parse(entry_structs.Dwarf_FDE_header, self.stream, offset) fields = [entry_structs.Dwarf_initial_length('length'), entry_structs.Dwarf_offset('CIE_pointer')] # Parse the couple of header fields that are always here so we can # fetch the corresponding CIE. minimal_header = struct_parse(Struct('eh_frame_minimal_header', *fields), self.stream, offset) cie = self._parse_cie_for_fde(offset, minimal_header, entry_structs) initial_location_offset = self.stream.tell() # Try to parse the initial location. We need the initial location in # order to create a meaningful FDE, so assume it's there. Omission does # not seem to happen in practice. encoding = cie.augmentation_dict['FDE_encoding'] assert encoding != DW_EH_encoding_flags['DW_EH_PE_omit'] basic_encoding = encoding & 0x0f encoding_modifier = encoding & 0xf0 # Depending on the specified encoding, complete the header Struct formats = self._eh_encoding_to_field(entry_structs) fields.append(formats[basic_encoding]('initial_location')) fields.append(formats[basic_encoding]('address_range')) result = struct_parse(Struct('Dwarf_FDE_header', *fields), self.stream, offset) if encoding_modifier == 0: pass elif encoding_modifier == DW_EH_encoding_flags['DW_EH_PE_pcrel']: # Start address is relative to the address of the # "initial_location" field. result['initial_location'] += ( self.address + initial_location_offset) else: assert False, 'Unsupported encoding: {:#x}'.format(encoding) return result def _eh_encoding_to_field(self, entry_structs): """ Return a mapping from basic encodings (DW_EH_encoding_flags) the corresponding field constructors (for instance entry_structs.Dwarf_uint32). """ return { DW_EH_encoding_flags['DW_EH_PE_absptr']: entry_structs.Dwarf_uint32 if entry_structs.dwarf_format == 32 else entry_structs.Dwarf_uint64, DW_EH_encoding_flags['DW_EH_PE_uleb128']: entry_structs.Dwarf_uleb128, DW_EH_encoding_flags['DW_EH_PE_udata2']: entry_structs.Dwarf_uint16, DW_EH_encoding_flags['DW_EH_PE_udata4']: entry_structs.Dwarf_uint32, DW_EH_encoding_flags['DW_EH_PE_udata8']: entry_structs.Dwarf_uint64, DW_EH_encoding_flags['DW_EH_PE_sleb128']: entry_structs.Dwarf_sleb128, DW_EH_encoding_flags['DW_EH_PE_sdata2']: entry_structs.Dwarf_int16, DW_EH_encoding_flags['DW_EH_PE_sdata4']: entry_structs.Dwarf_int32, DW_EH_encoding_flags['DW_EH_PE_sdata8']: entry_structs.Dwarf_int64, } def instruction_name(opcode): """ Given an opcode, return the instruction name. """ primary = opcode & _PRIMARY_MASK if primary == 0: return _OPCODE_NAME_MAP[opcode] else: return _OPCODE_NAME_MAP[primary] class CallFrameInstruction(object): """ An instruction in the CFI section. opcode is the instruction opcode, numeric - as it appears in the section. args is a list of arguments (including arguments embedded in the low bits of some instructions, when applicable), decoded from the stream. """ def __init__(self, opcode, args): self.opcode = opcode self.args = args def __repr__(self): return '%s (0x%x): %s' % ( instruction_name(self.opcode), self.opcode, self.args) class CFIEntry(object): """ A common base class for CFI entries. Contains a header and a list of instructions (CallFrameInstruction). offset: the offset of this entry from the beginning of the section cie: for FDEs, a CIE pointer is required augmentation_dict: Augmentation data as a parsed struct (dict): see CallFrameInfo._parse_cie_augmentation and http://www.airs.com/blog/archives/460. augmentation_bytes: Augmentation data as a chain of bytes: see CallFrameInfo._parse_cie_augmentation and http://www.airs.com/blog/archives/460. """ def __init__(self, header, structs, instructions, offset, augmentation_dict={}, augmentation_bytes=b'', cie=None): self.header = header self.structs = structs self.instructions = instructions self.offset = offset self.cie = cie self._decoded_table = None self.augmentation_dict = augmentation_dict self.augmentation_bytes = augmentation_bytes def get_decoded(self): """ Decode the CFI contained in this entry and return a DecodedCallFrameTable object representing it. See the documentation of that class to understand how to interpret the decoded table. """ if self._decoded_table is None: self._decoded_table = self._decode_CFI_table() return self._decoded_table def __getitem__(self, name): """ Implement dict-like access to header entries """ return self.header[name] def _decode_CFI_table(self): """ Decode the instructions contained in the given CFI entry and return a DecodedCallFrameTable. """ if isinstance(self, CIE): # For a CIE, initialize cur_line to an "empty" line cie = self cur_line = dict(pc=0, cfa=CFARule(reg=None, offset=0)) reg_order = [] else: # FDE # For a FDE, we need to decode the attached CIE first, because its # decoded table is needed. Its "initial instructions" describe a # line that serves as the base (first) line in the FDE's table. cie = self.cie cie_decoded_table = cie.get_decoded() if len(cie_decoded_table.table) > 0: last_line_in_CIE = copy.copy(cie_decoded_table.table[-1]) cur_line = copy.copy(last_line_in_CIE) else: cur_line = dict(cfa=CFARule(reg=None, offset=0)) cur_line['pc'] = self['initial_location'] reg_order = copy.copy(cie_decoded_table.reg_order) table = [] # Keeps a stack for the use of DW_CFA_{remember|restore}_state # instructions. line_stack = [] def _add_to_order(regnum): if regnum not in cur_line: reg_order.append(regnum) for instr in self.instructions: # Throughout this loop, cur_line is the current line. Some # instructions add it to the table, but most instructions just # update it without adding it to the table. name = instruction_name(instr.opcode) if name == 'DW_CFA_set_loc': table.append(copy.copy(cur_line)) cur_line['pc'] = instr.args[0] elif name in ( 'DW_CFA_advance_loc1', 'DW_CFA_advance_loc2', 'DW_CFA_advance_loc4', 'DW_CFA_advance_loc'): table.append(copy.copy(cur_line)) cur_line['pc'] += instr.args[0] * cie['code_alignment_factor'] elif name == 'DW_CFA_def_cfa': cur_line['cfa'] = CFARule( reg=instr.args[0], offset=instr.args[1]) elif name == 'DW_CFA_def_cfa_sf': cur_line['cfa'] = CFARule( reg=instr.args[0], offset=instr.args[1] * cie['code_alignment_factor']) elif name == 'DW_CFA_def_cfa_register': cur_line['cfa'] = CFARule( reg=instr.args[0], offset=cur_line['cfa'].offset) elif name == 'DW_CFA_def_cfa_offset': cur_line['cfa'] = CFARule( reg=cur_line['cfa'].reg, offset=instr.args[0]) elif name == 'DW_CFA_def_cfa_expression': cur_line['cfa'] = CFARule(expr=instr.args[0]) elif name == 'DW_CFA_undefined': _add_to_order(instr.args[0]) cur_line[instr.args[0]] = RegisterRule(RegisterRule.UNDEFINED) elif name == 'DW_CFA_same_value': _add_to_order(instr.args[0]) cur_line[instr.args[0]] = RegisterRule(RegisterRule.SAME_VALUE) elif name in ( 'DW_CFA_offset', 'DW_CFA_offset_extended', 'DW_CFA_offset_extended_sf'): _add_to_order(instr.args[0]) cur_line[instr.args[0]] = RegisterRule( RegisterRule.OFFSET, instr.args[1] * cie['data_alignment_factor']) elif name in ('DW_CFA_val_offset', 'DW_CFA_val_offset_sf'): _add_to_order(instr.args[0]) cur_line[instr.args[0]] = RegisterRule( RegisterRule.VAL_OFFSET, instr.args[1] * cie['data_alignment_factor']) elif name == 'DW_CFA_register': _add_to_order(instr.args[0]) cur_line[instr.args[0]] = RegisterRule( RegisterRule.REGISTER, instr.args[1]) elif name == 'DW_CFA_expression': _add_to_order(instr.args[0]) cur_line[instr.args[0]] = RegisterRule( RegisterRule.EXPRESSION, instr.args[1]) elif name == 'DW_CFA_val_expression': _add_to_order(instr.args[0]) cur_line[instr.args[0]] = RegisterRule( RegisterRule.VAL_EXPRESSION, instr.args[1]) elif name in ('DW_CFA_restore', 'DW_CFA_restore_extended'): _add_to_order(instr.args[0]) dwarf_assert( isinstance(self, FDE), '%s instruction must be in a FDE' % name) if instr.args[0] in last_line_in_CIE: cur_line[instr.args[0]] = last_line_in_CIE[instr.args[0]] else: cur_line.pop(instr.args[0], None) elif name == 'DW_CFA_remember_state': line_stack.append(copy.deepcopy(cur_line)) elif name == 'DW_CFA_restore_state': pc = cur_line['pc'] cur_line = line_stack.pop() cur_line['pc'] = pc # The current line is appended to the table after all instructions # have ended, if there were instructions. if cur_line['cfa'].reg is not None or len(cur_line) > 2: table.append(cur_line) return DecodedCallFrameTable(table=table, reg_order=reg_order) # A CIE and FDE have exactly the same functionality, except that a FDE has # a pointer to its CIE. The functionality was wholly encapsulated in CFIEntry, # so the CIE and FDE classes exists separately for identification (instead # of having an explicit "entry_type" field in CFIEntry). # class CIE(CFIEntry): pass class FDE(CFIEntry): pass class ZERO(object): """ End marker for the sequence of CIE/FDE. This is specific to `.eh_frame` sections: this kind of entry does not exist in pure DWARF. `readelf` displays these as "ZERO terminator", hence the class name. """ def __init__(self, offset): self.offset = offset class RegisterRule(object): """ Register rules are used to find registers in call frames. Each rule consists of a type (enumeration following DWARFv3 section 6.4.1) and an optional argument to augment the type. """ UNDEFINED = 'UNDEFINED' SAME_VALUE = 'SAME_VALUE' OFFSET = 'OFFSET' VAL_OFFSET = 'VAL_OFFSET' REGISTER = 'REGISTER' EXPRESSION = 'EXPRESSION' VAL_EXPRESSION = 'VAL_EXPRESSION' ARCHITECTURAL = 'ARCHITECTURAL' def __init__(self, type, arg=None): self.type = type self.arg = arg def __repr__(self): return 'RegisterRule(%s, %s)' % (self.type, self.arg) class CFARule(object): """ A CFA rule is used to compute the CFA for each location. It either consists of a register+offset, or a DWARF expression. """ def __init__(self, reg=None, offset=None, expr=None): self.reg = reg self.offset = offset self.expr = expr def __repr__(self): return 'CFARule(reg=%s, offset=%s, expr=%s)' % ( self.reg, self.offset, self.expr) # Represents the decoded CFI for an entry, which is just a large table, # according to DWARFv3 section 6.4.1 # # DecodedCallFrameTable is a simple named tuple to group together the table # and the register appearance order. # # table: # # A list of dicts that represent "lines" in the decoded table. Each line has # some special dict entries: 'pc' for the location/program counter (LOC), # and 'cfa' for the CFARule to locate the CFA on that line. # The other entries are keyed by register numbers with RegisterRule values, # and describe the rules for these registers. # # reg_order: # # A list of register numbers that are described in the table by the order of # their appearance. # DecodedCallFrameTable = namedtuple( 'DecodedCallFrameTable', 'table reg_order') #---------------- PRIVATE ----------------# _PRIMARY_MASK = 0b11000000 _PRIMARY_ARG_MASK = 0b00111111 # This dictionary is filled by automatically scanning the constants module # for DW_CFA_* instructions, and mapping their values to names. Since all # names were imported from constants with `import *`, we look in globals() _OPCODE_NAME_MAP = {} for name in list(iterkeys(globals())): if name.startswith('DW_CFA'): _OPCODE_NAME_MAP[globals()[name]] = name pyelftools-0.26/elftools/dwarf/compileunit.py000066400000000000000000000151011357220457300215030ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools: dwarf/compileunit.py # # DWARF compile unit # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- from bisect import bisect_left from .die import DIE class CompileUnit(object): """ A DWARF compilation unit (CU). A normal compilation unit typically represents the text and data contributed to an executable by a single relocatable object file. It may be derived from several source files, including pre-processed "include files" Serves as a container and context to DIEs that describe objects and code belonging to a compilation unit. CU header entries can be accessed as dict keys from this object, i.e. cu = CompileUnit(...) cu['version'] # version field of the CU header To get the top-level DIE describing the compilation unit, call the get_top_DIE method. """ def __init__(self, header, dwarfinfo, structs, cu_offset, cu_die_offset): """ header: CU header for this compile unit dwarfinfo: The DWARFInfo context object which created this one structs: A DWARFStructs instance suitable for this compile unit cu_offset: Offset in the stream to the beginning of this CU (its header) cu_die_offset: Offset in the stream of the top DIE of this CU """ self.dwarfinfo = dwarfinfo self.header = header self.structs = structs self.cu_offset = cu_offset self.cu_die_offset = cu_die_offset # The abbreviation table for this CU. Filled lazily when DIEs are # requested. self._abbrev_table = None # A list of DIEs belonging to this CU. # This list is lazily constructed as DIEs are iterated over. self._dielist = [] # A list of file offsets, corresponding (by index) to the DIEs # in `self._dielist`. This list exists separately from # `self._dielist` to make it binary searchable, enabling the # DIE population strategy used in `iter_DIE_children`. # Like `self._dielist`, this list is lazily constructed # as DIEs are iterated over. self._diemap = [] def dwarf_format(self): """ Get the DWARF format (32 or 64) for this CU """ return self.structs.dwarf_format def get_abbrev_table(self): """ Get the abbreviation table (AbbrevTable object) for this CU """ if self._abbrev_table is None: self._abbrev_table = self.dwarfinfo.get_abbrev_table( self['debug_abbrev_offset']) return self._abbrev_table def get_top_DIE(self): """ Get the top DIE (which is either a DW_TAG_compile_unit or DW_TAG_partial_unit) of this CU """ # Note that a top DIE always has minimal offset and is therefore # at the beginning of our lists, so no bisect is required. if len(self._diemap) > 0: return self._dielist[0] top = DIE( cu=self, stream=self.dwarfinfo.debug_info_sec.stream, offset=self.cu_die_offset) self._dielist.insert(0, top) self._diemap.insert(0, self.cu_die_offset) return top def iter_DIEs(self): """ Iterate over all the DIEs in the CU, in order of their appearance. Note that null DIEs will also be returned. """ return self._iter_DIE_subtree(self.get_top_DIE()) def iter_DIE_children(self, die): """ Given a DIE, yields either its children, without null DIE list terminator, or nothing, if that DIE has no children. The null DIE terminator is saved in that DIE when iteration ended. """ if not die.has_children: return # `cur_offset` tracks the offset past our current DIE as we iterate # over children, providing the pivot as we bisect `self._diemap` # and ensuring that we insert our children (and child offsets) # in the correct order within both `self._dielist` and `self._diemap`. cur_offset = die.offset + die.size while True: i = bisect_left(self._diemap, cur_offset) # Note that `self._diemap` cannot be empty because a `die`, the argument, # is already parsed. if i < len(self._diemap) and cur_offset == self._diemap[i]: child = self._dielist[i] else: child = DIE( cu=self, stream=die.stream, offset=cur_offset) self._dielist.insert(i, child) self._diemap.insert(i, cur_offset) child.set_parent(die) if child.is_null(): die._terminator = child return yield child if not child.has_children: cur_offset += child.size elif "DW_AT_sibling" in child.attributes: sibling = child.attributes["DW_AT_sibling"] cur_offset = sibling.value + self.cu_offset else: # If no DW_AT_sibling attribute is provided by the producer # then the whole child subtree must be parsed to find its next # sibling. There is one zero byte representing null DIE # terminating children list. It is used to locate child subtree # bounds. # If children are not parsed yet, this instruction will manage # to recursive call of this function which will result in # setting of `_terminator` attribute of the `child`. if child._terminator is None: for _ in self.iter_DIE_children(child): pass cur_offset = child._terminator.offset + child._terminator.size #------ PRIVATE ------# def __getitem__(self, name): """ Implement dict-like access to header entries """ return self.header[name] def _iter_DIE_subtree(self, die): """ Given a DIE, this yields it with its subtree including null DIEs (child list terminators). """ yield die if die.has_children: for c in die.iter_children(): for d in self._iter_DIE_subtree(c): yield d yield die._terminator pyelftools-0.26/elftools/dwarf/constants.py000066400000000000000000000105421357220457300211730ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools: dwarf/constants.py # # Constants and flags # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- # Inline codes # DW_INL_not_inlined = 0 DW_INL_inlined = 1 DW_INL_declared_not_inlined = 2 DW_INL_declared_inlined = 3 # Source languages # DW_LANG_C89 = 0x0001 DW_LANG_C = 0x0002 DW_LANG_Ada83 = 0x0003 DW_LANG_C_plus_plus = 0x0004 DW_LANG_Cobol74 = 0x0005 DW_LANG_Cobol85 = 0x0006 DW_LANG_Fortran77 = 0x0007 DW_LANG_Fortran90 = 0x0008 DW_LANG_Pascal83 = 0x0009 DW_LANG_Modula2 = 0x000a DW_LANG_Java = 0x000b DW_LANG_C99 = 0x000c DW_LANG_Ada95 = 0x000d DW_LANG_Fortran95 = 0x000e DW_LANG_PLI = 0x000f DW_LANG_ObjC = 0x0010 DW_LANG_ObjC_plus_plus = 0x0011 DW_LANG_UPC = 0x0012 DW_LANG_D = 0x0013 DW_LANG_Python = 0x0014 DW_LANG_OpenCL = 0x0015 DW_LANG_Go = 0x0016 DW_LANG_Modula3 = 0x0017 DW_LANG_Haskell = 0x0018 DW_LANG_C_plus_plus_03 = 0x0019 DW_LANG_C_plus_plus_11 = 0x001a DW_LANG_OCaml = 0x001b DW_LANG_Rust = 0x001c DW_LANG_C11 = 0x001d DW_LANG_Swift = 0x001e DW_LANG_Julia = 0x001f DW_LANG_Dylan = 0x0020 DW_LANG_C_plus_plus_14 = 0x0021 DW_LANG_Fortran03 = 0x0022 DW_LANG_Fortran08 = 0x0023 DW_LANG_RenderScript = 0x0024 DW_LANG_BLISS = 0x0025 DW_LANG_Mips_Assembler = 0x8001 DW_LANG_Upc = 0x8765 DW_LANG_HP_Bliss = 0x8003 DW_LANG_HP_Basic91 = 0x8004 DW_LANG_HP_Pascal91 = 0x8005 DW_LANG_HP_IMacro = 0x8006 DW_LANG_HP_Assembler = 0x8007 DW_LANG_GOOGLE_RenderScript = 0x8e57 DW_LANG_BORLAND_Delphi = 0xb000 # Encoding # DW_ATE_void = 0x0 DW_ATE_address = 0x1 DW_ATE_boolean = 0x2 DW_ATE_complex_float = 0x3 DW_ATE_float = 0x4 DW_ATE_signed = 0x5 DW_ATE_signed_char = 0x6 DW_ATE_unsigned = 0x7 DW_ATE_unsigned_char = 0x8 DW_ATE_imaginary_float = 0x9 DW_ATE_packed_decimal = 0xa DW_ATE_numeric_string = 0xb DW_ATE_edited = 0xc DW_ATE_signed_fixed = 0xd DW_ATE_unsigned_fixed = 0xe DW_ATE_decimal_float = 0xf DW_ATE_UTF = 0x10 DW_ATE_UCS = 0x11 DW_ATE_ASCII = 0x12 DW_ATE_lo_user = 0x80 DW_ATE_hi_user = 0xff DW_ATE_HP_float80 = 0x80 DW_ATE_HP_complex_float80 = 0x81 DW_ATE_HP_float128 = 0x82 DW_ATE_HP_complex_float128 = 0x83 DW_ATE_HP_floathpintel = 0x84 DW_ATE_HP_imaginary_float80 = 0x85 DW_ATE_HP_imaginary_float128 = 0x86 # Access # DW_ACCESS_public = 1 DW_ACCESS_protected = 2 DW_ACCESS_private = 3 # Visibility # DW_VIS_local = 1 DW_VIS_exported = 2 DW_VIS_qualified = 3 # Virtuality # DW_VIRTUALITY_none = 0 DW_VIRTUALITY_virtual = 1 DW_VIRTUALITY_pure_virtual = 2 # ID case # DW_ID_case_sensitive = 0 DW_ID_up_case = 1 DW_ID_down_case = 2 DW_ID_case_insensitive = 3 # Calling convention # DW_CC_normal = 0x1 DW_CC_program = 0x2 DW_CC_nocall = 0x3 # Ordering # DW_ORD_row_major = 0 DW_ORD_col_major = 1 # Line program opcodes # DW_LNS_copy = 0x01 DW_LNS_advance_pc = 0x02 DW_LNS_advance_line = 0x03 DW_LNS_set_file = 0x04 DW_LNS_set_column = 0x05 DW_LNS_negate_stmt = 0x06 DW_LNS_set_basic_block = 0x07 DW_LNS_const_add_pc = 0x08 DW_LNS_fixed_advance_pc = 0x09 DW_LNS_set_prologue_end = 0x0a DW_LNS_set_epilogue_begin = 0x0b DW_LNS_set_isa = 0x0c DW_LNE_end_sequence = 0x01 DW_LNE_set_address = 0x02 DW_LNE_define_file = 0x03 # Call frame instructions # # Note that the first 3 instructions have the so-called "primary opcode" # (as described in DWARFv3 7.23), so only their highest 2 bits take part # in the opcode decoding. They are kept as constants with the low bits masked # out, and the callframe module knows how to handle this. # The other instructions use an "extended opcode" encoded just in the low 6 # bits, with the high 2 bits, so these constants are exactly as they would # appear in an actual file. # DW_CFA_advance_loc = 0b01000000 DW_CFA_offset = 0b10000000 DW_CFA_restore = 0b11000000 DW_CFA_nop = 0x00 DW_CFA_set_loc = 0x01 DW_CFA_advance_loc1 = 0x02 DW_CFA_advance_loc2 = 0x03 DW_CFA_advance_loc4 = 0x04 DW_CFA_offset_extended = 0x05 DW_CFA_restore_extended = 0x06 DW_CFA_undefined = 0x07 DW_CFA_same_value = 0x08 DW_CFA_register = 0x09 DW_CFA_remember_state = 0x0a DW_CFA_restore_state = 0x0b DW_CFA_def_cfa = 0x0c DW_CFA_def_cfa_register = 0x0d DW_CFA_def_cfa_offset = 0x0e DW_CFA_def_cfa_expression = 0x0f DW_CFA_expression = 0x10 DW_CFA_offset_extended_sf = 0x11 DW_CFA_def_cfa_sf = 0x12 DW_CFA_def_cfa_offset_sf = 0x13 DW_CFA_val_offset = 0x14 DW_CFA_val_offset_sf = 0x15 DW_CFA_val_expression = 0x16 pyelftools-0.26/elftools/dwarf/descriptions.py000066400000000000000000000525041357220457300216710ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools: dwarf/descriptions.py # # Textual descriptions of the various values and enums of DWARF # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- from collections import defaultdict from .constants import * from .dwarf_expr import GenericExprVisitor from .die import DIE from ..common.utils import preserve_stream_pos, dwarf_assert from ..common.py3compat import bytes2str from .callframe import instruction_name, CIE, FDE def set_global_machine_arch(machine_arch): global _MACHINE_ARCH _MACHINE_ARCH = machine_arch def describe_attr_value(attr, die, section_offset): """ Given an attribute attr, return the textual representation of its value, suitable for tools like readelf. To cover all cases, this function needs some extra arguments: die: the DIE this attribute was extracted from section_offset: offset in the stream of the section the DIE belongs to """ descr_func = _ATTR_DESCRIPTION_MAP[attr.form] val_description = descr_func(attr, die, section_offset) # For some attributes we can display further information extra_info_func = _EXTRA_INFO_DESCRIPTION_MAP[attr.name] extra_info = extra_info_func(attr, die, section_offset) return str(val_description) + '\t' + extra_info def describe_CFI_instructions(entry): """ Given a CFI entry (CIE or FDE), return the textual description of its instructions. """ def _assert_FDE_instruction(instr): dwarf_assert( isinstance(entry, FDE), 'Unexpected instruction "%s" for a CIE' % instr) def _full_reg_name(regnum): regname = describe_reg_name(regnum, _MACHINE_ARCH, False) if regname: return 'r%s (%s)' % (regnum, regname) else: return 'r%s' % regnum if isinstance(entry, CIE): cie = entry else: # FDE cie = entry.cie pc = entry['initial_location'] s = '' for instr in entry.instructions: name = instruction_name(instr.opcode) if name in ('DW_CFA_offset', 'DW_CFA_offset_extended', 'DW_CFA_offset_extended_sf', 'DW_CFA_val_offset', 'DW_CFA_val_offset_sf'): s += ' %s: %s at cfa%+d\n' % ( name, _full_reg_name(instr.args[0]), instr.args[1] * cie['data_alignment_factor']) elif name in ( 'DW_CFA_restore', 'DW_CFA_restore_extended', 'DW_CFA_undefined', 'DW_CFA_same_value', 'DW_CFA_def_cfa_register'): s += ' %s: %s\n' % (name, _full_reg_name(instr.args[0])) elif name == 'DW_CFA_register': s += ' %s: %s in %s' % ( name, _full_reg_name(instr.args[0]), _full_reg_name(instr.args[1])) elif name == 'DW_CFA_set_loc': pc = instr.args[0] s += ' %s: %08x\n' % (name, pc) elif name in ( 'DW_CFA_advance_loc1', 'DW_CFA_advance_loc2', 'DW_CFA_advance_loc4', 'DW_CFA_advance_loc'): _assert_FDE_instruction(instr) factored_offset = instr.args[0] * cie['code_alignment_factor'] s += ' %s: %s to %08x\n' % ( name, factored_offset, factored_offset + pc) pc += factored_offset elif name in ( 'DW_CFA_remember_state', 'DW_CFA_restore_state', 'DW_CFA_nop'): s += ' %s\n' % name elif name == 'DW_CFA_def_cfa': s += ' %s: %s ofs %s\n' % ( name, _full_reg_name(instr.args[0]), instr.args[1]) elif name == 'DW_CFA_def_cfa_sf': s += ' %s: %s ofs %s\n' % ( name, _full_reg_name(instr.args[0]), instr.args[1] * cie['data_alignment_factor']) elif name == 'DW_CFA_def_cfa_offset': s += ' %s: %s\n' % (name, instr.args[0]) elif name == 'DW_CFA_def_cfa_expression': expr_dumper = ExprDumper(entry.structs) expr_dumper.process_expr(instr.args[0]) # readelf output is missing a colon for DW_CFA_def_cfa_expression s += ' %s (%s)\n' % (name, expr_dumper.get_str()) elif name == 'DW_CFA_expression': expr_dumper = ExprDumper(entry.structs) expr_dumper.process_expr(instr.args[1]) s += ' %s: %s (%s)\n' % ( name, _full_reg_name(instr.args[0]), expr_dumper.get_str()) else: s += ' %s: \n' % name return s def describe_CFI_register_rule(rule): s = _DESCR_CFI_REGISTER_RULE_TYPE[rule.type] if rule.type in ('OFFSET', 'VAL_OFFSET'): s += '%+d' % rule.arg elif rule.type == 'REGISTER': s += describe_reg_name(rule.arg) return s def describe_CFI_CFA_rule(rule): if rule.expr: return 'exp' else: return '%s%+d' % (describe_reg_name(rule.reg), rule.offset) def describe_DWARF_expr(expr, structs): """ Textual description of a DWARF expression encoded in 'expr'. structs should come from the entity encompassing the expression - it's needed to be able to parse it correctly. """ # Since this function can be called a lot, initializing a fresh new # ExprDumper per call is expensive. So a rudimentary caching scheme is in # place to create only one such dumper per instance of structs. cache_key = id(structs) if cache_key not in _DWARF_EXPR_DUMPER_CACHE: _DWARF_EXPR_DUMPER_CACHE[cache_key] = \ ExprDumper(structs) dwarf_expr_dumper = _DWARF_EXPR_DUMPER_CACHE[cache_key] dwarf_expr_dumper.clear() dwarf_expr_dumper.process_expr(expr) return '(' + dwarf_expr_dumper.get_str() + ')' def describe_reg_name(regnum, machine_arch=None, default=True): """ Provide a textual description for a register name, given its serial number. The number is expected to be valid. """ if machine_arch is None: machine_arch = _MACHINE_ARCH if machine_arch == 'x86': return _REG_NAMES_x86[regnum] elif machine_arch == 'x64': return _REG_NAMES_x64[regnum] elif default: return 'r%s' % regnum else: return None def describe_form_class(form): """For a given form name, determine its value class. For example, given 'DW_FORM_data1' returns 'constant'. For some forms, like DW_FORM_indirect and DW_FORM_sec_offset, the class is not hard-coded and extra information is required. For these, None is returned. """ return _FORM_CLASS[form] #------------------------------------------------------------------------------- # The machine architecture. Set globally via set_global_machine_arch # _MACHINE_ARCH = None def _describe_attr_ref(attr, die, section_offset): return '<0x%x>' % (attr.value + die.cu.cu_offset) def _describe_attr_value_passthrough(attr, die, section_offset): return attr.value def _describe_attr_hex(attr, die, section_offset): return '0x%x' % (attr.value) def _describe_attr_hex_addr(attr, die, section_offset): return '<0x%x>' % (attr.value) def _describe_attr_split_64bit(attr, die, section_offset): low_word = attr.value & 0xFFFFFFFF high_word = (attr.value >> 32) & 0xFFFFFFFF return '0x%x 0x%x' % (low_word, high_word) def _describe_attr_strp(attr, die, section_offset): return '(indirect string, offset: 0x%x): %s' % ( attr.raw_value, bytes2str(attr.value)) def _describe_attr_string(attr, die, section_offset): return bytes2str(attr.value) def _describe_attr_debool(attr, die, section_offset): """ To be consistent with readelf, generate 1 for True flags, 0 for False flags. """ return '1' if attr.value else '0' def _describe_attr_present(attr, die, section_offset): """ Some forms may simply mean that an attribute is present, without providing any value. """ return '1' def _describe_attr_block(attr, die, section_offset): s = '%s byte block: ' % len(attr.value) s += ' '.join('%x' % item for item in attr.value) + ' ' return s _ATTR_DESCRIPTION_MAP = defaultdict( lambda: _describe_attr_value_passthrough, # default_factory DW_FORM_ref1=_describe_attr_ref, DW_FORM_ref2=_describe_attr_ref, DW_FORM_ref4=_describe_attr_ref, DW_FORM_ref8=_describe_attr_split_64bit, DW_FORM_ref_udata=_describe_attr_ref, DW_FORM_ref_addr=_describe_attr_hex_addr, DW_FORM_data4=_describe_attr_hex, DW_FORM_data8=_describe_attr_hex, DW_FORM_addr=_describe_attr_hex, DW_FORM_sec_offset=_describe_attr_hex, DW_FORM_flag=_describe_attr_debool, DW_FORM_data1=_describe_attr_value_passthrough, DW_FORM_data2=_describe_attr_value_passthrough, DW_FORM_sdata=_describe_attr_value_passthrough, DW_FORM_udata=_describe_attr_value_passthrough, DW_FORM_string=_describe_attr_string, DW_FORM_strp=_describe_attr_strp, DW_FORM_block1=_describe_attr_block, DW_FORM_block2=_describe_attr_block, DW_FORM_block4=_describe_attr_block, DW_FORM_block=_describe_attr_block, DW_FORM_flag_present=_describe_attr_present, DW_FORM_exprloc=_describe_attr_block, DW_FORM_ref_sig8=_describe_attr_ref, ) _FORM_CLASS = dict( DW_FORM_addr='address', DW_FORM_block2='block', DW_FORM_block4='block', DW_FORM_data2='constant', DW_FORM_data4='constant', DW_FORM_data8='constant', DW_FORM_string='string', DW_FORM_block='block', DW_FORM_block1='block', DW_FORM_data1='constant', DW_FORM_flag='flag', DW_FORM_sdata='constant', DW_FORM_strp='string', DW_FORM_udata='constant', DW_FORM_ref_addr='reference', DW_FORM_ref1='reference', DW_FORM_ref2='reference', DW_FORM_ref4='reference', DW_FORM_ref8='reference', DW_FORM_ref_udata='reference', DW_FORM_indirect=None, DW_FORM_sec_offset=None, DW_FORM_exprloc='exprloc', DW_FORM_flag_present='flag', DW_FORM_ref_sig8='reference', ) _DESCR_DW_INL = { DW_INL_not_inlined: '(not inlined)', DW_INL_inlined: '(inlined)', DW_INL_declared_not_inlined: '(declared as inline but ignored)', DW_INL_declared_inlined: '(declared as inline and inlined)', } _DESCR_DW_LANG = { DW_LANG_C89: '(ANSI C)', DW_LANG_C: '(non-ANSI C)', DW_LANG_Ada83: '(Ada)', DW_LANG_C_plus_plus: '(C++)', DW_LANG_Cobol74: '(Cobol 74)', DW_LANG_Cobol85: '(Cobol 85)', DW_LANG_Fortran77: '(FORTRAN 77)', DW_LANG_Fortran90: '(Fortran 90)', DW_LANG_Pascal83: '(ANSI Pascal)', DW_LANG_Modula2: '(Modula 2)', DW_LANG_Java: '(Java)', DW_LANG_C99: '(ANSI C99)', DW_LANG_Ada95: '(ADA 95)', DW_LANG_Fortran95: '(Fortran 95)', DW_LANG_PLI: '(PLI)', DW_LANG_ObjC: '(Objective C)', DW_LANG_ObjC_plus_plus: '(Objective C++)', DW_LANG_UPC: '(Unified Parallel C)', DW_LANG_D: '(D)', DW_LANG_Python: '(Python)', DW_LANG_Mips_Assembler: '(MIPS assembler)', DW_LANG_HP_Bliss: '(HP Bliss)', DW_LANG_HP_Basic91: '(HP Basic 91)', DW_LANG_HP_Pascal91: '(HP Pascal 91)', DW_LANG_HP_IMacro: '(HP IMacro)', DW_LANG_HP_Assembler: '(HP assembler)', } _DESCR_DW_ATE = { DW_ATE_void: '(void)', DW_ATE_address: '(machine address)', DW_ATE_boolean: '(boolean)', DW_ATE_complex_float: '(complex float)', DW_ATE_float: '(float)', DW_ATE_signed: '(signed)', DW_ATE_signed_char: '(signed char)', DW_ATE_unsigned: '(unsigned)', DW_ATE_unsigned_char: '(unsigned char)', DW_ATE_imaginary_float: '(imaginary float)', DW_ATE_decimal_float: '(decimal float)', DW_ATE_packed_decimal: '(packed_decimal)', DW_ATE_numeric_string: '(numeric_string)', DW_ATE_edited: '(edited)', DW_ATE_signed_fixed: '(signed_fixed)', DW_ATE_unsigned_fixed: '(unsigned_fixed)', DW_ATE_HP_float80: '(HP_float80)', DW_ATE_HP_complex_float80: '(HP_complex_float80)', DW_ATE_HP_float128: '(HP_float128)', DW_ATE_HP_complex_float128: '(HP_complex_float128)', DW_ATE_HP_floathpintel: '(HP_floathpintel)', DW_ATE_HP_imaginary_float80: '(HP_imaginary_float80)', DW_ATE_HP_imaginary_float128: '(HP_imaginary_float128)', } _DESCR_DW_ACCESS = { DW_ACCESS_public: '(public)', DW_ACCESS_protected: '(protected)', DW_ACCESS_private: '(private)', } _DESCR_DW_VIS = { DW_VIS_local: '(local)', DW_VIS_exported: '(exported)', DW_VIS_qualified: '(qualified)', } _DESCR_DW_VIRTUALITY = { DW_VIRTUALITY_none: '(none)', DW_VIRTUALITY_virtual: '(virtual)', DW_VIRTUALITY_pure_virtual: '(pure virtual)', } _DESCR_DW_ID_CASE = { DW_ID_case_sensitive: '(case_sensitive)', DW_ID_up_case: '(up_case)', DW_ID_down_case: '(down_case)', DW_ID_case_insensitive: '(case_insensitive)', } _DESCR_DW_CC = { DW_CC_normal: '(normal)', DW_CC_program: '(program)', DW_CC_nocall: '(nocall)', } _DESCR_DW_ORD = { DW_ORD_row_major: '(row major)', DW_ORD_col_major: '(column major)', } _DESCR_CFI_REGISTER_RULE_TYPE = dict( UNDEFINED='u', SAME_VALUE='s', OFFSET='c', VAL_OFFSET='v', REGISTER='', EXPRESSION='exp', VAL_EXPRESSION='vexp', ARCHITECTURAL='a', ) def _make_extra_mapper(mapping, default, default_interpolate_value=False): """ Create a mapping function from attribute parameters to an extra value that should be displayed. """ def mapper(attr, die, section_offset): if default_interpolate_value: d = default % attr.value else: d = default return mapping.get(attr.value, d) return mapper def _make_extra_string(s=''): """ Create an extra function that just returns a constant string. """ def extra(attr, die, section_offset): return s return extra _DWARF_EXPR_DUMPER_CACHE = {} def _location_list_extra(attr, die, section_offset): # According to section 2.6 of the DWARF spec v3, class loclistptr means # a location list, and class block means a location expression. # DW_FORM_sec_offset is new in DWARFv4 as a section offset. if attr.form in ('DW_FORM_data4', 'DW_FORM_data8', 'DW_FORM_sec_offset'): return '(location list)' else: return describe_DWARF_expr(attr.value, die.cu.structs) def _data_member_location_extra(attr, die, section_offset): # According to section 5.5.6 of the DWARF spec v4, a data member location # can be an integer offset, or a location description. # if attr.form in ('DW_FORM_data1', 'DW_FORM_data2', 'DW_FORM_data4', 'DW_FORM_data8'): return '' # No extra description needed elif attr.form == 'DW_FORM_sdata': return str(attr.value) else: return describe_DWARF_expr(attr.value, die.cu.structs) def _import_extra(attr, die, section_offset): # For DW_AT_import the value points to a DIE (that can be either in the # current DIE's CU or in another CU, depending on the FORM). The extra # information for it is the abbreviation number in this DIE and its tag. if attr.form == 'DW_FORM_ref_addr': # Absolute offset value ref_die_offset = section_offset + attr.value else: # Relative offset to the current DIE's CU ref_die_offset = attr.value + die.cu.cu_offset # Now find the CU this DIE belongs to (since we have to find its abbrev # table). This is done by linearly scanning through all CUs, looking for # one spanning an address space containing the referred DIE's offset. for cu in die.dwarfinfo.iter_CUs(): if cu['unit_length'] + cu.cu_offset > ref_die_offset >= cu.cu_offset: # Once we have the CU, we can actually parse this DIE from the # stream. with preserve_stream_pos(die.stream): ref_die = DIE(cu, die.stream, ref_die_offset) #print '&&& ref_die', ref_die return '[Abbrev Number: %s (%s)]' % ( ref_die.abbrev_code, ref_die.tag) return '[unknown]' _EXTRA_INFO_DESCRIPTION_MAP = defaultdict( lambda: _make_extra_string(''), # default_factory DW_AT_inline=_make_extra_mapper( _DESCR_DW_INL, '(Unknown inline attribute value: %x', default_interpolate_value=True), DW_AT_language=_make_extra_mapper( _DESCR_DW_LANG, '(Unknown: %x)', default_interpolate_value=True), DW_AT_encoding=_make_extra_mapper(_DESCR_DW_ATE, '(unknown type)'), DW_AT_accessibility=_make_extra_mapper( _DESCR_DW_ACCESS, '(unknown accessibility)'), DW_AT_visibility=_make_extra_mapper( _DESCR_DW_VIS, '(unknown visibility)'), DW_AT_virtuality=_make_extra_mapper( _DESCR_DW_VIRTUALITY, '(unknown virtuality)'), DW_AT_identifier_case=_make_extra_mapper( _DESCR_DW_ID_CASE, '(unknown case)'), DW_AT_calling_convention=_make_extra_mapper( _DESCR_DW_CC, '(unknown convention)'), DW_AT_ordering=_make_extra_mapper( _DESCR_DW_ORD, '(undefined)'), DW_AT_frame_base=_location_list_extra, DW_AT_location=_location_list_extra, DW_AT_string_length=_location_list_extra, DW_AT_return_addr=_location_list_extra, DW_AT_data_member_location=_data_member_location_extra, DW_AT_vtable_elem_location=_location_list_extra, DW_AT_segment=_location_list_extra, DW_AT_static_link=_location_list_extra, DW_AT_use_location=_location_list_extra, DW_AT_allocated=_location_list_extra, DW_AT_associated=_location_list_extra, DW_AT_data_location=_location_list_extra, DW_AT_stride=_location_list_extra, DW_AT_import=_import_extra, DW_AT_GNU_call_site_value=_location_list_extra, DW_AT_GNU_call_site_data_value=_location_list_extra, DW_AT_GNU_call_site_target=_location_list_extra, DW_AT_GNU_call_site_target_clobbered=_location_list_extra, ) # 8 in a line, for easier counting _REG_NAMES_x86 = [ 'eax', 'ecx', 'edx', 'ebx', 'esp', 'ebp', 'esi', 'edi', 'eip', 'eflags', '', 'st0', 'st1', 'st2', 'st3', 'st4', 'st5', 'st6', 'st7', '', '', 'xmm0', 'xmm1', 'xmm2', 'xmm3', 'xmm4', 'xmm5', 'xmm6', 'xmm7', 'mm0', 'mm1', 'mm2', 'mm3', 'mm4', 'mm5', 'mm6', 'mm7', 'fcw', 'fsw', 'mxcsr', 'es', 'cs', 'ss', 'ds', 'fs', 'gs', '', '', 'tr', 'ldtr' ] _REG_NAMES_x64 = [ 'rax', 'rdx', 'rcx', 'rbx', 'rsi', 'rdi', 'rbp', 'rsp', 'r8', 'r9', 'r10', 'r11', 'r12', 'r13', 'r14', 'r15', 'rip', 'xmm0', 'xmm1', 'xmm2', 'xmm3', 'xmm4', 'xmm5', 'xmm6', 'xmm7', 'xmm8', 'xmm9', 'xmm10', 'xmm11', 'xmm12', 'xmm13', 'xmm14', 'xmm15', 'st0', 'st1', 'st2', 'st3', 'st4', 'st5', 'st6', 'st7', 'mm0', 'mm1', 'mm2', 'mm3', 'mm4', 'mm5', 'mm6', 'mm7', 'rflags', 'es', 'cs', 'ss', 'ds', 'fs', 'gs', '', '', 'fs.base', 'gs.base', '', '', 'tr', 'ldtr', 'mxcsr', 'fcw', 'fsw' ] class ExprDumper(GenericExprVisitor): """ A concrete visitor for DWARF expressions that dumps a textual representation of the complete expression. Usage: after creation, call process_expr, and then get_str for a semicolon-delimited string representation of the decoded expression. """ def __init__(self, structs): super(ExprDumper, self).__init__(structs) self._init_lookups() self._str_parts = [] def clear(self): self._str_parts = [] def get_str(self): return '; '.join(self._str_parts) def _init_lookups(self): self._ops_with_decimal_arg = set([ 'DW_OP_const1u', 'DW_OP_const1s', 'DW_OP_const2u', 'DW_OP_const2s', 'DW_OP_const4u', 'DW_OP_const4s', 'DW_OP_constu', 'DW_OP_consts', 'DW_OP_pick', 'DW_OP_plus_uconst', 'DW_OP_bra', 'DW_OP_skip', 'DW_OP_fbreg', 'DW_OP_piece', 'DW_OP_deref_size', 'DW_OP_xderef_size', 'DW_OP_regx',]) for n in range(0, 32): self._ops_with_decimal_arg.add('DW_OP_breg%s' % n) self._ops_with_two_decimal_args = set([ 'DW_OP_const8u', 'DW_OP_const8s', 'DW_OP_bregx', 'DW_OP_bit_piece']) self._ops_with_hex_arg = set( ['DW_OP_addr', 'DW_OP_call2', 'DW_OP_call4', 'DW_OP_call_ref']) def _after_visit(self, opcode, opcode_name, args): self._str_parts.append(self._dump_to_string(opcode, opcode_name, args)) def _dump_to_string(self, opcode, opcode_name, args): if len(args) == 0: if opcode_name.startswith('DW_OP_reg'): regnum = int(opcode_name[9:]) return '%s (%s)' % ( opcode_name, describe_reg_name(regnum, _MACHINE_ARCH)) else: return opcode_name elif opcode_name in self._ops_with_decimal_arg: if opcode_name.startswith('DW_OP_breg'): regnum = int(opcode_name[10:]) return '%s (%s): %s' % ( opcode_name, describe_reg_name(regnum, _MACHINE_ARCH), args[0]) elif opcode_name.endswith('regx'): # applies to both regx and bregx return '%s: %s (%s)' % ( opcode_name, args[0], describe_reg_name(args[0], _MACHINE_ARCH)) else: return '%s: %s' % (opcode_name, args[0]) elif opcode_name in self._ops_with_hex_arg: return '%s: %x' % (opcode_name, args[0]) elif opcode_name in self._ops_with_two_decimal_args: return '%s: %s %s' % (opcode_name, args[0], args[1]) else: return '' % opcode_name pyelftools-0.26/elftools/dwarf/die.py000077500000000000000000000164511357220457300177300ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools: dwarf/die.py # # DWARF Debugging Information Entry # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- from collections import namedtuple, OrderedDict import os from ..common.exceptions import DWARFError from ..common.py3compat import bytes2str, iteritems from ..common.utils import struct_parse, preserve_stream_pos from .enums import DW_FORM_raw2name # AttributeValue - describes an attribute value in the DIE: # # name: # The name (DW_AT_*) of this attribute # # form: # The DW_FORM_* name of this attribute # # value: # The value parsed from the section and translated accordingly to the form # (e.g. for a DW_FORM_strp it's the actual string taken from the string table) # # raw_value: # Raw value as parsed from the section - used for debugging and presentation # (e.g. for a DW_FORM_strp it's the raw string offset into the table) # # offset: # Offset of this attribute's value in the stream (absolute offset, relative # the beginning of the whole stream) # AttributeValue = namedtuple( 'AttributeValue', 'name form value raw_value offset') class DIE(object): """ A DWARF debugging information entry. On creation, parses itself from the stream. Each DIE is held by a CU. Accessible attributes: tag: The DIE tag size: The size this DIE occupies in the section offset: The offset of this DIE in the stream attributes: An ordered dictionary mapping attribute names to values. It's ordered to preserve the order of attributes in the section has_children: Specifies whether this DIE has children abbrev_code: The abbreviation code pointing to an abbreviation entry (note that this is for informational pusposes only - this object interacts with its abbreviation table transparently). See also the public methods. """ def __init__(self, cu, stream, offset): """ cu: CompileUnit object this DIE belongs to. Used to obtain context information (structs, abbrev table, etc.) stream, offset: The stream and offset into it where this DIE's data is located """ self.cu = cu self.dwarfinfo = self.cu.dwarfinfo # get DWARFInfo context self.stream = stream self.offset = offset self.attributes = OrderedDict() self.tag = None self.has_children = None self.abbrev_code = None self.size = 0 # Null DIE terminator. It can be used to obtain offset range occupied # by this DIE including its whole subtree. self._terminator = None self._parent = None self._parse_DIE() def is_null(self): """ Is this a null entry? """ return self.tag is None def get_parent(self): """ The parent DIE of this DIE. None if the DIE has no parent (i.e. a top-level DIE). """ return self._parent def get_full_path(self): """ Return the full path filename for the DIE. The filename is the join of 'DW_AT_comp_dir' and 'DW_AT_name', either of which may be missing in practice. Note that its value is usually a string taken from the .debug_string section and the returned value will be a string. """ comp_dir_attr = self.attributes.get('DW_AT_comp_dir', None) comp_dir = bytes2str(comp_dir_attr.value) if comp_dir_attr else '' fname_attr = self.attributes.get('DW_AT_name', None) fname = bytes2str(fname_attr.value) if fname_attr else '' return os.path.join(comp_dir, fname) def iter_children(self): """ Iterates all children of this DIE """ return self.cu.iter_DIE_children(self) def iter_siblings(self): """ Yield all siblings of this DIE """ if self._parent: for sibling in self._parent.iter_children(): if sibling is not self: yield sibling else: raise StopIteration() # The following methods are used while creating the DIE and should not be # interesting to consumers # def set_parent(self, die): self._parent = die #------ PRIVATE ------# def __repr__(self): s = 'DIE %s, size=%s, has_children=%s\n' % ( self.tag, self.size, self.has_children) for attrname, attrval in iteritems(self.attributes): s += ' |%-18s: %s\n' % (attrname, attrval) return s def __str__(self): return self.__repr__() def _parse_DIE(self): """ Parses the DIE info from the section, based on the abbreviation table of the CU """ structs = self.cu.structs # A DIE begins with the abbreviation code. Read it and use it to # obtain the abbrev declaration for this DIE. # Note: here and elsewhere, preserve_stream_pos is used on operations # that manipulate the stream by reading data from it. self.abbrev_code = struct_parse( structs.Dwarf_uleb128(''), self.stream, self.offset) # This may be a null entry if self.abbrev_code == 0: self.size = self.stream.tell() - self.offset return abbrev_decl = self.cu.get_abbrev_table().get_abbrev(self.abbrev_code) self.tag = abbrev_decl['tag'] self.has_children = abbrev_decl.has_children() # Guided by the attributes listed in the abbreviation declaration, parse # values from the stream. for name, form in abbrev_decl.iter_attr_specs(): attr_offset = self.stream.tell() raw_value = struct_parse(structs.Dwarf_dw_form[form], self.stream) value = self._translate_attr_value(form, raw_value) self.attributes[name] = AttributeValue( name=name, form=form, value=value, raw_value=raw_value, offset=attr_offset) self.size = self.stream.tell() - self.offset def _translate_attr_value(self, form, raw_value): """ Translate a raw attr value according to the form """ value = None if form == 'DW_FORM_strp': with preserve_stream_pos(self.stream): value = self.dwarfinfo.get_string_from_table(raw_value) elif form == 'DW_FORM_flag': value = not raw_value == 0 elif form == 'DW_FORM_flag_present': value = True elif form == 'DW_FORM_indirect': try: form = DW_FORM_raw2name[raw_value] except KeyError as err: raise DWARFError( 'Found DW_FORM_indirect with unknown raw_value=' + str(raw_value)) raw_value = struct_parse( self.cu.structs.Dwarf_dw_form[form], self.stream) # Let's hope this doesn't get too deep :-) return self._translate_attr_value(form, raw_value) else: value = raw_value return value pyelftools-0.26/elftools/dwarf/dwarf_expr.py000066400000000000000000000237771357220457300213360ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools: dwarf/dwarf_expr.py # # Decoding DWARF expressions # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- from ..common.py3compat import BytesIO, iteritems from ..common.utils import struct_parse, bytelist2string # DWARF expression opcodes. name -> opcode mapping DW_OP_name2opcode = dict( DW_OP_addr=0x03, DW_OP_deref=0x06, DW_OP_const1u=0x08, DW_OP_const1s=0x09, DW_OP_const2u=0x0a, DW_OP_const2s=0x0b, DW_OP_const4u=0x0c, DW_OP_const4s=0x0d, DW_OP_const8u=0x0e, DW_OP_const8s=0x0f, DW_OP_constu=0x10, DW_OP_consts=0x11, DW_OP_dup=0x12, DW_OP_drop=0x13, DW_OP_over=0x14, DW_OP_pick=0x15, DW_OP_swap=0x16, DW_OP_rot=0x17, DW_OP_xderef=0x18, DW_OP_abs=0x19, DW_OP_and=0x1a, DW_OP_div=0x1b, DW_OP_minus=0x1c, DW_OP_mod=0x1d, DW_OP_mul=0x1e, DW_OP_neg=0x1f, DW_OP_not=0x20, DW_OP_or=0x21, DW_OP_plus=0x22, DW_OP_plus_uconst=0x23, DW_OP_shl=0x24, DW_OP_shr=0x25, DW_OP_shra=0x26, DW_OP_xor=0x27, DW_OP_bra=0x28, DW_OP_eq=0x29, DW_OP_ge=0x2a, DW_OP_gt=0x2b, DW_OP_le=0x2c, DW_OP_lt=0x2d, DW_OP_ne=0x2e, DW_OP_skip=0x2f, DW_OP_regx=0x90, DW_OP_fbreg=0x91, DW_OP_bregx=0x92, DW_OP_piece=0x93, DW_OP_deref_size=0x94, DW_OP_xderef_size=0x95, DW_OP_nop=0x96, DW_OP_push_object_address=0x97, DW_OP_call2=0x98, DW_OP_call4=0x99, DW_OP_call_ref=0x9a, DW_OP_form_tls_address=0x9b, DW_OP_call_frame_cfa=0x9c, DW_OP_bit_piece=0x9d, DW_OP_implicit_value=0x9e, DW_OP_stack_value=0x9f, DW_OP_implicit_pointer=0xa0, DW_OP_addrx=0xa1, DW_OP_constx=0xa2, DW_OP_entry_value=0xa3, DW_OP_const_type=0xa4, DW_OP_regval_type=0xa5, DW_OP_deref_type=0xa6, DW_OP_xderef_type=0xa7, DW_OP_convert=0xa8, DW_OP_reinterpret=0xa9, DW_OP_lo_user=0xe0, DW_OP_hi_user=0xff, ) def _generate_dynamic_values(map, prefix, index_start, index_end, value_start): """ Generate values in a map (dict) dynamically. Each key starts with a (string) prefix, followed by an index in the inclusive range [index_start, index_end]. The values start at value_start. """ for index in range(index_start, index_end + 1): name = '%s%s' % (prefix, index) value = value_start + index - index_start map[name] = value _generate_dynamic_values(DW_OP_name2opcode, 'DW_OP_lit', 0, 31, 0x30) _generate_dynamic_values(DW_OP_name2opcode, 'DW_OP_reg', 0, 31, 0x50) _generate_dynamic_values(DW_OP_name2opcode, 'DW_OP_breg', 0, 31, 0x70) # opcode -> name mapping DW_OP_opcode2name = dict((v, k) for k, v in iteritems(DW_OP_name2opcode)) class GenericExprVisitor(object): """ A DWARF expression is a sequence of instructions encoded in a block of bytes. This class decodes the sequence into discrete instructions with their arguments and allows generic "visiting" to process them. Usage: subclass this class, and override the needed methods. The easiest way would be to just override _after_visit, which gets passed each decoded instruction (with its arguments) in order. Clients of the visitor then just execute process_expr. The subclass can keep its own internal information updated in _after_visit and provide methods to extract it. For a good example of this usage, see the ExprDumper class in the descriptions module. A more complex usage could be to override visiting methods for specific instructions, by placing them into the dispatch table. """ def __init__(self, structs): self.structs = structs self._init_dispatch_table() self.stream = None self._cur_opcode = None self._cur_opcode_name = None self._cur_args = [] def process_expr(self, expr): """ Process (visit) a DWARF expression. expr should be a list of (integer) byte values. """ self.stream = BytesIO(bytelist2string(expr)) while True: # Get the next opcode from the stream. If nothing is left in the # stream, we're done. byte = self.stream.read(1) if len(byte) == 0: break # Decode the opcode and its name self._cur_opcode = ord(byte) self._cur_opcode_name = DW_OP_opcode2name.get( self._cur_opcode, 'OP:0x%x' % self._cur_opcode) # Will be filled in by visitors self._cur_args = [] # Dispatch to a visitor function visitor = self._dispatch_table.get( self._cur_opcode, self._default_visitor) visitor(self._cur_opcode, self._cur_opcode_name) # Finally call the post-visit function self._after_visit( self._cur_opcode, self._cur_opcode_name, self._cur_args) def _after_visit(self, opcode, opcode_name, args): pass def _default_visitor(self, opcode, opcode_name): pass def _visit_OP_with_no_args(self, opcode, opcode_name): self._cur_args = [] def _visit_OP_addr(self, opcode, opcode_name): self._cur_args = [ struct_parse(self.structs.Dwarf_target_addr(''), self.stream)] def _make_visitor_arg_struct(self, struct_arg): """ Create a visitor method for an opcode that that accepts a single argument, specified by a struct. """ def visitor(opcode, opcode_name): self._cur_args = [struct_parse(struct_arg, self.stream)] return visitor def _make_visitor_arg_struct2(self, struct_arg1, struct_arg2): """ Create a visitor method for an opcode that that accepts two arguments, specified by structs. """ def visitor(opcode, opcode_name): self._cur_args = [ struct_parse(struct_arg1, self.stream), struct_parse(struct_arg2, self.stream)] return visitor def _init_dispatch_table(self): self._dispatch_table = {} def add(opcode_name, func): self._dispatch_table[DW_OP_name2opcode[opcode_name]] = func add('DW_OP_addr', self._visit_OP_addr) add('DW_OP_const1u', self._make_visitor_arg_struct(self.structs.Dwarf_uint8(''))) add('DW_OP_const1s', self._make_visitor_arg_struct(self.structs.Dwarf_int8(''))) add('DW_OP_const2u', self._make_visitor_arg_struct(self.structs.Dwarf_uint16(''))) add('DW_OP_const2s', self._make_visitor_arg_struct(self.structs.Dwarf_int16(''))) add('DW_OP_const4u', self._make_visitor_arg_struct(self.structs.Dwarf_uint32(''))) add('DW_OP_const4s', self._make_visitor_arg_struct(self.structs.Dwarf_int32(''))) add('DW_OP_const8u', self._make_visitor_arg_struct2( self.structs.Dwarf_uint32(''), self.structs.Dwarf_uint32(''))) add('DW_OP_const8s', self._make_visitor_arg_struct2( self.structs.Dwarf_int32(''), self.structs.Dwarf_int32(''))) add('DW_OP_constu', self._make_visitor_arg_struct(self.structs.Dwarf_uleb128(''))) add('DW_OP_consts', self._make_visitor_arg_struct(self.structs.Dwarf_sleb128(''))) add('DW_OP_pick', self._make_visitor_arg_struct(self.structs.Dwarf_uint8(''))) add('DW_OP_plus_uconst', self._make_visitor_arg_struct(self.structs.Dwarf_uleb128(''))) add('DW_OP_bra', self._make_visitor_arg_struct(self.structs.Dwarf_int16(''))) add('DW_OP_skip', self._make_visitor_arg_struct(self.structs.Dwarf_int16(''))) for opname in [ 'DW_OP_deref', 'DW_OP_dup', 'DW_OP_drop', 'DW_OP_over', 'DW_OP_swap', 'DW_OP_swap', 'DW_OP_rot', 'DW_OP_xderef', 'DW_OP_abs', 'DW_OP_and', 'DW_OP_div', 'DW_OP_minus', 'DW_OP_mod', 'DW_OP_mul', 'DW_OP_neg', 'DW_OP_not', 'DW_OP_plus', 'DW_OP_shl', 'DW_OP_shr', 'DW_OP_shra', 'DW_OP_xor', 'DW_OP_eq', 'DW_OP_ge', 'DW_OP_gt', 'DW_OP_le', 'DW_OP_lt', 'DW_OP_ne', 'DW_OP_nop', 'DW_OP_push_object_address', 'DW_OP_form_tls_address', 'DW_OP_call_frame_cfa']: add(opname, self._visit_OP_with_no_args) for n in range(0, 32): add('DW_OP_lit%s' % n, self._visit_OP_with_no_args) add('DW_OP_reg%s' % n, self._visit_OP_with_no_args) add('DW_OP_breg%s' % n, self._make_visitor_arg_struct(self.structs.Dwarf_sleb128(''))) add('DW_OP_fbreg', self._make_visitor_arg_struct(self.structs.Dwarf_sleb128(''))) add('DW_OP_regx', self._make_visitor_arg_struct(self.structs.Dwarf_uleb128(''))) add('DW_OP_bregx', self._make_visitor_arg_struct2( self.structs.Dwarf_uleb128(''), self.structs.Dwarf_sleb128(''))) add('DW_OP_piece', self._make_visitor_arg_struct(self.structs.Dwarf_uleb128(''))) add('DW_OP_bit_piece', self._make_visitor_arg_struct2( self.structs.Dwarf_uleb128(''), self.structs.Dwarf_uleb128(''))) add('DW_OP_deref_size', self._make_visitor_arg_struct(self.structs.Dwarf_int8(''))) add('DW_OP_xderef_size', self._make_visitor_arg_struct(self.structs.Dwarf_int8(''))) add('DW_OP_call2', self._make_visitor_arg_struct(self.structs.Dwarf_uint16(''))) add('DW_OP_call4', self._make_visitor_arg_struct(self.structs.Dwarf_uint32(''))) add('DW_OP_call_ref', self._make_visitor_arg_struct(self.structs.Dwarf_offset(''))) pyelftools-0.26/elftools/dwarf/dwarfinfo.py000066400000000000000000000313071357220457300211400ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools: dwarf/dwarfinfo.py # # DWARFInfo - Main class for accessing DWARF debug information # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- from collections import namedtuple from ..common.exceptions import DWARFError from ..common.utils import (struct_parse, dwarf_assert, parse_cstring_from_stream) from .structs import DWARFStructs from .compileunit import CompileUnit from .abbrevtable import AbbrevTable from .lineprogram import LineProgram from .callframe import CallFrameInfo from .locationlists import LocationLists from .ranges import RangeLists from .aranges import ARanges from .namelut import NameLUT # Describes a debug section # # stream: a stream object containing the data of this section # name: section name in the container file # global_offset: the global offset of the section in its container file # size: the size of the section's data, in bytes # address: the virtual address for the section's data # # 'name' and 'global_offset' are for descriptional purposes only and # aren't strictly required for the DWARF parsing to work. 'address' is required # to properly decode the special '.eh_frame' format. # DebugSectionDescriptor = namedtuple('DebugSectionDescriptor', 'stream name global_offset size address') # Some configuration parameters for the DWARF reader. This exists to allow # DWARFInfo to be independent from any specific file format/container. # # little_endian: # boolean flag specifying whether the data in the file is little endian # # machine_arch: # Machine architecture as a string. For example 'x86' or 'x64' # # default_address_size: # The default address size for the container file (sizeof pointer, in bytes) # DwarfConfig = namedtuple('DwarfConfig', 'little_endian machine_arch default_address_size') class DWARFInfo(object): """ Acts also as a "context" to other major objects, bridging between various parts of the debug infromation. """ def __init__(self, config, debug_info_sec, debug_aranges_sec, debug_abbrev_sec, debug_frame_sec, eh_frame_sec, debug_str_sec, debug_loc_sec, debug_ranges_sec, debug_line_sec, debug_pubtypes_sec, debug_pubnames_sec): """ config: A DwarfConfig object debug_*_sec: DebugSectionDescriptor for a section. Pass None for sections that don't exist. These arguments are best given with keyword syntax. """ self.config = config self.debug_info_sec = debug_info_sec self.debug_aranges_sec = debug_aranges_sec self.debug_abbrev_sec = debug_abbrev_sec self.debug_frame_sec = debug_frame_sec self.eh_frame_sec = eh_frame_sec self.debug_str_sec = debug_str_sec self.debug_loc_sec = debug_loc_sec self.debug_ranges_sec = debug_ranges_sec self.debug_line_sec = debug_line_sec self.debug_pubtypes_sec = debug_pubtypes_sec self.debug_pubnames_sec = debug_pubnames_sec # This is the DWARFStructs the context uses, so it doesn't depend on # DWARF format and address_size (these are determined per CU) - set them # to default values. self.structs = DWARFStructs( little_endian=self.config.little_endian, dwarf_format=32, address_size=self.config.default_address_size) # Cache for abbrev tables: a dict keyed by offset self._abbrevtable_cache = {} @property def has_debug_info(self): """ Return whether this contains debug information. It can be not the case when the ELF only contains .eh_frame, which is encoded DWARF but not actually for debugging. """ return bool(self.debug_info_sec) def iter_CUs(self): """ Yield all the compile units (CompileUnit objects) in the debug info """ return self._parse_CUs_iter() def get_abbrev_table(self, offset): """ Get an AbbrevTable from the given offset in the debug_abbrev section. The only verification done on the offset is that it's within the bounds of the section (if not, an exception is raised). It is the caller's responsibility to make sure the offset actually points to a valid abbreviation table. AbbrevTable objects are cached internally (two calls for the same offset will return the same object). """ dwarf_assert( offset < self.debug_abbrev_sec.size, "Offset '0x%x' to abbrev table out of section bounds" % offset) if offset not in self._abbrevtable_cache: self._abbrevtable_cache[offset] = AbbrevTable( structs=self.structs, stream=self.debug_abbrev_sec.stream, offset=offset) return self._abbrevtable_cache[offset] def get_string_from_table(self, offset): """ Obtain a string from the string table section, given an offset relative to the section. """ return parse_cstring_from_stream(self.debug_str_sec.stream, offset) def line_program_for_CU(self, CU): """ Given a CU object, fetch the line program it points to from the .debug_line section. If the CU doesn't point to a line program, return None. """ # The line program is pointed to by the DW_AT_stmt_list attribute of # the top DIE of a CU. top_DIE = CU.get_top_DIE() if 'DW_AT_stmt_list' in top_DIE.attributes: return self._parse_line_program_at_offset( top_DIE.attributes['DW_AT_stmt_list'].value, CU.structs) else: return None def has_CFI(self): """ Does this dwarf info have a dwarf_frame CFI section? """ return self.debug_frame_sec is not None def CFI_entries(self): """ Get a list of dwarf_frame CFI entries from the .debug_frame section. """ cfi = CallFrameInfo( stream=self.debug_frame_sec.stream, size=self.debug_frame_sec.size, address=self.debug_frame_sec.address, base_structs=self.structs) return cfi.get_entries() def has_EH_CFI(self): """ Does this dwarf info have a eh_frame CFI section? """ return self.eh_frame_sec is not None def EH_CFI_entries(self): """ Get a list of eh_frame CFI entries from the .eh_frame section. """ cfi = CallFrameInfo( stream=self.eh_frame_sec.stream, size=self.eh_frame_sec.size, address=self.eh_frame_sec.address, base_structs=self.structs, for_eh_frame=True) return cfi.get_entries() def get_pubtypes(self): """ Returns a NameLUT object that contains information read from the .debug_pubtypes section in the ELF file. NameLUT is essentially a dictionary containing the CU/DIE offsets of each symbol. See the NameLUT doc string for more details. """ if self.debug_pubtypes_sec: return NameLUT(self.debug_pubtypes_sec.stream, self.debug_pubtypes_sec.size, self.structs) else: return None def get_pubnames(self): """ Returns a NameLUT object that contains information read from the .debug_pubnames section in the ELF file. NameLUT is essentially a dictionary containing the CU/DIE offsets of each symbol. See the NameLUT doc string for more details. """ if self.debug_pubnames_sec: return NameLUT(self.debug_pubnames_sec.stream, self.debug_pubnames_sec.size, self.structs) else: return None def get_aranges(self): """ Get an ARanges object representing the .debug_aranges section of the DWARF data, or None if the section doesn't exist """ if self.debug_aranges_sec: return ARanges(self.debug_aranges_sec.stream, self.debug_aranges_sec.size, self.structs) else: return None def location_lists(self): """ Get a LocationLists object representing the .debug_loc section of the DWARF data, or None if this section doesn't exist. """ if self.debug_loc_sec: return LocationLists(self.debug_loc_sec.stream, self.structs) else: return None def range_lists(self): """ Get a RangeLists object representing the .debug_ranges section of the DWARF data, or None if this section doesn't exist. """ if self.debug_ranges_sec: return RangeLists(self.debug_ranges_sec.stream, self.structs) else: return None #------ PRIVATE ------# def _parse_CUs_iter(self): """ Parse CU entries from debug_info. Yield CUs in order of appearance. """ if self.debug_info_sec is None: return offset = 0 while offset < self.debug_info_sec.size: cu = self._parse_CU_at_offset(offset) # Compute the offset of the next CU in the section. The unit_length # field of the CU header contains its size not including the length # field itself. offset = ( offset + cu['unit_length'] + cu.structs.initial_length_field_size()) yield cu def _parse_CU_at_offset(self, offset): """ Parse and return a CU at the given offset in the debug_info stream. """ # Section 7.4 (32-bit and 64-bit DWARF Formats) of the DWARF spec v3 # states that the first 32-bit word of the CU header determines # whether the CU is represented with 32-bit or 64-bit DWARF format. # # So we peek at the first word in the CU header to determine its # dwarf format. Based on it, we then create a new DWARFStructs # instance suitable for this CU and use it to parse the rest. # initial_length = struct_parse( self.structs.Dwarf_uint32(''), self.debug_info_sec.stream, offset) dwarf_format = 64 if initial_length == 0xFFFFFFFF else 32 # At this point we still haven't read the whole header, so we don't # know the address_size. Therefore, we're going to create structs # with a default address_size=4. If, after parsing the header, we # find out address_size is actually 8, we just create a new structs # object for this CU. # cu_structs = DWARFStructs( little_endian=self.config.little_endian, dwarf_format=dwarf_format, address_size=4) cu_header = struct_parse( cu_structs.Dwarf_CU_header, self.debug_info_sec.stream, offset) if cu_header['address_size'] == 8: cu_structs = DWARFStructs( little_endian=self.config.little_endian, dwarf_format=dwarf_format, address_size=8) cu_die_offset = self.debug_info_sec.stream.tell() dwarf_assert( self._is_supported_version(cu_header['version']), "Expected supported DWARF version. Got '%s'" % cu_header['version']) return CompileUnit( header=cu_header, dwarfinfo=self, structs=cu_structs, cu_offset=offset, cu_die_offset=cu_die_offset) def _is_supported_version(self, version): """ DWARF version supported by this parser """ return 2 <= version <= 4 def _parse_line_program_at_offset(self, debug_line_offset, structs): """ Given an offset to the .debug_line section, parse the line program starting at this offset in the section and return it. structs is the DWARFStructs object used to do this parsing. """ lineprog_header = struct_parse( structs.Dwarf_lineprog_header, self.debug_line_sec.stream, debug_line_offset) # Calculate the offset to the next line program (see DWARF 6.2.4) end_offset = ( debug_line_offset + lineprog_header['unit_length'] + structs.initial_length_field_size()) return LineProgram( header=lineprog_header, stream=self.debug_line_sec.stream, structs=structs, program_start_offset=self.debug_line_sec.stream.tell(), program_end_offset=end_offset) pyelftools-0.26/elftools/dwarf/enums.py000066400000000000000000000317051357220457300203120ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools: dwarf/enums.py # # Mappings of enum names to values # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- from ..construct import Pass from ..common.py3compat import iteritems ENUM_DW_TAG = dict( DW_TAG_null = 0x00, DW_TAG_array_type = 0x01, DW_TAG_class_type = 0x02, DW_TAG_entry_point = 0x03, DW_TAG_enumeration_type = 0x04, DW_TAG_formal_parameter = 0x05, DW_TAG_imported_declaration = 0x08, DW_TAG_label = 0x0a, DW_TAG_lexical_block = 0x0b, DW_TAG_member = 0x0d, DW_TAG_pointer_type = 0x0f, DW_TAG_reference_type = 0x10, DW_TAG_compile_unit = 0x11, DW_TAG_string_type = 0x12, DW_TAG_structure_type = 0x13, DW_TAG_subroutine_type = 0x15, DW_TAG_typedef = 0x16, DW_TAG_union_type = 0x17, DW_TAG_unspecified_parameters = 0x18, DW_TAG_variant = 0x19, DW_TAG_common_block = 0x1a, DW_TAG_common_inclusion = 0x1b, DW_TAG_inheritance = 0x1c, DW_TAG_inlined_subroutine = 0x1d, DW_TAG_module = 0x1e, DW_TAG_ptr_to_member_type = 0x1f, DW_TAG_set_type = 0x20, DW_TAG_subrange_type = 0x21, DW_TAG_with_stmt = 0x22, DW_TAG_access_declaration = 0x23, DW_TAG_base_type = 0x24, DW_TAG_catch_block = 0x25, DW_TAG_const_type = 0x26, DW_TAG_constant = 0x27, DW_TAG_enumerator = 0x28, DW_TAG_file_type = 0x29, DW_TAG_friend = 0x2a, DW_TAG_namelist = 0x2b, DW_TAG_namelist_item = 0x2c, DW_TAG_namelist_items = 0x2c, DW_TAG_packed_type = 0x2d, DW_TAG_subprogram = 0x2e, # The DWARF standard defines these as _parameter, not _param, but we # maintain compatibility with readelf. DW_TAG_template_type_param = 0x2f, DW_TAG_template_value_param = 0x30, DW_TAG_thrown_type = 0x31, DW_TAG_try_block = 0x32, DW_TAG_variant_part = 0x33, DW_TAG_variable = 0x34, DW_TAG_volatile_type = 0x35, DW_TAG_dwarf_procedure = 0x36, DW_TAG_restrict_type = 0x37, DW_TAG_interface_type = 0x38, DW_TAG_namespace = 0x39, DW_TAG_imported_module = 0x3a, DW_TAG_unspecified_type = 0x3b, DW_TAG_partial_unit = 0x3c, DW_TAG_imported_unit = 0x3d, DW_TAG_mutable_type = 0x3e, DW_TAG_condition = 0x3f, DW_TAG_shared_type = 0x40, DW_TAG_type_unit = 0x41, DW_TAG_rvalue_reference_type = 0x42, DW_TAG_atomic_type = 0x47, DW_TAG_lo_user = 0x4080, DW_TAG_GNU_template_template_param = 0x4106, DW_TAG_GNU_template_parameter_pack = 0x4107, DW_TAG_GNU_formal_parameter_pack = 0x4108, DW_TAG_GNU_call_site = 0x4109, DW_TAG_GNU_call_site_parameter = 0x410a, DW_TAG_hi_user = 0xffff, _default_ = Pass, ) ENUM_DW_CHILDREN = dict( DW_CHILDREN_no = 0x00, DW_CHILDREN_yes = 0x01, ) ENUM_DW_AT = dict( DW_AT_null = 0x00, DW_AT_sibling = 0x01, DW_AT_location = 0x02, DW_AT_name = 0x03, DW_AT_ordering = 0x09, DW_AT_subscr_data = 0x0a, DW_AT_byte_size = 0x0b, DW_AT_bit_offset = 0x0c, DW_AT_bit_size = 0x0d, DW_AT_element_list = 0x0f, DW_AT_stmt_list = 0x10, DW_AT_low_pc = 0x11, DW_AT_high_pc = 0x12, DW_AT_language = 0x13, DW_AT_member = 0x14, DW_AT_discr = 0x15, DW_AT_discr_value = 0x16, DW_AT_visibility = 0x17, DW_AT_import = 0x18, DW_AT_string_length = 0x19, DW_AT_common_reference = 0x1a, DW_AT_comp_dir = 0x1b, DW_AT_const_value = 0x1c, DW_AT_containing_type = 0x1d, DW_AT_default_value = 0x1e, DW_AT_inline = 0x20, DW_AT_is_optional = 0x21, DW_AT_lower_bound = 0x22, DW_AT_producer = 0x25, DW_AT_prototyped = 0x27, DW_AT_return_addr = 0x2a, DW_AT_start_scope = 0x2c, DW_AT_bit_stride = 0x2e, DW_AT_stride_size = 0x2e, DW_AT_upper_bound = 0x2f, DW_AT_abstract_origin = 0x31, DW_AT_accessibility = 0x32, DW_AT_address_class = 0x33, DW_AT_artificial = 0x34, DW_AT_base_types = 0x35, DW_AT_calling_convention = 0x36, DW_AT_count = 0x37, DW_AT_data_member_location = 0x38, DW_AT_decl_column = 0x39, DW_AT_decl_file = 0x3a, DW_AT_decl_line = 0x3b, DW_AT_declaration = 0x3c, DW_AT_discr_list = 0x3d, DW_AT_encoding = 0x3e, DW_AT_external = 0x3f, DW_AT_frame_base = 0x40, DW_AT_friend = 0x41, DW_AT_identifier_case = 0x42, DW_AT_macro_info = 0x43, DW_AT_namelist_item = 0x44, DW_AT_priority = 0x45, DW_AT_segment = 0x46, DW_AT_specification = 0x47, DW_AT_static_link = 0x48, DW_AT_type = 0x49, DW_AT_use_location = 0x4a, DW_AT_variable_parameter = 0x4b, DW_AT_virtuality = 0x4c, DW_AT_vtable_elem_location = 0x4d, DW_AT_allocated = 0x4e, DW_AT_associated = 0x4f, DW_AT_data_location = 0x50, DW_AT_byte_stride = 0x51, DW_AT_stride = 0x51, DW_AT_entry_pc = 0x52, DW_AT_use_UTF8 = 0x53, DW_AT_extension = 0x54, DW_AT_ranges = 0x55, DW_AT_trampoline = 0x56, DW_AT_call_column = 0x57, DW_AT_call_file = 0x58, DW_AT_call_line = 0x59, DW_AT_description = 0x5a, DW_AT_binary_scale = 0x5b, DW_AT_decimal_scale = 0x5c, DW_AT_small = 0x5d, DW_AT_decimal_sign = 0x5e, DW_AT_digit_count = 0x5f, DW_AT_picture_string = 0x60, DW_AT_mutable = 0x61, DW_AT_threads_scaled = 0x62, DW_AT_explicit = 0x63, DW_AT_object_pointer = 0x64, DW_AT_endianity = 0x65, DW_AT_elemental = 0x66, DW_AT_pure = 0x67, DW_AT_recursive = 0x68, DW_AT_signature = 0x69, DW_AT_main_subprogram = 0x6a, DW_AT_data_bit_offset = 0x6b, DW_AT_const_expr = 0x6c, DW_AT_enum_class = 0x6d, DW_AT_linkage_name = 0x6e, DW_AT_MIPS_fde = 0x2001, DW_AT_MIPS_loop_begin = 0x2002, DW_AT_MIPS_tail_loop_begin = 0x2003, DW_AT_MIPS_epilog_begin = 0x2004, DW_AT_MIPS_loop_unroll_factor = 0x2005, DW_AT_MIPS_software_pipeline_depth = 0x2006, DW_AT_MIPS_linkage_name = 0x2007, DW_AT_MIPS_stride = 0x2008, DW_AT_MIPS_abstract_name = 0x2009, DW_AT_MIPS_clone_origin = 0x200a, DW_AT_MIPS_has_inlines = 0x200b, DW_AT_MIPS_stride_byte = 0x200c, DW_AT_MIPS_stride_elem = 0x200d, DW_AT_MIPS_ptr_dopetype = 0x200e, DW_AT_MIPS_allocatable_dopetype = 0x200f, DW_AT_MIPS_assumed_shape_dopetype = 0x2010, DW_AT_MIPS_assumed_size = 0x2011, DW_AT_sf_names = 0x2101, DW_AT_src_info = 0x2102, DW_AT_mac_info = 0x2103, DW_AT_src_coords = 0x2104, DW_AT_body_begin = 0x2105, DW_AT_body_end = 0x2106, DW_AT_GNU_vector = 0x2107, DW_AT_GNU_template_name = 0x2110, DW_AT_GNU_odr_signature = 0x210f, DW_AT_GNU_call_site_value = 0x2111, DW_AT_GNU_call_site_data_value = 0x2112, DW_AT_GNU_call_site_target = 0x2113, DW_AT_GNU_call_site_target_clobbered = 0x2114, DW_AT_GNU_tail_call = 0x2115, DW_AT_GNU_all_tail_call_sites = 0x2116, DW_AT_GNU_all_call_sites = 0x2117, DW_AT_GNU_all_source_call_sites = 0x2118, DW_AT_GNU_macros = 0x2119, DW_AT_GNU_deleted = 0x211a, DW_AT_LLVM_include_path = 0x3e00, DW_AT_LLVM_config_macros = 0x3e01, DW_AT_LLVM_isysroot = 0x3e02, DW_AT_LLVM_tag_offset = 0x3e03, DW_AT_APPLE_optimized = 0x3fe1, DW_AT_APPLE_flags = 0x3fe2, DW_AT_APPLE_isa = 0x3fe3, DW_AT_APPLE_block = 0x3fe4, DW_AT_APPLE_major_runtime_vers = 0x3fe5, DW_AT_APPLE_runtime_class = 0x3fe6, DW_AT_APPLE_omit_frame_ptr = 0x3fe7, DW_AT_APPLE_property_name = 0x3fe8, DW_AT_APPLE_property_getter = 0x3fe9, DW_AT_APPLE_property_setter = 0x3fea, DW_AT_APPLE_property_attribute = 0x3feb, DW_AT_APPLE_objc_complete_type = 0x3fec, DW_AT_APPLE_property = 0x3fed, _default_ = Pass, ) ENUM_DW_FORM = dict( DW_FORM_null = 0x00, DW_FORM_addr = 0x01, DW_FORM_block2 = 0x03, DW_FORM_block4 = 0x04, DW_FORM_data2 = 0x05, DW_FORM_data4 = 0x06, DW_FORM_data8 = 0x07, DW_FORM_string = 0x08, DW_FORM_block = 0x09, DW_FORM_block1 = 0x0a, DW_FORM_data1 = 0x0b, DW_FORM_flag = 0x0c, DW_FORM_sdata = 0x0d, DW_FORM_strp = 0x0e, DW_FORM_udata = 0x0f, DW_FORM_ref_addr = 0x10, DW_FORM_ref1 = 0x11, DW_FORM_ref2 = 0x12, DW_FORM_ref4 = 0x13, DW_FORM_ref8 = 0x14, DW_FORM_ref_udata = 0x15, DW_FORM_indirect = 0x16, DW_FORM_sec_offset = 0x17, DW_FORM_exprloc = 0x18, DW_FORM_flag_present = 0x19, DW_FORM_strx = 0x1a, DW_FORM_addrx = 0x1b, DW_FORM_ref_sup4 = 0x1c, DW_FORM_strp_sup = 0x1d, DW_FORM_data16 = 0x1e, DW_FORM_line_strp = 0x1f, DW_FORM_ref_sig8 = 0x20, DW_FORM_implicit_const = 0x21, DW_FORM_loclistx = 0x22, DW_FORM_rnglistx = 0x23, DW_FORM_ref_sup8 = 0x24, DW_FORM_strx1 = 0x25, DW_FORM_strx2 = 0x26, DW_FORM_strx3 = 0x27, DW_FORM_strx4 = 0x28, DW_FORM_addrx1 = 0x29, DW_FORM_addrx2 = 0x2a, DW_FORM_addrx3 = 0x2b, DW_FORM_addrx4 = 0x2c, DW_FORM_GNU_addr_index = 0x1f01, DW_FORM_GNU_str_index = 0x1f02, DW_FORM_GNU_ref_alt = 0x1f20, DW_FORM_GNU_strp_alt = 0x1f21, _default_ = Pass, ) # Inverse mapping for ENUM_DW_FORM DW_FORM_raw2name = dict((v, k) for k, v in iteritems(ENUM_DW_FORM)) # See http://www.airs.com/blog/archives/460 DW_EH_encoding_flags = dict( DW_EH_PE_absptr = 0x00, DW_EH_PE_uleb128 = 0x01, DW_EH_PE_udata2 = 0x02, DW_EH_PE_udata4 = 0x03, DW_EH_PE_udata8 = 0x04, DW_EH_PE_signed = 0x08, DW_EH_PE_sleb128 = 0x09, DW_EH_PE_sdata2 = 0x0a, DW_EH_PE_sdata4 = 0x0b, DW_EH_PE_sdata8 = 0x0c, DW_EH_PE_pcrel = 0x10, DW_EH_PE_textrel = 0x20, DW_EH_PE_datarel = 0x30, DW_EH_PE_funcrel = 0x40, DW_EH_PE_aligned = 0x50, DW_EH_PE_indirect = 0x80, DW_EH_PE_omit = 0xff, ) pyelftools-0.26/elftools/dwarf/lineprogram.py000066400000000000000000000266651357220457300215130ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools: dwarf/lineprogram.py # # DWARF line number program # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- import os import copy from collections import namedtuple from ..common.utils import struct_parse from .constants import * # LineProgramEntry - an entry in the line program. # A line program is a sequence of encoded entries. Some of these entries add a # new LineState (mapping between line and address), and some don't. # # command: # The command/opcode - always numeric. For standard commands - it's the opcode # that can be matched with one of the DW_LNS_* constants. For extended commands # it's the extended opcode that can be matched with one of the DW_LNE_* # constants. For special commands, it's the opcode itself. # # args: # A list of decoded arguments of the command. # # is_extended: # Since extended commands are encoded by a zero followed by an extended # opcode, and these extended opcodes overlap with other opcodes, this # flag is needed to mark that the command has an extended opcode. # # state: # For commands that add a new state, it's the relevant LineState object. # For commands that don't add a new state, it's None. # LineProgramEntry = namedtuple( 'LineProgramEntry', 'command is_extended args state') class LineState(object): """ Represents a line program state (or a "row" in the matrix describing debug location information for addresses). The instance variables of this class are the "state machine registers" described in section 6.2.2 of DWARFv3 """ def __init__(self, default_is_stmt): self.address = 0 self.file = 1 self.line = 1 self.column = 0 self.op_index = 0 self.is_stmt = default_is_stmt self.basic_block = False self.end_sequence = False self.prologue_end = False self.epilogue_begin = False self.isa = 0 def __repr__(self): a = ['\n' class LineProgram(object): """ Builds a "line table", which is essentially the matrix described in section 6.2 of DWARFv3. It's a list of LineState objects, sorted by increasing address, so it can be used to obtain the state information for each address. """ def __init__(self, header, stream, structs, program_start_offset, program_end_offset): """ header: The header of this line program. Note: LineProgram may modify its header by appending file entries if DW_LNE_define_file instructions are encountered. stream: The stream this program can be read from. structs: A DWARFStructs instance suitable for this line program program_{start|end}_offset: Offset in the debug_line section stream where this program starts (the actual program, after the header), and where it ends. The actual range includes start but not end: [start, end - 1] """ self.stream = stream self.header = header self.structs = structs self.program_start_offset = program_start_offset self.program_end_offset = program_end_offset self._decoded_entries = None def get_entries(self): """ Get the decoded entries for this line program. Return a list of LineProgramEntry objects. Note that this contains more information than absolutely required for the line table. The line table can be easily extracted from the list of entries by looking only at entries with non-None state. The extra information is mainly for the purposes of display with readelf and debugging. """ if self._decoded_entries is None: self._decoded_entries = self._decode_line_program() return self._decoded_entries #------ PRIVATE ------# def __getitem__(self, name): """ Implement dict-like access to header entries """ return self.header[name] def _decode_line_program(self): entries = [] state = LineState(self.header['default_is_stmt']) def add_entry_new_state(cmd, args, is_extended=False): # Add an entry that sets a new state. # After adding, clear some state registers. entries.append(LineProgramEntry( cmd, is_extended, args, copy.copy(state))) state.basic_block = False state.prologue_end = False state.epilogue_begin = False def add_entry_old_state(cmd, args, is_extended=False): # Add an entry that doesn't visibly set a new state entries.append(LineProgramEntry(cmd, is_extended, args, None)) offset = self.program_start_offset while offset < self.program_end_offset: opcode = struct_parse( self.structs.Dwarf_uint8(''), self.stream, offset) # As an exercise in avoiding premature optimization, if...elif # chains are used here for standard and extended opcodes instead # of dispatch tables. This keeps the code much cleaner. Besides, # the majority of instructions in a typical program are special # opcodes anyway. if opcode >= self.header['opcode_base']: # Special opcode (follow the recipe in 6.2.5.1) maximum_operations_per_instruction = self['maximum_operations_per_instruction'] adjusted_opcode = opcode - self['opcode_base'] operation_advance = adjusted_opcode // self['line_range'] address_addend = ( self['minimum_instruction_length'] * ((state.op_index + operation_advance) // maximum_operations_per_instruction)) state.address += address_addend state.op_index = (state.op_index + operation_advance) % maximum_operations_per_instruction line_addend = self['line_base'] + (adjusted_opcode % self['line_range']) state.line += line_addend add_entry_new_state( opcode, [line_addend, address_addend, state.op_index]) elif opcode == 0: # Extended opcode: start with a zero byte, followed by # instruction size and the instruction itself. inst_len = struct_parse(self.structs.Dwarf_uleb128(''), self.stream) ex_opcode = struct_parse(self.structs.Dwarf_uint8(''), self.stream) if ex_opcode == DW_LNE_end_sequence: state.end_sequence = True add_entry_new_state(ex_opcode, [], is_extended=True) # reset state state = LineState(self.header['default_is_stmt']) elif ex_opcode == DW_LNE_set_address: operand = struct_parse(self.structs.Dwarf_target_addr(''), self.stream) state.address = operand add_entry_old_state(ex_opcode, [operand], is_extended=True) elif ex_opcode == DW_LNE_define_file: operand = struct_parse( self.structs.Dwarf_lineprog_file_entry, self.stream) self['file_entry'].append(operand) add_entry_old_state(ex_opcode, [operand], is_extended=True) else: # Unknown, but need to roll forward the stream because the # length is specified. Seek forward inst_len - 1 because # we've already read the extended opcode, which takes part # in the length. self.stream.seek(inst_len - 1, os.SEEK_CUR) else: # 0 < opcode < opcode_base # Standard opcode if opcode == DW_LNS_copy: add_entry_new_state(opcode, []) elif opcode == DW_LNS_advance_pc: operand = struct_parse(self.structs.Dwarf_uleb128(''), self.stream) address_addend = ( operand * self.header['minimum_instruction_length']) state.address += address_addend add_entry_old_state(opcode, [address_addend]) elif opcode == DW_LNS_advance_line: operand = struct_parse(self.structs.Dwarf_sleb128(''), self.stream) state.line += operand elif opcode == DW_LNS_set_file: operand = struct_parse(self.structs.Dwarf_uleb128(''), self.stream) state.file = operand add_entry_old_state(opcode, [operand]) elif opcode == DW_LNS_set_column: operand = struct_parse(self.structs.Dwarf_uleb128(''), self.stream) state.column = operand add_entry_old_state(opcode, [operand]) elif opcode == DW_LNS_negate_stmt: state.is_stmt = not state.is_stmt add_entry_old_state(opcode, []) elif opcode == DW_LNS_set_basic_block: state.basic_block = True add_entry_old_state(opcode, []) elif opcode == DW_LNS_const_add_pc: adjusted_opcode = 255 - self['opcode_base'] address_addend = ((adjusted_opcode // self['line_range']) * self['minimum_instruction_length']) state.address += address_addend add_entry_old_state(opcode, [address_addend]) elif opcode == DW_LNS_fixed_advance_pc: operand = struct_parse(self.structs.Dwarf_uint16(''), self.stream) state.address += operand add_entry_old_state(opcode, [operand]) elif opcode == DW_LNS_set_prologue_end: state.prologue_end = True add_entry_old_state(opcode, []) elif opcode == DW_LNS_set_epilogue_begin: state.epilogue_begin = True add_entry_old_state(opcode, []) elif opcode == DW_LNS_set_isa: operand = struct_parse(self.structs.Dwarf_uleb128(''), self.stream) state.isa = operand add_entry_old_state(opcode, [operand]) else: dwarf_assert(False, 'Invalid standard line program opcode: %s' % ( opcode,)) offset = self.stream.tell() return entries pyelftools-0.26/elftools/dwarf/locationlists.py000066400000000000000000000116411357220457300220470ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools: dwarf/locationlists.py # # DWARF location lists section decoding (.debug_loc) # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- import os from collections import namedtuple from ..common.utils import struct_parse LocationExpr = namedtuple('LocationExpr', 'loc_expr') LocationEntry = namedtuple('LocationEntry', 'begin_offset end_offset loc_expr') BaseAddressEntry = namedtuple('BaseAddressEntry', 'base_address') class LocationLists(object): """ A single location list is a Python list consisting of LocationEntry or BaseAddressEntry objects. """ def __init__(self, stream, structs): self.stream = stream self.structs = structs self._max_addr = 2 ** (self.structs.address_size * 8) - 1 def get_location_list_at_offset(self, offset): """ Get a location list at the given offset in the section. """ self.stream.seek(offset, os.SEEK_SET) return self._parse_location_list_from_stream() def iter_location_lists(self): """ Yield all location lists found in the section. """ # Just call _parse_location_list_from_stream until the stream ends self.stream.seek(0, os.SEEK_END) endpos = self.stream.tell() self.stream.seek(0, os.SEEK_SET) while self.stream.tell() < endpos: yield self._parse_location_list_from_stream() #------ PRIVATE ------# def _parse_location_list_from_stream(self): lst = [] while True: begin_offset = struct_parse( self.structs.Dwarf_target_addr(''), self.stream) end_offset = struct_parse( self.structs.Dwarf_target_addr(''), self.stream) if begin_offset == 0 and end_offset == 0: # End of list - we're done. break elif begin_offset == self._max_addr: # Base address selection entry lst.append(BaseAddressEntry(base_address=end_offset)) else: # Location list entry expr_len = struct_parse( self.structs.Dwarf_uint16(''), self.stream) loc_expr = [struct_parse(self.structs.Dwarf_uint8(''), self.stream) for i in range(expr_len)] lst.append(LocationEntry( begin_offset=begin_offset, end_offset=end_offset, loc_expr=loc_expr)) return lst class LocationParser(object): """ A parser for location information in DIEs. Handles both location information contained within the attribute itself (represented as a LocationExpr object) and references to location lists in the .debug_loc section (represented as a list). """ def __init__(self, location_lists): self.location_lists = location_lists @staticmethod def attribute_has_location(attr, dwarf_version): """ Checks if a DIE attribute contains location information. """ return (LocationParser._attribute_is_loclistptr_class(attr) and (LocationParser._attribute_has_loc_expr(attr, dwarf_version) or LocationParser._attribute_has_loc_list(attr, dwarf_version))) def parse_from_attribute(self, attr, dwarf_version): """ Parses a DIE attribute and returns either a LocationExpr or a list. """ if self.attribute_has_location(attr, dwarf_version): if self._attribute_has_loc_expr(attr, dwarf_version): return LocationExpr(attr.value) elif self._attribute_has_loc_list(attr, dwarf_version): return self.location_lists.get_location_list_at_offset( attr.value) else: raise ValueError("Attribute does not have location information") #------ PRIVATE ------# @staticmethod def _attribute_has_loc_expr(attr, dwarf_version): return (dwarf_version < 4 and attr.form == 'DW_FORM_block1' or attr.form == 'DW_FORM_exprloc') @staticmethod def _attribute_has_loc_list(attr, dwarf_version): return ((dwarf_version < 4 and attr.form in ('DW_FORM_data4', 'DW_FORM_data8')) or attr.form == 'DW_FORM_sec_offset') @staticmethod def _attribute_is_loclistptr_class(attr): return (attr.name in ( 'DW_AT_location', 'DW_AT_string_length', 'DW_AT_const_value', 'DW_AT_return_addr', 'DW_AT_data_member_location', 'DW_AT_frame_base', 'DW_AT_segment', 'DW_AT_static_link', 'DW_AT_use_location', 'DW_AT_vtable_elem_location')) pyelftools-0.26/elftools/dwarf/namelut.py000077500000000000000000000162331357220457300206320ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools: dwarf/namelut.py # # DWARF pubtypes/pubnames section decoding (.debug_pubtypes, .debug_pubnames) # # Vijay Ramasami (rvijayc@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- import os import collections from collections import OrderedDict from ..common.utils import struct_parse from ..common.py3compat import Mapping from bisect import bisect_right import math from ..construct import CString, Struct, If NameLUTEntry = collections.namedtuple('NameLUTEntry', 'cu_ofs die_ofs') class NameLUT(Mapping): """ A "Name LUT" holds any of the tables specified by .debug_pubtypes or .debug_pubnames sections. This is basically a dictionary where the key is the symbol name (either a public variable, function or a type), and the value is the tuple (cu_offset, die_offset) corresponding to the variable. The die_offset is an absolute offset (meaning, it can be used to search the CU by iterating until a match is obtained). An ordered dictionary is used to preserve the CU order (i.e, items are stored on a per-CU basis (as it was originally in the .debug_* section). Usage: The NameLUT walks and talks like a dictionary and hence it can be used as such. Some examples below: # get the pubnames (a NameLUT from DWARF info). pubnames = dwarf_info.get_pubnames() # lookup a variable. entry1 = pubnames["var_name1"] entry2 = pubnames.get("var_name2", default=) print(entry2.cu_ofs) ... # iterate over items. for (name, entry) in pubnames.items(): # do stuff with name, entry.cu_ofs, entry.die_ofs # iterate over items on a per-CU basis. import itertools for cu_ofs, item_list in itertools.groupby(pubnames.items(), key = lambda x: x[1].cu_ofs): # items are now grouped by cu_ofs. # item_list is an iterator yeilding NameLUTEntry'ies belonging # to cu_ofs. # We can parse the CU at cu_offset and use the parsed CU results # to parse the pubname DIEs in the CU listed by item_list. for item in item_list: # work with item which is part of the CU with cu_ofs. """ def __init__(self, stream, size, structs): self._stream = stream self._size = size self._structs = structs # entries are lazily loaded on demand. self._entries = None # CU headers (for readelf). self._cu_headers = None def get_entries(self): """ Returns the parsed NameLUT entries. The returned object is a dictionary with the symbol name as the key and NameLUTEntry(cu_ofs, die_ofs) as the value. This is useful when dealing with very large ELF files with millions of entries. The returned entries can be pickled to a file and restored by calling set_entries on subsequent loads. """ if self._entries is None: self._entries, self._cu_headers = self._get_entries() return self._entries def set_entries(self, entries, cu_headers): """ Set the NameLUT entries from an external source. The input is a dictionary with the symbol name as the key and NameLUTEntry(cu_ofs, die_ofs) as the value. This option is useful when dealing with very large ELF files with millions of entries. The entries can be parsed once and pickled to a file and can be restored via this function on subsequent loads. """ self._entries = entries self._cu_headers = cu_headers def __len__(self): """ Returns the number of entries in the NameLUT. """ if self._entries is None: self._entries, self._cu_headers = self._get_entries() return len(self._entries) def __getitem__(self, name): """ Returns a namedtuple - NameLUTEntry(cu_ofs, die_ofs) - that corresponds to the given symbol name. """ if self._entries is None: self._entries, self._cu_headers = self._get_entries() return self._entries.get(name) def __iter__(self): """ Returns an iterator to the NameLUT dictionary. """ if self._entries is None: self._entries, self._cu_headers = self._get_entries() return iter(self._entries) def items(self): """ Returns the NameLUT dictionary items. """ if self._entries is None: self._entries, self._cu_headers = self._get_entries() return self._entries.items() def get(self, name, default=None): """ Returns NameLUTEntry(cu_ofs, die_ofs) for the provided symbol name or None if the symbol does not exist in the corresponding section. """ if self._entries is None: self._entries, self._cu_headers = self._get_entries() return self._entries.get(name, default) def get_cu_headers(self): """ Returns all CU headers. Mainly required for readelf. """ if self._cu_headers is None: self._entries, self._cu_headers = self._get_entries() return self._cu_headers def _get_entries(self): """ Parse the (name, cu_ofs, die_ofs) information from this section and store as a dictionary. """ self._stream.seek(0) entries = OrderedDict() cu_headers = [] offset = 0 # According to 6.1.1. of DWARFv4, each set of names is terminated by # an offset field containing zero (and no following string). Because # of sequential parsing, every next entry may be that terminator. # So, field "name" is conditional. entry_struct = Struct("Dwarf_offset_name_pair", self._structs.Dwarf_offset('die_ofs'), If(lambda ctx: ctx['die_ofs'], CString('name'))) # each run of this loop will fetch one CU worth of entries. while offset < self._size: # read the header for this CU. namelut_hdr = struct_parse(self._structs.Dwarf_nameLUT_header, self._stream, offset) cu_headers.append(namelut_hdr) # compute the next offset. offset = (offset + namelut_hdr.unit_length + self._structs.initial_length_field_size()) # before inner loop, latch data that will be used in the inner # loop to avoid attribute access and other computation. hdr_cu_ofs = namelut_hdr.debug_info_offset # while die_ofs of the entry is non-zero (which indicates the end) ... while True: entry = struct_parse(entry_struct, self._stream) # if it is zero, this is the terminating record. if entry.die_ofs == 0: break # add this entry to the look-up dictionary. entries[entry.name.decode('utf-8')] = NameLUTEntry( cu_ofs = hdr_cu_ofs, die_ofs = hdr_cu_ofs + entry.die_ofs) # return the entries parsed so far. return (entries, cu_headers) pyelftools-0.26/elftools/dwarf/ranges.py000066400000000000000000000043311357220457300204350ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools: dwarf/ranges.py # # DWARF ranges section decoding (.debug_ranges) # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- import os from collections import namedtuple from ..common.utils import struct_parse RangeEntry = namedtuple('RangeEntry', 'begin_offset end_offset') BaseAddressEntry = namedtuple('BaseAddressEntry', 'base_address') class RangeLists(object): """ A single range list is a Python list consisting of RangeEntry or BaseAddressEntry objects. """ def __init__(self, stream, structs): self.stream = stream self.structs = structs self._max_addr = 2 ** (self.structs.address_size * 8) - 1 def get_range_list_at_offset(self, offset): """ Get a range list at the given offset in the section. """ self.stream.seek(offset, os.SEEK_SET) return self._parse_range_list_from_stream() def iter_range_lists(self): """ Yield all range lists found in the section. """ # Just call _parse_range_list_from_stream until the stream ends self.stream.seek(0, os.SEEK_END) endpos = self.stream.tell() self.stream.seek(0, os.SEEK_SET) while self.stream.tell() < endpos: yield self._parse_range_list_from_stream() #------ PRIVATE ------# def _parse_range_list_from_stream(self): lst = [] while True: begin_offset = struct_parse( self.structs.Dwarf_target_addr(''), self.stream) end_offset = struct_parse( self.structs.Dwarf_target_addr(''), self.stream) if begin_offset == 0 and end_offset == 0: # End of list - we're done. break elif begin_offset == self._max_addr: # Base address selection entry lst.append(BaseAddressEntry(base_address=end_offset)) else: # Range entry lst.append(RangeEntry( begin_offset=begin_offset, end_offset=end_offset)) return lst pyelftools-0.26/elftools/dwarf/structs.py000066400000000000000000000307471357220457300206770ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools: dwarf/structs.py # # Encapsulation of Construct structs for parsing DWARF, adjusted for correct # endianness and word-size. # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- from ..construct import ( UBInt8, UBInt16, UBInt32, UBInt64, ULInt8, ULInt16, ULInt32, ULInt64, SBInt8, SBInt16, SBInt32, SBInt64, SLInt8, SLInt16, SLInt32, SLInt64, Adapter, Struct, ConstructError, If, Enum, Array, PrefixedArray, CString, Embed, StaticField ) from ..common.construct_utils import RepeatUntilExcluding, ULEB128, SLEB128 from .enums import * class DWARFStructs(object): """ Exposes Construct structs suitable for parsing information from DWARF sections. Each compile unit in DWARF info can have its own structs object. Keep in mind that these structs have to be given a name (by calling them with a name) before being used for parsing (like other Construct structs). Those that should be used without a name are marked by (+). Accessible attributes (mostly as described in chapter 7 of the DWARF spec v3): Dwarf_[u]int{8,16,32,64): Data chunks of the common sizes Dwarf_offset: 32-bit or 64-bit word, depending on dwarf_format Dwarf_length: 32-bit or 64-bit word, depending on dwarf_format Dwarf_target_addr: 32-bit or 64-bit word, depending on address size Dwarf_initial_length: "Initial length field" encoding section 7.4 Dwarf_{u,s}leb128: ULEB128 and SLEB128 variable-length encoding Dwarf_CU_header (+): Compilation unit header Dwarf_abbrev_declaration (+): Abbreviation table declaration - doesn't include the initial code, only the contents. Dwarf_dw_form (+): A dictionary mapping 'DW_FORM_*' keys into construct Structs that parse such forms. These Structs have already been given dummy names. Dwarf_lineprog_header (+): Line program header Dwarf_lineprog_file_entry (+): A single file entry in a line program header or instruction Dwarf_CIE_header (+): A call-frame CIE Dwarf_FDE_header (+): A call-frame FDE See also the documentation of public methods. """ def __init__(self, little_endian, dwarf_format, address_size, dwarf_version=2): """ dwarf_version: Numeric DWARF version little_endian: True if the file is little endian, False if big dwarf_format: DWARF Format: 32 or 64-bit (see spec section 7.4) address_size: Target machine address size, in bytes (4 or 8). (See spec section 7.5.1) """ assert dwarf_format == 32 or dwarf_format == 64 assert address_size == 8 or address_size == 4 self.little_endian = little_endian self.dwarf_format = dwarf_format self.address_size = address_size self.dwarf_version = dwarf_version self._create_structs() def initial_length_field_size(self): """ Size of an initial length field. """ return 4 if self.dwarf_format == 32 else 12 def _create_structs(self): if self.little_endian: self.Dwarf_uint8 = ULInt8 self.Dwarf_uint16 = ULInt16 self.Dwarf_uint32 = ULInt32 self.Dwarf_uint64 = ULInt64 self.Dwarf_offset = ULInt32 if self.dwarf_format == 32 else ULInt64 self.Dwarf_length = ULInt32 if self.dwarf_format == 32 else ULInt64 self.Dwarf_target_addr = ( ULInt32 if self.address_size == 4 else ULInt64) self.Dwarf_int8 = SLInt8 self.Dwarf_int16 = SLInt16 self.Dwarf_int32 = SLInt32 self.Dwarf_int64 = SLInt64 else: self.Dwarf_uint8 = UBInt8 self.Dwarf_uint16 = UBInt16 self.Dwarf_uint32 = UBInt32 self.Dwarf_uint64 = UBInt64 self.Dwarf_offset = UBInt32 if self.dwarf_format == 32 else UBInt64 self.Dwarf_length = UBInt32 if self.dwarf_format == 32 else UBInt64 self.Dwarf_target_addr = ( UBInt32 if self.address_size == 4 else UBInt64) self.Dwarf_int8 = SBInt8 self.Dwarf_int16 = SBInt16 self.Dwarf_int32 = SBInt32 self.Dwarf_int64 = SBInt64 self._create_initial_length() self._create_leb128() self._create_cu_header() self._create_abbrev_declaration() self._create_dw_form() self._create_lineprog_header() self._create_callframe_entry_headers() self._create_aranges_header() self._create_nameLUT_header() def _create_initial_length(self): def _InitialLength(name): # Adapts a Struct that parses forward a full initial length field. # Only if the first word is the continuation value, the second # word is parsed from the stream. return _InitialLengthAdapter( Struct(name, self.Dwarf_uint32('first'), If(lambda ctx: ctx.first == 0xFFFFFFFF, self.Dwarf_uint64('second'), elsevalue=None))) self.Dwarf_initial_length = _InitialLength def _create_leb128(self): self.Dwarf_uleb128 = ULEB128 self.Dwarf_sleb128 = SLEB128 def _create_cu_header(self): self.Dwarf_CU_header = Struct('Dwarf_CU_header', self.Dwarf_initial_length('unit_length'), self.Dwarf_uint16('version'), self.Dwarf_offset('debug_abbrev_offset'), self.Dwarf_uint8('address_size')) def _create_abbrev_declaration(self): self.Dwarf_abbrev_declaration = Struct('Dwarf_abbrev_entry', Enum(self.Dwarf_uleb128('tag'), **ENUM_DW_TAG), Enum(self.Dwarf_uint8('children_flag'), **ENUM_DW_CHILDREN), RepeatUntilExcluding( lambda obj, ctx: obj.name == 'DW_AT_null' and obj.form == 'DW_FORM_null', Struct('attr_spec', Enum(self.Dwarf_uleb128('name'), **ENUM_DW_AT), Enum(self.Dwarf_uleb128('form'), **ENUM_DW_FORM)))) def _create_dw_form(self): self.Dwarf_dw_form = dict( DW_FORM_addr=self.Dwarf_target_addr(''), DW_FORM_block1=self._make_block_struct(self.Dwarf_uint8), DW_FORM_block2=self._make_block_struct(self.Dwarf_uint16), DW_FORM_block4=self._make_block_struct(self.Dwarf_uint32), DW_FORM_block=self._make_block_struct(self.Dwarf_uleb128), # All DW_FORM_data forms are assumed to be unsigned DW_FORM_data1=self.Dwarf_uint8(''), DW_FORM_data2=self.Dwarf_uint16(''), DW_FORM_data4=self.Dwarf_uint32(''), DW_FORM_data8=self.Dwarf_uint64(''), DW_FORM_sdata=self.Dwarf_sleb128(''), DW_FORM_udata=self.Dwarf_uleb128(''), DW_FORM_string=CString(''), DW_FORM_strp=self.Dwarf_offset(''), DW_FORM_flag=self.Dwarf_uint8(''), DW_FORM_ref1=self.Dwarf_uint8(''), DW_FORM_ref2=self.Dwarf_uint16(''), DW_FORM_ref4=self.Dwarf_uint32(''), DW_FORM_ref8=self.Dwarf_uint64(''), DW_FORM_ref_udata=self.Dwarf_uleb128(''), DW_FORM_ref_addr=self.Dwarf_offset(''), DW_FORM_indirect=self.Dwarf_uleb128(''), # New forms in DWARFv4 DW_FORM_flag_present = StaticField('', 0), DW_FORM_sec_offset = self.Dwarf_offset(''), DW_FORM_exprloc = self._make_block_struct(self.Dwarf_uleb128), DW_FORM_ref_sig8 = self.Dwarf_uint64(''), DW_FORM_GNU_strp_alt=self.Dwarf_offset(''), DW_FORM_GNU_ref_alt=self.Dwarf_offset(''), DW_AT_GNU_all_call_sites=self.Dwarf_uleb128(''), ) def _create_aranges_header(self): self.Dwarf_aranges_header = Struct("Dwarf_aranges_header", self.Dwarf_initial_length('unit_length'), self.Dwarf_uint16('version'), self.Dwarf_offset('debug_info_offset'), # a little tbd self.Dwarf_uint8('address_size'), self.Dwarf_uint8('segment_size') ) def _create_nameLUT_header(self): self.Dwarf_nameLUT_header = Struct("Dwarf_nameLUT_header", self.Dwarf_initial_length('unit_length'), self.Dwarf_uint16('version'), self.Dwarf_offset('debug_info_offset'), self.Dwarf_length('debug_info_length') ) def _create_lineprog_header(self): # A file entry is terminated by a NULL byte, so we don't want to parse # past it. Therefore an If is used. self.Dwarf_lineprog_file_entry = Struct('file_entry', CString('name'), If(lambda ctx: len(ctx.name) != 0, Embed(Struct('', self.Dwarf_uleb128('dir_index'), self.Dwarf_uleb128('mtime'), self.Dwarf_uleb128('length'))))) self.Dwarf_lineprog_header = Struct('Dwarf_lineprog_header', self.Dwarf_initial_length('unit_length'), self.Dwarf_uint16('version'), self.Dwarf_offset('header_length'), self.Dwarf_uint8('minimum_instruction_length'), If(lambda ctx: ctx['version'] >= 4, self.Dwarf_uint8("maximum_operations_per_instruction"), 1), self.Dwarf_uint8('default_is_stmt'), self.Dwarf_int8('line_base'), self.Dwarf_uint8('line_range'), self.Dwarf_uint8('opcode_base'), Array(lambda ctx: ctx['opcode_base'] - 1, self.Dwarf_uint8('standard_opcode_lengths')), RepeatUntilExcluding( lambda obj, ctx: obj == b'', CString('include_directory')), RepeatUntilExcluding( lambda obj, ctx: len(obj.name) == 0, self.Dwarf_lineprog_file_entry), ) def _create_callframe_entry_headers(self): self.Dwarf_CIE_header = Struct('Dwarf_CIE_header', self.Dwarf_initial_length('length'), self.Dwarf_offset('CIE_id'), self.Dwarf_uint8('version'), CString('augmentation'), self.Dwarf_uleb128('code_alignment_factor'), self.Dwarf_sleb128('data_alignment_factor'), self.Dwarf_uleb128('return_address_register')) self.EH_CIE_header = self.Dwarf_CIE_header # The CIE header was modified in DWARFv4. if self.dwarf_version == 4: self.Dwarf_CIE_header = Struct('Dwarf_CIE_header', self.Dwarf_initial_length('length'), self.Dwarf_offset('CIE_id'), self.Dwarf_uint8('version'), CString('augmentation'), self.Dwarf_uint8('address_size'), self.Dwarf_uint8('segment_size'), self.Dwarf_uleb128('code_alignment_factor'), self.Dwarf_sleb128('data_alignment_factor'), self.Dwarf_uleb128('return_address_register')) self.Dwarf_FDE_header = Struct('Dwarf_FDE_header', self.Dwarf_initial_length('length'), self.Dwarf_offset('CIE_pointer'), self.Dwarf_target_addr('initial_location'), self.Dwarf_target_addr('address_range')) def _make_block_struct(self, length_field): """ Create a struct for DW_FORM_block """ return PrefixedArray( subcon=self.Dwarf_uint8('elem'), length_field=length_field('')) class _InitialLengthAdapter(Adapter): """ A standard Construct adapter that expects a sub-construct as a struct with one or two values (first, second). """ def _decode(self, obj, context): if obj.first < 0xFFFFFF00: return obj.first else: if obj.first == 0xFFFFFFFF: return obj.second else: raise ConstructError("Failed decoding initial length for %X" % ( obj.first)) pyelftools-0.26/elftools/elf/000077500000000000000000000000001357220457300162465ustar00rootroot00000000000000pyelftools-0.26/elftools/elf/__init__.py000066400000000000000000000000001357220457300203450ustar00rootroot00000000000000pyelftools-0.26/elftools/elf/constants.py000066400000000000000000000061661357220457300206450ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools: elf/constants.py # # Constants and flags, placed into classes for namespacing # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- class E_FLAGS(object): """ Flag values for the e_flags field of the ELF header """ EF_ARM_EABIMASK=0xFF000000 EF_ARM_EABI_VER1=0x01000000 EF_ARM_EABI_VER2=0x02000000 EF_ARM_EABI_VER3=0x03000000 EF_ARM_EABI_VER4=0x04000000 EF_ARM_EABI_VER5=0x05000000 EF_ARM_GCCMASK=0x00400FFF EF_ARM_RELEXEC=0x01 EF_ARM_HASENTRY=0x02 EF_ARM_SYMSARESORTED=0x04 EF_ARM_DYNSYMSUSESEGIDX=0x8 EF_ARM_MAPSYMSFIRST=0x10 EF_ARM_LE8=0x00400000 EF_ARM_BE8=0x00800000 EF_ARM_ABI_FLOAT_SOFT=0x00000200 EF_ARM_ABI_FLOAT_HARD=0x00000400 EF_MIPS_NOREORDER=1 EF_MIPS_PIC=2 EF_MIPS_CPIC=4 EF_MIPS_XGOT=8 EF_MIPS_64BIT_WHIRL=16 EF_MIPS_ABI2=32 EF_MIPS_ABI_ON32=64 EF_MIPS_32BITMODE = 256 EF_MIPS_NAN2008=1024 EF_MIPS_ARCH=0xf0000000 EF_MIPS_ARCH_1=0x00000000 EF_MIPS_ARCH_2=0x10000000 EF_MIPS_ARCH_3=0x20000000 EF_MIPS_ARCH_4=0x30000000 EF_MIPS_ARCH_5=0x40000000 EF_MIPS_ARCH_32=0x50000000 EF_MIPS_ARCH_64=0x60000000 EF_MIPS_ARCH_32R2=0x70000000 EF_MIPS_ARCH_64R2=0x80000000 class E_FLAGS_MASKS(object): """Masks to be used for convenience when working with E_FLAGS This is a simplified approach that is also used by GNU binutils readelf """ EFM_MIPS_ABI = 0x0000F000 EFM_MIPS_ABI_O32 = 0x00001000 EFM_MIPS_ABI_O64 = 0x00002000 EFM_MIPS_ABI_EABI32 = 0x00003000 EFM_MIPS_ABI_EABI64 = 0x00004000 class SHN_INDICES(object): """ Special section indices """ SHN_UNDEF=0 SHN_LORESERVE=0xff00 SHN_LOPROC=0xff00 SHN_HIPROC=0xff1f SHN_ABS=0xfff1 SHN_COMMON=0xfff2 SHN_HIRESERVE=0xffff SHN_XINDEX=0xffff class SH_FLAGS(object): """ Flag values for the sh_flags field of section headers """ SHF_WRITE=0x1 SHF_ALLOC=0x2 SHF_EXECINSTR=0x4 SHF_MERGE=0x10 SHF_STRINGS=0x20 SHF_INFO_LINK=0x40 SHF_LINK_ORDER=0x80 SHF_OS_NONCONFORMING=0x100 SHF_GROUP=0x200 SHF_TLS=0x400 SHF_COMPRESSED=0x800 SHF_MASKOS=0x0ff00000 SHF_EXCLUDE=0x80000000 SHF_MASKPROC=0xf0000000 class P_FLAGS(object): """ Flag values for the p_flags field of program headers """ PF_X=0x1 PF_W=0x2 PF_R=0x4 PF_MASKOS=0x00FF0000 PF_MASKPROC=0xFF000000 # symbol info flags for entries # in the .SUNW_syminfo section class SUNW_SYMINFO_FLAGS(object): """ Flags for the si_flags field of entries in the .SUNW_syminfo section """ SYMINFO_FLG_DIRECT=0x1 SYMINFO_FLG_FILTER=0x2 SYMINFO_FLG_COPY=0x4 SYMINFO_FLG_LAZYLOAD=0x8 SYMINFO_FLG_DIRECTBIND=0x10 SYMINFO_FLG_NOEXTDIRECT=0x20 SYMINFO_FLG_AUXILIARY=0x40 SYMINFO_FLG_INTERPOSE=0x80 SYMINFO_FLG_CAP=0x100 SYMINFO_FLG_DEFERRED=0x200 class VER_FLAGS(object): VER_FLG_BASE=0x1 VER_FLG_WEAK=0x2 VER_FLG_INFO=0x4 pyelftools-0.26/elftools/elf/descriptions.py000066400000000000000000000524711357220457300213370ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools: elf/descriptions.py # # Textual descriptions of the various enums and flags of ELF # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- from .enums import ( ENUM_D_TAG, ENUM_E_VERSION, ENUM_P_TYPE_BASE, ENUM_SH_TYPE_BASE, ENUM_RELOC_TYPE_i386, ENUM_RELOC_TYPE_x64, ENUM_RELOC_TYPE_ARM, ENUM_RELOC_TYPE_AARCH64, ENUM_RELOC_TYPE_MIPS, ENUM_ATTR_TAG_ARM, ENUM_DT_FLAGS, ENUM_DT_FLAGS_1) from .constants import P_FLAGS, SH_FLAGS, SUNW_SYMINFO_FLAGS, VER_FLAGS from ..common.py3compat import iteritems def describe_ei_class(x): return _DESCR_EI_CLASS.get(x, _unknown) def describe_ei_data(x): return _DESCR_EI_DATA.get(x, _unknown) def describe_ei_version(x): s = '%d' % ENUM_E_VERSION[x] if x == 'EV_CURRENT': s += ' (current)' return s def describe_ei_osabi(x): return _DESCR_EI_OSABI.get(x, _unknown) def describe_e_type(x): return _DESCR_E_TYPE.get(x, _unknown) def describe_e_machine(x): return _DESCR_E_MACHINE.get(x, _unknown) def describe_e_version_numeric(x): return '0x%x' % ENUM_E_VERSION[x] def describe_p_type(x): if x in _DESCR_P_TYPE: return _DESCR_P_TYPE.get(x) elif x >= ENUM_P_TYPE_BASE['PT_LOOS'] and x <= ENUM_P_TYPE_BASE['PT_HIOS']: return 'LOOS+%lx' % (x - ENUM_P_TYPE_BASE['PT_LOOS']) else: return _unknown def describe_p_flags(x): s = '' for flag in (P_FLAGS.PF_R, P_FLAGS.PF_W, P_FLAGS.PF_X): s += _DESCR_P_FLAGS[flag] if (x & flag) else ' ' return s def describe_sh_type(x): if x in _DESCR_SH_TYPE: return _DESCR_SH_TYPE.get(x) elif (x >= ENUM_SH_TYPE_BASE['SHT_LOOS'] and x < ENUM_SH_TYPE_BASE['SHT_GNU_versym']): return 'loos+%lx' % (x - ENUM_SH_TYPE_BASE['SHT_LOOS']) else: return _unknown def describe_sh_flags(x): s = '' for flag in ( SH_FLAGS.SHF_WRITE, SH_FLAGS.SHF_ALLOC, SH_FLAGS.SHF_EXECINSTR, SH_FLAGS.SHF_MERGE, SH_FLAGS.SHF_STRINGS, SH_FLAGS.SHF_INFO_LINK, SH_FLAGS.SHF_LINK_ORDER, SH_FLAGS.SHF_OS_NONCONFORMING, SH_FLAGS.SHF_GROUP, SH_FLAGS.SHF_TLS, SH_FLAGS.SHF_EXCLUDE): s += _DESCR_SH_FLAGS[flag] if (x & flag) else '' return s def describe_symbol_type(x): return _DESCR_ST_INFO_TYPE.get(x, _unknown) def describe_symbol_bind(x): return _DESCR_ST_INFO_BIND.get(x, _unknown) def describe_symbol_visibility(x): return _DESCR_ST_VISIBILITY.get(x, _unknown) def describe_symbol_shndx(x): return _DESCR_ST_SHNDX.get(x, '%3s' % x) def describe_reloc_type(x, elffile): arch = elffile.get_machine_arch() if arch == 'x86': return _DESCR_RELOC_TYPE_i386.get(x, _unknown) elif arch == 'x64': return _DESCR_RELOC_TYPE_x64.get(x, _unknown) elif arch == 'ARM': return _DESCR_RELOC_TYPE_ARM.get(x, _unknown) elif arch == 'AArch64': return _DESCR_RELOC_TYPE_AARCH64.get(x, _unknown) elif arch == 'MIPS': return _DESCR_RELOC_TYPE_MIPS.get(x, _unknown) else: return 'unrecognized: %-7x' % (x & 0xFFFFFFFF) def describe_dyn_tag(x): return _DESCR_D_TAG.get(x, _unknown) def describe_dt_flags(x): return ' '.join(key[3:] for key, val in sorted(ENUM_DT_FLAGS.items(), key=lambda t: t[1]) if x & val) def describe_dt_flags_1(x): return ' '.join(key[5:] for key, val in sorted(ENUM_DT_FLAGS_1.items(), key=lambda t: t[1]) if x & val) def describe_syminfo_flags(x): return ''.join(_DESCR_SYMINFO_FLAGS[flag] for flag in ( SUNW_SYMINFO_FLAGS.SYMINFO_FLG_CAP, SUNW_SYMINFO_FLAGS.SYMINFO_FLG_DIRECT, SUNW_SYMINFO_FLAGS.SYMINFO_FLG_FILTER, SUNW_SYMINFO_FLAGS.SYMINFO_FLG_AUXILIARY, SUNW_SYMINFO_FLAGS.SYMINFO_FLG_DIRECTBIND, SUNW_SYMINFO_FLAGS.SYMINFO_FLG_COPY, SUNW_SYMINFO_FLAGS.SYMINFO_FLG_LAZYLOAD, SUNW_SYMINFO_FLAGS.SYMINFO_FLG_NOEXTDIRECT, SUNW_SYMINFO_FLAGS.SYMINFO_FLG_INTERPOSE, SUNW_SYMINFO_FLAGS.SYMINFO_FLG_DEFERRED) if x & flag) def describe_symbol_boundto(x): return _DESCR_SYMINFO_BOUNDTO.get(x, '%3s' % x) def describe_ver_flags(x): return ' | '.join(_DESCR_VER_FLAGS[flag] for flag in ( VER_FLAGS.VER_FLG_WEAK, VER_FLAGS.VER_FLG_BASE, VER_FLAGS.VER_FLG_INFO) if x & flag) def describe_note(x): n_desc = x['n_desc'] desc = '' if x['n_type'] == 'NT_GNU_ABI_TAG': desc = '\n OS: %s, ABI: %d.%d.%d' % ( _DESCR_NOTE_ABI_TAG_OS.get(n_desc['abi_os'], _unknown), n_desc['abi_major'], n_desc['abi_minor'], n_desc['abi_tiny']) elif x['n_type'] == 'NT_GNU_BUILD_ID': desc = '\n Build ID: %s' % (n_desc) else: desc = '\n description data: {}'.format(' '.join( '{:02x}'.format(ord(byte)) for byte in n_desc )) note_type = (x['n_type'] if isinstance(x['n_type'], str) else 'Unknown note type:') note_type_desc = ('0x%.8x' % x['n_type'] if isinstance(x['n_type'], int) else _DESCR_NOTE_N_TYPE.get(x['n_type'], _unknown)) return '%s (%s)%s' % (note_type, note_type_desc, desc) def describe_attr_tag_arm(tag, val, extra): idx = ENUM_ATTR_TAG_ARM[tag] - 1 d_entry = _DESCR_ATTR_VAL_ARM[idx] if d_entry is None: if tag == 'TAG_COMPATIBILITY': return (_DESCR_ATTR_TAG_ARM[tag] + 'flag = %d, vendor = %s' % (val, extra)) elif tag == 'TAG_ALSO_COMPATIBLE_WITH': if val.tag == 'TAG_CPU_ARCH': return _DESCR_ATTR_TAG_ARM[tag] + d_entry[val] else: return _DESCR_ATTR_TAG_ARM[tag] + '??? (%d)' % val.tag elif tag == 'TAG_NODEFAULTS': return _DESCR_ATTR_TAG_ARM[tag] + 'True' s = _DESCR_ATTR_TAG_ARM[tag] s += '"%s"' % val if val else '' return s else: return _DESCR_ATTR_TAG_ARM[tag] + d_entry[val] #------------------------------------------------------------------------------- _unknown = '' _DESCR_EI_CLASS = dict( ELFCLASSNONE='none', ELFCLASS32='ELF32', ELFCLASS64='ELF64', ) _DESCR_EI_DATA = dict( ELFDATANONE='none', ELFDATA2LSB="2's complement, little endian", ELFDATA2MSB="2's complement, big endian", ) _DESCR_EI_OSABI = dict( ELFOSABI_SYSV='UNIX - System V', ELFOSABI_HPUX='UNIX - HP-UX', ELFOSABI_NETBSD='UNIX - NetBSD', ELFOSABI_LINUX='UNIX - Linux', ELFOSABI_HURD='UNIX - GNU/Hurd', ELFOSABI_SOLARIS='UNIX - Solaris', ELFOSABI_AIX='UNIX - AIX', ELFOSABI_IRIX='UNIX - IRIX', ELFOSABI_FREEBSD='UNIX - FreeBSD', ELFOSABI_TRU64='UNIX - TRU64', ELFOSABI_MODESTO='Novell - Modesto', ELFOSABI_OPENBSD='UNIX - OpenBSD', ELFOSABI_OPENVMS='VMS - OpenVMS', ELFOSABI_NSK='HP - Non-Stop Kernel', ELFOSABI_AROS='AROS', ELFOSABI_FENIXOS='Fenix OS', ELFOSABI_CLOUD='Nuxi - CloudABI', ELFOSABI_SORTIX='Sortix', ELFOSABI_ARM_AEABI='ARM - EABI', ELFOSABI_ARM='ARM - ABI', ELFOSABI_STANDALONE='Standalone App', ) _DESCR_E_TYPE = dict( ET_NONE='NONE (None)', ET_REL='REL (Relocatable file)', ET_EXEC='EXEC (Executable file)', ET_DYN='DYN (Shared object file)', ET_CORE='CORE (Core file)', PROC_SPECIFIC='Processor Specific', ) _DESCR_E_MACHINE = dict( EM_NONE='None', EM_M32='WE32100', EM_SPARC='Sparc', EM_386='Intel 80386', EM_68K='MC68000', EM_88K='MC88000', EM_860='Intel 80860', EM_MIPS='MIPS R3000', EM_S370='IBM System/370', EM_MIPS_RS4_BE='MIPS 4000 big-endian', EM_IA_64='Intel IA-64', EM_X86_64='Advanced Micro Devices X86-64', EM_AVR='Atmel AVR 8-bit microcontroller', EM_ARM='ARM', EM_AARCH64='AArch64', EM_BLACKFIN='Analog Devices Blackfin', EM_PPC='PowerPC', RESERVED='RESERVED', ) _DESCR_P_TYPE = dict( PT_NULL='NULL', PT_LOAD='LOAD', PT_DYNAMIC='DYNAMIC', PT_INTERP='INTERP', PT_NOTE='NOTE', PT_SHLIB='SHLIB', PT_PHDR='PHDR', PT_GNU_EH_FRAME='GNU_EH_FRAME', PT_GNU_STACK='GNU_STACK', PT_GNU_RELRO='GNU_RELRO', PT_ARM_ARCHEXT='ARM_ARCHEXT', PT_ARM_EXIDX='EXIDX', # binutils calls this EXIDX, not ARM_EXIDX PT_AARCH64_ARCHEXT='AARCH64_ARCHEXT', PT_AARCH64_UNWIND='AARCH64_UNWIND', PT_TLS='TLS', PT_MIPS_ABIFLAGS='ABIFLAGS' ) _DESCR_P_FLAGS = { P_FLAGS.PF_X: 'E', P_FLAGS.PF_R: 'R', P_FLAGS.PF_W: 'W', } _DESCR_SH_TYPE = dict( SHT_NULL='NULL', SHT_PROGBITS='PROGBITS', SHT_SYMTAB='SYMTAB', SHT_STRTAB='STRTAB', SHT_RELA='RELA', SHT_HASH='HASH', SHT_DYNAMIC='DYNAMIC', SHT_NOTE='NOTE', SHT_NOBITS='NOBITS', SHT_REL='REL', SHT_SHLIB='SHLIB', SHT_DYNSYM='DYNSYM', SHT_INIT_ARRAY='INIT_ARRAY', SHT_FINI_ARRAY='FINI_ARRAY', SHT_PREINIT_ARRAY='PREINIT_ARRAY', SHT_GNU_ATTRIBUTES='GNU_ATTRIBUTES', SHT_GNU_HASH='GNU_HASH', SHT_GROUP='GROUP', SHT_SYMTAB_SHNDX='SYMTAB SECTION INDICIES', SHT_GNU_verdef='VERDEF', SHT_GNU_verneed='VERNEED', SHT_GNU_versym='VERSYM', SHT_GNU_LIBLIST='GNU_LIBLIST', SHT_ARM_EXIDX='ARM_EXIDX', SHT_ARM_PREEMPTMAP='ARM_PREEMPTMAP', SHT_ARM_ATTRIBUTES='ARM_ATTRIBUTES', SHT_ARM_DEBUGOVERLAY='ARM_DEBUGOVERLAY', SHT_MIPS_LIBLIST='MIPS_LIBLIST', SHT_MIPS_DEBUG='MIPS_DEBUG', SHT_MIPS_REGINFO='MIPS_REGINFO', SHT_MIPS_PACKAGE='MIPS_PACKAGE', SHT_MIPS_PACKSYM='MIPS_PACKSYM', SHT_MIPS_RELD='MIPS_RELD', SHT_MIPS_IFACE='MIPS_IFACE', SHT_MIPS_CONTENT='MIPS_CONTENT', SHT_MIPS_OPTIONS='MIPS_OPTIONS', SHT_MIPS_SHDR='MIPS_SHDR', SHT_MIPS_FDESC='MIPS_FDESC', SHT_MIPS_EXTSYM='MIPS_EXTSYM', SHT_MIPS_DENSE='MIPS_DENSE', SHT_MIPS_PDESC='MIPS_PDESC', SHT_MIPS_LOCSYM='MIPS_LOCSYM', SHT_MIPS_AUXSYM='MIPS_AUXSYM', SHT_MIPS_OPTSYM='MIPS_OPTSYM', SHT_MIPS_LOCSTR='MIPS_LOCSTR', SHT_MIPS_LINE='MIPS_LINE', SHT_MIPS_RFDESC='MIPS_RFDESC', SHT_MIPS_DELTASYM='MIPS_DELTASYM', SHT_MIPS_DELTAINST='MIPS_DELTAINST', SHT_MIPS_DELTACLASS='MIPS_DELTACLASS', SHT_MIPS_DWARF='MIPS_DWARF', SHT_MIPS_DELTADECL='MIPS_DELTADECL', SHT_MIPS_SYMBOL_LIB='MIPS_SYMBOL_LIB', SHT_MIPS_EVENTS='MIPS_EVENTS', SHT_MIPS_TRANSLATE='MIPS_TRANSLATE', SHT_MIPS_PIXIE='MIPS_PIXIE', SHT_MIPS_XLATE='MIPS_XLATE', SHT_MIPS_XLATE_DEBUG='MIPS_XLATE_DEBUG', SHT_MIPS_WHIRL='MIPS_WHIRL', SHT_MIPS_EH_REGION='MIPS_EH_REGION', SHT_MIPS_XLATE_OLD='MIPS_XLATE_OLD', SHT_MIPS_PDR_EXCEPTION='MIPS_PDR_EXCEPTION', ) _DESCR_SH_FLAGS = { SH_FLAGS.SHF_WRITE: 'W', SH_FLAGS.SHF_ALLOC: 'A', SH_FLAGS.SHF_EXECINSTR: 'X', SH_FLAGS.SHF_MERGE: 'M', SH_FLAGS.SHF_STRINGS: 'S', SH_FLAGS.SHF_INFO_LINK: 'I', SH_FLAGS.SHF_LINK_ORDER: 'L', SH_FLAGS.SHF_OS_NONCONFORMING: 'O', SH_FLAGS.SHF_GROUP: 'G', SH_FLAGS.SHF_TLS: 'T', SH_FLAGS.SHF_EXCLUDE: 'E', } _DESCR_ST_INFO_TYPE = dict( STT_NOTYPE='NOTYPE', STT_OBJECT='OBJECT', STT_FUNC='FUNC', STT_SECTION='SECTION', STT_FILE='FILE', STT_COMMON='COMMON', STT_TLS='TLS', STT_NUM='NUM', STT_RELC='RELC', STT_SRELC='SRELC', ) _DESCR_ST_INFO_BIND = dict( STB_LOCAL='LOCAL', STB_GLOBAL='GLOBAL', STB_WEAK='WEAK', ) _DESCR_ST_VISIBILITY = dict( STV_DEFAULT='DEFAULT', STV_INTERNAL='INTERNAL', STV_HIDDEN='HIDDEN', STV_PROTECTED='PROTECTED', STV_EXPORTED='EXPORTED', STV_SINGLETON='SINGLETON', STV_ELIMINATE='ELIMINATE', ) _DESCR_ST_SHNDX = dict( SHN_UNDEF='UND', SHN_ABS='ABS', SHN_COMMON='COM', ) _DESCR_SYMINFO_FLAGS = { SUNW_SYMINFO_FLAGS.SYMINFO_FLG_DIRECT: 'D', SUNW_SYMINFO_FLAGS.SYMINFO_FLG_DIRECTBIND: 'B', SUNW_SYMINFO_FLAGS.SYMINFO_FLG_COPY: 'C', SUNW_SYMINFO_FLAGS.SYMINFO_FLG_LAZYLOAD: 'L', SUNW_SYMINFO_FLAGS.SYMINFO_FLG_NOEXTDIRECT: 'N', SUNW_SYMINFO_FLAGS.SYMINFO_FLG_AUXILIARY: 'A', SUNW_SYMINFO_FLAGS.SYMINFO_FLG_FILTER: 'F', SUNW_SYMINFO_FLAGS.SYMINFO_FLG_INTERPOSE: 'I', SUNW_SYMINFO_FLAGS.SYMINFO_FLG_CAP: 'S', SUNW_SYMINFO_FLAGS.SYMINFO_FLG_DEFERRED: 'P', } _DESCR_SYMINFO_BOUNDTO = dict( SYMINFO_BT_SELF='', SYMINFO_BT_PARENT='', SYMINFO_BT_NONE='', SYMINFO_BT_EXTERN='', ) _DESCR_VER_FLAGS = { 0: '', VER_FLAGS.VER_FLG_BASE: 'BASE', VER_FLAGS.VER_FLG_WEAK: 'WEAK', VER_FLAGS.VER_FLG_INFO: 'INFO', } # PT_NOTE section types _DESCR_NOTE_N_TYPE = dict( NT_GNU_ABI_TAG='ABI version tag', NT_GNU_HWCAP='DSO-supplied software HWCAP info', NT_GNU_BUILD_ID='unique build ID bitstring', NT_GNU_GOLD_VERSION='gold version', ) # Values in GNU .note.ABI-tag notes (n_type=='NT_GNU_ABI_TAG') _DESCR_NOTE_ABI_TAG_OS = dict( ELF_NOTE_OS_LINUX='Linux', ELF_NOTE_OS_GNU='GNU', ELF_NOTE_OS_SOLARIS2='Solaris 2', ELF_NOTE_OS_FREEBSD='FreeBSD', ELF_NOTE_OS_NETBSD='NetBSD', ELF_NOTE_OS_SYLLABLE='Syllable', ) def _reverse_dict(d, low_priority=()): """ This is a tiny helper function to "reverse" the keys/values of a dictionary provided in the first argument, i.e. {k: v} becomes {v: k}. The second argument (optional) provides primitive control over what to do in the case of conflicting values - if a value is present in this list, it will not override any other entries of the same value. """ out = {} for k, v in iteritems(d): if v in out and k in low_priority: continue out[v] = k return out _DESCR_RELOC_TYPE_i386 = _reverse_dict(ENUM_RELOC_TYPE_i386) _DESCR_RELOC_TYPE_x64 = _reverse_dict(ENUM_RELOC_TYPE_x64) _DESCR_RELOC_TYPE_ARM = _reverse_dict(ENUM_RELOC_TYPE_ARM) _DESCR_RELOC_TYPE_AARCH64 = _reverse_dict(ENUM_RELOC_TYPE_AARCH64) _DESCR_RELOC_TYPE_MIPS = _reverse_dict(ENUM_RELOC_TYPE_MIPS) _low_priority_D_TAG = ( # these are 'meta-tags' marking semantics of numeric ranges of the enum # they should not override other tags with the same numbers # see https://docs.oracle.com/cd/E23824_01/html/819-0690/chapter6-42444.html 'DT_LOOS', 'DT_HIOS', 'DT_LOPROC', 'DT_HIPROC', 'DT_ENCODING', ) _DESCR_D_TAG = _reverse_dict(ENUM_D_TAG, low_priority=_low_priority_D_TAG) _DESCR_ATTR_TAG_ARM = dict( TAG_FILE='File Attributes', TAG_SECTION='Section Attributes:', TAG_SYMBOL='Symbol Attributes:', TAG_CPU_RAW_NAME='Tag_CPU_raw_name: ', TAG_CPU_NAME='Tag_CPU_name: ', TAG_CPU_ARCH='Tag_CPU_arch: ', TAG_CPU_ARCH_PROFILE='Tag_CPU_arch_profile: ', TAG_ARM_ISA_USE='Tag_ARM_ISA_use: ', TAG_THUMB_ISA_USE='Tag_Thumb_ISA_use: ', TAG_FP_ARCH='Tag_FP_arch: ', TAG_WMMX_ARCH='Tag_WMMX_arch: ', TAG_ADVANCED_SIMD_ARCH='Tag_Advanced_SIMD_arch: ', TAG_PCS_CONFIG='Tag_PCS_config: ', TAG_ABI_PCS_R9_USE='Tag_ABI_PCS_R9_use: ', TAG_ABI_PCS_RW_DATA='Tag_ABI_PCS_RW_use: ', TAG_ABI_PCS_RO_DATA='Tag_ABI_PCS_RO_use: ', TAG_ABI_PCS_GOT_USE='Tag_ABI_PCS_GOT_use: ', TAG_ABI_PCS_WCHAR_T='Tag_ABI_PCS_wchar_t: ', TAG_ABI_FP_ROUNDING='Tag_ABI_FP_rounding: ', TAG_ABI_FP_DENORMAL='Tag_ABI_FP_denormal: ', TAG_ABI_FP_EXCEPTIONS='Tag_ABI_FP_exceptions: ', TAG_ABI_FP_USER_EXCEPTIONS='Tag_ABI_FP_user_exceptions: ', TAG_ABI_FP_NUMBER_MODEL='Tag_ABI_FP_number_model: ', TAG_ABI_ALIGN_NEEDED='Tag_ABI_align_needed: ', TAG_ABI_ALIGN_PRESERVED='Tag_ABI_align_preserved: ', TAG_ABI_ENUM_SIZE='Tag_ABI_enum_size: ', TAG_ABI_HARDFP_USE='Tag_ABI_HardFP_use: ', TAG_ABI_VFP_ARGS='Tag_ABI_VFP_args: ', TAG_ABI_WMMX_ARGS='Tag_ABI_WMMX_args: ', TAG_ABI_OPTIMIZATION_GOALS='Tag_ABI_optimization_goals: ', TAG_ABI_FP_OPTIMIZATION_GOALS='Tag_ABI_FP_optimization_goals: ', TAG_COMPATIBILITY='Tag_compatibility: ', TAG_CPU_UNALIGNED_ACCESS='Tag_CPU_unaligned_access: ', TAG_FP_HP_EXTENSION='Tag_FP_HP_extension: ', TAG_ABI_FP_16BIT_FORMAT='Tag_ABI_FP_16bit_format: ', TAG_MPEXTENSION_USE='Tag_MPextension_use: ', TAG_DIV_USE='Tag_DIV_use: ', TAG_NODEFAULTS='Tag_nodefaults: ', TAG_ALSO_COMPATIBLE_WITH='Tag_also_compatible_with: ', TAG_T2EE_USE='Tag_T2EE_use: ', TAG_CONFORMANCE='Tag_conformance: ', TAG_VIRTUALIZATION_USE='Tag_Virtualization_use: ', TAG_MPEXTENSION_USE_OLD='Tag_MPextension_use_old: ', ) _DESCR_ATTR_VAL_ARM = [ None, #1 None, #2 None, #3 None, #4 None, #5 { #6 TAG_CPU_ARCH 0 : 'Pre-v4', 1 : 'v4', 2 : 'v4T', 3 : 'v5T', 4 : 'v5TE', 5 : 'v5TEJ', 6 : 'v6', 7 : 'v6KZ', 8 : 'v6T2', 9 : 'v6K', 10: 'v7', 11: 'v6-M', 12: 'v6S-M', 13: 'v7E-M', 14: 'v8', 15: 'v8-R', 16: 'v8-M.baseline', 17: 'v8-M.mainline', }, { #7 TAG_CPU_ARCH_PROFILE 0x00: 'None', 0x41: 'Application', 0x52: 'Realtime', 0x4D: 'Microcontroller', 0x53: 'Application or Realtime', }, { #8 TAG_ARM_ISA 0: 'No', 1: 'Yes', }, { #9 TAG_THUMB_ISA 0: 'No', 1: 'Thumb-1', 2: 'Thumb-2', 3: 'Yes', }, { #10 TAG_FP_ARCH 0: 'No', 1: 'VFPv1', 2: 'VFPv2 ', 3: 'VFPv3', 4: 'VFPv3-D16', 5: 'VFPv4', 6: 'VFPv4-D16', 7: 'FP ARM v8', 8: 'FPv5/FP-D16 for ARMv8', }, { #11 TAG_WMMX_ARCH 0: 'No', 1: 'WMMXv1', 2: 'WMMXv2', }, { #12 TAG_ADVANCED_SIMD_ARCH 0: 'No', 1: 'NEONv1', 2: 'NEONv1 with Fused-MAC', 3: 'NEON for ARMv8', 4: 'NEON for ARMv8.1', }, { #13 TAG_PCS_CONFIG 0: 'None', 1: 'Bare platform', 2: 'Linux application', 3: 'Linux DSO', 4: 'PalmOS 2004', 5: 'PalmOS (reserved)', 6: 'SymbianOS 2004', 7: 'SymbianOS (reserved)', }, { #14 TAG_ABI_PCS_R9_USE 0: 'v6', 1: 'SB', 2: 'TLS', 3: 'Unused', }, { #15 TAG_ABI_PCS_RW_DATA 0: 'Absolute', 1: 'PC-relative', 2: 'SB-relative', 3: 'None', }, { #16 TAG_ABI_PCS_RO_DATA 0: 'Absolute', 1: 'PC-relative', 2: 'None', }, { #17 TAG_ABI_PCS_GOT_USE 0: 'None', 1: 'direct', 2: 'GOT-indirect', }, { #18 TAG_ABI_PCS_WCHAR_T 0: 'None', 1: '??? 1', 2: '2', 3: '??? 3', 4: '4', }, { #19 TAG_ABI_FP_ROUNDING 0: 'Unused', 1: 'Needed', }, { #20 TAG_ABI_FP_DENORMAL 0: 'Unused', 1: 'Needed', 2: 'Sign only', }, { #21 TAG_ABI_FP_EXCEPTIONS 0: 'Unused', 1: 'Needed', }, { #22 TAG_ABI_FP_USER_EXCEPTIONS 0: 'Unused', 1: 'Needed', }, { #23 TAG_ABI_FP_NUMBER_MODEL 0: 'Unused', 1: 'Finite', 2: 'RTABI', 3: 'IEEE 754', }, { #24 TAG_ABI_ALIGN_NEEDED 0: 'None', 1: '8-byte', 2: '4-byte', 3: '??? 3', }, { #25 TAG_ABI_ALIGN_PRESERVED 0: 'None', 1: '8-byte, except leaf SP', 2: '8-byte', 3: '??? 3', }, { #26 TAG_ABI_ENUM_SIZE 0: 'Unused', 1: 'small', 2: 'int', 3: 'forced to int', }, { #27 TAG_ABI_HARDFP_USE 0: 'As Tag_FP_arch', 1: 'SP only', 2: 'Reserved', 3: 'Deprecated', }, { #28 TAG_ABI_VFP_ARGS 0: 'AAPCS', 1: 'VFP registers', 2: 'custom', 3: 'compatible', }, { #29 TAG_ABI_WMMX_ARGS 0: 'AAPCS', 1: 'WMMX registers', 2: 'custom', }, { #30 TAG_ABI_OPTIMIZATION_GOALS 0: 'None', 1: 'Prefer Speed', 2: 'Aggressive Speed', 3: 'Prefer Size', 4: 'Aggressive Size', 5: 'Prefer Debug', 6: 'Aggressive Debug', }, { #31 TAG_ABI_FP_OPTIMIZATION_GOALS 0: 'None', 1: 'Prefer Speed', 2: 'Aggressive Speed', 3: 'Prefer Size', 4: 'Aggressive Size', 5: 'Prefer Accuracy', 6: 'Aggressive Accuracy', }, { #32 TAG_COMPATIBILITY 0: 'No', 1: 'Yes', }, None, #33 { #34 TAG_CPU_UNALIGNED_ACCESS 0: 'None', 1: 'v6', }, None, #35 { #36 TAG_FP_HP_EXTENSION 0: 'Not Allowed', 1: 'Allowed', }, None, #37 { #38 TAG_ABI_FP_16BIT_FORMAT 0: 'None', 1: 'IEEE 754', 2: 'Alternative Format', }, None, #39 None, #40 None, #41 { #42 TAG_MPEXTENSION_USE 0: 'Not Allowed', 1: 'Allowed', }, None, #43 { #44 TAG_DIV_USE 0: 'Allowed in Thumb-ISA, v7-R or v7-M', 1: 'Not allowed', 2: 'Allowed in v7-A with integer division extension', }, None, #45 None, #46 None, #47 None, #48 None, #49 None, #50 None, #51 None, #52 None, #53 None, #54 None, #55 None, #56 None, #57 None, #58 None, #59 None, #60 None, #61 None, #62 None, #63 None, #64 None, #65 { #66 TAG_FP_HP_EXTENSION 0: 'Not Allowed', 1: 'Allowed', }, None, #67 { #68 TAG_VIRTUALIZATION_USE 0: 'Not Allowed', 1: 'TrustZone', 2: 'Virtualization Extensions', 3: 'TrustZone and Virtualization Extensions', }, None, #69 { #70 TAG_MPEXTENSION_USE_OLD 0: 'Not Allowed', 1: 'Allowed', }, ] pyelftools-0.26/elftools/elf/dynamic.py000066400000000000000000000312561357220457300202530ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools: elf/dynamic.py # # ELF Dynamic Tags # # Mike Frysinger (vapier@gentoo.org) # This code is in the public domain #------------------------------------------------------------------------------- import itertools from collections import defaultdict from .hash import HashSection, GNUHashSection from .sections import Section, Symbol from .enums import ENUM_D_TAG from .segments import Segment from .relocation import RelocationTable from ..common.exceptions import ELFError from ..common.utils import elf_assert, struct_parse, parse_cstring_from_stream class _DynamicStringTable(object): """ Bare string table based on values found via ELF dynamic tags and loadable segments only. Good enough for get_string() only. """ def __init__(self, stream, table_offset): self._stream = stream self._table_offset = table_offset def get_string(self, offset): """ Get the string stored at the given offset in this string table. """ s = parse_cstring_from_stream(self._stream, self._table_offset + offset) return s.decode('utf-8') if s else '' class DynamicTag(object): """ Dynamic Tag object - representing a single dynamic tag entry from a dynamic section. Allows dictionary-like access to the dynamic structure. For special tags (those listed in the _HANDLED_TAGS set below), creates additional attributes for convenience. For example, .soname will contain the actual value of DT_SONAME (fetched from the dynamic symbol table). """ _HANDLED_TAGS = frozenset( ['DT_NEEDED', 'DT_RPATH', 'DT_RUNPATH', 'DT_SONAME', 'DT_SUNW_FILTER']) def __init__(self, entry, stringtable): if stringtable is None: raise ELFError('Creating DynamicTag without string table') self.entry = entry if entry.d_tag in self._HANDLED_TAGS: setattr(self, entry.d_tag[3:].lower(), stringtable.get_string(self.entry.d_val)) def __getitem__(self, name): """ Implement dict-like access to entries """ return self.entry[name] def __repr__(self): return '' % (self.entry.d_tag, self.entry) def __str__(self): if self.entry.d_tag in self._HANDLED_TAGS: s = '"%s"' % getattr(self, self.entry.d_tag[3:].lower()) else: s = '%#x' % self.entry.d_ptr return '' % (self.entry.d_tag, s) class Dynamic(object): """ Shared functionality between dynamic sections and segments. """ def __init__(self, stream, elffile, stringtable, position): self.elffile = elffile self.elfstructs = elffile.structs self._stream = stream self._num_tags = -1 self._offset = position self._tagsize = self.elfstructs.Elf_Dyn.sizeof() # Do not access this directly yourself; use _get_stringtable() instead. self._stringtable = stringtable def get_table_offset(self, tag_name): """ Return the virtual address and file offset of a dynamic table. """ ptr = None for tag in self._iter_tags(type=tag_name): ptr = tag['d_ptr'] break # If we found a virtual address, locate the offset in the file # by using the program headers. offset = None if ptr: offset = next(self.elffile.address_offsets(ptr), None) return ptr, offset def _get_stringtable(self): """ Return a string table for looking up dynamic tag related strings. This won't be a "full" string table object, but will at least support the get_string() function. """ if self._stringtable: return self._stringtable # If the ELF has stripped its section table (which is unusual, but # perfectly valid), we need to use the dynamic tags to locate the # dynamic string table. _, table_offset = self.get_table_offset('DT_STRTAB') if table_offset is not None: self._stringtable = _DynamicStringTable(self._stream, table_offset) return self._stringtable # That didn't work for some reason. Let's use the section header # even though this ELF is super weird. self._stringtable = self.elffile.get_section_by_name('.dynstr') return self._stringtable def _iter_tags(self, type=None): """ Yield all raw tags (limit to |type| if specified) """ for n in itertools.count(): tag = self._get_tag(n) if type is None or tag['d_tag'] == type: yield tag if tag['d_tag'] == 'DT_NULL': break def iter_tags(self, type=None): """ Yield all tags (limit to |type| if specified) """ for tag in self._iter_tags(type=type): yield DynamicTag(tag, self._get_stringtable()) def _get_tag(self, n): """ Get the raw tag at index #n from the file """ offset = self._offset + n * self._tagsize return struct_parse( self.elfstructs.Elf_Dyn, self._stream, stream_pos=offset) def get_tag(self, n): """ Get the tag at index #n from the file (DynamicTag object) """ return DynamicTag(self._get_tag(n), self._get_stringtable()) def num_tags(self): """ Number of dynamic tags in the file """ if self._num_tags != -1: return self._num_tags for n in itertools.count(): tag = self.get_tag(n) if tag.entry.d_tag == 'DT_NULL': self._num_tags = n + 1 return self._num_tags def get_relocation_tables(self): """ Load all available relocation tables from DYNAMIC tags. Returns a dictionary mapping found table types (REL, RELA, JMPREL) to RelocationTable objects. """ result = {} if list(self.iter_tags('DT_REL')): result['REL'] = RelocationTable(self.elffile, self.get_table_offset('DT_REL')[1], next(self.iter_tags('DT_RELSZ'))['d_val'], False) relentsz = next(self.iter_tags('DT_RELENT'))['d_val'] elf_assert(result['REL'].entry_size == relentsz, 'Expected DT_RELENT to be %s' % relentsz) if list(self.iter_tags('DT_RELA')): result['RELA'] = RelocationTable(self.elffile, self.get_table_offset('DT_RELA')[1], next(self.iter_tags('DT_RELASZ'))['d_val'], True) relentsz = next(self.iter_tags('DT_RELAENT'))['d_val'] elf_assert(result['RELA'].entry_size == relentsz, 'Expected DT_RELAENT to be %s' % relentsz) if list(self.iter_tags('DT_JMPREL')): result['JMPREL'] = RelocationTable(self.elffile, self.get_table_offset('DT_JMPREL')[1], next(self.iter_tags('DT_PLTRELSZ'))['d_val'], next(self.iter_tags('DT_PLTREL'))['d_val'] == ENUM_D_TAG['DT_RELA']) return result class DynamicSection(Section, Dynamic): """ ELF dynamic table section. Knows how to process the list of tags. """ def __init__(self, header, name, elffile): Section.__init__(self, header, name, elffile) stringtable = elffile.get_section(header['sh_link']) Dynamic.__init__(self, self.stream, self.elffile, stringtable, self['sh_offset']) class DynamicSegment(Segment, Dynamic): """ ELF dynamic table segment. Knows how to process the list of tags. """ def __init__(self, header, stream, elffile): # The string table section to be used to resolve string names in # the dynamic tag array is the one pointed at by the sh_link field # of the dynamic section header. # So we must look for the dynamic section contained in the dynamic # segment, we do so by searching for the dynamic section whose content # is located at the same offset as the dynamic segment stringtable = None for section in elffile.iter_sections(): if (isinstance(section, DynamicSection) and section['sh_offset'] == header['p_offset']): stringtable = elffile.get_section(section['sh_link']) break Segment.__init__(self, header, stream) Dynamic.__init__(self, stream, elffile, stringtable, self['p_offset']) self._symbol_list = None self._symbol_name_map = None def num_symbols(self): """ Number of symbols in the table recovered from DT_SYMTAB """ if self._symbol_list is None: self._symbol_list = list(self.iter_symbols()) return len(self._symbol_list) def get_symbol(self, index): """ Get the symbol at index #index from the table (Symbol object) """ if self._symbol_list is None: self._symbol_list = list(self.iter_symbols()) return self._symbol_list[index] def get_symbol_by_name(self, name): """ Get a symbol(s) by name. Return None if no symbol by the given name exists. """ # The first time this method is called, construct a name to number # mapping # if self._symbol_name_map is None: self._symbol_name_map = defaultdict(list) for i, sym in enumerate(self.iter_symbols()): self._symbol_name_map[sym.name].append(i) symnums = self._symbol_name_map.get(name) return [self.get_symbol(i) for i in symnums] if symnums else None def iter_symbols(self): """ Yield all symbols in this dynamic segment. The symbols are usually the same as returned by SymbolTableSection.iter_symbols. However, in stripped binaries, SymbolTableSection might have been removed. This method reads from the mandatory dynamic tag DT_SYMTAB. """ tab_ptr, tab_offset = self.get_table_offset('DT_SYMTAB') if tab_ptr is None or tab_offset is None: raise ELFError('Segment does not contain DT_SYMTAB.') symbol_size = self.elfstructs.Elf_Sym.sizeof() end_ptr = None # Check if a DT_GNU_HASH tag exists and recover the number of symbols # from the corresponding section _, gnu_hash_offset = self.get_table_offset('DT_GNU_HASH') if gnu_hash_offset is not None: hash_section = GNUHashSection(self.stream, gnu_hash_offset, self.elffile) end_ptr = tab_ptr + \ hash_section.get_number_of_symbols() * symbol_size # If DT_GNU_HASH did not exist, maybe we can use DT_HASH if end_ptr is None: _, hash_offset = self.get_table_offset('DT_HASH') if hash_offset is not None: hash_section = HashSection(self.stream, hash_offset, self.elffile) end_ptr = tab_ptr + \ hash_section.get_number_of_symbols() * symbol_size if end_ptr is None: # Find closest higher pointer than tab_ptr. We'll use that to mark # the end of the symbol table. nearest_ptr = None for tag in self.iter_tags(): tag_ptr = tag['d_ptr'] if tag['d_tag'] == 'DT_SYMENT': if symbol_size != tag['d_val']: # DT_SYMENT is the size of one symbol entry. It must be # the same as returned by Elf_Sym.sizeof. raise ELFError('DT_SYMENT (%d) != Elf_Sym (%d).' % (tag['d_val'], symbol_size)) if (tag_ptr > tab_ptr and (nearest_ptr is None or nearest_ptr > tag_ptr)): nearest_ptr = tag_ptr if nearest_ptr is None: # Use the end of segment that contains DT_SYMTAB. for segment in self.elffile.iter_segments(): if (segment['p_vaddr'] <= tab_ptr and tab_ptr <= (segment['p_vaddr'] + segment['p_filesz'])): nearest_ptr = segment['p_vaddr'] + segment['p_filesz'] end_ptr = nearest_ptr if end_ptr is None: raise ELFError('Cannot determine the end of DT_SYMTAB.') string_table = self._get_stringtable() for i in range((end_ptr - tab_ptr) // symbol_size): symbol = struct_parse(self.elfstructs.Elf_Sym, self._stream, i * symbol_size + tab_offset) symbol_name = string_table.get_string(symbol['st_name']) yield Symbol(symbol, symbol_name) pyelftools-0.26/elftools/elf/elffile.py000066400000000000000000000657151357220457300202440ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools: elf/elffile.py # # ELFFile - main class for accessing ELF files # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- import io import struct import zlib try: import resource PAGESIZE = resource.getpagesize() except ImportError: # Windows system import mmap PAGESIZE = mmap.PAGESIZE from ..common.py3compat import BytesIO from ..common.exceptions import ELFError from ..common.utils import struct_parse, elf_assert from .structs import ELFStructs from .sections import ( Section, StringTableSection, SymbolTableSection, SUNWSyminfoTableSection, NullSection, NoteSection, StabSection, ARMAttributesSection) from .dynamic import DynamicSection, DynamicSegment from .relocation import RelocationSection, RelocationHandler from .gnuversions import ( GNUVerNeedSection, GNUVerDefSection, GNUVerSymSection) from .segments import Segment, InterpSegment, NoteSegment from ..dwarf.dwarfinfo import DWARFInfo, DebugSectionDescriptor, DwarfConfig class ELFFile(object): """ Creation: the constructor accepts a stream (file-like object) with the contents of an ELF file. Accessible attributes: stream: The stream holding the data of the file - must be a binary stream (bytes, not string). elfclass: 32 or 64 - specifies the word size of the target machine little_endian: boolean - specifies the target machine's endianness elftype: string or int, either known value of E_TYPE enum defining ELF type (e.g. executable, dynamic library or core dump) or integral unparsed value header: the complete ELF file header e_ident_raw: the raw e_ident field of the header """ def __init__(self, stream): self.stream = stream self._identify_file() self.structs = ELFStructs( little_endian=self.little_endian, elfclass=self.elfclass) self.structs.create_basic_structs() self.header = self._parse_elf_header() self.structs.create_advanced_structs( self['e_type'], self['e_machine'], self['e_ident']['EI_OSABI']) self.stream.seek(0) self.e_ident_raw = self.stream.read(16) self._file_stringtable_section = self._get_file_stringtable() self._section_name_map = None def num_sections(self): """ Number of sections in the file """ return self['e_shnum'] def get_section(self, n): """ Get the section at index #n from the file (Section object or a subclass) """ section_header = self._get_section_header(n) return self._make_section(section_header) def get_section_by_name(self, name): """ Get a section from the file, by name. Return None if no such section exists. """ # The first time this method is called, construct a name to number # mapping # if self._section_name_map is None: self._section_name_map = {} for i, sec in enumerate(self.iter_sections()): self._section_name_map[sec.name] = i secnum = self._section_name_map.get(name, None) return None if secnum is None else self.get_section(secnum) def iter_sections(self): """ Yield all the sections in the file """ for i in range(self.num_sections()): yield self.get_section(i) def num_segments(self): """ Number of segments in the file """ return self['e_phnum'] def get_segment(self, n): """ Get the segment at index #n from the file (Segment object) """ segment_header = self._get_segment_header(n) return self._make_segment(segment_header) def iter_segments(self): """ Yield all the segments in the file """ for i in range(self.num_segments()): yield self.get_segment(i) def address_offsets(self, start, size=1): """ Yield a file offset for each ELF segment containing a memory region. A memory region is defined by the range [start...start+size). The offset of the region is yielded. """ end = start + size for seg in self.iter_segments(): # consider LOAD only to prevent same address being yielded twice if seg['p_type'] != 'PT_LOAD': continue if (start >= seg['p_vaddr'] and end <= seg['p_vaddr'] + seg['p_filesz']): yield start - seg['p_vaddr'] + seg['p_offset'] def has_dwarf_info(self): """ Check whether this file appears to have debugging information. We assume that if it has the .debug_info or .zdebug_info section, it has all the other required sections as well. """ return (self.get_section_by_name('.debug_info') or self.get_section_by_name('.zdebug_info') or self.get_section_by_name('.eh_frame')) def get_dwarf_info(self, relocate_dwarf_sections=True): """ Return a DWARFInfo object representing the debugging information in this file. If relocate_dwarf_sections is True, relocations for DWARF sections are looked up and applied. """ # Expect that has_dwarf_info was called, so at least .debug_info is # present. # Sections that aren't found will be passed as None to DWARFInfo. section_names = ('.debug_info', '.debug_aranges', '.debug_abbrev', '.debug_str', '.debug_line', '.debug_frame', '.debug_loc', '.debug_ranges', '.debug_pubtypes', '.debug_pubnames') compressed = bool(self.get_section_by_name('.zdebug_info')) if compressed: section_names = tuple(map(lambda x: '.z' + x[1:], section_names)) # As it is loaded in the process image, .eh_frame cannot be compressed section_names += ('.eh_frame', ) (debug_info_sec_name, debug_aranges_sec_name, debug_abbrev_sec_name, debug_str_sec_name, debug_line_sec_name, debug_frame_sec_name, debug_loc_sec_name, debug_ranges_sec_name, debug_pubtypes_name, debug_pubnames_name, eh_frame_sec_name) = section_names debug_sections = {} for secname in section_names: section = self.get_section_by_name(secname) if section is None: debug_sections[secname] = None else: dwarf_section = self._read_dwarf_section( section, relocate_dwarf_sections) if compressed and secname.startswith('.z'): dwarf_section = self._decompress_dwarf_section(dwarf_section) debug_sections[secname] = dwarf_section return DWARFInfo( config=DwarfConfig( little_endian=self.little_endian, default_address_size=self.elfclass // 8, machine_arch=self.get_machine_arch()), debug_info_sec=debug_sections[debug_info_sec_name], debug_aranges_sec=debug_sections[debug_aranges_sec_name], debug_abbrev_sec=debug_sections[debug_abbrev_sec_name], debug_frame_sec=debug_sections[debug_frame_sec_name], eh_frame_sec=debug_sections[eh_frame_sec_name], debug_str_sec=debug_sections[debug_str_sec_name], debug_loc_sec=debug_sections[debug_loc_sec_name], debug_ranges_sec=debug_sections[debug_ranges_sec_name], debug_line_sec=debug_sections[debug_line_sec_name], debug_pubtypes_sec = debug_sections[debug_pubtypes_name], debug_pubnames_sec = debug_sections[debug_pubnames_name] ) def get_machine_arch(self): """ Return the machine architecture, as detected from the ELF header. """ architectures = { 'EM_M32' : 'AT&T WE 32100', 'EM_SPARC' : 'SPARC', 'EM_386' : 'x86', 'EM_68K' : 'Motorola 68000', 'EM_88K' : 'Motorola 88000', 'EM_IAMCU' : 'Intel MCU', 'EM_860' : 'Intel 80860', 'EM_MIPS' : 'MIPS', 'EM_S370' : 'IBM System/370', 'EM_MIPS_RS3_LE' : 'MIPS RS3000 Little-endian', 'EM_PARISC' : 'Hewlett-Packard PA-RISC', 'EM_VPP500' : 'Fujitsu VPP500', 'EM_SPARC32PLUS' : 'Enhanced SPARC', 'EM_960' : 'Intel 80960', 'EM_PPC' : 'PowerPC', 'EM_PPC64' : '64-bit PowerPC', 'EM_S390' : 'IBM System/390', 'EM_SPU' : 'IBM SPU/SPC', 'EM_V800' : 'NEC V800', 'EM_FR20' : 'Fujitsu FR20', 'EM_RH32' : 'TRW RH-32', 'EM_RCE' : 'Motorola RCE', 'EM_ARM' : 'ARM', 'EM_ALPHA' : 'Digital Alpha', 'EM_SH' : 'Hitachi SH', 'EM_SPARCV9' : 'SPARC Version 9', 'EM_TRICORE' : 'Siemens TriCore embedded processor', 'EM_ARC' : 'Argonaut RISC Core, Argonaut Technologies Inc.', 'EM_H8_300' : 'Hitachi H8/300', 'EM_H8_300H' : 'Hitachi H8/300H', 'EM_H8S' : 'Hitachi H8S', 'EM_H8_500' : 'Hitachi H8/500', 'EM_IA_64' : 'Intel IA-64', 'EM_MIPS_X' : 'MIPS-X', 'EM_COLDFIRE' : 'Motorola ColdFire', 'EM_68HC12' : 'Motorola M68HC12', 'EM_MMA' : 'Fujitsu MMA', 'EM_PCP' : 'Siemens PCP', 'EM_NCPU' : 'Sony nCPU', 'EM_NDR1' : 'Denso NDR1', 'EM_STARCORE' : 'Motorola Star*Core', 'EM_ME16' : 'Toyota ME16', 'EM_ST100' : 'STMicroelectronics ST100', 'EM_TINYJ' : 'Advanced Logic TinyJ', 'EM_X86_64' : 'x64', 'EM_PDSP' : 'Sony DSP', 'EM_PDP10' : 'Digital Equipment PDP-10', 'EM_PDP11' : 'Digital Equipment PDP-11', 'EM_FX66' : 'Siemens FX66', 'EM_ST9PLUS' : 'STMicroelectronics ST9+ 8/16 bit', 'EM_ST7' : 'STMicroelectronics ST7 8-bit', 'EM_68HC16' : 'Motorola MC68HC16', 'EM_68HC11' : 'Motorola MC68HC11', 'EM_68HC08' : 'Motorola MC68HC08', 'EM_68HC05' : 'Motorola MC68HC05', 'EM_SVX' : 'Silicon Graphics SVx', 'EM_ST19' : 'STMicroelectronics ST19 8-bit', 'EM_VAX' : 'Digital VAX', 'EM_CRIS' : 'Axis Communications 32-bit', 'EM_JAVELIN' : 'Infineon Technologies 32-bit', 'EM_FIREPATH' : 'Element 14 64-bit DSP', 'EM_ZSP' : 'LSI Logic 16-bit DSP', 'EM_MMIX' : 'Donald Knuth\'s educational 64-bit', 'EM_HUANY' : 'Harvard University machine-independent object files', 'EM_PRISM' : 'SiTera Prism', 'EM_AVR' : 'Atmel AVR 8-bit', 'EM_FR30' : 'Fujitsu FR30', 'EM_D10V' : 'Mitsubishi D10V', 'EM_D30V' : 'Mitsubishi D30V', 'EM_V850' : 'NEC v850', 'EM_M32R' : 'Mitsubishi M32R', 'EM_MN10300' : 'Matsushita MN10300', 'EM_MN10200' : 'Matsushita MN10200', 'EM_PJ' : 'picoJava', 'EM_OPENRISC' : 'OpenRISC 32-bit', 'EM_ARC_COMPACT' : 'ARC International ARCompact', 'EM_XTENSA' : 'Tensilica Xtensa', 'EM_VIDEOCORE' : 'Alphamosaic VideoCore', 'EM_TMM_GPP' : 'Thompson Multimedia', 'EM_NS32K' : 'National Semiconductor 32000 series', 'EM_TPC' : 'Tenor Network TPC', 'EM_SNP1K' : 'Trebia SNP 1000', 'EM_ST200' : 'STMicroelectronics ST200', 'EM_IP2K' : 'Ubicom IP2xxx', 'EM_MAX' : 'MAX', 'EM_CR' : 'National Semiconductor CompactRISC', 'EM_F2MC16' : 'Fujitsu F2MC16', 'EM_MSP430' : 'Texas Instruments msp430', 'EM_BLACKFIN' : 'Analog Devices Blackfin', 'EM_SE_C33' : 'Seiko Epson S1C33', 'EM_SEP' : 'Sharp', 'EM_ARCA' : 'Arca RISC', 'EM_UNICORE' : 'PKU-Unity MPRC', 'EM_EXCESS' : 'eXcess', 'EM_DXP' : 'Icera Semiconductor Deep Execution Processor', 'EM_ALTERA_NIOS2' : 'Altera Nios II', 'EM_CRX' : 'National Semiconductor CompactRISC CRX', 'EM_XGATE' : 'Motorola XGATE', 'EM_C166' : 'Infineon C16x/XC16x', 'EM_M16C' : 'Renesas M16C', 'EM_DSPIC30F' : 'Microchip Technology dsPIC30F', 'EM_CE' : 'Freescale Communication Engine RISC core', 'EM_M32C' : 'Renesas M32C', 'EM_TSK3000' : 'Altium TSK3000', 'EM_RS08' : 'Freescale RS08', 'EM_SHARC' : 'Analog Devices SHARC', 'EM_ECOG2' : 'Cyan Technology eCOG2', 'EM_SCORE7' : 'Sunplus S+core7 RISC', 'EM_DSP24' : 'New Japan Radio (NJR) 24-bit DSP', 'EM_VIDEOCORE3' : 'Broadcom VideoCore III', 'EM_LATTICEMICO32' : 'Lattice FPGA RISC', 'EM_SE_C17' : 'Seiko Epson C17', 'EM_TI_C6000' : 'TI TMS320C6000', 'EM_TI_C2000' : 'TI TMS320C2000', 'EM_TI_C5500' : 'TI TMS320C55x', 'EM_TI_ARP32' : 'TI Application Specific RISC, 32bit', 'EM_TI_PRU' : 'TI Programmable Realtime Unit', 'EM_MMDSP_PLUS' : 'STMicroelectronics 64bit VLIW', 'EM_CYPRESS_M8C' : 'Cypress M8C', 'EM_R32C' : 'Renesas R32C', 'EM_TRIMEDIA' : 'NXP Semiconductors TriMedia', 'EM_QDSP6' : 'QUALCOMM DSP6', 'EM_8051' : 'Intel 8051', 'EM_STXP7X' : 'STMicroelectronics STxP7x', 'EM_NDS32' : 'Andes Technology RISC', 'EM_ECOG1' : 'Cyan Technology eCOG1X', 'EM_ECOG1X' : 'Cyan Technology eCOG1X', 'EM_MAXQ30' : 'Dallas Semiconductor MAXQ30', 'EM_XIMO16' : 'New Japan Radio (NJR) 16-bit', 'EM_MANIK' : 'M2000 Reconfigurable RISC', 'EM_CRAYNV2' : 'Cray Inc. NV2', 'EM_RX' : 'Renesas RX', 'EM_METAG' : 'Imagination Technologies META', 'EM_MCST_ELBRUS' : 'MCST Elbrus', 'EM_ECOG16' : 'Cyan Technology eCOG16', 'EM_CR16' : 'National Semiconductor CompactRISC CR16 16-bit', 'EM_ETPU' : 'Freescale', 'EM_SLE9X' : 'Infineon Technologies SLE9X', 'EM_L10M' : 'Intel L10M', 'EM_K10M' : 'Intel K10M', 'EM_AARCH64' : 'AArch64', 'EM_AVR32' : 'Atmel 32-bit', 'EM_STM8' : 'STMicroeletronics STM8 8-bit', 'EM_TILE64' : 'Tilera TILE64', 'EM_TILEPRO' : 'Tilera TILEPro', 'EM_MICROBLAZE' : 'Xilinx MicroBlaze 32-bit RISC', 'EM_CUDA' : 'NVIDIA CUDA', 'EM_TILEGX' : 'Tilera TILE-Gx', 'EM_CLOUDSHIELD' : 'CloudShield', 'EM_COREA_1ST' : 'KIPO-KAIST Core-A 1st generation', 'EM_COREA_2ND' : 'KIPO-KAIST Core-A 2nd generation', 'EM_ARC_COMPACT2' : 'Synopsys ARCompact V2', 'EM_OPEN8' : 'Open8 8-bit RISC', 'EM_RL78' : 'Renesas RL78', 'EM_VIDEOCORE5' : 'Broadcom VideoCore V', 'EM_78KOR' : 'Renesas 78KOR', 'EM_56800EX' : 'Freescale 56800EX', 'EM_BA1' : 'Beyond BA1', 'EM_BA2' : 'Beyond BA2', 'EM_XCORE' : 'XMOS xCORE', 'EM_MCHP_PIC' : 'Microchip 8-bit PIC', 'EM_INTEL205' : 'Reserved by Intel', 'EM_INTEL206' : 'Reserved by Intel', 'EM_INTEL207' : 'Reserved by Intel', 'EM_INTEL208' : 'Reserved by Intel', 'EM_INTEL209' : 'Reserved by Intel', 'EM_KM32' : 'KM211 KM32 32-bit', 'EM_KMX32' : 'KM211 KMX32 32-bit', 'EM_KMX16' : 'KM211 KMX16 16-bit', 'EM_KMX8' : 'KM211 KMX8 8-bit', 'EM_KVARC' : 'KM211 KVARC', 'EM_CDP' : 'Paneve CDP', 'EM_COGE' : 'Cognitive', 'EM_COOL' : 'Bluechip Systems CoolEngine', 'EM_NORC' : 'Nanoradio Optimized RISC', 'EM_CSR_KALIMBA' : 'CSR Kalimba', 'EM_Z80' : 'Zilog Z80', 'EM_VISIUM' : 'VISIUMcore', 'EM_FT32' : 'FTDI Chip FT32 32-bit RISC', 'EM_MOXIE' : 'Moxie', 'EM_AMDGPU' : 'AMD GPU', 'EM_RISCV' : 'RISC-V' } return architectures.get(self['e_machine'], '') #-------------------------------- PRIVATE --------------------------------# def __getitem__(self, name): """ Implement dict-like access to header entries """ return self.header[name] def _identify_file(self): """ Verify the ELF file and identify its class and endianness. """ # Note: this code reads the stream directly, without using ELFStructs, # since we don't yet know its exact format. ELF was designed to be # read like this - its e_ident field is word-size and endian agnostic. self.stream.seek(0) magic = self.stream.read(4) elf_assert(magic == b'\x7fELF', 'Magic number does not match') ei_class = self.stream.read(1) if ei_class == b'\x01': self.elfclass = 32 elif ei_class == b'\x02': self.elfclass = 64 else: raise ELFError('Invalid EI_CLASS %s' % repr(ei_class)) ei_data = self.stream.read(1) if ei_data == b'\x01': self.little_endian = True elif ei_data == b'\x02': self.little_endian = False else: raise ELFError('Invalid EI_DATA %s' % repr(ei_data)) def _section_offset(self, n): """ Compute the offset of section #n in the file """ return self['e_shoff'] + n * self['e_shentsize'] def _segment_offset(self, n): """ Compute the offset of segment #n in the file """ return self['e_phoff'] + n * self['e_phentsize'] def _make_segment(self, segment_header): """ Create a Segment object of the appropriate type """ segtype = segment_header['p_type'] if segtype == 'PT_INTERP': return InterpSegment(segment_header, self.stream) elif segtype == 'PT_DYNAMIC': return DynamicSegment(segment_header, self.stream, self) elif segtype == 'PT_NOTE': return NoteSegment(segment_header, self.stream, self) else: return Segment(segment_header, self.stream) def _get_section_header(self, n): """ Find the header of section #n, parse it and return the struct """ return struct_parse( self.structs.Elf_Shdr, self.stream, stream_pos=self._section_offset(n)) def _get_section_name(self, section_header): """ Given a section header, find this section's name in the file's string table """ name_offset = section_header['sh_name'] return self._file_stringtable_section.get_string(name_offset) def _make_section(self, section_header): """ Create a section object of the appropriate type """ name = self._get_section_name(section_header) sectype = section_header['sh_type'] if sectype == 'SHT_STRTAB': return StringTableSection(section_header, name, self) elif sectype == 'SHT_NULL': return NullSection(section_header, name, self) elif sectype in ('SHT_SYMTAB', 'SHT_DYNSYM', 'SHT_SUNW_LDYNSYM'): return self._make_symbol_table_section(section_header, name) elif sectype == 'SHT_SUNW_syminfo': return self._make_sunwsyminfo_table_section(section_header, name) elif sectype == 'SHT_GNU_verneed': return self._make_gnu_verneed_section(section_header, name) elif sectype == 'SHT_GNU_verdef': return self._make_gnu_verdef_section(section_header, name) elif sectype == 'SHT_GNU_versym': return self._make_gnu_versym_section(section_header, name) elif sectype in ('SHT_REL', 'SHT_RELA'): return RelocationSection(section_header, name, self) elif sectype == 'SHT_DYNAMIC': return DynamicSection(section_header, name, self) elif sectype == 'SHT_NOTE': return NoteSection(section_header, name, self) elif sectype == 'SHT_PROGBITS' and name == '.stab': return StabSection(section_header, name, self) elif sectype == 'SHT_ARM_ATTRIBUTES': return ARMAttributesSection(section_header, name, self) else: return Section(section_header, name, self) def _make_symbol_table_section(self, section_header, name): """ Create a SymbolTableSection """ linked_strtab_index = section_header['sh_link'] strtab_section = self.get_section(linked_strtab_index) return SymbolTableSection( section_header, name, elffile=self, stringtable=strtab_section) def _make_sunwsyminfo_table_section(self, section_header, name): """ Create a SUNWSyminfoTableSection """ linked_strtab_index = section_header['sh_link'] strtab_section = self.get_section(linked_strtab_index) return SUNWSyminfoTableSection( section_header, name, elffile=self, symboltable=strtab_section) def _make_gnu_verneed_section(self, section_header, name): """ Create a GNUVerNeedSection """ linked_strtab_index = section_header['sh_link'] strtab_section = self.get_section(linked_strtab_index) return GNUVerNeedSection( section_header, name, elffile=self, stringtable=strtab_section) def _make_gnu_verdef_section(self, section_header, name): """ Create a GNUVerDefSection """ linked_strtab_index = section_header['sh_link'] strtab_section = self.get_section(linked_strtab_index) return GNUVerDefSection( section_header, name, elffile=self, stringtable=strtab_section) def _make_gnu_versym_section(self, section_header, name): """ Create a GNUVerSymSection """ linked_strtab_index = section_header['sh_link'] strtab_section = self.get_section(linked_strtab_index) return GNUVerSymSection( section_header, name, elffile=self, symboltable=strtab_section) def _get_segment_header(self, n): """ Find the header of segment #n, parse it and return the struct """ return struct_parse( self.structs.Elf_Phdr, self.stream, stream_pos=self._segment_offset(n)) def _get_file_stringtable(self): """ Find the file's string table section """ stringtable_section_num = self['e_shstrndx'] return StringTableSection( header=self._get_section_header(stringtable_section_num), name='', elffile=self) def _parse_elf_header(self): """ Parses the ELF file header and assigns the result to attributes of this object. """ return struct_parse(self.structs.Elf_Ehdr, self.stream, stream_pos=0) def _read_dwarf_section(self, section, relocate_dwarf_sections): """ Read the contents of a DWARF section from the stream and return a DebugSectionDescriptor. Apply relocations if asked to. """ # The section data is read into a new stream, for processing section_stream = BytesIO() section_stream.write(section.data()) if relocate_dwarf_sections: reloc_handler = RelocationHandler(self) reloc_section = reloc_handler.find_relocations_for_section(section) if reloc_section is not None: reloc_handler.apply_section_relocations( section_stream, reloc_section) return DebugSectionDescriptor( stream=section_stream, name=section.name, global_offset=section['sh_offset'], size=section['sh_size'], address=section['sh_addr']) @staticmethod def _decompress_dwarf_section(section): """ Returns the uncompressed contents of the provided DWARF section. """ # TODO: support other compression formats from readelf.c assert section.size > 12, 'Unsupported compression format.' section.stream.seek(0) # According to readelf.c the content should contain "ZLIB" # followed by the uncompressed section size - 8 bytes in # big-endian order compression_type = section.stream.read(4) assert compression_type == b'ZLIB', \ 'Invalid compression type: %r' % (compression_type) uncompressed_size = struct.unpack('>Q', section.stream.read(8))[0] decompressor = zlib.decompressobj() uncompressed_stream = BytesIO() while True: chunk = section.stream.read(PAGESIZE) if not chunk: break uncompressed_stream.write(decompressor.decompress(chunk)) uncompressed_stream.write(decompressor.flush()) uncompressed_stream.seek(0, io.SEEK_END) size = uncompressed_stream.tell() assert uncompressed_size == size, \ 'Wrong uncompressed size: expected %r, but got %r' % ( uncompressed_size, size, ) return section._replace(stream=uncompressed_stream, size=size) pyelftools-0.26/elftools/elf/enums.py000066400000000000000000001061341357220457300177540ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools: elf/enums.py # # Mappings of enum names to values # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- from ..common.utils import merge_dicts from ..construct import Pass # e_ident[EI_CLASS] in the ELF header ENUM_EI_CLASS = dict( ELFCLASSNONE=0, ELFCLASS32=1, ELFCLASS64=2 ) # e_ident[EI_DATA] in the ELF header ENUM_EI_DATA = dict( ELFDATANONE=0, ELFDATA2LSB=1, ELFDATA2MSB=2 ) # e_version in the ELF header ENUM_E_VERSION = dict( EV_NONE=0, EV_CURRENT=1, _default_=Pass, ) # e_ident[EI_OSABI] in the ELF header ENUM_EI_OSABI = dict( ELFOSABI_SYSV=0, ELFOSABI_HPUX=1, ELFOSABI_NETBSD=2, ELFOSABI_LINUX=3, ELFOSABI_HURD=4, ELFOSABI_SOLARIS=6, ELFOSABI_AIX=7, ELFOSABI_IRIX=8, ELFOSABI_FREEBSD=9, ELFOSABI_TRU64=10, ELFOSABI_MODESTO=11, ELFOSABI_OPENBSD=12, ELFOSABI_OPENVMS=13, ELFOSABI_NSK=14, ELFOSABI_AROS=15, ELFOSABI_FENIXOS=16, ELFOSABI_CLOUD=17, ELFOSABI_SORTIX=53, ELFOSABI_ARM_AEABI=64, ELFOSABI_ARM=97, ELFOSABI_STANDALONE=255, _default_=Pass, ) # e_type in the ELF header ENUM_E_TYPE = dict( ET_NONE=0, ET_REL=1, ET_EXEC=2, ET_DYN=3, ET_CORE=4, ET_LOPROC=0xff00, ET_HIPROC=0xffff, _default_=Pass, ) # e_machine in the ELF header ENUM_E_MACHINE = dict( EM_NONE = 0, # No machine EM_M32 = 1, # AT&T WE 32100 EM_SPARC = 2, # SPARC EM_386 = 3, # Intel 80386 EM_68K = 4, # Motorola 68000 EM_88K = 5, # Motorola 88000 EM_IAMCU = 6, # Intel MCU EM_860 = 7, # Intel 80860 EM_MIPS = 8, # MIPS I Architecture EM_S370 = 9, # IBM System/370 Processor EM_MIPS_RS3_LE = 10, # MIPS RS3000 Little-endian EM_PARISC = 15, # Hewlett-Packard PA-RISC EM_VPP500 = 17, # Fujitsu VPP500 EM_SPARC32PLUS = 18, # Enhanced instruction set SPARC EM_960 = 19, # Intel 80960 EM_PPC = 20, # PowerPC EM_PPC64 = 21, # 64-bit PowerPC EM_S390 = 22, # IBM System/390 Processor EM_SPU = 23, # IBM SPU/SPC EM_V800 = 36, # NEC V800 EM_FR20 = 37, # Fujitsu FR20 EM_RH32 = 38, # TRW RH-32 EM_RCE = 39, # Motorola RCE EM_ARM = 40, # ARM 32-bit architecture (AARCH32) EM_ALPHA = 41, # Digital Alpha EM_SH = 42, # Hitachi SH EM_SPARCV9 = 43, # SPARC Version 9 EM_TRICORE = 44, # Siemens TriCore embedded processor EM_ARC = 45, # Argonaut RISC Core, Argonaut Technologies Inc. EM_H8_300 = 46, # Hitachi H8/300 EM_H8_300H = 47, # Hitachi H8/300H EM_H8S = 48, # Hitachi H8S EM_H8_500 = 49, # Hitachi H8/500 EM_IA_64 = 50, # Intel IA-64 processor architecture EM_MIPS_X = 51, # Stanford MIPS-X EM_COLDFIRE = 52, # Motorola ColdFire EM_68HC12 = 53, # Motorola M68HC12 EM_MMA = 54, # Fujitsu MMA Multimedia Accelerator EM_PCP = 55, # Siemens PCP EM_NCPU = 56, # Sony nCPU embedded RISC processor EM_NDR1 = 57, # Denso NDR1 microprocessor EM_STARCORE = 58, # Motorola Star*Core processor EM_ME16 = 59, # Toyota ME16 processor EM_ST100 = 60, # STMicroelectronics ST100 processor EM_TINYJ = 61, # Advanced Logic Corp. TinyJ embedded processor family EM_X86_64 = 62, # AMD x86-64 architecture EM_PDSP = 63, # Sony DSP Processor EM_PDP10 = 64, # Digital Equipment Corp. PDP-10 EM_PDP11 = 65, # Digital Equipment Corp. PDP-11 EM_FX66 = 66, # Siemens FX66 microcontroller EM_ST9PLUS = 67, # STMicroelectronics ST9+ 8/16 bit microcontroller EM_ST7 = 68, # STMicroelectronics ST7 8-bit microcontroller EM_68HC16 = 69, # Motorola MC68HC16 Microcontroller EM_68HC11 = 70, # Motorola MC68HC11 Microcontroller EM_68HC08 = 71, # Motorola MC68HC08 Microcontroller EM_68HC05 = 72, # Motorola MC68HC05 Microcontroller EM_SVX = 73, # Silicon Graphics SVx EM_ST19 = 74, # STMicroelectronics ST19 8-bit microcontroller EM_VAX = 75, # Digital VAX EM_CRIS = 76, # Axis Communications 32-bit embedded processor EM_JAVELIN = 77, # Infineon Technologies 32-bit embedded processor EM_FIREPATH = 78, # Element 14 64-bit DSP Processor EM_ZSP = 79, # LSI Logic 16-bit DSP Processor EM_MMIX = 80, # Donald Knuth's educational 64-bit processor EM_HUANY = 81, # Harvard University machine-independent object files EM_PRISM = 82, # SiTera Prism EM_AVR = 83, # Atmel AVR 8-bit microcontroller EM_FR30 = 84, # Fujitsu FR30 EM_D10V = 85, # Mitsubishi D10V EM_D30V = 86, # Mitsubishi D30V EM_V850 = 87, # NEC v850 EM_M32R = 88, # Mitsubishi M32R EM_MN10300 = 89, # Matsushita MN10300 EM_MN10200 = 90, # Matsushita MN10200 EM_PJ = 91, # picoJava EM_OPENRISC = 92, # OpenRISC 32-bit embedded processor EM_ARC_COMPACT = 93, # ARC International ARCompact processor (old spelling/synonym: EM_ARC_A5) EM_XTENSA = 94, # Tensilica Xtensa Architecture EM_VIDEOCORE = 95, # Alphamosaic VideoCore processor EM_TMM_GPP = 96, # Thompson Multimedia General Purpose Processor EM_NS32K = 97, # National Semiconductor 32000 series EM_TPC = 98, # Tenor Network TPC processor EM_SNP1K = 99, # Trebia SNP 1000 processor EM_ST200 = 100, # STMicroelectronics (www.st.com) ST200 microcontroller EM_IP2K = 101, # Ubicom IP2xxx microcontroller family EM_MAX = 102, # MAX Processor EM_CR = 103, # National Semiconductor CompactRISC microprocessor EM_F2MC16 = 104, # Fujitsu F2MC16 EM_MSP430 = 105, # Texas Instruments embedded microcontroller msp430 EM_BLACKFIN = 106, # Analog Devices Blackfin (DSP) processor EM_SE_C33 = 107, # S1C33 Family of Seiko Epson processors EM_SEP = 108, # Sharp embedded microprocessor EM_ARCA = 109, # Arca RISC Microprocessor EM_UNICORE = 110, # Microprocessor series from PKU-Unity Ltd. and MPRC of Peking University EM_EXCESS = 111, # eXcess: 16/32/64-bit configurable embedded CPU EM_DXP = 112, # Icera Semiconductor Inc. Deep Execution Processor EM_ALTERA_NIOS2 = 113, # Altera Nios II soft-core processor EM_CRX = 114, # National Semiconductor CompactRISC CRX microprocessor EM_XGATE = 115, # Motorola XGATE embedded processor EM_C166 = 116, # Infineon C16x/XC16x processor EM_M16C = 117, # Renesas M16C series microprocessors EM_DSPIC30F = 118, # Microchip Technology dsPIC30F Digital Signal Controller EM_CE = 119, # Freescale Communication Engine RISC core EM_M32C = 120, # Renesas M32C series microprocessors EM_TSK3000 = 131, # Altium TSK3000 core EM_RS08 = 132, # Freescale RS08 embedded processor EM_SHARC = 133, # Analog Devices SHARC family of 32-bit DSP processors EM_ECOG2 = 134, # Cyan Technology eCOG2 microprocessor EM_SCORE7 = 135, # Sunplus S+core7 RISC processor EM_DSP24 = 136, # New Japan Radio (NJR) 24-bit DSP Processor EM_VIDEOCORE3 = 137, # Broadcom VideoCore III processor EM_LATTICEMICO32 = 138, # RISC processor for Lattice FPGA architecture EM_SE_C17 = 139, # Seiko Epson C17 family EM_TI_C6000 = 140, # The Texas Instruments TMS320C6000 DSP family EM_TI_C2000 = 141, # The Texas Instruments TMS320C2000 DSP family EM_TI_C5500 = 142, # The Texas Instruments TMS320C55x DSP family EM_TI_ARP32 = 143, # Texas Instruments Application Specific RISC Processor, 32bit fetch EM_TI_PRU = 144, # Texas Instruments Programmable Realtime Unit EM_MMDSP_PLUS = 160, # STMicroelectronics 64bit VLIW Data Signal Processor EM_CYPRESS_M8C = 161, # Cypress M8C microprocessor EM_R32C = 162, # Renesas R32C series microprocessors EM_TRIMEDIA = 163, # NXP Semiconductors TriMedia architecture family EM_QDSP6 = 164, # QUALCOMM DSP6 Processor EM_8051 = 165, # Intel 8051 and variants EM_STXP7X = 166, # STMicroelectronics STxP7x family of configurable and extensible RISC processors EM_NDS32 = 167, # Andes Technology compact code size embedded RISC processor family EM_ECOG1 = 168, # Cyan Technology eCOG1X family EM_ECOG1X = 168, # Cyan Technology eCOG1X family EM_MAXQ30 = 169, # Dallas Semiconductor MAXQ30 Core Micro-controllers EM_XIMO16 = 170, # New Japan Radio (NJR) 16-bit DSP Processor EM_MANIK = 171, # M2000 Reconfigurable RISC Microprocessor EM_CRAYNV2 = 172, # Cray Inc. NV2 vector architecture EM_RX = 173, # Renesas RX family EM_METAG = 174, # Imagination Technologies META processor architecture EM_MCST_ELBRUS = 175, # MCST Elbrus general purpose hardware architecture EM_ECOG16 = 176, # Cyan Technology eCOG16 family EM_CR16 = 177, # National Semiconductor CompactRISC CR16 16-bit microprocessor EM_ETPU = 178, # Freescale Extended Time Processing Unit EM_SLE9X = 179, # Infineon Technologies SLE9X core EM_L10M = 180, # Intel L10M EM_K10M = 181, # Intel K10M EM_AARCH64 = 183, # ARM 64-bit architecture (AARCH64) EM_AVR32 = 185, # Atmel Corporation 32-bit microprocessor family EM_STM8 = 186, # STMicroeletronics STM8 8-bit microcontroller EM_TILE64 = 187, # Tilera TILE64 multicore architecture family EM_TILEPRO = 188, # Tilera TILEPro multicore architecture family EM_MICROBLAZE = 189, # Xilinx MicroBlaze 32-bit RISC soft processor core EM_CUDA = 190, # NVIDIA CUDA architecture EM_TILEGX = 191, # Tilera TILE-Gx multicore architecture family EM_CLOUDSHIELD = 192, # CloudShield architecture family EM_COREA_1ST = 193, # KIPO-KAIST Core-A 1st generation processor family EM_COREA_2ND = 194, # KIPO-KAIST Core-A 2nd generation processor family EM_ARC_COMPACT2 = 195, # Synopsys ARCompact V2 EM_OPEN8 = 196, # Open8 8-bit RISC soft processor core EM_RL78 = 197, # Renesas RL78 family EM_VIDEOCORE5 = 198, # Broadcom VideoCore V processor EM_78KOR = 199, # Renesas 78KOR family EM_56800EX = 200, # Freescale 56800EX Digital Signal Controller (DSC) EM_BA1 = 201, # Beyond BA1 CPU architecture EM_BA2 = 202, # Beyond BA2 CPU architecture EM_XCORE = 203, # XMOS xCORE processor family EM_MCHP_PIC = 204, # Microchip 8-bit PIC(r) family EM_INTEL205 = 205, # Reserved by Intel EM_INTEL206 = 206, # Reserved by Intel EM_INTEL207 = 207, # Reserved by Intel EM_INTEL208 = 208, # Reserved by Intel EM_INTEL209 = 209, # Reserved by Intel EM_KM32 = 210, # KM211 KM32 32-bit processor EM_KMX32 = 211, # KM211 KMX32 32-bit processor EM_KMX16 = 212, # KM211 KMX16 16-bit processor EM_KMX8 = 213, # KM211 KMX8 8-bit processor EM_KVARC = 214, # KM211 KVARC processor EM_CDP = 215, # Paneve CDP architecture family EM_COGE = 216, # Cognitive Smart Memory Processor EM_COOL = 217, # Bluechip Systems CoolEngine EM_NORC = 218, # Nanoradio Optimized RISC EM_CSR_KALIMBA = 219, # CSR Kalimba architecture family EM_Z80 = 220, # Zilog Z80 EM_VISIUM = 221, # Controls and Data Services VISIUMcore processor EM_FT32 = 222, # FTDI Chip FT32 high performance 32-bit RISC architecture EM_MOXIE = 223, # Moxie processor family EM_AMDGPU = 224, # AMD GPU architecture EM_RISCV = 243, # RISC-V # Reservations # reserved 11-14 Reserved for future use # reserved 16 Reserved for future use # reserved 24-35 Reserved for future use # reserved 121-130 Reserved for future use # reserved 145-159 Reserved for future use # reserved 145-159 Reserved for future use # reserved 182 Reserved for future Intel use # reserved 184 Reserved for future ARM use # unknown/reserve? 225 - 242 _default_=Pass, ) # sh_type in the section header # # This is the "base" dict that doesn't hold processor-specific values; from it # we later create per-processor dicts that use the LOPROC...HIPROC range to # define processor-specific values. The proper dict should be used based on the # machine the ELF header refers to. ENUM_SH_TYPE_BASE = dict( SHT_NULL=0, SHT_PROGBITS=1, SHT_SYMTAB=2, SHT_STRTAB=3, SHT_RELA=4, SHT_HASH=5, SHT_DYNAMIC=6, SHT_NOTE=7, SHT_NOBITS=8, SHT_REL=9, SHT_SHLIB=10, SHT_DYNSYM=11, SHT_INIT_ARRAY=14, SHT_FINI_ARRAY=15, SHT_PREINIT_ARRAY=16, SHT_GROUP=17, SHT_SYMTAB_SHNDX=18, SHT_NUM=19, SHT_LOOS=0x60000000, SHT_GNU_ATTRIBUTES=0x6ffffff5, SHT_GNU_HASH=0x6ffffff6, SHT_GNU_LIBLIST=0x6ffffff7, SHT_GNU_verdef=0x6ffffffd, # also SHT_SUNW_verdef SHT_GNU_verneed=0x6ffffffe, # also SHT_SUNW_verneed SHT_GNU_versym=0x6fffffff, # also SHT_SUNW_versym, SHT_HIOS # These are commented out because they carry no semantic meaning in # themselves and may be overridden by target-specific enums. #SHT_LOPROC=0x70000000, #SHT_HIPROC=0x7fffffff, SHT_LOUSER=0x80000000, SHT_HIUSER=0xffffffff, SHT_SUNW_LDYNSYM=0x6ffffff3, SHT_SUNW_syminfo=0x6ffffffc, _default_=Pass, ) ENUM_SH_TYPE_AMD64 = merge_dicts( ENUM_SH_TYPE_BASE, dict(SHT_AMD64_UNWIND=0x70000001)) ENUM_SH_TYPE_ARM = merge_dicts( ENUM_SH_TYPE_BASE, dict( SHT_ARM_EXIDX=0x70000001, SHT_ARM_PREEMPTMAP=0x70000002, SHT_ARM_ATTRIBUTES=0x70000003, SHT_ARM_DEBUGOVERLAY=0x70000004)) ENUM_SH_TYPE_MIPS = merge_dicts( ENUM_SH_TYPE_BASE, dict( SHT_MIPS_LIBLIST=0x70000000, SHT_MIPS_DEBUG=0x70000005, SHT_MIPS_REGINFO=0x70000006, SHT_MIPS_PACKAGE=0x70000007, SHT_MIPS_PACKSYM=0x70000008, SHT_MIPS_RELD=0x70000009, SHT_MIPS_IFACE=0x7000000b, SHT_MIPS_CONTENT=0x7000000c, SHT_MIPS_OPTIONS=0x7000000d, SHT_MIPS_SHDR=0x70000010, SHT_MIPS_FDESC=0x70000011, SHT_MIPS_EXTSYM=0x70000012, SHT_MIPS_DENSE=0x70000013, SHT_MIPS_PDESC=0x70000014, SHT_MIPS_LOCSYM=0x70000015, SHT_MIPS_AUXSYM=0x70000016, SHT_MIPS_OPTSYM=0x70000017, SHT_MIPS_LOCSTR=0x70000018, SHT_MIPS_LINE=0x70000019, SHT_MIPS_RFDESC=0x7000001a, SHT_MIPS_DELTASYM=0x7000001b, SHT_MIPS_DELTAINST=0x7000001c, SHT_MIPS_DELTACLASS=0x7000001d, SHT_MIPS_DWARF=0x7000001e, SHT_MIPS_DELTADECL=0x7000001f, SHT_MIPS_SYMBOL_LIB=0x70000020, SHT_MIPS_EVENTS=0x70000021, SHT_MIPS_TRANSLATE=0x70000022, SHT_MIPS_PIXIE=0x70000023, SHT_MIPS_XLATE=0x70000024, SHT_MIPS_XLATE_DEBUG=0x70000025, SHT_MIPS_WHIRL=0x70000026, SHT_MIPS_EH_REGION=0x70000027, SHT_MIPS_XLATE_OLD=0x70000028, SHT_MIPS_PDR_EXCEPTION=0x70000029)) ENUM_ELFCOMPRESS_TYPE = dict( ELFCOMPRESS_ZLIB=1, ELFCOMPRESS_LOOS=0x60000000, ELFCOMPRESS_HIOS=0x6fffffff, ELFCOMPRESS_LOPROC=0x70000000, ELFCOMPRESS_HIPROC=0x7fffffff, _default_=Pass, ) # p_type in the program header # some values scavenged from the ELF headers in binutils-2.21 # # Using the same base + per-processor augmentation technique as in sh_type. ENUM_P_TYPE_BASE = dict( PT_NULL=0, PT_LOAD=1, PT_DYNAMIC=2, PT_INTERP=3, PT_NOTE=4, PT_SHLIB=5, PT_PHDR=6, PT_TLS=7, PT_LOOS=0x60000000, PT_HIOS=0x6fffffff, # These are commented out because they carry no semantic meaning in # themselves and may be overridden by target-specific enums. #PT_LOPROC=0x70000000, #PT_HIPROC=0x7fffffff, PT_GNU_EH_FRAME=0x6474e550, PT_GNU_STACK=0x6474e551, PT_GNU_RELRO=0x6474e552, _default_=Pass, ) ENUM_P_TYPE_ARM = merge_dicts( ENUM_P_TYPE_BASE, dict( PT_ARM_ARCHEXT=0x70000000, PT_ARM_EXIDX=0x70000001)) ENUM_P_TYPE_AARCH64 = merge_dicts( ENUM_P_TYPE_BASE, dict( PT_AARCH64_ARCHEXT=0x70000000, PT_AARCH64_UNWIND=0x70000001)) ENUM_P_TYPE_MIPS = merge_dicts( ENUM_P_TYPE_BASE, dict(PT_MIPS_ABIFLAGS=0x70000003)) # st_info bindings in the symbol header ENUM_ST_INFO_BIND = dict( STB_LOCAL=0, STB_GLOBAL=1, STB_WEAK=2, STB_NUM=3, STB_LOOS=10, STB_HIOS=12, STB_LOPROC=13, STB_HIPROC=15, _default_=Pass, ) # st_info type in the symbol header ENUM_ST_INFO_TYPE = dict( STT_NOTYPE=0, STT_OBJECT=1, STT_FUNC=2, STT_SECTION=3, STT_FILE=4, STT_COMMON=5, STT_TLS=6, STT_NUM=7, STT_RELC=8, STT_SRELC=9, STT_LOOS=10, STT_HIOS=12, STT_LOPROC=13, STT_HIPROC=15, _default_=Pass, ) # visibility from st_other ENUM_ST_VISIBILITY = dict( STV_DEFAULT=0, STV_INTERNAL=1, STV_HIDDEN=2, STV_PROTECTED=3, STV_EXPORTED=4, STV_SINGLETON=5, STV_ELIMINATE=6, _default_=Pass, ) # st_shndx ENUM_ST_SHNDX = dict( SHN_UNDEF=0, SHN_ABS=0xfff1, SHN_COMMON=0xfff2, _default_=Pass, ) # d_tag ENUM_D_TAG_COMMON = dict( DT_NULL=0, DT_NEEDED=1, DT_PLTRELSZ=2, DT_PLTGOT=3, DT_HASH=4, DT_STRTAB=5, DT_SYMTAB=6, DT_RELA=7, DT_RELASZ=8, DT_RELAENT=9, DT_STRSZ=10, DT_SYMENT=11, DT_INIT=12, DT_FINI=13, DT_SONAME=14, DT_RPATH=15, DT_SYMBOLIC=16, DT_REL=17, DT_RELSZ=18, DT_RELENT=19, DT_PLTREL=20, DT_DEBUG=21, DT_TEXTREL=22, DT_JMPREL=23, DT_BIND_NOW=24, DT_INIT_ARRAY=25, DT_FINI_ARRAY=26, DT_INIT_ARRAYSZ=27, DT_FINI_ARRAYSZ=28, DT_RUNPATH=29, DT_FLAGS=30, DT_ENCODING=32, DT_PREINIT_ARRAY=32, DT_PREINIT_ARRAYSZ=33, DT_NUM=34, DT_LOOS=0x6000000d, DT_HIOS=0x6ffff000, DT_LOPROC=0x70000000, DT_HIPROC=0x7fffffff, DT_PROCNUM=0x35, DT_VALRNGLO=0x6ffffd00, DT_GNU_PRELINKED=0x6ffffdf5, DT_GNU_CONFLICTSZ=0x6ffffdf6, DT_GNU_LIBLISTSZ=0x6ffffdf7, DT_CHECKSUM=0x6ffffdf8, DT_PLTPADSZ=0x6ffffdf9, DT_MOVEENT=0x6ffffdfa, DT_MOVESZ=0x6ffffdfb, DT_SYMINSZ=0x6ffffdfe, DT_SYMINENT=0x6ffffdff, DT_GNU_HASH=0x6ffffef5, DT_TLSDESC_PLT=0x6ffffef6, DT_TLSDESC_GOT=0x6ffffef7, DT_GNU_CONFLICT=0x6ffffef8, DT_GNU_LIBLIST=0x6ffffef9, DT_CONFIG=0x6ffffefa, DT_DEPAUDIT=0x6ffffefb, DT_AUDIT=0x6ffffefc, DT_PLTPAD=0x6ffffefd, DT_MOVETAB=0x6ffffefe, DT_SYMINFO=0x6ffffeff, DT_VERSYM=0x6ffffff0, DT_RELACOUNT=0x6ffffff9, DT_RELCOUNT=0x6ffffffa, DT_FLAGS_1=0x6ffffffb, DT_VERDEF=0x6ffffffc, DT_VERDEFNUM=0x6ffffffd, DT_VERNEED=0x6ffffffe, DT_VERNEEDNUM=0x6fffffff, DT_AUXILIARY=0x7ffffffd, DT_FILTER=0x7fffffff, _default_=Pass, ) # Above are the dynamic tags which are valid always. # Below are the dynamic tags which are only valid in certain contexts. ENUM_D_TAG_SOLARIS = dict( DT_SUNW_AUXILIARY=0x6000000d, DT_SUNW_RTLDINF=0x6000000e, DT_SUNW_FILTER=0x6000000f, DT_SUNW_CAP=0x60000010, DT_SUNW_SYMTAB=0x60000011, DT_SUNW_SYMSZ=0x60000012, DT_SUNW_ENCODING=0x60000013, DT_SUNW_SORTENT=0x60000013, DT_SUNW_SYMSORT=0x60000014, DT_SUNW_SYMSORTSZ=0x60000015, DT_SUNW_TLSSORT=0x60000016, DT_SUNW_TLSSORTSZ=0x60000017, DT_SUNW_CAPINFO=0x60000018, DT_SUNW_STRPAD=0x60000019, DT_SUNW_CAPCHAIN=0x6000001a, DT_SUNW_LDMACH=0x6000001b, DT_SUNW_CAPCHAINENT=0x6000001d, DT_SUNW_CAPCHAINSZ=0x6000001f, ) ENUM_D_TAG_MIPS = dict( DT_MIPS_RLD_VERSION=0x70000001, DT_MIPS_TIME_STAMP=0x70000002, DT_MIPS_ICHECKSUM=0x70000003, DT_MIPS_IVERSION=0x70000004, DT_MIPS_FLAGS=0x70000005, DT_MIPS_BASE_ADDRESS=0x70000006, DT_MIPS_CONFLICT=0x70000008, DT_MIPS_LIBLIST=0x70000009, DT_MIPS_LOCAL_GOTNO=0x7000000a, DT_MIPS_CONFLICTNO=0x7000000b, DT_MIPS_LIBLISTNO=0x70000010, DT_MIPS_SYMTABNO=0x70000011, DT_MIPS_UNREFEXTNO=0x70000012, DT_MIPS_GOTSYM=0x70000013, DT_MIPS_HIPAGENO=0x70000014, DT_MIPS_RLD_MAP=0x70000016, DT_MIPS_RLD_MAP_REL=0x70000035, ) # Here is the mapping from e_machine enum to the extra dynamic tags which it # validates. Solaris is missing from this list because its inclusion is not # controlled by e_machine but rather e_ident[EI_OSABI]. # TODO: add the rest of the machine-specific dynamic tags, not just mips and # solaris ENUMMAP_EXTRA_D_TAG_MACHINE = dict( EM_MIPS=ENUM_D_TAG_MIPS, EM_MIPS_RS3_LE=ENUM_D_TAG_MIPS, ) # Here is the full combined mapping from tag name to value ENUM_D_TAG = dict(ENUM_D_TAG_COMMON) ENUM_D_TAG.update(ENUM_D_TAG_SOLARIS) for k in ENUMMAP_EXTRA_D_TAG_MACHINE: ENUM_D_TAG.update(ENUMMAP_EXTRA_D_TAG_MACHINE[k]) ENUM_DT_FLAGS = dict( DF_ORIGIN=0x1, DF_SYMBOLIC=0x2, DF_TEXTREL=0x4, DF_BIND_NOW=0x8, DF_STATIC_TLS=0x10, ) ENUM_DT_FLAGS_1 = dict( DF_1_NOW=0x1, DF_1_GLOBAL=0x2, DF_1_GROUP=0x4, DF_1_NODELETE=0x8, DF_1_LOADFLTR=0x10, DF_1_INITFIRST=0x20, DF_1_NOOPEN=0x40, DF_1_ORIGIN=0x80, DF_1_DIRECT=0x100, DF_1_TRANS=0x200, DF_1_INTERPOSE=0x400, DF_1_NODEFLIB=0x800, DF_1_NODUMP=0x1000, DF_1_CONFALT=0x2000, DF_1_ENDFILTEE=0x4000, DF_1_DISPRELDNE=0x8000, DF_1_DISPRELPND=0x10000, DF_1_NODIRECT=0x20000, DF_1_IGNMULDEF=0x40000, DF_1_NOKSYMS=0x80000, DF_1_NOHDR=0x100000, DF_1_EDITED=0x200000, DF_1_NORELOC=0x400000, DF_1_SYMINTPOSE=0x800000, DF_1_GLOBAUDIT=0x1000000, DF_1_SINGLETON=0x2000000, DF_1_STUB=0x4000000, DF_1_PIE=0x8000000, ) ENUM_RELOC_TYPE_MIPS = dict( R_MIPS_NONE=0, R_MIPS_16=1, R_MIPS_32=2, R_MIPS_REL32=3, R_MIPS_26=4, R_MIPS_HI16=5, R_MIPS_LO16=6, R_MIPS_GPREL16=7, R_MIPS_LITERAL=8, R_MIPS_GOT16=9, R_MIPS_PC16=10, R_MIPS_CALL16=11, R_MIPS_GPREL32=12, R_MIPS_SHIFT5=16, R_MIPS_SHIFT6=17, R_MIPS_64=18, R_MIPS_GOT_DISP=19, R_MIPS_GOT_PAGE=20, R_MIPS_GOT_OFST=21, R_MIPS_GOT_HI16=22, R_MIPS_GOT_LO16=23, R_MIPS_SUB=24, R_MIPS_INSERT_A=25, R_MIPS_INSERT_B=26, R_MIPS_DELETE=27, R_MIPS_HIGHER=28, R_MIPS_HIGHEST=29, R_MIPS_CALL_HI16=30, R_MIPS_CALL_LO16=31, R_MIPS_SCN_DISP=32, R_MIPS_REL16=33, R_MIPS_ADD_IMMEDIATE=34, R_MIPS_PJUMP=35, R_MIPS_RELGOT=36, R_MIPS_JALR=37, R_MIPS_TLS_DTPMOD32=38, R_MIPS_TLS_DTPREL32=39, R_MIPS_TLS_DTPMOD64=40, R_MIPS_TLS_DTPREL64=41, R_MIPS_TLS_GD=42, R_MIPS_TLS_LDM=43, R_MIPS_TLS_DTPREL_HI16=44, R_MIPS_TLS_DTPREL_LO16=45, R_MIPS_TLS_GOTTPREL=46, R_MIPS_TLS_TPREL32=47, R_MIPS_TLS_TPREL64=48, R_MIPS_TLS_TPREL_HI16=49, R_MIPS_TLS_TPREL_LO16=50, R_MIPS_GLOB_DAT=51, R_MIPS_COPY=126, R_MIPS_JUMP_SLOT=127, _default_=Pass, ) ENUM_RELOC_TYPE_i386 = dict( R_386_NONE=0, R_386_32=1, R_386_PC32=2, R_386_GOT32=3, R_386_PLT32=4, R_386_COPY=5, R_386_GLOB_DAT=6, R_386_JUMP_SLOT=7, R_386_RELATIVE=8, R_386_GOTOFF=9, R_386_GOTPC=10, R_386_32PLT=11, R_386_TLS_TPOFF=14, R_386_TLS_IE=15, R_386_TLS_GOTIE=16, R_386_TLS_LE=17, R_386_TLS_GD=18, R_386_TLS_LDM=19, R_386_16=20, R_386_PC16=21, R_386_8=22, R_386_PC8=23, R_386_TLS_GD_32=24, R_386_TLS_GD_PUSH=25, R_386_TLS_GD_CALL=26, R_386_TLS_GD_POP=27, R_386_TLS_LDM_32=28, R_386_TLS_LDM_PUSH=29, R_386_TLS_LDM_CALL=30, R_386_TLS_LDM_POP=31, R_386_TLS_LDO_32=32, R_386_TLS_IE_32=33, R_386_TLS_LE_32=34, R_386_TLS_DTPMOD32=35, R_386_TLS_DTPOFF32=36, R_386_TLS_TPOFF32=37, R_386_TLS_GOTDESC=39, R_386_TLS_DESC_CALL=40, R_386_TLS_DESC=41, R_386_IRELATIVE=42, R_386_USED_BY_INTEL_200=200, R_386_GNU_VTINHERIT=250, R_386_GNU_VTENTRY=251, _default_=Pass, ) ENUM_RELOC_TYPE_x64 = dict( R_X86_64_NONE=0, R_X86_64_64=1, R_X86_64_PC32=2, R_X86_64_GOT32=3, R_X86_64_PLT32=4, R_X86_64_COPY=5, R_X86_64_GLOB_DAT=6, R_X86_64_JUMP_SLOT=7, R_X86_64_RELATIVE=8, R_X86_64_GOTPCREL=9, R_X86_64_32=10, R_X86_64_32S=11, R_X86_64_16=12, R_X86_64_PC16=13, R_X86_64_8=14, R_X86_64_PC8=15, R_X86_64_DTPMOD64=16, R_X86_64_DTPOFF64=17, R_X86_64_TPOFF64=18, R_X86_64_TLSGD=19, R_X86_64_TLSLD=20, R_X86_64_DTPOFF32=21, R_X86_64_GOTTPOFF=22, R_X86_64_TPOFF32=23, R_X86_64_PC64=24, R_X86_64_GOTOFF64=25, R_X86_64_GOTPC32=26, R_X86_64_GOT64=27, R_X86_64_GOTPCREL64=28, R_X86_64_GOTPC64=29, R_X86_64_GOTPLT64=30, R_X86_64_PLTOFF64=31, R_X86_64_GOTPC32_TLSDESC=34, R_X86_64_TLSDESC_CALL=35, R_X86_64_TLSDESC=36, R_X86_64_IRELATIVE=37, R_X86_64_GNU_VTINHERIT=250, R_X86_64_GNU_VTENTRY=251, _default_=Pass, ) # Sunw Syminfo Bound To special values ENUM_SUNW_SYMINFO_BOUNDTO = dict( SYMINFO_BT_SELF=0xffff, SYMINFO_BT_PARENT=0xfffe, SYMINFO_BT_NONE=0xfffd, SYMINFO_BT_EXTERN=0xfffc, _default_=Pass, ) # Versym section, version dependency index ENUM_VERSYM = dict( VER_NDX_LOCAL=0, VER_NDX_GLOBAL=1, VER_NDX_LORESERVE=0xff00, VER_NDX_ELIMINATE=0xff01, _default_=Pass, ) # Sunw Syminfo Bound To special values ENUM_SUNW_SYMINFO_BOUNDTO = dict( SYMINFO_BT_SELF=0xffff, SYMINFO_BT_PARENT=0xfffe, SYMINFO_BT_NONE=0xfffd, SYMINFO_BT_EXTERN=0xfffc, _default_=Pass, ) # PT_NOTE section types for all ELF types except ET_CORE ENUM_NOTE_N_TYPE = dict( NT_GNU_ABI_TAG=1, NT_GNU_HWCAP=2, NT_GNU_BUILD_ID=3, NT_GNU_GOLD_VERSION=4, _default_=Pass, ) # PT_NOTE section types for ET_CORE ENUM_CORE_NOTE_N_TYPE = dict( NT_PRSTATUS=1, NT_FPREGSET=2, NT_PRPSINFO=3, NT_TASKSTRUCT=4, NT_AUXV=6, NT_SIGINFO=0x53494749, NT_FILE=0x46494c45, _default_=Pass, ) # Values in GNU .note.ABI-tag notes (n_type=='NT_GNU_ABI_TAG') ENUM_NOTE_ABI_TAG_OS = dict( ELF_NOTE_OS_LINUX=0, ELF_NOTE_OS_GNU=1, ELF_NOTE_OS_SOLARIS2=2, ELF_NOTE_OS_FREEBSD=3, ELF_NOTE_OS_NETBSD=4, ELF_NOTE_OS_SYLLABLE=5, _default_=Pass, ) ENUM_RELOC_TYPE_ARM = dict( R_ARM_NONE=0, R_ARM_PC24=1, R_ARM_ABS32=2, R_ARM_REL32=3, R_ARM_LDR_PC_G0=4, R_ARM_ABS16=5, R_ARM_ABS12=6, R_ARM_THM_ABS5=7, R_ARM_ABS8=8, R_ARM_SBREL32=9, R_ARM_THM_CALL=10, R_ARM_THM_PC8=11, R_ARM_BREL_ADJ=12, R_ARM_SWI24=13, R_ARM_THM_SWI8=14, R_ARM_XPC25=15, R_ARM_THM_XPC22=16, R_ARM_TLS_DTPMOD32=17, R_ARM_TLS_DTPOFF32=18, R_ARM_TLS_TPOFF32=19, R_ARM_COPY=20, R_ARM_GLOB_DAT=21, R_ARM_JUMP_SLOT=22, R_ARM_RELATIVE=23, R_ARM_GOTOFF32=24, R_ARM_BASE_PREL=25, R_ARM_GOT_BREL=26, R_ARM_PLT32=27, R_ARM_CALL=28, R_ARM_JUMP24=29, R_ARM_THM_JUMP24=30, R_ARM_BASE_ABS=31, R_ARM_ALU_PCREL_7_0=32, R_ARM_ALU_PCREL_15_8=33, R_ARM_ALU_PCREL_23_15=34, R_ARM_LDR_SBREL_11_0_NC=35, R_ARM_ALU_SBREL_19_12_NC=36, R_ARM_ALU_SBREL_27_20_CK=37, R_ARM_TARGET1=38, R_ARM_SBREL31=39, R_ARM_V4BX=40, R_ARM_TARGET2=41, R_ARM_PREL31=42, R_ARM_MOVW_ABS_NC=43, R_ARM_MOVT_ABS=44, R_ARM_MOVW_PREL_NC=45, R_ARM_MOVT_PREL=46, R_ARM_THM_MOVW_ABS_NC=47, R_ARM_THM_MOVT_ABS=48, R_ARM_THM_MOVW_PREL_NC=49, R_ARM_THM_MOVT_PREL=50, R_ARM_THM_JUMP19=51, R_ARM_THM_JUMP6=52, R_ARM_THM_ALU_PREL_11_0=53, R_ARM_THM_PC12=54, R_ARM_ABS32_NOI=55, R_ARM_REL32_NOI=56, R_ARM_ALU_PC_G0_NC=57, R_ARM_ALU_PC_G0=58, R_ARM_ALU_PC_G1_NC=59, R_ARM_ALU_PC_G1=60, R_ARM_ALU_PC_G2=61, R_ARM_LDR_PC_G1=62, R_ARM_LDR_PC_G2=63, R_ARM_LDRS_PC_G0=64, R_ARM_LDRS_PC_G1=65, R_ARM_LDRS_PC_G2=66, R_ARM_LDC_PC_G0=67, R_ARM_LDC_PC_G1=68, R_ARM_LDC_PC_G2=69, R_ARM_ALU_SB_G0_NC=70, R_ARM_ALU_SB_G0=71, R_ARM_ALU_SB_G1_NC=72, R_ARM_ALU_SB_G1=73, R_ARM_ALU_SB_G2=74, R_ARM_LDR_SB_G0=75, R_ARM_LDR_SB_G1=76, R_ARM_LDR_SB_G2=77, R_ARM_LDRS_SB_G0=78, R_ARM_LDRS_SB_G1=79, R_ARM_LDRS_SB_G2=80, R_ARM_LDC_SB_G0=81, R_ARM_LDC_SB_G1=82, R_ARM_LDC_SB_G2=83, R_ARM_MOVW_BREL_NC=84, R_ARM_MOVT_BREL=85, R_ARM_MOVW_BREL=86, R_ARM_THM_MOVW_BREL_NC=87, R_ARM_THM_MOVT_BREL=88, R_ARM_THM_MOVW_BREL=89, R_ARM_PLT32_ABS=94, R_ARM_GOT_ABS=95, R_ARM_GOT_PREL=96, R_ARM_GOT_BREL12=97, R_ARM_GOTOFF12=98, R_ARM_GOTRELAX=99, R_ARM_GNU_VTENTRY=100, R_ARM_GNU_VTINHERIT=101, R_ARM_THM_JUMP11=102, R_ARM_THM_JUMP8=103, R_ARM_TLS_GD32=104, R_ARM_TLS_LDM32=105, R_ARM_TLS_LDO32=106, R_ARM_TLS_IE32=107, R_ARM_TLS_LE32=108, R_ARM_TLS_LDO12=109, R_ARM_TLS_LE12=110, R_ARM_TLS_IE12GP=111, R_ARM_PRIVATE_0=112, R_ARM_PRIVATE_1=113, R_ARM_PRIVATE_2=114, R_ARM_PRIVATE_3=115, R_ARM_PRIVATE_4=116, R_ARM_PRIVATE_5=117, R_ARM_PRIVATE_6=118, R_ARM_PRIVATE_7=119, R_ARM_PRIVATE_8=120, R_ARM_PRIVATE_9=121, R_ARM_PRIVATE_10=122, R_ARM_PRIVATE_11=123, R_ARM_PRIVATE_12=124, R_ARM_PRIVATE_13=125, R_ARM_PRIVATE_14=126, R_ARM_PRIVATE_15=127, R_ARM_ME_TOO=128, R_ARM_THM_TLS_DESCSEQ16=129, R_ARM_THM_TLS_DESCSEQ32=130, R_ARM_THM_GOT_BREL12=131, R_ARM_IRELATIVE=140, ) ENUM_RELOC_TYPE_AARCH64 = dict( R_AARCH64_NONE=256, R_AARCH64_ABS64=257, R_AARCH64_ABS32=258, R_AARCH64_ABS16=259, R_AARCH64_PREL64=260, R_AARCH64_PREL32=261, R_AARCH64_PREL16=262, R_AARCH64_MOVW_UABS_G0=263, R_AARCH64_MOVW_UABS_G0_NC=264, R_AARCH64_MOVW_UABS_G1=265, R_AARCH64_MOVW_UABS_G1_NC=266, R_AARCH64_MOVW_UABS_G2=267, R_AARCH64_MOVW_UABS_G2_NC=268, R_AARCH64_MOVW_UABS_G3=269, R_AARCH64_MOVW_SABS_G0=270, R_AARCH64_MOVW_SABS_G1=271, R_AARCH64_MOVW_SABS_G2=272, R_AARCH64_LD_PREL_LO19=273, R_AARCH64_ADR_PREL_LO21=274, R_AARCH64_ADR_PREL_PG_HI21=275, R_AARCH64_ADR_PREL_PG_HI21_NC=276, R_AARCH64_ADD_ABS_LO12_NC=277, R_AARCH64_LDST8_ABS_LO12_NC=278, R_AARCH64_TSTBR14=279, R_AARCH64_CONDBR19=280, R_AARCH64_JUMP26=282, R_AARCH64_CALL26=283, R_AARCH64_LDST16_ABS_LO12_NC=284, R_AARCH64_LDST32_ABS_LO12_NC=285, R_AARCH64_LDST64_ABS_LO12_NC=286, R_AARCH64_MOVW_PREL_G0=287, R_AARCH64_MOVW_PREL_G0_NC=288, R_AARCH64_MOVW_PREL_G1=289, R_AARCH64_MOVW_PREL_G1_NC=290, R_AARCH64_MOVW_PREL_G2=291, R_AARCH64_MOVW_PREL_G2_NC=292, R_AARCH64_MOVW_PREL_G3=293, R_AARCH64_MOVW_GOTOFF_G0=300, R_AARCH64_MOVW_GOTOFF_G0_NC=301, R_AARCH64_MOVW_GOTOFF_G1=302, R_AARCH64_MOVW_GOTOFF_G1_NC=303, R_AARCH64_MOVW_GOTOFF_G2=304, R_AARCH64_MOVW_GOTOFF_G2_NC=305, R_AARCH64_MOVW_GOTOFF_G3=306, R_AARCH64_GOTREL64=307, R_AARCH64_GOTREL32=308, R_AARCH64_GOT_LD_PREL19=309, R_AARCH64_LD64_GOTOFF_LO15=310, R_AARCH64_ADR_GOT_PAGE=311, R_AARCH64_LD64_GOT_LO12_NC=312, R_AARCH64_TLSGD_ADR_PREL21=512, R_AARCH64_TLSGD_ADR_PAGE21=513, R_AARCH64_TLSGD_ADD_LO12_NC=514, R_AARCH64_TLSGD_MOVW_G1=515, R_AARCH64_TLSGD_MOVW_G0_NC=516, R_AARCH64_TLSLD_ADR_PREL21=517, R_AARCH64_TLSLD_ADR_PAGE21=518, R_AARCH64_TLSLD_ADD_LO12_NC=519, R_AARCH64_TLSLD_MOVW_G1=520, R_AARCH64_TLSLD_MOVW_G0_NC=521, R_AARCH64_TLSLD_LD_PREL19=522, R_AARCH64_TLSLD_MOVW_DTPREL_G2=523, R_AARCH64_TLSLD_MOVW_DTPREL_G1=524, R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC=525, R_AARCH64_TLSLD_MOVW_DTPREL_G0=526, R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC=527, R_AARCH64_TLSLD_ADD_DTPREL_HI12=528, R_AARCH64_TLSLD_ADD_DTPREL_LO12=529, R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC=530, R_AARCH64_TLSLD_LDST8_DTPREL_LO12=531, R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC=532, R_AARCH64_TLSLD_LDST16_DTPREL_LO12=533, R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC=534, R_AARCH64_TLSLD_LDST32_DTPREL_LO12=535, R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC=536, R_AARCH64_TLSLD_LDST64_DTPREL_LO12=537, R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC=538, R_AARCH64_TLSIE_MOVW_GOTTPREL_G1=539, R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC=540, R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21=541, R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC=542, R_AARCH64_TLSIE_LD_GOTTPREL_PREL19=543, R_AARCH64_TLSLE_MOVW_TPREL_G2=544, R_AARCH64_TLSLE_MOVW_TPREL_G1=545, R_AARCH64_TLSLE_MOVW_TPREL_G1_NC=546, R_AARCH64_TLSLE_MOVW_TPREL_G0=547, R_AARCH64_TLSLE_MOVW_TPREL_G0_NC=548, R_AARCH64_TLSLE_ADD_TPREL_HI12=549, R_AARCH64_TLSLE_ADD_TPREL_LO12=550, R_AARCH64_TLSLE_ADD_TPREL_LO12_NC=551, R_AARCH64_TLSLE_LDST8_TPREL_LO12=552, R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC=553, R_AARCH64_TLSLE_LDST16_TPREL_LO12=554, R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC=555, R_AARCH64_TLSLE_LDST32_TPREL_LO12=556, R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC=557, R_AARCH64_TLSLE_LDST64_TPREL_LO12=558, R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC=559, R_AARCH64_COPY=1024, R_AARCH64_GLOB_DAT=1025, R_AARCH64_JUMP_SLOT=1026, R_AARCH64_RELATIVE=1027, R_AARCH64_TLS_DTPREL64=1028, R_AARCH64_TLS_DTPMOD64=1029, R_AARCH64_TLS_TPREL64=1030, R_AARCH64_TLS_DTPREL32=1031, R_AARCH64_TLS_DTPMOD32=1032, R_AARCH64_TLS_TPREL32=1033, ) ENUM_ATTR_TAG_ARM = dict( TAG_FILE=1, TAG_SECTION=2, TAG_SYMBOL=3, TAG_CPU_RAW_NAME=4, TAG_CPU_NAME=5, TAG_CPU_ARCH=6, TAG_CPU_ARCH_PROFILE=7, TAG_ARM_ISA_USE=8, TAG_THUMB_ISA_USE=9, TAG_FP_ARCH=10, TAG_WMMX_ARCH=11, TAG_ADVANCED_SIMD_ARCH=12, TAG_PCS_CONFIG=13, TAG_ABI_PCS_R9_USE=14, TAG_ABI_PCS_RW_DATA=15, TAG_ABI_PCS_RO_DATA=16, TAG_ABI_PCS_GOT_USE=17, TAG_ABI_PCS_WCHAR_T=18, TAG_ABI_FP_ROUNDING=19, TAG_ABI_FP_DENORMAL=20, TAG_ABI_FP_EXCEPTIONS=21, TAG_ABI_FP_USER_EXCEPTIONS=22, TAG_ABI_FP_NUMBER_MODEL=23, TAG_ABI_ALIGN_NEEDED=24, TAG_ABI_ALIGN_PRESERVED=25, TAG_ABI_ENUM_SIZE=26, TAG_ABI_HARDFP_USE=27, TAG_ABI_VFP_ARGS=28, TAG_ABI_WMMX_ARGS=29, TAG_ABI_OPTIMIZATION_GOALS=30, TAG_ABI_FP_OPTIMIZATION_GOALS=31, TAG_COMPATIBILITY=32, TAG_CPU_UNALIGNED_ACCESS=34, TAG_FP_HP_EXTENSION=36, TAG_ABI_FP_16BIT_FORMAT=38, TAG_MPEXTENSION_USE=42, TAG_DIV_USE=44, TAG_NODEFAULTS=64, TAG_ALSO_COMPATIBLE_WITH=65, TAG_T2EE_USE=66, TAG_CONFORMANCE=67, TAG_VIRTUALIZATION_USE=68, TAG_MPEXTENSION_USE_OLD=70, ) pyelftools-0.26/elftools/elf/gnuversions.py000066400000000000000000000202771357220457300212120ustar00rootroot00000000000000#------------------------------------------------------------------------------ # elftools: elf/gnuversions.py # # ELF sections # # Yann Rouillard (yann@pleiades.fr.eu.org) # This code is in the public domain #------------------------------------------------------------------------------ from ..construct import CString from ..common.utils import struct_parse, elf_assert from .sections import Section, Symbol class Version(object): """ Version object - representing a version definition or dependency entry from a "Version Needed" or a "Version Dependency" table section. This kind of entry contains a pointer to an array of auxiliary entries that store the information about version names or dependencies. These entries are not stored in this object and should be accessed through the appropriate method of a section object which will return an iterator of VersionAuxiliary objects. Similarly to Section objects, allows dictionary-like access to verdef/verneed entry """ def __init__(self, entry, name=None): self.entry = entry self.name = name def __getitem__(self, name): """ Implement dict-like access to entry """ return self.entry[name] class VersionAuxiliary(object): """ Version Auxiliary object - representing an auxiliary entry of a version definition or dependency entry Similarly to Section objects, allows dictionary-like access to the verdaux/vernaux entry """ def __init__(self, entry, name): self.entry = entry self.name = name def __getitem__(self, name): """ Implement dict-like access to entries """ return self.entry[name] class GNUVersionSection(Section): """ Common ancestor class for ELF SUNW|GNU Version Needed/Dependency sections class which contains shareable code """ def __init__(self, header, name, elffile, stringtable, field_prefix, version_struct, version_auxiliaries_struct): super(GNUVersionSection, self).__init__(header, name, elffile) self.stringtable = stringtable self.field_prefix = field_prefix self.version_struct = version_struct self.version_auxiliaries_struct = version_auxiliaries_struct def num_versions(self): """ Number of version entries in the section """ return self['sh_info'] def _field_name(self, name, auxiliary=False): """ Return the real field's name of version or a version auxiliary entry """ middle = 'a_' if auxiliary else '_' return self.field_prefix + middle + name def _iter_version_auxiliaries(self, entry_offset, count): """ Yield all auxiliary entries of a version entry """ name_field = self._field_name('name', auxiliary=True) next_field = self._field_name('next', auxiliary=True) for _ in range(count): entry = struct_parse( self.version_auxiliaries_struct, self.stream, stream_pos=entry_offset) name = self.stringtable.get_string(entry[name_field]) version_aux = VersionAuxiliary(entry, name) yield version_aux entry_offset += entry[next_field] def iter_versions(self): """ Yield all the version entries in the section Each time it returns the main version structure and an iterator to walk through its auxiliaries entries """ aux_field = self._field_name('aux') count_field = self._field_name('cnt') next_field = self._field_name('next') entry_offset = self['sh_offset'] for _ in range(self.num_versions()): entry = struct_parse( self.version_struct, self.stream, stream_pos=entry_offset) elf_assert(entry[count_field] > 0, 'Expected number of version auxiliary entries (%s) to be > 0' 'for the following version entry: %s' % ( count_field, str(entry))) version = Version(entry) aux_entries_offset = entry_offset + entry[aux_field] version_auxiliaries_iter = self._iter_version_auxiliaries( aux_entries_offset, entry[count_field]) yield version, version_auxiliaries_iter entry_offset += entry[next_field] class GNUVerNeedSection(GNUVersionSection): """ ELF SUNW or GNU Version Needed table section. Has an associated StringTableSection that's passed in the constructor. """ def __init__(self, header, name, elffile, stringtable): super(GNUVerNeedSection, self).__init__( header, name, elffile, stringtable, 'vn', elffile.structs.Elf_Verneed, elffile.structs.Elf_Vernaux) self._has_indexes = None def has_indexes(self): """ Return True if at least one version definition entry has an index that is stored in the vna_other field. This information is used for symbol versioning """ if self._has_indexes is None: self._has_indexes = False for _, vernaux_iter in self.iter_versions(): for vernaux in vernaux_iter: if vernaux['vna_other']: self._has_indexes = True break return self._has_indexes def iter_versions(self): for verneed, vernaux in super(GNUVerNeedSection, self).iter_versions(): verneed.name = self.stringtable.get_string(verneed['vn_file']) yield verneed, vernaux def get_version(self, index): """ Get the version information located at index #n in the table Return boths the verneed structure and the vernaux structure that contains the name of the version """ for verneed, vernaux_iter in self.iter_versions(): for vernaux in vernaux_iter: if vernaux['vna_other'] == index: return verneed, vernaux return None class GNUVerDefSection(GNUVersionSection): """ ELF SUNW or GNU Version Definition table section. Has an associated StringTableSection that's passed in the constructor. """ def __init__(self, header, name, elffile, stringtable): super(GNUVerDefSection, self).__init__( header, name, elffile, stringtable, 'vd', elffile.structs.Elf_Verdef, elffile.structs.Elf_Verdaux) def get_version(self, index): """ Get the version information located at index #n in the table Return boths the verdef structure and an iterator to retrieve both the version names and dependencies in the form of verdaux entries """ for verdef, verdaux_iter in self.iter_versions(): if verdef['vd_ndx'] == index: return verdef, verdaux_iter return None class GNUVerSymSection(Section): """ ELF SUNW or GNU Versym table section. Has an associated SymbolTableSection that's passed in the constructor. """ def __init__(self, header, name, elffile, symboltable): super(GNUVerSymSection, self).__init__(header, name, elffile) self.symboltable = symboltable def num_symbols(self): """ Number of symbols in the table """ return self['sh_size'] // self['sh_entsize'] def get_symbol(self, n): """ Get the symbol at index #n from the table (Symbol object) It begins at 1 and not 0 since the first entry is used to store the current version of the syminfo table """ # Grab the symbol's entry from the stream entry_offset = self['sh_offset'] + n * self['sh_entsize'] entry = struct_parse( self.structs.Elf_Versym, self.stream, stream_pos=entry_offset) # Find the symbol name in the associated symbol table name = self.symboltable.get_symbol(n).name return Symbol(entry, name) def iter_symbols(self): """ Yield all the symbols in the table """ for i in range(self.num_symbols()): yield self.get_symbol(i) pyelftools-0.26/elftools/elf/hash.py000066400000000000000000000061031357220457300175430ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools: elf/hash.py # # ELF hash table sections # # Andreas Ziegler (andreas.ziegler@fau.de) # This code is in the public domain #------------------------------------------------------------------------------- from ..common.utils import struct_parse class HashSection(object): """ Minimal part of an ELF hash section to find the number of symbols in the symbol table - useful for super-stripped binaries without section headers where only the start of the symbol table is known from the dynamic segment. The layout and contents are nicely described at https://flapenguin.me/2017/04/24/elf-lookup-dt-hash/. """ def __init__(self, stream, offset, elffile): self._stream = stream self._offset = offset self._elffile = elffile self.params = struct_parse(self._elffile.structs.Elf_Hash, self._stream, self._offset) def get_number_of_symbols(self): """ Get the number of symbols from the hash table parameters. """ return self.params['nchains'] class GNUHashSection(object): """ Minimal part of a GNU hash section to find the number of symbols in the symbol table - useful for super-stripped binaries without section headers where only the start of the symbol table is known from the dynamic segment. The layout and contents are nicely described at https://flapenguin.me/2017/05/10/elf-lookup-dt-gnu-hash/. """ def __init__(self, stream, offset, elffile): self._stream = stream self._offset = offset self._elffile = elffile self.params = struct_parse(self._elffile.structs.Gnu_Hash, self._stream, self._offset) def get_number_of_symbols(self): """ Get the number of symbols in the hash table by finding the bucket with the highest symbol index and walking to the end of its chain. """ # Element sizes in the hash table wordsize = self._elffile.structs.Elf_word('').sizeof() xwordsize = self._elffile.structs.Elf_xword('').sizeof() # Find highest index in buckets array max_idx = max(self.params['buckets']) if max_idx < self.params['symoffset']: return self.params['symoffset'] # Position the stream at the start of the corresponding chain chain_pos = self._offset + 4 * wordsize + \ self.params['bloom_size'] * xwordsize + \ self.params['nbuckets'] * wordsize + \ (max_idx - self.params['symoffset']) * wordsize # Walk the chain to its end (lowest bit is set) while True: cur_hash = struct_parse(self._elffile.structs.Elf_word('elem'), self._stream, chain_pos) if cur_hash & 1: return max_idx + 1 max_idx += 1 chain_pos += wordsize pyelftools-0.26/elftools/elf/notes.py000066400000000000000000000037761357220457300177650ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools: elf/notes.py # # ELF notes # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- from ..common.py3compat import bytes2str from ..common.utils import struct_parse, roundup from ..construct import CString def iter_notes(elffile, offset, size): """ Yield all the notes in a section or segment. """ end = offset + size while offset < end: note = struct_parse( elffile.structs.Elf_Nhdr, elffile.stream, stream_pos=offset) note['n_offset'] = offset offset += elffile.structs.Elf_Nhdr.sizeof() elffile.stream.seek(offset) # n_namesz is 4-byte aligned. disk_namesz = roundup(note['n_namesz'], 2) note['n_name'] = bytes2str( CString('').parse(elffile.stream.read(disk_namesz))) offset += disk_namesz desc_data = bytes2str(elffile.stream.read(note['n_descsz'])) if note['n_type'] == 'NT_GNU_ABI_TAG': note['n_desc'] = struct_parse(elffile.structs.Elf_abi, elffile.stream, offset) elif note['n_type'] == 'NT_GNU_BUILD_ID': note['n_desc'] = ''.join('%.2x' % ord(b) for b in desc_data) elif note['n_type'] == 'NT_PRPSINFO': note['n_desc'] = struct_parse(elffile.structs.Elf_Prpsinfo, elffile.stream, offset) elif note['n_type'] == 'NT_FILE': note['n_desc'] = struct_parse(elffile.structs.Elf_Nt_File, elffile.stream, offset) else: note['n_desc'] = desc_data offset += roundup(note['n_descsz'], 2) note['n_size'] = offset - note['n_offset'] yield note pyelftools-0.26/elftools/elf/relocation.py000066400000000000000000000264011357220457300207620ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools: elf/relocation.py # # ELF relocations # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- from collections import namedtuple from ..common.exceptions import ELFRelocationError from ..common.utils import elf_assert, struct_parse from .sections import Section from .enums import ( ENUM_RELOC_TYPE_i386, ENUM_RELOC_TYPE_x64, ENUM_RELOC_TYPE_MIPS, ENUM_RELOC_TYPE_ARM, ENUM_D_TAG) class Relocation(object): """ Relocation object - representing a single relocation entry. Allows dictionary-like access to the entry's fields. Can be either a REL or RELA relocation. """ def __init__(self, entry, elffile): self.entry = entry self.elffile = elffile def is_RELA(self): """ Is this a RELA relocation? If not, it's REL. """ return 'r_addend' in self.entry def __getitem__(self, name): """ Dict-like access to entries """ return self.entry[name] def __repr__(self): return '' % ( 'RELA' if self.is_RELA() else 'REL', self.entry) def __str__(self): return self.__repr__() class RelocationTable(object): """ Shared functionality between relocation sections and relocation tables """ def __init__(self, elffile, offset, size, is_rela): self._stream = elffile.stream self._elffile = elffile self._elfstructs = elffile.structs self._size = size self._offset = offset self._is_rela = is_rela if is_rela: self.entry_struct = self._elfstructs.Elf_Rela else: self.entry_struct = self._elfstructs.Elf_Rel self.entry_size = self.entry_struct.sizeof() def is_RELA(self): """ Is this a RELA relocation section? If not, it's REL. """ return self._is_rela def num_relocations(self): """ Number of relocations in the section """ return self._size // self.entry_size def get_relocation(self, n): """ Get the relocation at index #n from the section (Relocation object) """ entry_offset = self._offset + n * self.entry_size entry = struct_parse( self.entry_struct, self._stream, stream_pos=entry_offset) return Relocation(entry, self._elffile) def iter_relocations(self): """ Yield all the relocations in the section """ for i in range(self.num_relocations()): yield self.get_relocation(i) class RelocationSection(Section, RelocationTable): """ ELF relocation section. Serves as a collection of Relocation entries. """ def __init__(self, header, name, elffile): Section.__init__(self, header, name, elffile) RelocationTable.__init__(self, self.elffile, self['sh_offset'], self['sh_size'], header['sh_type'] == 'SHT_RELA') elf_assert(header['sh_type'] in ('SHT_REL', 'SHT_RELA'), 'Unknown relocation type section') elf_assert(header['sh_entsize'] == self.entry_size, 'Expected sh_entsize of %s section to be %s' % ( header['sh_type'], self.entry_size)) class RelocationHandler(object): """ Handles the logic of relocations in ELF files. """ def __init__(self, elffile): self.elffile = elffile def find_relocations_for_section(self, section): """ Given a section, find the relocation section for it in the ELF file. Return a RelocationSection object, or None if none was found. """ reloc_section_names = ( '.rel' + section.name, '.rela' + section.name) # Find the relocation section aimed at this one. Currently assume # that either .rel or .rela section exists for this section, but # not both. for relsection in self.elffile.iter_sections(): if ( isinstance(relsection, RelocationSection) and relsection.name in reloc_section_names): return relsection return None def apply_section_relocations(self, stream, reloc_section): """ Apply all relocations in reloc_section (a RelocationSection object) to the given stream, that contains the data of the section that is being relocated. The stream is modified as a result. """ # The symbol table associated with this relocation section symtab = self.elffile.get_section(reloc_section['sh_link']) for reloc in reloc_section.iter_relocations(): self._do_apply_relocation(stream, reloc, symtab) def _do_apply_relocation(self, stream, reloc, symtab): # Preparations for performing the relocation: obtain the value of # the symbol mentioned in the relocation, as well as the relocation # recipe which tells us how to actually perform it. # All peppered with some sanity checking. if reloc['r_info_sym'] >= symtab.num_symbols(): raise ELFRelocationError( 'Invalid symbol reference in relocation: index %s' % ( reloc['r_info_sym'])) sym_value = symtab.get_symbol(reloc['r_info_sym'])['st_value'] reloc_type = reloc['r_info_type'] recipe = None if self.elffile.get_machine_arch() == 'x86': if reloc.is_RELA(): raise ELFRelocationError( 'Unexpected RELA relocation for x86: %s' % reloc) recipe = self._RELOCATION_RECIPES_X86.get(reloc_type, None) elif self.elffile.get_machine_arch() == 'x64': if not reloc.is_RELA(): raise ELFRelocationError( 'Unexpected REL relocation for x64: %s' % reloc) recipe = self._RELOCATION_RECIPES_X64.get(reloc_type, None) elif self.elffile.get_machine_arch() == 'MIPS': if reloc.is_RELA(): raise ELFRelocationError( 'Unexpected RELA relocation for MIPS: %s' % reloc) recipe = self._RELOCATION_RECIPES_MIPS.get(reloc_type, None) elif self.elffile.get_machine_arch() == 'ARM': if reloc.is_RELA(): raise ELFRelocationError( 'Unexpected RELA relocation for ARM: %s' % reloc) recipe = self._RELOCATION_RECIPES_ARM.get(reloc_type, None) if recipe is None: raise ELFRelocationError( 'Unsupported relocation type: %s' % reloc_type) # So now we have everything we need to actually perform the relocation. # Let's get to it: # 0. Find out which struct we're going to be using to read this value # from the stream and write it back. if recipe.bytesize == 4: value_struct = self.elffile.structs.Elf_word('') elif recipe.bytesize == 8: value_struct = self.elffile.structs.Elf_word64('') else: raise ELFRelocationError('Invalid bytesize %s for relocation' % recipe.bytesize) # 1. Read the value from the stream (with correct size and endianness) original_value = struct_parse( value_struct, stream, stream_pos=reloc['r_offset']) # 2. Apply the relocation to the value, acting according to the recipe relocated_value = recipe.calc_func( value=original_value, sym_value=sym_value, offset=reloc['r_offset'], addend=reloc['r_addend'] if recipe.has_addend else 0) # 3. Write the relocated value back into the stream stream.seek(reloc['r_offset']) # Make sure the relocated value fits back by wrapping it around. This # looks like a problem, but it seems to be the way this is done in # binutils too. relocated_value = relocated_value % (2 ** (recipe.bytesize * 8)) value_struct.build_stream(relocated_value, stream) # Relocations are represented by "recipes". Each recipe specifies: # bytesize: The number of bytes to read (and write back) to the section. # This is the unit of data on which relocation is performed. # has_addend: Does this relocation have an extra addend? # calc_func: A function that performs the relocation on an extracted # value, and returns the updated value. # _RELOCATION_RECIPE_TYPE = namedtuple('_RELOCATION_RECIPE_TYPE', 'bytesize has_addend calc_func') def _reloc_calc_identity(value, sym_value, offset, addend=0): return value def _reloc_calc_sym_plus_value(value, sym_value, offset, addend=0): return sym_value + value def _reloc_calc_sym_plus_value_pcrel(value, sym_value, offset, addend=0): return sym_value + value - offset def _reloc_calc_sym_plus_addend(value, sym_value, offset, addend=0): return sym_value + addend def _reloc_calc_sym_plus_addend_pcrel(value, sym_value, offset, addend=0): return sym_value + addend - offset def _arm_reloc_calc_sym_plus_value_pcrel(value, sym_value, offset, addend=0): return sym_value // 4 + value - offset // 4 _RELOCATION_RECIPES_ARM = { ENUM_RELOC_TYPE_ARM['R_ARM_ABS32']: _RELOCATION_RECIPE_TYPE( bytesize=4, has_addend=False, calc_func=_reloc_calc_sym_plus_value), ENUM_RELOC_TYPE_ARM['R_ARM_CALL']: _RELOCATION_RECIPE_TYPE( bytesize=4, has_addend=False, calc_func=_arm_reloc_calc_sym_plus_value_pcrel), } # https://dmz-portal.mips.com/wiki/MIPS_relocation_types _RELOCATION_RECIPES_MIPS = { ENUM_RELOC_TYPE_MIPS['R_MIPS_NONE']: _RELOCATION_RECIPE_TYPE( bytesize=4, has_addend=False, calc_func=_reloc_calc_identity), ENUM_RELOC_TYPE_MIPS['R_MIPS_32']: _RELOCATION_RECIPE_TYPE( bytesize=4, has_addend=False, calc_func=_reloc_calc_sym_plus_value), } _RELOCATION_RECIPES_X86 = { ENUM_RELOC_TYPE_i386['R_386_NONE']: _RELOCATION_RECIPE_TYPE( bytesize=4, has_addend=False, calc_func=_reloc_calc_identity), ENUM_RELOC_TYPE_i386['R_386_32']: _RELOCATION_RECIPE_TYPE( bytesize=4, has_addend=False, calc_func=_reloc_calc_sym_plus_value), ENUM_RELOC_TYPE_i386['R_386_PC32']: _RELOCATION_RECIPE_TYPE( bytesize=4, has_addend=False, calc_func=_reloc_calc_sym_plus_value_pcrel), } _RELOCATION_RECIPES_X64 = { ENUM_RELOC_TYPE_x64['R_X86_64_NONE']: _RELOCATION_RECIPE_TYPE( bytesize=8, has_addend=True, calc_func=_reloc_calc_identity), ENUM_RELOC_TYPE_x64['R_X86_64_64']: _RELOCATION_RECIPE_TYPE( bytesize=8, has_addend=True, calc_func=_reloc_calc_sym_plus_addend), ENUM_RELOC_TYPE_x64['R_X86_64_PC32']: _RELOCATION_RECIPE_TYPE( bytesize=4, has_addend=True, calc_func=_reloc_calc_sym_plus_addend_pcrel), ENUM_RELOC_TYPE_x64['R_X86_64_32']: _RELOCATION_RECIPE_TYPE( bytesize=4, has_addend=True, calc_func=_reloc_calc_sym_plus_addend), ENUM_RELOC_TYPE_x64['R_X86_64_32S']: _RELOCATION_RECIPE_TYPE( bytesize=4, has_addend=True, calc_func=_reloc_calc_sym_plus_addend), } pyelftools-0.26/elftools/elf/sections.py000066400000000000000000000401461357220457300204540ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools: elf/sections.py # # ELF sections # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- from ..common.exceptions import ELFCompressionError from ..common.utils import struct_parse, elf_assert, parse_cstring_from_stream from collections import defaultdict from .constants import SH_FLAGS from .notes import iter_notes import zlib class Section(object): """ Base class for ELF sections. Also used for all sections types that have no special functionality. Allows dictionary-like access to the section header. For example: > sec = Section(...) > sec['sh_type'] # section type """ def __init__(self, header, name, elffile): self.header = header self.name = name self.elffile = elffile self.stream = self.elffile.stream self.structs = self.elffile.structs self._compressed = header['sh_flags'] & SH_FLAGS.SHF_COMPRESSED if self.compressed: # Read the compression header now to know about the size/alignment # of the decompressed data. header = struct_parse(self.structs.Elf_Chdr, self.stream, stream_pos=self['sh_offset']) self._compression_type = header['ch_type'] self._decompressed_size = header['ch_size'] self._decompressed_align = header['ch_addralign'] else: self._decompressed_size = header['sh_size'] self._decompressed_align = header['sh_addralign'] @property def compressed(self): """ Is this section compressed? """ return self._compressed @property def data_size(self): """ Return the logical size for this section's data. This can be different from the .sh_size header field when the section is compressed. """ return self._decompressed_size @property def data_alignment(self): """ Return the logical alignment for this section's data. This can be different from the .sh_addralign header field when the section is compressed. """ return self._decompressed_align def data(self): """ The section data from the file. Note that data is decompressed if the stored section data is compressed. """ # If this section is compressed, deflate it if self.compressed: c_type = self._compression_type if c_type == 'ELFCOMPRESS_ZLIB': # Read the data to decompress starting right after the # compression header until the end of the section. hdr_size = self.structs.Elf_Chdr.sizeof() self.stream.seek(self['sh_offset'] + hdr_size) compressed = self.stream.read(self['sh_size'] - hdr_size) decomp = zlib.decompressobj() result = decomp.decompress(compressed, self.data_size) else: raise ELFCompressionError( 'Unknown compression type: {:#0x}'.format(c_type) ) if len(result) != self._decompressed_size: raise ELFCompressionError( 'Decompressed data is {} bytes long, should be {} bytes' ' long'.format(len(result), self._decompressed_size) ) else: self.stream.seek(self['sh_offset']) result = self.stream.read(self._decompressed_size) return result def is_null(self): """ Is this a null section? """ return False def __getitem__(self, name): """ Implement dict-like access to header entries """ return self.header[name] def __eq__(self, other): try: return self.header == other.header except AttributeError: return False def __hash__(self): return hash(self.header) class NullSection(Section): """ ELF NULL section """ def is_null(self): return True class StringTableSection(Section): """ ELF string table section. """ def get_string(self, offset): """ Get the string stored at the given offset in this string table. """ table_offset = self['sh_offset'] s = parse_cstring_from_stream(self.stream, table_offset + offset) return s.decode('utf-8') if s else '' class SymbolTableSection(Section): """ ELF symbol table section. Has an associated StringTableSection that's passed in the constructor. """ def __init__(self, header, name, elffile, stringtable): super(SymbolTableSection, self).__init__(header, name, elffile) self.stringtable = stringtable elf_assert(self['sh_entsize'] > 0, 'Expected entry size of section %r to be > 0' % name) elf_assert(self['sh_size'] % self['sh_entsize'] == 0, 'Expected section size to be a multiple of entry size in section %r' % name) self._symbol_name_map = None def num_symbols(self): """ Number of symbols in the table """ return self['sh_size'] // self['sh_entsize'] def get_symbol(self, n): """ Get the symbol at index #n from the table (Symbol object) """ # Grab the symbol's entry from the stream entry_offset = self['sh_offset'] + n * self['sh_entsize'] entry = struct_parse( self.structs.Elf_Sym, self.stream, stream_pos=entry_offset) # Find the symbol name in the associated string table name = self.stringtable.get_string(entry['st_name']) return Symbol(entry, name) def get_symbol_by_name(self, name): """ Get a symbol(s) by name. Return None if no symbol by the given name exists. """ # The first time this method is called, construct a name to number # mapping # if self._symbol_name_map is None: self._symbol_name_map = defaultdict(list) for i, sym in enumerate(self.iter_symbols()): self._symbol_name_map[sym.name].append(i) symnums = self._symbol_name_map.get(name) return [self.get_symbol(i) for i in symnums] if symnums else None def iter_symbols(self): """ Yield all the symbols in the table """ for i in range(self.num_symbols()): yield self.get_symbol(i) class Symbol(object): """ Symbol object - representing a single symbol entry from a symbol table section. Similarly to Section objects, allows dictionary-like access to the symbol entry. """ def __init__(self, entry, name): self.entry = entry self.name = name def __getitem__(self, name): """ Implement dict-like access to entries """ return self.entry[name] class SUNWSyminfoTableSection(Section): """ ELF .SUNW Syminfo table section. Has an associated SymbolTableSection that's passed in the constructor. """ def __init__(self, header, name, elffile, symboltable): super(SUNWSyminfoTableSection, self).__init__(header, name, elffile) self.symboltable = symboltable def num_symbols(self): """ Number of symbols in the table """ return self['sh_size'] // self['sh_entsize'] - 1 def get_symbol(self, n): """ Get the symbol at index #n from the table (Symbol object). It begins at 1 and not 0 since the first entry is used to store the current version of the syminfo table. """ # Grab the symbol's entry from the stream entry_offset = self['sh_offset'] + n * self['sh_entsize'] entry = struct_parse( self.structs.Elf_Sunw_Syminfo, self.stream, stream_pos=entry_offset) # Find the symbol name in the associated symbol table name = self.symboltable.get_symbol(n).name return Symbol(entry, name) def iter_symbols(self): """ Yield all the symbols in the table """ for i in range(1, self.num_symbols() + 1): yield self.get_symbol(i) class NoteSection(Section): """ ELF NOTE section. Knows how to parse notes. """ def iter_notes(self): """ Yield all the notes in the section. Each result is a dictionary- like object with "n_name", "n_type", and "n_desc" fields, amongst others. """ return iter_notes(self.elffile, self['sh_offset'], self['sh_size']) class StabSection(Section): """ ELF stab section. """ def iter_stabs(self): """ Yield all stab entries. Result type is ELFStructs.Elf_Stabs. """ offset = self['sh_offset'] size = self['sh_size'] end = offset + size while offset < end: stabs = struct_parse( self.structs.Elf_Stabs, self.elffile.stream, stream_pos=offset) stabs['n_offset'] = offset offset += self.structs.Elf_Stabs.sizeof() self.stream.seek(offset) yield stabs class ARMAttribute(object): """ ARM attribute object - representing a build attribute of ARM ELF files. """ def __init__(self, structs, stream): self._tag = struct_parse(structs.Elf_Attribute_Tag, stream) self.extra = None if self.tag in ('TAG_FILE', 'TAG_SECTION', 'TAG_SYMBOL'): self.value = struct_parse(structs.Elf_word('value'), stream) if self.tag != 'TAG_FILE': self.extra = [] s_number = struct_parse(structs.Elf_uleb128('s_number'), stream) while s_number != 0: self.extra.append(s_number) s_number = struct_parse(structs.Elf_uleb128('s_number'), stream ) elif self.tag in ('TAG_CPU_RAW_NAME', 'TAG_CPU_NAME', 'TAG_CONFORMANCE'): self.value = struct_parse(structs.Elf_ntbs('value', encoding='utf-8'), stream) elif self.tag == 'TAG_COMPATIBILITY': self.value = struct_parse(structs.Elf_uleb128('value'), stream) self.extra = struct_parse(structs.Elf_ntbs('vendor_name', encoding='utf-8'), stream) elif self.tag == 'TAG_ALSO_COMPATIBLE_WITH': self.value = ARMAttribute(structs, stream) if type(self.value.value) is not str: nul = struct_parse(structs.Elf_byte('nul'), stream) elf_assert(nul == 0, "Invalid terminating byte %r, expecting NUL." % nul) else: self.value = struct_parse(structs.Elf_uleb128('value'), stream) @property def tag(self): return self._tag['tag'] def __repr__(self): s = '' % (self.tag, self.value) s += ' %s' % self.extra if self.extra is not None else '' return s class ARMAttributesSubsubsection(object): """ Subsubsection of an ELF .ARM.attributes section's subsection. """ def __init__(self, stream, structs, offset): self.stream = stream self.offset = offset self.structs = structs self.header = ARMAttribute(self.structs, self.stream) self.attr_start = self.stream.tell() def iter_attributes(self, tag=None): """ Yield all attributes (limit to |tag| if specified). """ for attribute in self._make_attributes(): if tag is None or attribute.tag == tag: yield attribute @property def num_attributes(self): """ Number of attributes in the subsubsection. """ return sum(1 for _ in self.iter_attributes()) + 1 @property def attributes(self): """ List of all attributes in the subsubsection. """ return [self.header] + list(self.iter_attributes()) def _make_attributes(self): """ Create all attributes for this subsubsection except the first one which is the header. """ end = self.offset + self.header.value self.stream.seek(self.attr_start) while self.stream.tell() != end: yield ARMAttribute(self.structs, self.stream) def __repr__(self): s = "" return s % (self.header.tag[4:], self.header.value) class ARMAttributesSubsection(object): """ Subsection of an ELF .ARM.attributes section. """ def __init__(self, stream, structs, offset): self.stream = stream self.offset = offset self.structs = structs self.header = struct_parse(self.structs.Elf_Attr_Subsection_Header, self.stream, self.offset ) self.subsubsec_start = self.stream.tell() def iter_subsubsections(self, scope=None): """ Yield all subsubsections (limit to |scope| if specified). """ for subsubsec in self._make_subsubsections(): if scope is None or subsubsec.header.tag == scope: yield subsubsec @property def num_subsubsections(self): """ Number of subsubsections in the subsection. """ return sum(1 for _ in self.iter_subsubsections()) @property def subsubsections(self): """ List of all subsubsections in the subsection. """ return list(self.iter_subsubsections()) def _make_subsubsections(self): """ Create all subsubsections for this subsection. """ end = self.offset + self['length'] self.stream.seek(self.subsubsec_start) while self.stream.tell() != end: subsubsec = ARMAttributesSubsubsection(self.stream, self.structs, self.stream.tell()) self.stream.seek(self.subsubsec_start + subsubsec.header.value) yield subsubsec def __getitem__(self, name): """ Implement dict-like access to header entries. """ return self.header[name] def __repr__(self): s = "" return s % (self.header['vendor_name'], self.header['length']) class ARMAttributesSection(Section): """ ELF .ARM.attributes section. """ def __init__(self, header, name, elffile): super(ARMAttributesSection, self).__init__(header, name, elffile) fv = struct_parse(self.structs.Elf_byte('format_version'), self.stream, self['sh_offset'] ) elf_assert(chr(fv) == 'A', "Unknown attributes version %s, expecting 'A'." % chr(fv) ) self.subsec_start = self.stream.tell() def iter_subsections(self, vendor_name=None): """ Yield all subsections (limit to |vendor_name| if specified). """ for subsec in self._make_subsections(): if vendor_name is None or subsec['vendor_name'] == vendor_name: yield subsec @property def num_subsections(self): """ Number of subsections in the section. """ return sum(1 for _ in self.iter_subsections()) @property def subsections(self): """ List of all subsections in the section. """ return list(self.iter_subsections()) def _make_subsections(self): """ Create all subsections for this section. """ end = self['sh_offset'] + self.data_size self.stream.seek(self.subsec_start) while self.stream.tell() != end: subsec = ARMAttributesSubsection(self.stream, self.structs, self.stream.tell()) self.stream.seek(self.subsec_start + subsec['length']) yield subsec pyelftools-0.26/elftools/elf/segments.py000066400000000000000000000100461357220457300204460ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools: elf/segments.py # # ELF segments # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- from ..construct import CString from ..common.utils import struct_parse from .constants import SH_FLAGS from .notes import iter_notes class Segment(object): def __init__(self, header, stream): self.header = header self.stream = stream def data(self): """ The segment data from the file. """ self.stream.seek(self['p_offset']) return self.stream.read(self['p_filesz']) def __getitem__(self, name): """ Implement dict-like access to header entries """ return self.header[name] def section_in_segment(self, section): """ Is the given section contained in this segment? Note: this tries to reproduce the intricate rules of the ELF_SECTION_IN_SEGMENT_STRICT macro of the header elf/include/internal.h in the source of binutils. """ # Only the 'strict' checks from ELF_SECTION_IN_SEGMENT_1 are included segtype = self['p_type'] sectype = section['sh_type'] secflags = section['sh_flags'] # Only PT_LOAD, PT_GNU_RELR0 and PT_TLS segments can contain SHF_TLS # sections if ( secflags & SH_FLAGS.SHF_TLS and segtype in ('PT_TLS', 'PT_GNU_RELR0', 'PT_LOAD')): return False # PT_TLS segment contains only SHF_TLS sections, PT_PHDR no sections # at all elif ( (secflags & SH_FLAGS.SHF_TLS) != 0 and segtype not in ('PT_TLS', 'PT_PHDR')): return False # In ELF_SECTION_IN_SEGMENT_STRICT the flag check_vma is on, so if # this is an alloc section, check whether its VMA is in bounds. if secflags & SH_FLAGS.SHF_ALLOC: secaddr = section['sh_addr'] vaddr = self['p_vaddr'] # This checks that the section is wholly contained in the segment. # The third condition is the 'strict' one - an empty section will # not match at the very end of the segment (unless the segment is # also zero size, which is handled by the second condition). if not (secaddr >= vaddr and secaddr - vaddr + section['sh_size'] <= self['p_memsz'] and secaddr - vaddr <= self['p_memsz'] - 1): return False # If we've come this far and it's a NOBITS section, it's in the segment if sectype == 'SHT_NOBITS': return True secoffset = section['sh_offset'] poffset = self['p_offset'] # Same logic as with secaddr vs. vaddr checks above, just on offsets in # the file return (secoffset >= poffset and secoffset - poffset + section['sh_size'] <= self['p_filesz'] and secoffset - poffset <= self['p_filesz'] - 1) class InterpSegment(Segment): """ INTERP segment. Knows how to obtain the path to the interpreter used for this ELF file. """ def __init__(self, header, stream): super(InterpSegment, self).__init__(header, stream) def get_interp_name(self): """ Obtain the interpreter path used for this ELF file. """ path_offset = self['p_offset'] return struct_parse( CString('', encoding='utf-8'), self.stream, stream_pos=path_offset) class NoteSegment(Segment): """ NOTE segment. Knows how to parse notes. """ def __init__(self, header, stream, elffile): super(NoteSegment, self).__init__(header, stream) self.elffile = elffile def iter_notes(self): """ Yield all the notes in the segment. Each result is a dictionary- like object with "n_name", "n_type", and "n_desc" fields, amongst others. """ return iter_notes(self.elffile, self['p_offset'], self['p_filesz']) pyelftools-0.26/elftools/elf/structs.py000066400000000000000000000427751357220457300203460ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools: elf/structs.py # # Encapsulation of Construct structs for parsing an ELF file, adjusted for # correct endianness and word-size. # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- from ..construct import ( UBInt8, UBInt16, UBInt32, UBInt64, ULInt8, ULInt16, ULInt32, ULInt64, SBInt32, SLInt32, SBInt64, SLInt64, Struct, Array, Enum, Padding, BitStruct, BitField, Value, String, CString ) from ..common.construct_utils import ULEB128 from .enums import * class ELFStructs(object): """ Accessible attributes: Elf_{byte|half|word|word64|addr|offset|sword|xword|xsword}: Data chunks, as specified by the ELF standard, adjusted for correct endianness and word-size. Elf_Ehdr: ELF file header Elf_Phdr: Program header Elf_Shdr: Section header Elf_Sym: Symbol table entry Elf_Rel, Elf_Rela: Entries in relocation sections """ def __init__(self, little_endian=True, elfclass=32): assert elfclass == 32 or elfclass == 64 self.little_endian = little_endian self.elfclass = elfclass def create_basic_structs(self): """ Create word-size related structs and ehdr struct needed for initial determining of ELF type. """ if self.little_endian: self.Elf_byte = ULInt8 self.Elf_half = ULInt16 self.Elf_word = ULInt32 self.Elf_word64 = ULInt64 self.Elf_addr = ULInt32 if self.elfclass == 32 else ULInt64 self.Elf_offset = self.Elf_addr self.Elf_sword = SLInt32 self.Elf_xword = ULInt32 if self.elfclass == 32 else ULInt64 self.Elf_sxword = SLInt32 if self.elfclass == 32 else SLInt64 else: self.Elf_byte = UBInt8 self.Elf_half = UBInt16 self.Elf_word = UBInt32 self.Elf_word64 = UBInt64 self.Elf_addr = UBInt32 if self.elfclass == 32 else UBInt64 self.Elf_offset = self.Elf_addr self.Elf_sword = SBInt32 self.Elf_xword = UBInt32 if self.elfclass == 32 else UBInt64 self.Elf_sxword = SBInt32 if self.elfclass == 32 else SBInt64 self._create_ehdr() self._create_leb128() self._create_ntbs() def create_advanced_structs(self, e_type=None, e_machine=None, e_ident_osabi=None): """ Create all ELF structs except the ehdr. They may possibly depend on provided e_type and/or e_machine parsed from ehdr. """ self._create_phdr(e_machine) self._create_shdr(e_machine) self._create_chdr() self._create_sym() self._create_rel() self._create_dyn(e_machine, e_ident_osabi) self._create_sunw_syminfo() self._create_gnu_verneed() self._create_gnu_verdef() self._create_gnu_versym() self._create_gnu_abi() self._create_note(e_type) self._create_stabs() self._create_arm_attributes() self._create_elf_hash() self._create_gnu_hash() #-------------------------------- PRIVATE --------------------------------# def _create_ehdr(self): self.Elf_Ehdr = Struct('Elf_Ehdr', Struct('e_ident', Array(4, self.Elf_byte('EI_MAG')), Enum(self.Elf_byte('EI_CLASS'), **ENUM_EI_CLASS), Enum(self.Elf_byte('EI_DATA'), **ENUM_EI_DATA), Enum(self.Elf_byte('EI_VERSION'), **ENUM_E_VERSION), Enum(self.Elf_byte('EI_OSABI'), **ENUM_EI_OSABI), self.Elf_byte('EI_ABIVERSION'), Padding(7) ), Enum(self.Elf_half('e_type'), **ENUM_E_TYPE), Enum(self.Elf_half('e_machine'), **ENUM_E_MACHINE), Enum(self.Elf_word('e_version'), **ENUM_E_VERSION), self.Elf_addr('e_entry'), self.Elf_offset('e_phoff'), self.Elf_offset('e_shoff'), self.Elf_word('e_flags'), self.Elf_half('e_ehsize'), self.Elf_half('e_phentsize'), self.Elf_half('e_phnum'), self.Elf_half('e_shentsize'), self.Elf_half('e_shnum'), self.Elf_half('e_shstrndx'), ) def _create_leb128(self): self.Elf_uleb128 = ULEB128 def _create_ntbs(self): self.Elf_ntbs = CString def _create_phdr(self, e_machine=None): p_type_dict = ENUM_P_TYPE_BASE if e_machine == 'EM_ARM': p_type_dict = ENUM_P_TYPE_ARM elif e_machine == 'EM_AARCH64': p_type_dict = ENUM_P_TYPE_AARCH64 elif e_machine == 'EM_MIPS': p_type_dict = ENUM_P_TYPE_MIPS if self.elfclass == 32: self.Elf_Phdr = Struct('Elf_Phdr', Enum(self.Elf_word('p_type'), **p_type_dict), self.Elf_offset('p_offset'), self.Elf_addr('p_vaddr'), self.Elf_addr('p_paddr'), self.Elf_word('p_filesz'), self.Elf_word('p_memsz'), self.Elf_word('p_flags'), self.Elf_word('p_align'), ) else: # 64 self.Elf_Phdr = Struct('Elf_Phdr', Enum(self.Elf_word('p_type'), **p_type_dict), self.Elf_word('p_flags'), self.Elf_offset('p_offset'), self.Elf_addr('p_vaddr'), self.Elf_addr('p_paddr'), self.Elf_xword('p_filesz'), self.Elf_xword('p_memsz'), self.Elf_xword('p_align'), ) def _create_shdr(self, e_machine=None): """Section header parsing. Depends on e_machine because of machine-specific values in sh_type. """ sh_type_dict = ENUM_SH_TYPE_BASE if e_machine == 'EM_ARM': sh_type_dict = ENUM_SH_TYPE_ARM elif e_machine == 'EM_X86_64': sh_type_dict = ENUM_SH_TYPE_AMD64 elif e_machine == 'EM_MIPS': sh_type_dict = ENUM_SH_TYPE_MIPS self.Elf_Shdr = Struct('Elf_Shdr', self.Elf_word('sh_name'), Enum(self.Elf_word('sh_type'), **sh_type_dict), self.Elf_xword('sh_flags'), self.Elf_addr('sh_addr'), self.Elf_offset('sh_offset'), self.Elf_xword('sh_size'), self.Elf_word('sh_link'), self.Elf_word('sh_info'), self.Elf_xword('sh_addralign'), self.Elf_xword('sh_entsize'), ) def _create_chdr(self): # Structure of compressed sections header. It is documented in Oracle # "Linker and Libraries Guide", Part IV ELF Application Binary # Interface, Chapter 13 Object File Format, Section Compression: # https://docs.oracle.com/cd/E53394_01/html/E54813/section_compression.html fields = [ Enum(self.Elf_word('ch_type'), **ENUM_ELFCOMPRESS_TYPE), self.Elf_xword('ch_size'), self.Elf_xword('ch_addralign'), ] if self.elfclass == 64: fields.insert(1, self.Elf_word('ch_reserved')) self.Elf_Chdr = Struct('Elf_Chdr', *fields) def _create_rel(self): # r_info is also taken apart into r_info_sym and r_info_type. # This is done in Value to avoid endianity issues while parsing. if self.elfclass == 32: r_info_sym = Value('r_info_sym', lambda ctx: (ctx['r_info'] >> 8) & 0xFFFFFF) r_info_type = Value('r_info_type', lambda ctx: ctx['r_info'] & 0xFF) else: # 64 r_info_sym = Value('r_info_sym', lambda ctx: (ctx['r_info'] >> 32) & 0xFFFFFFFF) r_info_type = Value('r_info_type', lambda ctx: ctx['r_info'] & 0xFFFFFFFF) self.Elf_Rel = Struct('Elf_Rel', self.Elf_addr('r_offset'), self.Elf_xword('r_info'), r_info_sym, r_info_type, ) self.Elf_Rela = Struct('Elf_Rela', self.Elf_addr('r_offset'), self.Elf_xword('r_info'), r_info_sym, r_info_type, self.Elf_sxword('r_addend'), ) def _create_dyn(self, e_machine=None, e_ident_osabi=None): d_tag_dict = dict(ENUM_D_TAG_COMMON) if e_machine in ENUMMAP_EXTRA_D_TAG_MACHINE: d_tag_dict.update(ENUMMAP_EXTRA_D_TAG_MACHINE[e_machine]) elif e_ident_osabi == 'ELFOSABI_SOLARIS': d_tag_dict.update(ENUM_D_TAG_SOLARIS) self.Elf_Dyn = Struct('Elf_Dyn', Enum(self.Elf_sxword('d_tag'), **d_tag_dict), self.Elf_xword('d_val'), Value('d_ptr', lambda ctx: ctx['d_val']), ) def _create_sym(self): # st_info is hierarchical. To access the type, use # container['st_info']['type'] st_info_struct = BitStruct('st_info', Enum(BitField('bind', 4), **ENUM_ST_INFO_BIND), Enum(BitField('type', 4), **ENUM_ST_INFO_TYPE)) # st_other is hierarchical. To access the visibility, # use container['st_other']['visibility'] st_other_struct = BitStruct('st_other', Padding(5), Enum(BitField('visibility', 3), **ENUM_ST_VISIBILITY)) if self.elfclass == 32: self.Elf_Sym = Struct('Elf_Sym', self.Elf_word('st_name'), self.Elf_addr('st_value'), self.Elf_word('st_size'), st_info_struct, st_other_struct, Enum(self.Elf_half('st_shndx'), **ENUM_ST_SHNDX), ) else: self.Elf_Sym = Struct('Elf_Sym', self.Elf_word('st_name'), st_info_struct, st_other_struct, Enum(self.Elf_half('st_shndx'), **ENUM_ST_SHNDX), self.Elf_addr('st_value'), self.Elf_xword('st_size'), ) def _create_sunw_syminfo(self): self.Elf_Sunw_Syminfo = Struct('Elf_Sunw_Syminfo', Enum(self.Elf_half('si_boundto'), **ENUM_SUNW_SYMINFO_BOUNDTO), self.Elf_half('si_flags'), ) def _create_gnu_verneed(self): # Structure of "version needed" entries is documented in # Oracle "Linker and Libraries Guide", Chapter 13 Object File Format self.Elf_Verneed = Struct('Elf_Verneed', self.Elf_half('vn_version'), self.Elf_half('vn_cnt'), self.Elf_word('vn_file'), self.Elf_word('vn_aux'), self.Elf_word('vn_next'), ) self.Elf_Vernaux = Struct('Elf_Vernaux', self.Elf_word('vna_hash'), self.Elf_half('vna_flags'), self.Elf_half('vna_other'), self.Elf_word('vna_name'), self.Elf_word('vna_next'), ) def _create_gnu_verdef(self): # Structure of "version definition" entries are documented in # Oracle "Linker and Libraries Guide", Chapter 13 Object File Format self.Elf_Verdef = Struct('Elf_Verdef', self.Elf_half('vd_version'), self.Elf_half('vd_flags'), self.Elf_half('vd_ndx'), self.Elf_half('vd_cnt'), self.Elf_word('vd_hash'), self.Elf_word('vd_aux'), self.Elf_word('vd_next'), ) self.Elf_Verdaux = Struct('Elf_Verdaux', self.Elf_word('vda_name'), self.Elf_word('vda_next'), ) def _create_gnu_versym(self): # Structure of "version symbol" entries are documented in # Oracle "Linker and Libraries Guide", Chapter 13 Object File Format self.Elf_Versym = Struct('Elf_Versym', Enum(self.Elf_half('ndx'), **ENUM_VERSYM), ) def _create_gnu_abi(self): # Structure of GNU ABI notes is documented in # https://code.woboq.org/userspace/glibc/csu/abi-note.S.html self.Elf_abi = Struct('Elf_abi', Enum(self.Elf_word('abi_os'), **ENUM_NOTE_ABI_TAG_OS), self.Elf_word('abi_major'), self.Elf_word('abi_minor'), self.Elf_word('abi_tiny'), ) def _create_note(self, e_type=None): # Structure of "PT_NOTE" section self.Elf_Nhdr = Struct('Elf_Nhdr', self.Elf_word('n_namesz'), self.Elf_word('n_descsz'), Enum(self.Elf_word('n_type'), **(ENUM_NOTE_N_TYPE if e_type != "ET_CORE" else ENUM_CORE_NOTE_N_TYPE)), ) # A process psinfo structure according to # http://elixir.free-electrons.com/linux/v2.6.35/source/include/linux/elfcore.h#L84 if self.elfclass == 32: self.Elf_Prpsinfo = Struct('Elf_Prpsinfo', self.Elf_byte('pr_state'), String('pr_sname', 1), self.Elf_byte('pr_zomb'), self.Elf_byte('pr_nice'), self.Elf_xword('pr_flag'), self.Elf_half('pr_uid'), self.Elf_half('pr_gid'), self.Elf_half('pr_pid'), self.Elf_half('pr_ppid'), self.Elf_half('pr_pgrp'), self.Elf_half('pr_sid'), String('pr_fname', 16), String('pr_psargs', 80), ) else: # 64 self.Elf_Prpsinfo = Struct('Elf_Prpsinfo', self.Elf_byte('pr_state'), String('pr_sname', 1), self.Elf_byte('pr_zomb'), self.Elf_byte('pr_nice'), Padding(4), self.Elf_xword('pr_flag'), self.Elf_word('pr_uid'), self.Elf_word('pr_gid'), self.Elf_word('pr_pid'), self.Elf_word('pr_ppid'), self.Elf_word('pr_pgrp'), self.Elf_word('pr_sid'), String('pr_fname', 16), String('pr_psargs', 80), ) # A PT_NOTE of type NT_FILE matching the definition in # https://chromium.googlesource.com/ # native_client/nacl-binutils/+/upstream/master/binutils/readelf.c # Line 15121 self.Elf_Nt_File = Struct('Elf_Nt_File', self.Elf_xword("num_map_entries"), self.Elf_xword("page_size"), Array(lambda ctx: ctx.num_map_entries, Struct('Elf_Nt_File_Entry', self.Elf_addr('vm_start'), self.Elf_addr('vm_end'), self.Elf_offset('page_offset'))), Array(lambda ctx: ctx.num_map_entries, CString('filename'))) def _create_stabs(self): # Structure of one stabs entry, see binutils/bfd/stabs.c # Names taken from https://sourceware.org/gdb/current/onlinedocs/stabs.html#Overview self.Elf_Stabs = Struct('Elf_Stabs', self.Elf_word('n_strx'), self.Elf_byte('n_type'), self.Elf_byte('n_other'), self.Elf_half('n_desc'), self.Elf_word('n_value'), ) def _create_arm_attributes(self): # Structure of a build attributes subsection header. A subsection is # either public to all tools that process the ELF file or private to # the vendor's tools. self.Elf_Attr_Subsection_Header = Struct('Elf_Attr_Subsection', self.Elf_word('length'), self.Elf_ntbs('vendor_name', encoding='utf-8') ) # Structure of a build attribute tag. self.Elf_Attribute_Tag = Struct('Elf_Attribute_Tag', Enum(self.Elf_uleb128('tag'), **ENUM_ATTR_TAG_ARM) ) def _create_elf_hash(self): # Structure of the old SYSV-style hash table header. It is documented # in the Oracle "Linker and Libraries Guide", Part IV ELF Application # Binary Interface, Chapter 14 Object File Format, Section Hash Table # Section: # https://docs.oracle.com/cd/E53394_01/html/E54813/chapter6-48031.html self.Elf_Hash = Struct('Elf_Hash', self.Elf_word('nbuckets'), self.Elf_word('nchains'), Array(lambda ctx: ctx['nbuckets'], self.Elf_word('buckets')), Array(lambda ctx: ctx['nchains'], self.Elf_word('chains'))) def _create_gnu_hash(self): # Structure of the GNU-style hash table header. Documentation for this # table is mostly in the GLIBC source code, a good explanation of the # format can be found in this blog post: # https://flapenguin.me/2017/05/10/elf-lookup-dt-gnu-hash/ self.Gnu_Hash = Struct('Gnu_Hash', self.Elf_word('nbuckets'), self.Elf_word('symoffset'), self.Elf_word('bloom_size'), self.Elf_word('bloom_shift'), Array(lambda ctx: ctx['bloom_size'], self.Elf_xword('bloom')), Array(lambda ctx: ctx['nbuckets'], self.Elf_word('buckets'))) pyelftools-0.26/examples/000077500000000000000000000000001357220457300154675ustar00rootroot00000000000000pyelftools-0.26/examples/dwarf_decode_address.py000066400000000000000000000106031357220457300221540ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools example: dwarf_decode_address.py # # Decode an address in an ELF file to find out which function it belongs to # and from which filename/line it comes in the original source file. # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- from __future__ import print_function import sys # If pyelftools is not installed, the example can also run from the root or # examples/ dir of the source distribution. sys.path[0:0] = ['.', '..'] from elftools.common.py3compat import maxint, bytes2str from elftools.dwarf.descriptions import describe_form_class from elftools.elf.elffile import ELFFile def process_file(filename, address): print('Processing file:', filename) with open(filename, 'rb') as f: elffile = ELFFile(f) if not elffile.has_dwarf_info(): print(' file has no DWARF info') return # get_dwarf_info returns a DWARFInfo context object, which is the # starting point for all DWARF-based processing in pyelftools. dwarfinfo = elffile.get_dwarf_info() funcname = decode_funcname(dwarfinfo, address) file, line = decode_file_line(dwarfinfo, address) print('Function:', bytes2str(funcname)) print('File:', bytes2str(file)) print('Line:', line) def decode_funcname(dwarfinfo, address): # Go over all DIEs in the DWARF information, looking for a subprogram # entry with an address range that includes the given address. Note that # this simplifies things by disregarding subprograms that may have # split address ranges. for CU in dwarfinfo.iter_CUs(): for DIE in CU.iter_DIEs(): try: if DIE.tag == 'DW_TAG_subprogram': lowpc = DIE.attributes['DW_AT_low_pc'].value # DWARF v4 in section 2.17 describes how to interpret the # DW_AT_high_pc attribute based on the class of its form. # For class 'address' it's taken as an absolute address # (similarly to DW_AT_low_pc); for class 'constant', it's # an offset from DW_AT_low_pc. highpc_attr = DIE.attributes['DW_AT_high_pc'] highpc_attr_class = describe_form_class(highpc_attr.form) if highpc_attr_class == 'address': highpc = highpc_attr.value elif highpc_attr_class == 'constant': highpc = lowpc + highpc_attr.value else: print('Error: invalid DW_AT_high_pc class:', highpc_attr_class) continue if lowpc <= address <= highpc: return DIE.attributes['DW_AT_name'].value except KeyError: continue return None def decode_file_line(dwarfinfo, address): # Go over all the line programs in the DWARF information, looking for # one that describes the given address. for CU in dwarfinfo.iter_CUs(): # First, look at line programs to find the file/line for the address lineprog = dwarfinfo.line_program_for_CU(CU) prevstate = None for entry in lineprog.get_entries(): # We're interested in those entries where a new state is assigned if entry.state is None: continue if entry.state.end_sequence: # if the line number sequence ends, clear prevstate. prevstate = None continue # Looking for a range of addresses in two consecutive states that # contain the required address. if prevstate and prevstate.address <= address < entry.state.address: filename = lineprog['file_entry'][prevstate.file - 1].name line = prevstate.line return filename, line prevstate = entry.state return None, None if __name__ == '__main__': if sys.argv[1] == '--test': process_file(sys.argv[2], 0x400503) sys.exit(0) if len(sys.argv) < 3: print('Expected usage: {0}
'.format(sys.argv[0])) sys.exit(1) addr = int(sys.argv[1], 0) process_file(sys.argv[2], addr) pyelftools-0.26/examples/dwarf_die_tree.py000066400000000000000000000046131357220457300210100ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools example: dwarf_die_tree.py # # In the .debug_info section, Dwarf Information Entries (DIEs) form a tree. # pyelftools provides easy access to this tree, as demonstrated here. # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- from __future__ import print_function import sys # If pyelftools is not installed, the example can also run from the root or # examples/ dir of the source distribution. sys.path[0:0] = ['.', '..'] from elftools.elf.elffile import ELFFile def process_file(filename): print('Processing file:', filename) with open(filename, 'rb') as f: elffile = ELFFile(f) if not elffile.has_dwarf_info(): print(' file has no DWARF info') return # get_dwarf_info returns a DWARFInfo context object, which is the # starting point for all DWARF-based processing in pyelftools. dwarfinfo = elffile.get_dwarf_info() for CU in dwarfinfo.iter_CUs(): # DWARFInfo allows to iterate over the compile units contained in # the .debug_info section. CU is a CompileUnit object, with some # computed attributes (such as its offset in the section) and # a header which conforms to the DWARF standard. The access to # header elements is, as usual, via item-lookup. print(' Found a compile unit at offset %s, length %s' % ( CU.cu_offset, CU['unit_length'])) # Start with the top DIE, the root for this CU's DIE tree top_DIE = CU.get_top_DIE() print(' Top DIE with tag=%s' % top_DIE.tag) # We're interested in the filename... print(' name=%s' % top_DIE.get_full_path()) # Display DIEs recursively starting with top_DIE die_info_rec(top_DIE) def die_info_rec(die, indent_level=' '): """ A recursive function for showing information about a DIE and its children. """ print(indent_level + 'DIE tag=%s' % die.tag) child_indent = indent_level + ' ' for child in die.iter_children(): die_info_rec(child, child_indent) if __name__ == '__main__': if sys.argv[1] == '--test': for filename in sys.argv[2:]: process_file(filename) pyelftools-0.26/examples/dwarf_location_info.py000066400000000000000000000117321357220457300220530ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools example: dwarf_location_info.py # # Examine DIE entries which have either location list values or location # expression values and decode that information. # # Location information can either be completely contained within a DIE # (using 'DW_FORM_exprloc' in DWARFv4 or 'DW_FORM_block1' in earlier # versions) or be a reference to a location list contained within # the .debug_loc section (using 'DW_FORM_sec_offset' in DWARFv4 or # 'DW_FORM_data4' / 'DW_FORM_data8' in earlier versions). # # The LocationParser object parses the DIE attributes and handles both # formats. # # The directory 'test/testfiles_for_location_info' contains test files with # location information represented in both DWARFv4 and DWARFv2 forms. # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- from __future__ import print_function import sys # If pyelftools is not installed, the example can also run from the root or # examples/ dir of the source distribution. sys.path[0:0] = ['.', '..'] from elftools.common.py3compat import itervalues from elftools.elf.elffile import ELFFile from elftools.dwarf.descriptions import ( describe_DWARF_expr, set_global_machine_arch) from elftools.dwarf.locationlists import ( LocationEntry, LocationExpr, LocationParser) def process_file(filename): print('Processing file:', filename) with open(filename, 'rb') as f: elffile = ELFFile(f) if not elffile.has_dwarf_info(): print(' file has no DWARF info') return # get_dwarf_info returns a DWARFInfo context object, which is the # starting point for all DWARF-based processing in pyelftools. dwarfinfo = elffile.get_dwarf_info() # The location lists are extracted by DWARFInfo from the .debug_loc # section, and returned here as a LocationLists object. location_lists = dwarfinfo.location_lists() # This is required for the descriptions module to correctly decode # register names contained in DWARF expressions. set_global_machine_arch(elffile.get_machine_arch()) # Create a LocationParser object that parses the DIE attributes and # creates objects representing the actual location information. loc_parser = LocationParser(location_lists) for CU in dwarfinfo.iter_CUs(): # DWARFInfo allows to iterate over the compile units contained in # the .debug_info section. CU is a CompileUnit object, with some # computed attributes (such as its offset in the section) and # a header which conforms to the DWARF standard. The access to # header elements is, as usual, via item-lookup. print(' Found a compile unit at offset %s, length %s' % ( CU.cu_offset, CU['unit_length'])) # A CU provides a simple API to iterate over all the DIEs in it. for DIE in CU.iter_DIEs(): # Go over all attributes of the DIE. Each attribute is an # AttributeValue object (from elftools.dwarf.die), which we # can examine. for attr in itervalues(DIE.attributes): # Check if this attribute contains location information if loc_parser.attribute_has_location(attr, CU['version']): print(' DIE %s. attr %s.' % (DIE.tag, attr.name)) loc = loc_parser.parse_from_attribute(attr, CU['version']) # We either get a list (in case the attribute is a # reference to the .debug_loc section) or a LocationExpr # object (in case the attribute itself contains location # information). if isinstance(loc, LocationExpr): print(' %s' % ( describe_DWARF_expr(loc.loc_expr, dwarfinfo.structs))) elif isinstance(loc, list): print(show_loclist(loc, dwarfinfo, indent=' ')) def show_loclist(loclist, dwarfinfo, indent): """ Display a location list nicely, decoding the DWARF expressions contained within. """ d = [] for loc_entity in loclist: if isinstance(loc_entity, LocationEntry): d.append('%s <<%s>>' % ( loc_entity, describe_DWARF_expr(loc_entity.loc_expr, dwarfinfo.structs))) else: d.append(str(loc_entity)) return '\n'.join(indent + s for s in d) if __name__ == '__main__': if sys.argv[1] == '--test': for filename in sys.argv[2:]: process_file(filename) pyelftools-0.26/examples/dwarf_pubnames_types.py000066400000000000000000000110211357220457300222550ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools example: dwarf_pubnames_types.py # # Dump the contents of .debug_pubnames and .debug_pubtypes sections from the # ELF file. # # Note: sample_exe64.elf doesn't have a .debug_pubtypes section. # # Vijay Ramasami (rvijayc@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- from __future__ import print_function import sys # If pyelftools is not installed, the example can also run from the root or # examples/ dir of the source distribution. sys.path[0:0] = ['.', '..'] from elftools.elf.elffile import ELFFile from elftools.common.py3compat import bytes2str def process_file(filename): print('Processing file:', filename) with open(filename, 'rb') as f: elffile = ELFFile(f) if not elffile.has_dwarf_info(): print(' file has no DWARF info') return # get_dwarf_info returns a DWARFInfo context object, which is the # starting point for all DWARF-based processing in pyelftools. dwarfinfo = elffile.get_dwarf_info() # get .debug_pubtypes section. pubnames = dwarfinfo.get_pubnames() if pubnames is None: print('ERROR: No .debug_pubnames section found in ELF.') else: print('%d entries found in .debug_pubnames' % len(pubnames)) # try getting information on a global symbol. print('Trying pubnames example ...') sym_name = 'main' try: entry = pubnames[sym_name] except KeyError: print('ERROR: No pubname entry found for ' + sym_name) else: print('%s: cu_ofs = %d, die_ofs = %d' % (sym_name, entry.cu_ofs, entry.die_ofs)) # get the actual CU/DIE that has this information. print('Fetching the actual die for %s ...' % sym_name) for cu in dwarfinfo.iter_CUs(): if cu.cu_offset == entry.cu_ofs: for die in cu.iter_DIEs(): if die.offset == entry.die_ofs: print('Die Name: %s' % bytes2str(die.attributes['DW_AT_name'].value)) # dump all entries in .debug_pubnames section. print('Dumping .debug_pubnames table ...') print('-' * 66) print('%50s%8s%8s' % ('Symbol', 'CU_OFS', 'DIE_OFS')) print('-' * 66) for (name, entry) in pubnames.items(): print('%50s%8d%8d' % (name, entry.cu_ofs, entry.die_ofs)) print('-' * 66) # get .debug_pubtypes section. pubtypes = dwarfinfo.get_pubtypes() if pubtypes is None: print('ERROR: No .debug_pubtypes section found in ELF') else: print('%d entries found in .debug_pubtypes' % len(pubtypes)) # try getting information on a global type. sym_name = 'char' # note: using the .get() API (pubtypes[key] will also work). entry = pubtypes.get(sym_name) if entry is None: print('ERROR: No pubtype entry for %s' % sym_name) else: print('%s: cu_ofs %d, die_ofs %d' % (sym_name, entry.cu_ofs, entry.die_ofs)) # get the actual CU/DIE that has this information. print('Fetching the actual die for %s ...' % sym_name) for cu in dwarfinfo.iter_CUs(): if cu.cu_offset == entry.cu_ofs: for die in cu.iter_DIEs(): if die.offset == entry.die_ofs: print('Die Name: %s' % bytes2str(die.attributes['DW_AT_name'].value)) # dump all entries in .debug_pubtypes section. print('Dumping .debug_pubtypes table ...') print('-' * 66) print('%50s%8s%8s' % ('Symbol', 'CU_OFS', 'DIE_OFS')) print('-' * 66) for (name, entry) in pubtypes.items(): print('%50s%8d%8d' % (name, entry.cu_ofs, entry.die_ofs)) print('-' * 66) if __name__ == '__main__': if sys.argv[1] == '--test': process_file(sys.argv[2]) sys.exit(0) if len(sys.argv) < 2: print('Expected usage: {0} '.format(sys.argv[0])) sys.exit(1) process_file(sys.argv[1]) pyelftools-0.26/examples/dwarf_range_lists.py000066400000000000000000000065121357220457300215420ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools example: dwarf_range_lists.py # # Examine DIE entries which have range list values, and decode these range # lists. # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- from __future__ import print_function import sys # If pyelftools is not installed, the example can also run from the root or # examples/ dir of the source distribution. sys.path[0:0] = ['.', '..'] from elftools.common.py3compat import itervalues from elftools.elf.elffile import ELFFile from elftools.dwarf.descriptions import ( describe_DWARF_expr, set_global_machine_arch) from elftools.dwarf.ranges import RangeEntry def process_file(filename): print('Processing file:', filename) with open(filename, 'rb') as f: elffile = ELFFile(f) if not elffile.has_dwarf_info(): print(' file has no DWARF info') return # get_dwarf_info returns a DWARFInfo context object, which is the # starting point for all DWARF-based processing in pyelftools. dwarfinfo = elffile.get_dwarf_info() # The range lists are extracted by DWARFInfo from the .debug_ranges # section, and returned here as a RangeLists object. range_lists = dwarfinfo.range_lists() if range_lists is None: print(' file has no .debug_ranges section') return for CU in dwarfinfo.iter_CUs(): # DWARFInfo allows to iterate over the compile units contained in # the .debug_info section. CU is a CompileUnit object, with some # computed attributes (such as its offset in the section) and # a header which conforms to the DWARF standard. The access to # header elements is, as usual, via item-lookup. print(' Found a compile unit at offset %s, length %s' % ( CU.cu_offset, CU['unit_length'])) # A CU provides a simple API to iterate over all the DIEs in it. for DIE in CU.iter_DIEs(): # Go over all attributes of the DIE. Each attribute is an # AttributeValue object (from elftools.dwarf.die), which we # can examine. for attr in itervalues(DIE.attributes): if attribute_has_range_list(attr): # This is a range list. Its value is an offset into # the .debug_ranges section, so we can use the range # lists object to decode it. rangelist = range_lists.get_range_list_at_offset( attr.value) print(' DIE %s. attr %s.\n%s' % ( DIE.tag, attr.name, rangelist)) def attribute_has_range_list(attr): """ Only some attributes can have range list values, if they have the required DW_FORM (rangelistptr "class" in DWARF spec v3) """ if attr.name == 'DW_AT_ranges': if attr.form in ('DW_FORM_data4', 'DW_FORM_data8'): return True return False if __name__ == '__main__': if sys.argv[1] == '--test': for filename in sys.argv[2:]: process_file(filename) pyelftools-0.26/examples/elf_low_high_api.py000066400000000000000000000066051357220457300213270ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools example: elf_low_high_api.py # # A simple example that shows some usage of the low-level API pyelftools # provides versus the high-level API while inspecting an ELF file's symbol # table. # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- from __future__ import print_function import sys # If pyelftools is not installed, the example can also run from the root or # examples/ dir of the source distribution. sys.path[0:0] = ['.', '..'] from elftools.elf.elffile import ELFFile from elftools.elf.sections import SymbolTableSection def process_file(filename): print('Processing file:', filename) with open(filename, 'rb') as f: section_info_lowlevel(f) f.seek(0) section_info_highlevel(f) def section_info_lowlevel(stream): print('Low level API...') # We'll still be using the ELFFile context object. It's just too # convenient to give up, even in the low-level API demonstation :-) elffile = ELFFile(stream) # The e_shnum ELF header field says how many sections there are in a file print(' %s sections' % elffile['e_shnum']) # Try to find the symbol table for i in range(elffile['e_shnum']): section_offset = elffile['e_shoff'] + i * elffile['e_shentsize'] # Parse the section header using structs.Elf_Shdr stream.seek(section_offset) section_header = elffile.structs.Elf_Shdr.parse_stream(stream) if section_header['sh_type'] == 'SHT_SYMTAB': # Some details about the section. Note that the section name is a # pointer to the object's string table, so it's only a number # here. To get to the actual name one would need to parse the string # table section and extract the name from there (or use the # high-level API!) print(' Section name: %s, type: %s' % ( section_header['sh_name'], section_header['sh_type'])) break else: print(' No symbol table found. Perhaps this ELF has been stripped?') def section_info_highlevel(stream): print('High level API...') elffile = ELFFile(stream) # Just use the public methods of ELFFile to get what we need # Note that section names are strings. print(' %s sections' % elffile.num_sections()) section = elffile.get_section_by_name('.symtab') if not section: print(' No symbol table found. Perhaps this ELF has been stripped?') return # A section type is in its header, but the name was decoded and placed in # a public attribute. print(' Section name: %s, type: %s' %( section.name, section['sh_type'])) # But there's more... If this section is a symbol table section (which is # the case in the sample ELF file that comes with the examples), we can # get some more information about it. if isinstance(section, SymbolTableSection): num_symbols = section.num_symbols() print(" It's a symbol section with %s symbols" % num_symbols) print(" The name of the last symbol in the section is: %s" % ( section.get_symbol(num_symbols - 1).name)) if __name__ == '__main__': if sys.argv[1] == '--test': for filename in sys.argv[2:]: process_file(filename) pyelftools-0.26/examples/elf_notes.py000066400000000000000000000034561357220457300200270ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools example: elf_notes.py # # An example of obtaining note sections from an ELF file and examining # the notes it contains. # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- from __future__ import print_function import sys # If pyelftools is not installed, the example can also run from the root or # examples/ dir of the source distribution. sys.path[0:0] = ['.', '..'] from elftools.elf.elffile import ELFFile from elftools.elf.sections import NoteSection def process_file(filename): print('Processing file:', filename) with open(filename, 'rb') as f: for sect in ELFFile(f).iter_sections(): if not isinstance(sect, NoteSection): continue print(' Note section "%s" at offset 0x%.8x with size %d' % ( sect.name, sect.header['sh_offset'], sect.header['sh_size'])) for note in sect.iter_notes(): print(' Name:', note['n_name']) print(' Type:', note['n_type']) desc = note['n_desc'] if note['n_type'] == 'NT_GNU_ABI_TAG': print(' Desc: %s, ABI: %d.%d.%d' % ( desc['abi_os'], desc['abi_major'], desc['abi_minor'], desc['abi_tiny'])) elif note['n_type'] == 'NT_GNU_BUILD_ID': print(' Desc:', desc) else: print(' Desc:', ''.join('%.2x' % ord(b) for b in desc)) if __name__ == '__main__': if sys.argv[1] == '--test': for filename in sys.argv[2:]: process_file(filename) pyelftools-0.26/examples/elf_relocations.py000066400000000000000000000032351357220457300212140ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools example: elf_relocations.py # # An example of obtaining a relocation section from an ELF file and examining # the relocation entries it contains. # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- from __future__ import print_function import sys # If pyelftools is not installed, the example can also run from the root or # examples/ dir of the source distribution. sys.path[0:0] = ['.', '..'] from elftools.elf.elffile import ELFFile from elftools.elf.relocation import RelocationSection def process_file(filename): print('Processing file:', filename) with open(filename, 'rb') as f: elffile = ELFFile(f) # Read the .rela.dyn section from the file, by explicitly asking # ELFFile for this section # The section names are strings reladyn_name = '.rela.dyn' reladyn = elffile.get_section_by_name(reladyn_name) if not isinstance(reladyn, RelocationSection): print(' The file has no %s section' % reladyn_name) print(' %s section with %s relocations' % ( reladyn_name, reladyn.num_relocations())) for reloc in reladyn.iter_relocations(): print(' Relocation (%s)' % 'RELA' if reloc.is_RELA() else 'REL') # Relocation entry attributes are available through item lookup print(' offset = %s' % reloc['r_offset']) if __name__ == '__main__': if sys.argv[1] == '--test': for filename in sys.argv[2:]: process_file(filename) pyelftools-0.26/examples/elf_show_debug_sections.py000066400000000000000000000017271357220457300227330ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools example: elf_show_debug_sections.py # # Show the names of all .debug_* sections in ELF files. # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- from __future__ import print_function import sys # If pyelftools is not installed, the example can also run from the root or # examples/ dir of the source distribution. sys.path[0:0] = ['.', '..'] from elftools.elf.elffile import ELFFile def process_file(filename): print('In file:', filename) with open(filename, 'rb') as f: elffile = ELFFile(f) for section in elffile.iter_sections(): if section.name.startswith('.debug'): print(' ' + section.name) if __name__ == '__main__': if sys.argv[1] == '--test': for filename in sys.argv[2:]: process_file(filename) pyelftools-0.26/examples/elfclass_address_size.py000066400000000000000000000025371357220457300224030ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools example: elfclass_address_size.py # # This example explores the ELF class (32 or 64-bit) and address size in each # of the CUs in the DWARF information. # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- from __future__ import print_function import sys # If pyelftools is not installed, the example can also run from the root or # examples/ dir of the source distribution. sys.path[0:0] = ['.', '..'] from elftools.elf.elffile import ELFFile def process_file(filename): with open(filename, 'rb') as f: elffile = ELFFile(f) # elfclass is a public attribute of ELFFile, read from its header print('%s: elfclass is %s' % (filename, elffile.elfclass)) if elffile.has_dwarf_info(): dwarfinfo = elffile.get_dwarf_info() for CU in dwarfinfo.iter_CUs(): # cu_offset is a public attribute of CU # address_size is part of the CU header print(' CU at offset 0x%x. address_size is %s' % ( CU.cu_offset, CU['address_size'])) if __name__ == '__main__': if sys.argv[1] == '--test': for filename in sys.argv[2:]: process_file(filename) pyelftools-0.26/examples/examine_dwarf_info.py000066400000000000000000000036551357220457300216760ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools example: examine_dwarf_info.py # # An example of examining information in the .debug_info section of an ELF file. # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- from __future__ import print_function import sys # If pyelftools is not installed, the example can also run from the root or # examples/ dir of the source distribution. sys.path[0:0] = ['.', '..'] from elftools.elf.elffile import ELFFile def process_file(filename): print('Processing file:', filename) with open(filename, 'rb') as f: elffile = ELFFile(f) if not elffile.has_dwarf_info(): print(' file has no DWARF info') return # get_dwarf_info returns a DWARFInfo context object, which is the # starting point for all DWARF-based processing in pyelftools. dwarfinfo = elffile.get_dwarf_info() for CU in dwarfinfo.iter_CUs(): # DWARFInfo allows to iterate over the compile units contained in # the .debug_info section. CU is a CompileUnit object, with some # computed attributes (such as its offset in the section) and # a header which conforms to the DWARF standard. The access to # header elements is, as usual, via item-lookup. print(' Found a compile unit at offset %s, length %s' % ( CU.cu_offset, CU['unit_length'])) # The first DIE in each compile unit describes it. top_DIE = CU.get_top_DIE() print(' Top DIE with tag=%s' % top_DIE.tag) # We're interested in the filename... print(' name=%s' % top_DIE.get_full_path()) if __name__ == '__main__': if sys.argv[1] == '--test': for filename in sys.argv[2:]: process_file(filename) pyelftools-0.26/examples/reference_output/000077500000000000000000000000001357220457300210455ustar00rootroot00000000000000pyelftools-0.26/examples/reference_output/dwarf_decode_address.out000066400000000000000000000001161357220457300257070ustar00rootroot00000000000000Processing file: ./examples/sample_exe64.elf Function: main File: z.c Line: 3 pyelftools-0.26/examples/reference_output/dwarf_die_tree.out000066400000000000000000000043241357220457300245440ustar00rootroot00000000000000Processing file: ./examples/sample_exe64.elf Found a compile unit at offset 0, length 115 Top DIE with tag=DW_TAG_compile_unit name=/usr/src/packages/BUILD/glibc-2.11.1/csu/../sysdeps/x86_64/elf/start.S DIE tag=DW_TAG_compile_unit Found a compile unit at offset 119, length 135 Top DIE with tag=DW_TAG_compile_unit name=/usr/src/packages/BUILD/glibc-2.11.1/csu/init.c DIE tag=DW_TAG_compile_unit DIE tag=DW_TAG_base_type DIE tag=DW_TAG_base_type DIE tag=DW_TAG_base_type DIE tag=DW_TAG_base_type DIE tag=DW_TAG_base_type DIE tag=DW_TAG_base_type DIE tag=DW_TAG_base_type DIE tag=DW_TAG_base_type DIE tag=DW_TAG_base_type DIE tag=DW_TAG_base_type DIE tag=DW_TAG_variable DIE tag=DW_TAG_const_type Found a compile unit at offset 258, length 156 Top DIE with tag=DW_TAG_compile_unit name=/tmp/ebenders/z.c DIE tag=DW_TAG_compile_unit DIE tag=DW_TAG_subprogram DIE tag=DW_TAG_formal_parameter DIE tag=DW_TAG_formal_parameter DIE tag=DW_TAG_base_type DIE tag=DW_TAG_pointer_type DIE tag=DW_TAG_pointer_type DIE tag=DW_TAG_base_type DIE tag=DW_TAG_variable Found a compile unit at offset 418, length 300 Top DIE with tag=DW_TAG_compile_unit name=/usr/src/packages/BUILD/glibc-2.11.1/csu/elf-init.c DIE tag=DW_TAG_compile_unit DIE tag=DW_TAG_base_type DIE tag=DW_TAG_typedef DIE tag=DW_TAG_base_type DIE tag=DW_TAG_base_type DIE tag=DW_TAG_subprogram DIE tag=DW_TAG_subprogram DIE tag=DW_TAG_formal_parameter DIE tag=DW_TAG_formal_parameter DIE tag=DW_TAG_formal_parameter DIE tag=DW_TAG_variable DIE tag=DW_TAG_lexical_block DIE tag=DW_TAG_variable DIE tag=DW_TAG_pointer_type DIE tag=DW_TAG_pointer_type DIE tag=DW_TAG_base_type DIE tag=DW_TAG_const_type DIE tag=DW_TAG_array_type DIE tag=DW_TAG_subrange_type DIE tag=DW_TAG_subroutine_type DIE tag=DW_TAG_formal_parameter DIE tag=DW_TAG_formal_parameter DIE tag=DW_TAG_formal_parameter DIE tag=DW_TAG_pointer_type DIE tag=DW_TAG_variable DIE tag=DW_TAG_variable pyelftools-0.26/examples/reference_output/dwarf_location_info.out000066400000000000000000000040041357220457300256020ustar00rootroot00000000000000Processing file: ./examples/sample_exe64.elf Found a compile unit at offset 0, length 115 Found a compile unit at offset 119, length 135 DIE DW_TAG_variable. attr DW_AT_location. (DW_OP_addr: 400608) Found a compile unit at offset 258, length 156 DIE DW_TAG_subprogram. attr DW_AT_frame_base. LocationEntry(begin_offset=0, end_offset=1, loc_expr=[119, 8]) <<(DW_OP_breg7 (rsp): 8)>> LocationEntry(begin_offset=1, end_offset=4, loc_expr=[119, 16]) <<(DW_OP_breg7 (rsp): 16)>> LocationEntry(begin_offset=4, end_offset=43, loc_expr=[118, 16]) <<(DW_OP_breg6 (rbp): 16)>> DIE DW_TAG_formal_parameter. attr DW_AT_location. (DW_OP_fbreg: -20) DIE DW_TAG_formal_parameter. attr DW_AT_location. (DW_OP_fbreg: -32) DIE DW_TAG_variable. attr DW_AT_location. (DW_OP_addr: 601018) Found a compile unit at offset 418, length 300 DIE DW_TAG_subprogram. attr DW_AT_frame_base. (DW_OP_breg7 (rsp): 8) DIE DW_TAG_subprogram. attr DW_AT_frame_base. LocationEntry(begin_offset=16, end_offset=64, loc_expr=[119, 8]) <<(DW_OP_breg7 (rsp): 8)>> LocationEntry(begin_offset=64, end_offset=153, loc_expr=[119, 192, 0]) <<(DW_OP_breg7 (rsp): 64)>> DIE DW_TAG_formal_parameter. attr DW_AT_location. LocationEntry(begin_offset=16, end_offset=85, loc_expr=[85]) <<(DW_OP_reg5 (rdi))>> LocationEntry(begin_offset=85, end_offset=143, loc_expr=[94]) <<(DW_OP_reg14 (r14))>> DIE DW_TAG_formal_parameter. attr DW_AT_location. LocationEntry(begin_offset=16, end_offset=85, loc_expr=[84]) <<(DW_OP_reg4 (rsi))>> LocationEntry(begin_offset=85, end_offset=138, loc_expr=[93]) <<(DW_OP_reg13 (r13))>> DIE DW_TAG_formal_parameter. attr DW_AT_location. LocationEntry(begin_offset=16, end_offset=85, loc_expr=[81]) <<(DW_OP_reg1 (rdx))>> LocationEntry(begin_offset=85, end_offset=133, loc_expr=[92]) <<(DW_OP_reg12 (r12))>> DIE DW_TAG_variable. attr DW_AT_location. LocationEntry(begin_offset=92, end_offset=123, loc_expr=[83]) <<(DW_OP_reg3 (rbx))>> pyelftools-0.26/examples/reference_output/dwarf_pubnames_types.out000066400000000000000000000015561357220457300260260ustar00rootroot00000000000000Processing file: ./examples/sample_exe64.elf 5 entries found in .debug_pubnames Trying pubnames example ... main: cu_ofs = 258, die_ofs = 303 Fetching the actual die for main ... Die Name: main Dumping .debug_pubnames table ... ------------------------------------------------------------------ Symbol CU_OFS DIE_OFS ------------------------------------------------------------------ _IO_stdin_used 119 230 main 258 303 glob 258 395 __libc_csu_fini 418 495 __libc_csu_init 418 523 ------------------------------------------------------------------ ERROR: No .debug_pubtypes section found in ELF pyelftools-0.26/examples/reference_output/dwarf_range_lists.out000066400000000000000000000007211357220457300252730ustar00rootroot00000000000000Processing file: ./examples/sample_exe64.elf Found a compile unit at offset 0, length 115 Found a compile unit at offset 119, length 135 Found a compile unit at offset 258, length 156 Found a compile unit at offset 418, length 300 DIE DW_TAG_lexical_block. attr DW_AT_ranges. [RangeEntry(begin_offset=26, end_offset=40), RangeEntry(begin_offset=85, end_offset=118), RangeEntry(begin_offset=73, end_offset=77), RangeEntry(begin_offset=64, end_offset=67)] pyelftools-0.26/examples/reference_output/elf_low_high_api.out000066400000000000000000000004311357220457300250530ustar00rootroot00000000000000Processing file: ./examples/sample_exe64.elf Low level API... 42 sections Section name: 1, type: SHT_SYMTAB High level API... 42 sections Section name: .symtab, type: SHT_SYMTAB It's a symbol section with 80 symbols The name of the last symbol in the section is: _init pyelftools-0.26/examples/reference_output/elf_notes.out000066400000000000000000000007231357220457300235560ustar00rootroot00000000000000Processing file: ./examples/sample_exe64.elf Note section ".note.ABI-tag" at offset 0x00000254 with size 32 Name: GNU Type: NT_GNU_ABI_TAG Desc: ELF_NOTE_OS_LINUX, ABI: 2.6.4 Note section ".note.SuSE" at offset 0x00000274 with size 24 Name: SuSE Type: 1163097427 Desc: 01000a02 Note section ".note.gnu.build-id" at offset 0x0000028c with size 36 Name: GNU Type: NT_GNU_BUILD_ID Desc: 8e50cda8e25993499ac4aa2d8deaf58d0949d47d pyelftools-0.26/examples/reference_output/elf_relocations.out000066400000000000000000000002011357220457300247370ustar00rootroot00000000000000Processing file: ./examples/sample_exe64.elf .rela.dyn section with 1 relocations Relocation (RELA) offset = 6295520 pyelftools-0.26/examples/reference_output/elf_show_debug_sections.out000066400000000000000000000002551357220457300264630ustar00rootroot00000000000000In file: ./examples/sample_exe64.elf .debug_aranges .debug_pubnames .debug_info .debug_abbrev .debug_line .debug_frame .debug_str .debug_loc .debug_ranges pyelftools-0.26/examples/reference_output/elfclass_address_size.out000066400000000000000000000003111357220457300261240ustar00rootroot00000000000000./examples/sample_exe64.elf: elfclass is 64 CU at offset 0x0. address_size is 8 CU at offset 0x77. address_size is 8 CU at offset 0x102. address_size is 8 CU at offset 0x1a2. address_size is 8 pyelftools-0.26/examples/reference_output/examine_dwarf_info.out000066400000000000000000000011641357220457300254240ustar00rootroot00000000000000Processing file: ./examples/sample_exe64.elf Found a compile unit at offset 0, length 115 Top DIE with tag=DW_TAG_compile_unit name=/usr/src/packages/BUILD/glibc-2.11.1/csu/../sysdeps/x86_64/elf/start.S Found a compile unit at offset 119, length 135 Top DIE with tag=DW_TAG_compile_unit name=/usr/src/packages/BUILD/glibc-2.11.1/csu/init.c Found a compile unit at offset 258, length 156 Top DIE with tag=DW_TAG_compile_unit name=/tmp/ebenders/z.c Found a compile unit at offset 418, length 300 Top DIE with tag=DW_TAG_compile_unit name=/usr/src/packages/BUILD/glibc-2.11.1/csu/elf-init.c pyelftools-0.26/examples/sample_exe64.elf000066400000000000000000000300551357220457300204560ustar00rootroot00000000000000ELF>@@0@8 @*'@@@@@88@8@@@ `` @@`@`TT@T@\\Ptd  @ @$$QtdRtd``/lib64/ld-linux-x86-64.so.2GNUSuSESuSE GNUPͨYIĪ- I} __gmon_start__libc.so.6__libc_start_mainGLIBC_2.2.5ui ,``HcH5 % @% h1I^HHPTI @H0@H@HH HtHÐUHSH= uK0`H H-(`HHXH9s%HBH (`H H9rs H[fff.UH=o HtHt8`IA@ÐUH}HuHE‹   EÐfffff.Hl$L|$H- L= Ld$Ll$Lt$H\$H8L)AIHIKHt1@LLDAHH9rH\$Hl$Ld$Ll$ Lt$(L|$0H8ÐUHSHHH Ht`DHHHuH[ÐHOH; <t$zRx @+AC zRx $4Jf@ @ @@o@0@@ 8 `@@ op@ooh@@`@ospwGGCC: (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973],@*,@+, @!wo_IO_stdin_used -mainglob60M__libc_csu_finii__libc_csu_inits@*@../sysdeps/x86_64/elf/start.S/usr/src/packages/BUILD/glibc-2.11.1/csuGNU AS 2.20.0~%,@,@agiNintupX @W_~z.c@@o@@oolv`int|po `,~% @@u?int @"@wj0@@LiFiiz i{4'  p 4 F ; =%% $ > $ > $ > 4: ; I?  &I% .? : ; ' I@: ; I $ >  I$ > 4: ; I?  % $ > : ; I$ > .? : ; ' @ .? : ; ' @: ; I4: ; I U 4: ; I  I &I I!' I4: ; I? < ]4 ../sysdeps/x86_64/elfstart.S @.>!>L$ uvx[# init.c5 z.c @KZ /usr/lib64/gcc/x86_64-suse-linux/4.3/includeelf-init.cstddef.h  @^oto<foJ<[ǒ#x @+AC x 8 @$80@Jf@long unsigned intshort unsigned int/usr/src/packages/BUILD/glibc-2.11.1/csushort int_IO_stdin_usedunsigned charlong intGNU C 4.3.4 [gcc-4_3-branch revision 152973]argv/tmp/ebendersglobargcmainsize_tenvp__libc_csu_initelf-init.c__init_array_startsize__init_array_end__libc_csu_finiww+v@w@wUUU^UTU]UQU\\{S(UvIM@C.symtab.strtab.shstrtab.interp.note.ABI-tag.note.SuSE.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.ctors.dtors.jcr.dynamic.got.got.plt.data.bss.comment.SUSE.OPTs.comment.debug_aranges.debug_pubnames.debug_info.debug_abbrev.debug_line.debug_frame.debug_str.debug_loc.debug_ranges8@8#T@T 1t@t<@$S@Oo@Y @Ha0@08ioh@hvop@p @@@@ @@@ @ $0@0`(`(8`8@`@`` ` `00"9`+;sGEUWa@n0-yJGP&)> 0.8@T@t@@@@@0@ h@ p@ @ @ @@@@@ @0@`(`8`@```` ` !"#$%&,@#.`<(`J8`WP@m `|(`@# `@8`@`` `@`% `0 @@@G`L [ o@u@``0`0@`0``@+ @init.cinitfini.ccall_gmon_startcrtstuff.c__CTOR_LIST____DTOR_LIST____JCR_LIST____do_global_dtors_auxcompleted.6159dtor_idx.6161frame_dummy__CTOR_END____FRAME_END____JCR_END____do_global_ctors_auxz.celf-init.c_GLOBAL_OFFSET_TABLE___init_array_end__init_array_start_DYNAMICdata_start__libc_csu_fini_startglob__gmon_start___Jv_RegisterClasses_fini__libc_start_main@@GLIBC_2.2.5_IO_stdin_used__data_start__dso_handle__DTOR_END____libc_csu_init__bss_start_end_edatamain_initpyelftools-0.26/pyelftools.sublime-project000066400000000000000000000002241357220457300210750ustar00rootroot00000000000000{ "folders": [ { "path": ".", "folder_exclude_patterns": ["build", "dist", ".tox", ".hg"] } ] } pyelftools-0.26/scripts/000077500000000000000000000000001357220457300153405ustar00rootroot00000000000000pyelftools-0.26/scripts/readelf.py000077500000000000000000001743731357220457300173360ustar00rootroot00000000000000#!/usr/bin/env python #------------------------------------------------------------------------------- # scripts/readelf.py # # A clone of 'readelf' in Python, based on the pyelftools library # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- import argparse import os, sys import string import itertools # Note: zip has different behaviour between Python 2.x and 3.x. # - Using izip ensures compatibility. try: from itertools import izip except: izip = zip # For running from development directory. It should take precedence over the # installed pyelftools. sys.path.insert(0, '.') from elftools import __version__ from elftools.common.exceptions import ELFError from elftools.common.py3compat import ( ifilter, byte2int, bytes2str, itervalues, str2bytes, iterbytes) from elftools.elf.elffile import ELFFile from elftools.elf.dynamic import DynamicSection, DynamicSegment from elftools.elf.enums import ENUM_D_TAG from elftools.elf.segments import InterpSegment from elftools.elf.sections import NoteSection, SymbolTableSection from elftools.elf.gnuversions import ( GNUVerSymSection, GNUVerDefSection, GNUVerNeedSection, ) from elftools.elf.relocation import RelocationSection from elftools.elf.descriptions import ( describe_ei_class, describe_ei_data, describe_ei_version, describe_ei_osabi, describe_e_type, describe_e_machine, describe_e_version_numeric, describe_p_type, describe_p_flags, describe_sh_type, describe_sh_flags, describe_symbol_type, describe_symbol_bind, describe_symbol_visibility, describe_symbol_shndx, describe_reloc_type, describe_dyn_tag, describe_dt_flags, describe_dt_flags_1, describe_ver_flags, describe_note, describe_attr_tag_arm ) from elftools.elf.constants import E_FLAGS from elftools.elf.constants import E_FLAGS_MASKS from elftools.dwarf.dwarfinfo import DWARFInfo from elftools.dwarf.descriptions import ( describe_reg_name, describe_attr_value, set_global_machine_arch, describe_CFI_instructions, describe_CFI_register_rule, describe_CFI_CFA_rule, ) from elftools.dwarf.constants import ( DW_LNS_copy, DW_LNS_set_file, DW_LNE_define_file) from elftools.dwarf.callframe import CIE, FDE, ZERO class ReadElf(object): """ display_* methods are used to emit output into the output stream """ def __init__(self, file, output): """ file: stream object with the ELF file to read output: output stream to write to """ self.elffile = ELFFile(file) self.output = output # Lazily initialized if a debug dump is requested self._dwarfinfo = None self._versioninfo = None def display_file_header(self): """ Display the ELF file header """ self._emitline('ELF Header:') self._emit(' Magic: ') self._emit(' '.join('%2.2x' % byte2int(b) for b in self.elffile.e_ident_raw)) self._emitline(' ') header = self.elffile.header e_ident = header['e_ident'] self._emitline(' Class: %s' % describe_ei_class(e_ident['EI_CLASS'])) self._emitline(' Data: %s' % describe_ei_data(e_ident['EI_DATA'])) self._emitline(' Version: %s' % describe_ei_version(e_ident['EI_VERSION'])) self._emitline(' OS/ABI: %s' % describe_ei_osabi(e_ident['EI_OSABI'])) self._emitline(' ABI Version: %d' % e_ident['EI_ABIVERSION']) self._emitline(' Type: %s' % describe_e_type(header['e_type'])) self._emitline(' Machine: %s' % describe_e_machine(header['e_machine'])) self._emitline(' Version: %s' % describe_e_version_numeric(header['e_version'])) self._emitline(' Entry point address: %s' % self._format_hex(header['e_entry'])) self._emit(' Start of program headers: %s' % header['e_phoff']) self._emitline(' (bytes into file)') self._emit(' Start of section headers: %s' % header['e_shoff']) self._emitline(' (bytes into file)') self._emitline(' Flags: %s%s' % (self._format_hex(header['e_flags']), self.decode_flags(header['e_flags']))) self._emitline(' Size of this header: %s (bytes)' % header['e_ehsize']) self._emitline(' Size of program headers: %s (bytes)' % header['e_phentsize']) self._emitline(' Number of program headers: %s' % header['e_phnum']) self._emitline(' Size of section headers: %s (bytes)' % header['e_shentsize']) self._emitline(' Number of section headers: %s' % header['e_shnum']) self._emitline(' Section header string table index: %s' % header['e_shstrndx']) def decode_flags(self, flags): description = "" if self.elffile['e_machine'] == "EM_ARM": eabi = flags & E_FLAGS.EF_ARM_EABIMASK flags &= ~E_FLAGS.EF_ARM_EABIMASK if flags & E_FLAGS.EF_ARM_RELEXEC: description += ', relocatable executabl' flags &= ~E_FLAGS.EF_ARM_RELEXEC if eabi == E_FLAGS.EF_ARM_EABI_VER5: EF_ARM_KNOWN_FLAGS = E_FLAGS.EF_ARM_ABI_FLOAT_SOFT|E_FLAGS.EF_ARM_ABI_FLOAT_HARD|E_FLAGS.EF_ARM_LE8|E_FLAGS.EF_ARM_BE8 description += ', Version5 EABI' if flags & E_FLAGS.EF_ARM_ABI_FLOAT_SOFT: description += ", soft-float ABI" elif flags & E_FLAGS.EF_ARM_ABI_FLOAT_HARD: description += ", hard-float ABI" if flags & E_FLAGS.EF_ARM_BE8: description += ", BE8" elif flags & E_FLAGS.EF_ARM_LE8: description += ", LE8" if flags & ~EF_ARM_KNOWN_FLAGS: description += ', ' else: description += ', ' elif self.elffile['e_machine'] == "EM_MIPS": if flags & E_FLAGS.EF_MIPS_NOREORDER: description += ", noreorder" if flags & E_FLAGS.EF_MIPS_PIC: description += ", pic" if flags & E_FLAGS.EF_MIPS_CPIC: description += ", cpic" if (flags & E_FLAGS.EF_MIPS_ABI2): description += ", abi2" if (flags & E_FLAGS.EF_MIPS_32BITMODE): description += ", 32bitmode" if (flags & E_FLAGS_MASKS.EFM_MIPS_ABI_O32): description += ", o32" elif (flags & E_FLAGS_MASKS.EFM_MIPS_ABI_O64): description += ", o64" elif (flags & E_FLAGS_MASKS.EFM_MIPS_ABI_EABI32): description += ", eabi32" elif (flags & E_FLAGS_MASKS.EFM_MIPS_ABI_EABI64): description += ", eabi64" if (flags & E_FLAGS.EF_MIPS_ARCH) == E_FLAGS.EF_MIPS_ARCH_1: description += ", mips1" if (flags & E_FLAGS.EF_MIPS_ARCH) == E_FLAGS.EF_MIPS_ARCH_2: description += ", mips2" if (flags & E_FLAGS.EF_MIPS_ARCH) == E_FLAGS.EF_MIPS_ARCH_3: description += ", mips3" if (flags & E_FLAGS.EF_MIPS_ARCH) == E_FLAGS.EF_MIPS_ARCH_4: description += ", mips4" if (flags & E_FLAGS.EF_MIPS_ARCH) == E_FLAGS.EF_MIPS_ARCH_5: description += ", mips5" if (flags & E_FLAGS.EF_MIPS_ARCH) == E_FLAGS.EF_MIPS_ARCH_32R2: description += ", mips32r2" if (flags & E_FLAGS.EF_MIPS_ARCH) == E_FLAGS.EF_MIPS_ARCH_64R2: description += ", mips64r2" if (flags & E_FLAGS.EF_MIPS_ARCH) == E_FLAGS.EF_MIPS_ARCH_32: description += ", mips32" if (flags & E_FLAGS.EF_MIPS_ARCH) == E_FLAGS.EF_MIPS_ARCH_64: description += ", mips64" return description def display_program_headers(self, show_heading=True): """ Display the ELF program headers. If show_heading is True, displays the heading for this information (Elf file type is...) """ self._emitline() if self.elffile.num_segments() == 0: self._emitline('There are no program headers in this file.') return elfheader = self.elffile.header if show_heading: self._emitline('Elf file type is %s' % describe_e_type(elfheader['e_type'])) self._emitline('Entry point is %s' % self._format_hex(elfheader['e_entry'])) # readelf weirness - why isn't e_phoff printed as hex? (for section # headers, it is...) self._emitline('There are %s program headers, starting at offset %s' % ( elfheader['e_phnum'], elfheader['e_phoff'])) self._emitline() self._emitline('Program Headers:') # Now comes the table of program headers with their attributes. Note # that due to different formatting constraints of 32-bit and 64-bit # addresses, there are some conditions on elfclass here. # # First comes the table heading # if self.elffile.elfclass == 32: self._emitline(' Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align') else: self._emitline(' Type Offset VirtAddr PhysAddr') self._emitline(' FileSiz MemSiz Flags Align') # Now the entries # for segment in self.elffile.iter_segments(): self._emit(' %-14s ' % describe_p_type(segment['p_type'])) if self.elffile.elfclass == 32: self._emitline('%s %s %s %s %s %-3s %s' % ( self._format_hex(segment['p_offset'], fieldsize=6), self._format_hex(segment['p_vaddr'], fullhex=True), self._format_hex(segment['p_paddr'], fullhex=True), self._format_hex(segment['p_filesz'], fieldsize=5), self._format_hex(segment['p_memsz'], fieldsize=5), describe_p_flags(segment['p_flags']), self._format_hex(segment['p_align']))) else: # 64 self._emitline('%s %s %s' % ( self._format_hex(segment['p_offset'], fullhex=True), self._format_hex(segment['p_vaddr'], fullhex=True), self._format_hex(segment['p_paddr'], fullhex=True))) self._emitline(' %s %s %-3s %s' % ( self._format_hex(segment['p_filesz'], fullhex=True), self._format_hex(segment['p_memsz'], fullhex=True), describe_p_flags(segment['p_flags']), # lead0x set to False for p_align, to mimic readelf. # No idea why the difference from 32-bit mode :-| self._format_hex(segment['p_align'], lead0x=False))) if isinstance(segment, InterpSegment): self._emitline(' [Requesting program interpreter: %s]' % segment.get_interp_name()) # Sections to segments mapping # if self.elffile.num_sections() == 0: # No sections? We're done return self._emitline('\n Section to Segment mapping:') self._emitline(' Segment Sections...') for nseg, segment in enumerate(self.elffile.iter_segments()): self._emit(' %2.2d ' % nseg) for section in self.elffile.iter_sections(): if ( not section.is_null() and segment.section_in_segment(section)): self._emit('%s ' % section.name) self._emitline('') def display_section_headers(self, show_heading=True): """ Display the ELF section headers """ elfheader = self.elffile.header if show_heading: self._emitline('There are %s section headers, starting at offset %s' % ( elfheader['e_shnum'], self._format_hex(elfheader['e_shoff']))) if self.elffile.num_sections() == 0: self._emitline('There are no sections in this file.') return self._emitline('\nSection Header%s:' % ( 's' if elfheader['e_shnum'] > 1 else '')) # Different formatting constraints of 32-bit and 64-bit addresses # if self.elffile.elfclass == 32: self._emitline(' [Nr] Name Type Addr Off Size ES Flg Lk Inf Al') else: self._emitline(' [Nr] Name Type Address Offset') self._emitline(' Size EntSize Flags Link Info Align') # Now the entries # for nsec, section in enumerate(self.elffile.iter_sections()): self._emit(' [%2u] %-17.17s %-15.15s ' % ( nsec, section.name, describe_sh_type(section['sh_type']))) if self.elffile.elfclass == 32: self._emitline('%s %s %s %s %3s %2s %3s %2s' % ( self._format_hex(section['sh_addr'], fieldsize=8, lead0x=False), self._format_hex(section['sh_offset'], fieldsize=6, lead0x=False), self._format_hex(section['sh_size'], fieldsize=6, lead0x=False), self._format_hex(section['sh_entsize'], fieldsize=2, lead0x=False), describe_sh_flags(section['sh_flags']), section['sh_link'], section['sh_info'], section['sh_addralign'])) else: # 64 self._emitline(' %s %s' % ( self._format_hex(section['sh_addr'], fullhex=True, lead0x=False), self._format_hex(section['sh_offset'], fieldsize=16 if section['sh_offset'] > 0xffffffff else 8, lead0x=False))) self._emitline(' %s %s %3s %2s %3s %s' % ( self._format_hex(section['sh_size'], fullhex=True, lead0x=False), self._format_hex(section['sh_entsize'], fullhex=True, lead0x=False), describe_sh_flags(section['sh_flags']), section['sh_link'], section['sh_info'], section['sh_addralign'])) self._emitline('Key to Flags:') self._emitline(' W (write), A (alloc), X (execute), M (merge),' ' S (strings), I (info),') self._emitline(' L (link order), O (extra OS processing required),' ' G (group), T (TLS),') self._emitline(' C (compressed), x (unknown), o (OS specific),' ' E (exclude),') self._emit(' ') if self.elffile['e_machine'] == 'EM_ARM': self._emit('y (purecode), ') self._emitline('p (processor specific)') def display_symbol_tables(self): """ Display the symbol tables contained in the file """ self._init_versioninfo() symbol_tables = [s for s in self.elffile.iter_sections() if isinstance(s, SymbolTableSection)] if not symbol_tables and self.elffile.num_sections() == 0: self._emitline('') self._emitline('Dynamic symbol information is not available for' ' displaying symbols.') for section in symbol_tables: if not isinstance(section, SymbolTableSection): continue if section['sh_entsize'] == 0: self._emitline("\nSymbol table '%s' has a sh_entsize of zero!" % ( section.name)) continue self._emitline("\nSymbol table '%s' contains %s entries:" % ( section.name, section.num_symbols())) if self.elffile.elfclass == 32: self._emitline(' Num: Value Size Type Bind Vis Ndx Name') else: # 64 self._emitline(' Num: Value Size Type Bind Vis Ndx Name') for nsym, symbol in enumerate(section.iter_symbols()): version_info = '' # readelf doesn't display version info for Solaris versioning if (section['sh_type'] == 'SHT_DYNSYM' and self._versioninfo['type'] == 'GNU'): version = self._symbol_version(nsym) if (version['name'] != symbol.name and version['index'] not in ('VER_NDX_LOCAL', 'VER_NDX_GLOBAL')): if version['filename']: # external symbol version_info = '@%(name)s (%(index)i)' % version else: # internal symbol if version['hidden']: version_info = '@%(name)s' % version else: version_info = '@@%(name)s' % version # symbol names are truncated to 25 chars, similarly to readelf self._emitline('%6d: %s %5d %-7s %-6s %-7s %4s %.25s%s' % ( nsym, self._format_hex( symbol['st_value'], fullhex=True, lead0x=False), symbol['st_size'], describe_symbol_type(symbol['st_info']['type']), describe_symbol_bind(symbol['st_info']['bind']), describe_symbol_visibility(symbol['st_other']['visibility']), describe_symbol_shndx(symbol['st_shndx']), symbol.name, version_info)) def display_dynamic_tags(self): """ Display the dynamic tags contained in the file """ has_dynamic_sections = False for section in self.elffile.iter_sections(): if not isinstance(section, DynamicSection): continue has_dynamic_sections = True self._emitline("\nDynamic section at offset %s contains %s entries:" % ( self._format_hex(section['sh_offset']), section.num_tags())) self._emitline(" Tag Type Name/Value") padding = 20 + (8 if self.elffile.elfclass == 32 else 0) for tag in section.iter_tags(): if tag.entry.d_tag == 'DT_NEEDED': parsed = 'Shared library: [%s]' % tag.needed elif tag.entry.d_tag == 'DT_RPATH': parsed = 'Library rpath: [%s]' % tag.rpath elif tag.entry.d_tag == 'DT_RUNPATH': parsed = 'Library runpath: [%s]' % tag.runpath elif tag.entry.d_tag == 'DT_SONAME': parsed = 'Library soname: [%s]' % tag.soname elif tag.entry.d_tag.endswith(('SZ', 'ENT')): parsed = '%i (bytes)' % tag['d_val'] elif tag.entry.d_tag == 'DT_FLAGS': parsed = describe_dt_flags(tag.entry.d_val) elif tag.entry.d_tag == 'DT_FLAGS_1': parsed = 'Flags: %s' % describe_dt_flags_1(tag.entry.d_val) elif tag.entry.d_tag.endswith(('NUM', 'COUNT')): parsed = '%i' % tag['d_val'] elif tag.entry.d_tag == 'DT_PLTREL': s = describe_dyn_tag(tag.entry.d_val) if s.startswith('DT_'): s = s[3:] parsed = '%s' % s else: parsed = '%#x' % tag['d_val'] self._emitline(" %s %-*s %s" % ( self._format_hex(ENUM_D_TAG.get(tag.entry.d_tag, tag.entry.d_tag), fullhex=True, lead0x=True), padding, '(%s)' % (tag.entry.d_tag[3:],), parsed)) if not has_dynamic_sections: self._emitline("\nThere is no dynamic section in this file.") def display_notes(self): """ Display the notes contained in the file """ for section in self.elffile.iter_sections(): if isinstance(section, NoteSection): for note in section.iter_notes(): self._emitline("\nDisplaying notes found in: {}".format( section.name)) self._emitline(' Owner Data size Description') self._emitline(' %s %s\t%s' % ( note['n_name'].ljust(20), self._format_hex(note['n_descsz'], fieldsize=8), describe_note(note))) def display_relocations(self): """ Display the relocations contained in the file """ has_relocation_sections = False for section in self.elffile.iter_sections(): if not isinstance(section, RelocationSection): continue has_relocation_sections = True self._emitline("\nRelocation section '%s' at offset %s contains %s entries:" % ( section.name, self._format_hex(section['sh_offset']), section.num_relocations())) if section.is_RELA(): self._emitline(" Offset Info Type Sym. Value Sym. Name + Addend") else: self._emitline(" Offset Info Type Sym.Value Sym. Name") # The symbol table section pointed to in sh_link symtable = self.elffile.get_section(section['sh_link']) for rel in section.iter_relocations(): hexwidth = 8 if self.elffile.elfclass == 32 else 12 self._emit('%s %s %-17.17s' % ( self._format_hex(rel['r_offset'], fieldsize=hexwidth, lead0x=False), self._format_hex(rel['r_info'], fieldsize=hexwidth, lead0x=False), describe_reloc_type( rel['r_info_type'], self.elffile))) if rel['r_info_sym'] == 0: self._emitline() continue symbol = symtable.get_symbol(rel['r_info_sym']) # Some symbols have zero 'st_name', so instead what's used is # the name of the section they point at. Truncate symbol names # (excluding version info) to 22 chars, similarly to readelf. if symbol['st_name'] == 0: symsec = self.elffile.get_section(symbol['st_shndx']) symbol_name = symsec.name version = '' else: symbol_name = symbol.name version = self._symbol_version(rel['r_info_sym']) version = (version['name'] if version and version['name'] else '') symbol_name = '%.22s' % symbol_name if version: symbol_name += '@' + version self._emit(' %s %s' % ( self._format_hex( symbol['st_value'], fullhex=True, lead0x=False), symbol_name)) if section.is_RELA(): self._emit(' %s %x' % ( '+' if rel['r_addend'] >= 0 else '-', abs(rel['r_addend']))) self._emitline() if not has_relocation_sections: self._emitline('\nThere are no relocations in this file.') def display_version_info(self): """ Display the version info contained in the file """ self._init_versioninfo() if not self._versioninfo['type']: self._emitline("\nNo version information found in this file.") return for section in self.elffile.iter_sections(): if isinstance(section, GNUVerSymSection): self._print_version_section_header( section, 'Version symbols', lead0x=False) num_symbols = section.num_symbols() # Symbol version info are printed four by four entries for idx_by_4 in range(0, num_symbols, 4): self._emit(' %03x:' % idx_by_4) for idx in range(idx_by_4, min(idx_by_4 + 4, num_symbols)): symbol_version = self._symbol_version(idx) if symbol_version['index'] == 'VER_NDX_LOCAL': version_index = 0 version_name = '(*local*)' elif symbol_version['index'] == 'VER_NDX_GLOBAL': version_index = 1 version_name = '(*global*)' else: version_index = symbol_version['index'] version_name = '(%(name)s)' % symbol_version visibility = 'h' if symbol_version['hidden'] else ' ' self._emit('%4x%s%-13s' % ( version_index, visibility, version_name)) self._emitline() elif isinstance(section, GNUVerDefSection): self._print_version_section_header( section, 'Version definition', indent=2) offset = 0 for verdef, verdaux_iter in section.iter_versions(): verdaux = next(verdaux_iter) name = verdaux.name if verdef['vd_flags']: flags = describe_ver_flags(verdef['vd_flags']) # Mimic exactly the readelf output flags += ' ' else: flags = 'none' self._emitline(' %s: Rev: %i Flags: %s Index: %i' ' Cnt: %i Name: %s' % ( self._format_hex(offset, fieldsize=6, alternate=True), verdef['vd_version'], flags, verdef['vd_ndx'], verdef['vd_cnt'], name)) verdaux_offset = ( offset + verdef['vd_aux'] + verdaux['vda_next']) for idx, verdaux in enumerate(verdaux_iter, start=1): self._emitline(' %s: Parent %i: %s' % (self._format_hex(verdaux_offset, fieldsize=4), idx, verdaux.name)) verdaux_offset += verdaux['vda_next'] offset += verdef['vd_next'] elif isinstance(section, GNUVerNeedSection): self._print_version_section_header(section, 'Version needs') offset = 0 for verneed, verneed_iter in section.iter_versions(): self._emitline(' %s: Version: %i File: %s Cnt: %i' % ( self._format_hex(offset, fieldsize=6, alternate=True), verneed['vn_version'], verneed.name, verneed['vn_cnt'])) vernaux_offset = offset + verneed['vn_aux'] for idx, vernaux in enumerate(verneed_iter, start=1): if vernaux['vna_flags']: flags = describe_ver_flags(vernaux['vna_flags']) # Mimic exactly the readelf output flags += ' ' else: flags = 'none' self._emitline( ' %s: Name: %s Flags: %s Version: %i' % ( self._format_hex(vernaux_offset, fieldsize=4), vernaux.name, flags, vernaux['vna_other'])) vernaux_offset += vernaux['vna_next'] offset += verneed['vn_next'] def display_arch_specific(self): """ Display the architecture-specific info contained in the file. """ if self.elffile['e_machine'] == 'EM_ARM': self._display_arch_specific_arm() def display_hex_dump(self, section_spec): """ Display a hex dump of a section. section_spec is either a section number or a name. """ section = self._section_from_spec(section_spec) if section is None: # readelf prints the warning to stderr. Even though stderrs are not compared # in tests, we comply with that behavior. sys.stderr.write('readelf: Warning: Section \'%s\' was not dumped because it does not exist!\n' % ( section_spec)) return if section['sh_type'] == 'SHT_NOBITS': self._emitline("\nSection '%s' has no data to dump." % ( section_spec)) return self._emitline("\nHex dump of section '%s':" % section.name) self._note_relocs_for_section(section) addr = section['sh_addr'] data = section.data() dataptr = 0 while dataptr < len(data): bytesleft = len(data) - dataptr # chunks of 16 bytes per line linebytes = 16 if bytesleft > 16 else bytesleft self._emit(' %s ' % self._format_hex(addr, fieldsize=8)) for i in range(16): if i < linebytes: self._emit('%2.2x' % byte2int(data[dataptr + i])) else: self._emit(' ') if i % 4 == 3: self._emit(' ') for i in range(linebytes): c = data[dataptr + i : dataptr + i + 1] if byte2int(c[0]) >= 32 and byte2int(c[0]) < 0x7f: self._emit(bytes2str(c)) else: self._emit(bytes2str(b'.')) self._emitline() addr += linebytes dataptr += linebytes self._emitline() def display_string_dump(self, section_spec): """ Display a strings dump of a section. section_spec is either a section number or a name. """ section = self._section_from_spec(section_spec) if section is None: # readelf prints the warning to stderr. Even though stderrs are not compared # in tests, we comply with that behavior. sys.stderr.write('readelf.py: Warning: Section \'%s\' was not dumped because it does not exist!\n' % ( section_spec)) return if section['sh_type'] == 'SHT_NOBITS': self._emitline("\nSection '%s' has no data to dump." % ( section_spec)) return self._emitline("\nString dump of section '%s':" % section.name) found = False data = section.data() dataptr = 0 while dataptr < len(data): while ( dataptr < len(data) and not (32 <= byte2int(data[dataptr]) <= 127)): dataptr += 1 if dataptr >= len(data): break endptr = dataptr while endptr < len(data) and byte2int(data[endptr]) != 0: endptr += 1 found = True self._emitline(' [%6x] %s' % ( dataptr, bytes2str(data[dataptr:endptr]))) dataptr = endptr if not found: self._emitline(' No strings found in this section.') else: self._emitline() def display_debug_dump(self, dump_what): """ Dump a DWARF section """ self._init_dwarfinfo() if self._dwarfinfo is None: return set_global_machine_arch(self.elffile.get_machine_arch()) if dump_what == 'info': self._dump_debug_info() elif dump_what == 'decodedline': self._dump_debug_line_programs() elif dump_what == 'frames': self._dump_debug_frames() elif dump_what == 'frames-interp': self._dump_debug_frames_interp() elif dump_what == 'aranges': self._dump_debug_aranges() elif dump_what in { 'pubtypes', 'pubnames' }: self._dump_debug_namelut(dump_what) else: self._emitline('debug dump not yet supported for "%s"' % dump_what) def _format_hex(self, addr, fieldsize=None, fullhex=False, lead0x=True, alternate=False): """ Format an address into a hexadecimal string. fieldsize: Size of the hexadecimal field (with leading zeros to fit the address into. For example with fieldsize=8, the format will be %08x If None, the minimal required field size will be used. fullhex: If True, override fieldsize to set it to the maximal size needed for the elfclass lead0x: If True, leading 0x is added alternate: If True, override lead0x to emulate the alternate hexadecimal form specified in format string with the # character: only non-zero values are prefixed with 0x. This form is used by readelf. """ if alternate: if addr == 0: lead0x = False else: lead0x = True fieldsize -= 2 s = '0x' if lead0x else '' if fullhex: fieldsize = 8 if self.elffile.elfclass == 32 else 16 if fieldsize is None: field = '%x' else: field = '%' + '0%sx' % fieldsize return s + field % addr def _print_version_section_header(self, version_section, name, lead0x=True, indent=1): """ Print a section header of one version related section (versym, verneed or verdef) with some options to accomodate readelf little differences between each header (e.g. indentation and 0x prefixing). """ if hasattr(version_section, 'num_versions'): num_entries = version_section.num_versions() else: num_entries = version_section.num_symbols() self._emitline("\n%s section '%s' contains %s entries:" % (name, version_section.name, num_entries)) self._emitline('%sAddr: %s Offset: %s Link: %i (%s)' % ( ' ' * indent, self._format_hex( version_section['sh_addr'], fieldsize=16, lead0x=lead0x), self._format_hex( version_section['sh_offset'], fieldsize=6, lead0x=True), version_section['sh_link'], self.elffile.get_section(version_section['sh_link']).name ) ) def _init_versioninfo(self): """ Search and initialize informations about version related sections and the kind of versioning used (GNU or Solaris). """ if self._versioninfo is not None: return self._versioninfo = {'versym': None, 'verdef': None, 'verneed': None, 'type': None} for section in self.elffile.iter_sections(): if isinstance(section, GNUVerSymSection): self._versioninfo['versym'] = section elif isinstance(section, GNUVerDefSection): self._versioninfo['verdef'] = section elif isinstance(section, GNUVerNeedSection): self._versioninfo['verneed'] = section elif isinstance(section, DynamicSection): for tag in section.iter_tags(): if tag['d_tag'] == 'DT_VERSYM': self._versioninfo['type'] = 'GNU' break if not self._versioninfo['type'] and ( self._versioninfo['verneed'] or self._versioninfo['verdef']): self._versioninfo['type'] = 'Solaris' def _symbol_version(self, nsym): """ Return a dict containing information on the or None if no version information is available """ self._init_versioninfo() symbol_version = dict.fromkeys(('index', 'name', 'filename', 'hidden')) if (not self._versioninfo['versym'] or nsym >= self._versioninfo['versym'].num_symbols()): return None symbol = self._versioninfo['versym'].get_symbol(nsym) index = symbol.entry['ndx'] if not index in ('VER_NDX_LOCAL', 'VER_NDX_GLOBAL'): index = int(index) if self._versioninfo['type'] == 'GNU': # In GNU versioning mode, the highest bit is used to # store wether the symbol is hidden or not if index & 0x8000: index &= ~0x8000 symbol_version['hidden'] = True if (self._versioninfo['verdef'] and index <= self._versioninfo['verdef'].num_versions()): _, verdaux_iter = \ self._versioninfo['verdef'].get_version(index) symbol_version['name'] = next(verdaux_iter).name else: verneed, vernaux = \ self._versioninfo['verneed'].get_version(index) symbol_version['name'] = vernaux.name symbol_version['filename'] = verneed.name symbol_version['index'] = index return symbol_version def _section_from_spec(self, spec): """ Retrieve a section given a "spec" (either number or name). Return None if no such section exists in the file. """ try: num = int(spec) if num < self.elffile.num_sections(): return self.elffile.get_section(num) else: return None except ValueError: # Not a number. Must be a name then return self.elffile.get_section_by_name(spec) def _note_relocs_for_section(self, section): """ If there are relocation sections pointing to the givne section, emit a note about it. """ for relsec in self.elffile.iter_sections(): if isinstance(relsec, RelocationSection): info_idx = relsec['sh_info'] if self.elffile.get_section(info_idx) == section: self._emitline(' Note: This section has relocations against it, but these have NOT been applied to this dump.') return def _init_dwarfinfo(self): """ Initialize the DWARF info contained in the file and assign it to self._dwarfinfo. Leave self._dwarfinfo at None if no DWARF info was found in the file """ if self._dwarfinfo is not None: return if self.elffile.has_dwarf_info(): self._dwarfinfo = self.elffile.get_dwarf_info() else: self._dwarfinfo = None def _dump_debug_info(self): """ Dump the debugging info section. """ if not self._dwarfinfo.has_debug_info: return self._emitline('Contents of the %s section:\n' % self._dwarfinfo.debug_info_sec.name) # Offset of the .debug_info section in the stream section_offset = self._dwarfinfo.debug_info_sec.global_offset for cu in self._dwarfinfo.iter_CUs(): self._emitline(' Compilation Unit @ offset %s:' % self._format_hex(cu.cu_offset)) self._emitline(' Length: %s (%s)' % ( self._format_hex(cu['unit_length']), '%s-bit' % cu.dwarf_format())) self._emitline(' Version: %s' % cu['version']), self._emitline(' Abbrev Offset: %s' % ( self._format_hex(cu['debug_abbrev_offset']))), self._emitline(' Pointer Size: %s' % cu['address_size']) # The nesting depth of each DIE within the tree of DIEs must be # displayed. To implement this, a counter is incremented each time # the current DIE has children, and decremented when a null die is # encountered. Due to the way the DIE tree is serialized, this will # correctly reflect the nesting depth # die_depth = 0 for die in cu.iter_DIEs(): self._emitline(' <%s><%x>: Abbrev Number: %s%s' % ( die_depth, die.offset, die.abbrev_code, (' (%s)' % die.tag) if not die.is_null() else '')) if die.is_null(): die_depth -= 1 continue for attr in itervalues(die.attributes): name = attr.name # Unknown attribute values are passed-through as integers if isinstance(name, int): name = 'Unknown AT value: %x' % name self._emitline(' <%x> %-18s: %s' % ( attr.offset, name, describe_attr_value( attr, die, section_offset))) if die.has_children: die_depth += 1 self._emitline() def _dump_debug_line_programs(self): """ Dump the (decoded) line programs from .debug_line The programs are dumped in the order of the CUs they belong to. """ if not self._dwarfinfo.has_debug_info: return self._emitline('Decoded dump of debug contents of section %s:\n' % self._dwarfinfo.debug_line_sec.name) for cu in self._dwarfinfo.iter_CUs(): lineprogram = self._dwarfinfo.line_program_for_CU(cu) cu_filename = bytes2str(lineprogram['file_entry'][0].name) if len(lineprogram['include_directory']) > 0: dir_index = lineprogram['file_entry'][0].dir_index if dir_index > 0: dir = lineprogram['include_directory'][dir_index - 1] else: dir = b'.' cu_filename = '%s/%s' % (bytes2str(dir), cu_filename) self._emitline('CU: %s:' % cu_filename) self._emitline('File name Line number Starting address') # Print each state's file, line and address information. For some # instructions other output is needed to be compatible with # readelf. for entry in lineprogram.get_entries(): state = entry.state if state is None: # Special handling for commands that don't set a new state if entry.command == DW_LNS_set_file: file_entry = lineprogram['file_entry'][entry.args[0] - 1] if file_entry.dir_index == 0: # current directory self._emitline('\n./%s:[++]' % ( bytes2str(file_entry.name))) else: self._emitline('\n%s/%s:' % ( bytes2str(lineprogram['include_directory'][file_entry.dir_index - 1]), bytes2str(file_entry.name))) elif entry.command == DW_LNE_define_file: self._emitline('%s:' % ( bytes2str(lineprogram['include_directory'][entry.args[0].dir_index]))) elif not state.end_sequence: # readelf doesn't print the state after end_sequence # instructions. I think it's a bug but to be compatible # I don't print them too. if lineprogram['version'] < 4: self._emitline('%-35s %11d %18s' % ( bytes2str(lineprogram['file_entry'][state.file - 1].name), state.line, '0' if state.address == 0 else self._format_hex(state.address))) else: self._emitline('%-35s %11d %18s[%d]' % ( bytes2str(lineprogram['file_entry'][state.file - 1].name), state.line, '0' if state.address == 0 else self._format_hex(state.address), state.op_index)) if entry.command == DW_LNS_copy: # Another readelf oddity... self._emitline() def _dump_frames_info(self, section, cfi_entries): """ Dump the raw call frame info in a section. `section` is the Section instance that contains the call frame info while `cfi_entries` must be an iterable that yields the sequence of CIE or FDE instances. """ self._emitline('Contents of the %s section:' % section.name) for entry in cfi_entries: if isinstance(entry, CIE): self._emitline('\n%08x %s %s CIE' % ( entry.offset, self._format_hex(entry['length'], fullhex=True, lead0x=False), self._format_hex(entry['CIE_id'], fieldsize=8, lead0x=False))) self._emitline(' Version: %d' % entry['version']) self._emitline(' Augmentation: "%s"' % bytes2str(entry['augmentation'])) self._emitline(' Code alignment factor: %u' % entry['code_alignment_factor']) self._emitline(' Data alignment factor: %d' % entry['data_alignment_factor']) self._emitline(' Return address column: %d' % entry['return_address_register']) if entry.augmentation_bytes: self._emitline(' Augmentation data: {}'.format(' '.join( '{:02x}'.format(ord(b)) for b in iterbytes(entry.augmentation_bytes) ))) self._emitline() elif isinstance(entry, FDE): self._emitline('\n%08x %s %s FDE cie=%08x pc=%s..%s' % ( entry.offset, self._format_hex(entry['length'], fullhex=True, lead0x=False), self._format_hex(entry['CIE_pointer'], fieldsize=8, lead0x=False), entry.cie.offset, self._format_hex(entry['initial_location'], fullhex=True, lead0x=False), self._format_hex( entry['initial_location'] + entry['address_range'], fullhex=True, lead0x=False))) if entry.augmentation_bytes: self._emitline(' Augmentation data: {}'.format(' '.join( '{:02x}'.format(ord(b)) for b in iterbytes(entry.augmentation_bytes) ))) else: # ZERO terminator assert isinstance(entry, ZERO) self._emitline('\n%08x ZERO terminator' % entry.offset) continue self._emit(describe_CFI_instructions(entry)) self._emitline() def _dump_debug_frames(self): """ Dump the raw frame info from .debug_frame and .eh_frame sections. """ if self._dwarfinfo.has_EH_CFI(): self._dump_frames_info( self._dwarfinfo.eh_frame_sec, self._dwarfinfo.EH_CFI_entries()) self._emitline() if self._dwarfinfo.has_CFI(): self._dump_frames_info( self._dwarfinfo.debug_frame_sec, self._dwarfinfo.CFI_entries()) def _dump_debug_namelut(self, what): """ Dump the debug pubnames section. """ if what == 'pubnames': namelut = self._dwarfinfo.get_pubnames() section = self._dwarfinfo.debug_pubnames_sec else: namelut = self._dwarfinfo.get_pubtypes() section = self._dwarfinfo.debug_pubtypes_sec # readelf prints nothing if the section is not present. if namelut is None or len(namelut) == 0: return self._emitline('Contents of the %s section:' % section.name) self._emitline() cu_headers = namelut.get_cu_headers() # go over CU-by-CU first and item-by-item next. for (cu_hdr, (cu_ofs, items)) in izip(cu_headers, itertools.groupby( namelut.items(), key = lambda x: x[1].cu_ofs)): self._emitline(' Length: %d' % cu_hdr.unit_length) self._emitline(' Version: %d' % cu_hdr.version) self._emitline(' Offset into .debug_info section: 0x%x' % cu_hdr.debug_info_offset) self._emitline(' Size of area in .debug_info section: %d' % cu_hdr.debug_info_length) self._emitline() self._emitline(' Offset Name') for item in items: self._emitline(' %x %s' % (item[1].die_ofs - cu_ofs, item[0])) self._emitline() def _dump_debug_aranges(self): """ Dump the aranges table """ aranges_table = self._dwarfinfo.get_aranges() if aranges_table == None: return # seems redundent, but we need to get the unsorted set of entries to match system readelf unordered_entries = aranges_table._get_entries() if len(unordered_entries) == 0: self._emitline() self._emitline("Section '.debug_aranges' has no debugging data.") return self._emitline('Contents of the %s section:' % self._dwarfinfo.debug_aranges_sec.name) self._emitline() prev_offset = None for entry in unordered_entries: if prev_offset != entry.info_offset: if entry != unordered_entries[0]: self._emitline(' %s %s' % ( self._format_hex(0, fullhex=True, lead0x=False), self._format_hex(0, fullhex=True, lead0x=False))) self._emitline(' Length: %d' % (entry.unit_length)) self._emitline(' Version: %d' % (entry.version)) self._emitline(' Offset into .debug_info: 0x%x' % (entry.info_offset)) self._emitline(' Pointer Size: %d' % (entry.address_size)) self._emitline(' Segment Size: %d' % (entry.segment_size)) self._emitline() self._emitline(' Address Length') self._emitline(' %s %s' % ( self._format_hex(entry.begin_addr, fullhex=True, lead0x=False), self._format_hex(entry.length, fullhex=True, lead0x=False))) prev_offset = entry.info_offset self._emitline(' %s %s' % ( self._format_hex(0, fullhex=True, lead0x=False), self._format_hex(0, fullhex=True, lead0x=False))) def _dump_frames_interp_info(self, section, cfi_entries): """ Dump interpreted (decoded) frame information in a section. `section` is the Section instance that contains the call frame info while `cfi_entries` must be an iterable that yields the sequence of CIE or FDE instances. """ self._emitline('Contents of the %s section:' % section.name) for entry in cfi_entries: if isinstance(entry, CIE): self._emitline('\n%08x %s %s CIE "%s" cf=%d df=%d ra=%d' % ( entry.offset, self._format_hex(entry['length'], fullhex=True, lead0x=False), self._format_hex(entry['CIE_id'], fieldsize=8, lead0x=False), bytes2str(entry['augmentation']), entry['code_alignment_factor'], entry['data_alignment_factor'], entry['return_address_register'])) ra_regnum = entry['return_address_register'] elif isinstance(entry, FDE): self._emitline('\n%08x %s %s FDE cie=%08x pc=%s..%s' % ( entry.offset, self._format_hex(entry['length'], fullhex=True, lead0x=False), self._format_hex(entry['CIE_pointer'], fieldsize=8, lead0x=False), entry.cie.offset, self._format_hex(entry['initial_location'], fullhex=True, lead0x=False), self._format_hex(entry['initial_location'] + entry['address_range'], fullhex=True, lead0x=False))) ra_regnum = entry.cie['return_address_register'] # If the FDE brings adds no unwinding information compared to # its CIE, omit its table. if (len(entry.get_decoded().table) == len(entry.cie.get_decoded().table)): continue else: # ZERO terminator assert isinstance(entry, ZERO) self._emitline('\n%08x ZERO terminator' % entry.offset) continue # Decode the table. decoded_table = entry.get_decoded() if len(decoded_table.table) == 0: continue # Print the heading row for the decoded table self._emit(' LOC') self._emit(' ' if entry.structs.address_size == 4 else ' ') self._emit(' CFA ') # Look at the registers the decoded table describes. # We build reg_order here to match readelf's order. In particular, # registers are sorted by their number, and the register matching # ra_regnum is always listed last with a special heading. decoded_table = entry.get_decoded() reg_order = sorted(ifilter( lambda r: r != ra_regnum, decoded_table.reg_order)) if len(decoded_table.reg_order): # Headings for the registers for regnum in reg_order: self._emit('%-6s' % describe_reg_name(regnum)) self._emitline('ra ') # Now include ra_regnum in reg_order to print its values # similarly to the other registers. reg_order.append(ra_regnum) else: self._emitline() for line in decoded_table.table: self._emit(self._format_hex( line['pc'], fullhex=True, lead0x=False)) if line['cfa'] is not None: s = describe_CFI_CFA_rule(line['cfa']) else: s = 'u' self._emit(' %-9s' % s) for regnum in reg_order: if regnum in line: s = describe_CFI_register_rule(line[regnum]) else: s = 'u' self._emit('%-6s' % s) self._emitline() self._emitline() def _dump_debug_frames_interp(self): """ Dump the interpreted (decoded) frame information from .debug_frame and .eh_framae sections. """ if self._dwarfinfo.has_EH_CFI(): self._dump_frames_interp_info( self._dwarfinfo.eh_frame_sec, self._dwarfinfo.EH_CFI_entries()) self._emitline() if self._dwarfinfo.has_CFI(): self._dump_frames_interp_info( self._dwarfinfo.debug_frame_sec, self._dwarfinfo.CFI_entries()) def _display_arch_specific_arm(self): """ Display the ARM architecture-specific info contained in the file. """ attr_sec = self.elffile.get_section_by_name('.ARM.attributes') for s in attr_sec.iter_subsections(): self._emitline("Attribute Section: %s" % s.header['vendor_name']) for ss in s.iter_subsubsections(): h_val = "" if ss.header.extra is None else " ".join("%d" % x for x in ss.header.extra) self._emitline(describe_attr_tag_arm(ss.header.tag, h_val, None)) for attr in ss.iter_attributes(): self._emit(' ') self._emitline(describe_attr_tag_arm(attr.tag, attr.value, attr.extra)) def _emit(self, s=''): """ Emit an object to output """ self.output.write(str(s)) def _emitline(self, s=''): """ Emit an object to output, followed by a newline """ self.output.write(str(s).rstrip() + '\n') SCRIPT_DESCRIPTION = 'Display information about the contents of ELF format files' VERSION_STRING = '%%(prog)s: based on pyelftools %s' % __version__ def main(stream=None): # parse the command-line arguments and invoke ReadElf argparser = argparse.ArgumentParser( usage='usage: %(prog)s [options] ', description=SCRIPT_DESCRIPTION, add_help=False, # -h is a real option of readelf prog='readelf.py') argparser.add_argument('file', nargs='?', default=None, help='ELF file to parse') argparser.add_argument('-v', '--version', action='version', version=VERSION_STRING) argparser.add_argument('-d', '--dynamic', action='store_true', dest='show_dynamic_tags', help='Display the dynamic section') argparser.add_argument('-H', '--help', action='store_true', dest='help', help='Display this information') argparser.add_argument('-h', '--file-header', action='store_true', dest='show_file_header', help='Display the ELF file header') argparser.add_argument('-l', '--program-headers', '--segments', action='store_true', dest='show_program_header', help='Display the program headers') argparser.add_argument('-S', '--section-headers', '--sections', action='store_true', dest='show_section_header', help="Display the sections' headers") argparser.add_argument('-e', '--headers', action='store_true', dest='show_all_headers', help='Equivalent to: -h -l -S') argparser.add_argument('-s', '--symbols', '--syms', action='store_true', dest='show_symbols', help='Display the symbol table') argparser.add_argument('-n', '--notes', action='store_true', dest='show_notes', help='Display the core notes (if present)') argparser.add_argument('-r', '--relocs', action='store_true', dest='show_relocs', help='Display the relocations (if present)') argparser.add_argument('-x', '--hex-dump', action='store', dest='show_hex_dump', metavar='', help='Dump the contents of section as bytes') argparser.add_argument('-p', '--string-dump', action='store', dest='show_string_dump', metavar='', help='Dump the contents of section as strings') argparser.add_argument('-V', '--version-info', action='store_true', dest='show_version_info', help='Display the version sections (if present)') argparser.add_argument('-A', '--arch-specific', action='store_true', dest='show_arch_specific', help='Display the architecture-specific information (if present)') argparser.add_argument('--debug-dump', action='store', dest='debug_dump_what', metavar='', help=( 'Display the contents of DWARF debug sections. can ' + 'one of {info,decodedline,frames,frames-interp}')) args = argparser.parse_args() if args.help or not args.file: argparser.print_help() sys.exit(0) if args.show_all_headers: do_file_header = do_section_header = do_program_header = True else: do_file_header = args.show_file_header do_section_header = args.show_section_header do_program_header = args.show_program_header with open(args.file, 'rb') as file: try: readelf = ReadElf(file, stream or sys.stdout) if do_file_header: readelf.display_file_header() if do_section_header: readelf.display_section_headers( show_heading=not do_file_header) if do_program_header: readelf.display_program_headers( show_heading=not do_file_header) if args.show_dynamic_tags: readelf.display_dynamic_tags() if args.show_symbols: readelf.display_symbol_tables() if args.show_notes: readelf.display_notes() if args.show_relocs: readelf.display_relocations() if args.show_version_info: readelf.display_version_info() if args.show_arch_specific: readelf.display_arch_specific() if args.show_hex_dump: readelf.display_hex_dump(args.show_hex_dump) if args.show_string_dump: readelf.display_string_dump(args.show_string_dump) if args.debug_dump_what: readelf.display_debug_dump(args.debug_dump_what) except ELFError as ex: sys.stderr.write('ELF error: %s\n' % ex) sys.exit(1) def profile_main(): # Run 'main' redirecting its output to readelfout.txt # Saves profiling information in readelf.profile PROFFILE = 'readelf.profile' import cProfile cProfile.run('main(open("readelfout.txt", "w"))', PROFFILE) # Dig in some profiling stats import pstats p = pstats.Stats(PROFFILE) p.sort_stats('cumulative').print_stats(25) #------------------------------------------------------------------------------- if __name__ == '__main__': main() #profile_main() pyelftools-0.26/setup.cfg000066400000000000000000000000771357220457300154760ustar00rootroot00000000000000[bdist_wheel] universal = 1 [metadata] license_file = LICENSE pyelftools-0.26/setup.py000066400000000000000000000024231357220457300153640ustar00rootroot00000000000000#------------------------------------------------------------------------------- # pyelftools: setup.py # # Setup/installation script. # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- import os, sys from setuptools import setup try: with open('README', 'rt') as readme: description = '\n' + readme.read() except IOError: # maybe running setup.py from some other dir description = '' setup( # metadata name='pyelftools', description='Library for analyzing ELF files and DWARF debugging information', long_description=description, license='Public domain', version='0.26', author='Eli Bendersky', maintainer='Eli Bendersky', author_email='eliben@gmail.com', url='https://github.com/eliben/pyelftools', platforms='Cross Platform', classifiers = [ 'Programming Language :: Python :: 2', 'Programming Language :: Python :: 3', ], # All packages and sub-packages must be listed here packages=[ 'elftools', 'elftools.elf', 'elftools.common', 'elftools.dwarf', 'elftools.construct', 'elftools.construct.lib', ], scripts=['scripts/readelf.py'] ) pyelftools-0.26/test/000077500000000000000000000000001357220457300146305ustar00rootroot00000000000000pyelftools-0.26/test/README000066400000000000000000000001121357220457300155020ustar00rootroot00000000000000All tests should be run from the root development directory of pyelftools pyelftools-0.26/test/__init__.py000066400000000000000000000000001357220457300167270ustar00rootroot00000000000000pyelftools-0.26/test/all_tests.py000077500000000000000000000015431357220457300172020ustar00rootroot00000000000000#!/usr/bin/env python #------------------------------------------------------------------------------- # test/all_tests.py # # Run all pyelftools tests. # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- from __future__ import print_function import subprocess, sys from utils import is_in_rootdir def run_test_script(path): cmd = [sys.executable, path] print("Running '%s'" % ' '.join(cmd)) subprocess.check_call(cmd) def main(): if not is_in_rootdir(): testlog.error('Error: Please run me from the root dir of pyelftools!') return 1 run_test_script('test/run_all_unittests.py') run_test_script('test/run_examples_test.py') run_test_script('test/run_readelf_tests.py') if __name__ == '__main__': sys.exit(main()) pyelftools-0.26/test/external_tools/000077500000000000000000000000001357220457300176725ustar00rootroot00000000000000pyelftools-0.26/test/external_tools/Makefile000066400000000000000000000006011357220457300213270ustar00rootroot00000000000000CFLAGS = -Wall --std=c99 # This is where `make install` from libelf places its stuff LIBELF_HEADERS = /usr/local/include/libelf/ LIBELF_LIBS = /usr/local/lib/ all: elf_creator elf_creator: elf_creator.c gcc $(CFLAGS) -o elf_creator elf_creator.c \ -I$(LIBELF_HEADERS) -L$(LIBELF_LIBS) -Wl,-rpath,$(LIBELF_LIBS) -lelf clean: rm -f *.o rm -f *.so rm -f *.a rm -f elf_creator pyelftools-0.26/test/external_tools/README.txt000066400000000000000000000003071357220457300213700ustar00rootroot00000000000000Some utilities that use libelf to create synthetic ELF files Also, readelf picked up from a built binutils. Run it with --version to version details. The binary is built on a 64-bit Ubuntu machine. pyelftools-0.26/test/external_tools/elf_creator.c000066400000000000000000000164641357220457300223360ustar00rootroot00000000000000/* Loosely based on the code in a Knol by Roberto Garcia Lopez: ** ** http://knol.google.com/k/roberto-garca-lpez/creating-elf-relocatable-object-files/1ohwel4gqkcn2/3# ** ** Note: This file is released under the terms of the LGPL2 license. */ #include #include #include #include #include #include #include const char* OUTFILE = "generated.o"; // Definition of the default string table section ".shstrtab" const char defaultStrTable[] = { /* offset 00 */ '\0', // The NULL section /* offset 01 */ '.', 's', 'h', 's', 't', 'r', 't', 'a', 'b', '\0', /* offset 11 */ '.', 's', 't', 'r', 't', 'a', 'b', '\0', /* offset 19 */ '.', 's', 'y', 'm', 't', 'a', 'b', '\0', /* offset 27 */ '.', 'c', 'o', 'm', 'm', 'e', 'n', 't', '\0', /* offset 36 */ '.', 'b', 's', 's', '\0', /* offset 41 */ '.', 'd', 'a', 't', 'a', '\0', /* offset 47 */ '.', 'r', 'e', 'l', '.', 't', 'e', 'x', 't', '\0', /* offset 57 */ '.', 't', 'e', 'x', 't', '\0' }; const char defaultStrTableLen = sizeof(defaultStrTable); // Offsets of section names in the string table const char _shstrtab_offset = 1; const char _strtab_offset = 11; const char _symtab_offset = 19; const char _text_offset = 57; // Position of sections within the object file const char _shstrtab = 1; const char _strtab = 2; const char _symtab = 3; const char _text = 4; const char TEXT_CONTENTS[] = {0x91, 0x92, 0x93, 0x94}; //---------------------------------------------------------------------------- int main() { int FileDes; Elf *pElf; Elf32_Ehdr *pEhdr; Elf32_Shdr *pShdr; Elf_Scn *pScn; Elf_Data *pData; // Create the ELF header if (elf_version(EV_CURRENT) == EV_NONE) // It must appear before "elf_begin()" errx(EX_SOFTWARE, "ELF library initialization failed: %s", elf_errmsg(-1)); if ((FileDes = open(OUTFILE, O_CREAT | O_WRONLY | O_TRUNC, 0777)) < 0) errx(EX_OSERR, "open \"%s\" failed", "compiled.o"); if ((pElf = elf_begin(FileDes, ELF_C_WRITE, NULL)) == NULL) // 3rd argument is ignored for "ELF_C_WRITE" errx(EX_SOFTWARE, "elf_begin() failed: %s.", elf_errmsg(-1)); if ((pEhdr = elf32_newehdr(pElf)) == NULL) errx(EX_SOFTWARE, "elf32_newehdr() failed: %s", elf_errmsg(-1)); pEhdr->e_ident[EI_CLASS] = ELFCLASS32; // Defined by Intel architecture pEhdr->e_ident[EI_DATA] = ELFDATA2LSB; // Defined by Intel architecture pEhdr->e_machine = EM_386; // Intel architecture pEhdr->e_type = ET_REL; // Relocatable file (object file) pEhdr->e_shstrndx = _shstrtab; // Point to the shstrtab section // Create the section "default section header string table (.shstrtab)" if ((pScn = elf_newscn(pElf)) == NULL) errx(EX_SOFTWARE, "elf_newdata() failed: %s.", elf_errmsg(-1)); if ((pData = elf_newdata(pScn)) == NULL) errx(EX_SOFTWARE, "elf_newdata() failed: %s.", elf_errmsg(-1)); pData->d_align = 1; pData->d_buf = (void *) defaultStrTable; pData->d_type = ELF_T_BYTE; pData->d_size = defaultStrTableLen; if ((pShdr = elf32_getshdr(pScn)) == NULL) errx(EX_SOFTWARE, "elf32_etshdr() failed: %s.", elf_errmsg(-1)); pShdr->sh_name = _shstrtab_offset; // Point to the name of the section pShdr->sh_type = SHT_STRTAB; pShdr->sh_flags = 0; // Create the section ".strtab" if ((pScn = elf_newscn(pElf)) == NULL) errx(EX_SOFTWARE, "elf_newdata() failed: %s.", elf_errmsg(-1)); if ((pData = elf_newdata(pScn)) == NULL) errx(EX_SOFTWARE, "elf_newdata() failed: %s.", elf_errmsg(-1)); const char strtab[] = {0, 'g', 'e', 'n', 'e', 'r', 'a', 't', 'e', 'd', '.','x', 0, '_', 's', 't', 'a', 'r', 't', 0}; pData->d_align = 1; pData->d_buf = (void *) strtab; pData->d_type = ELF_T_BYTE; pData->d_size = sizeof(strtab); if ((pShdr = elf32_getshdr(pScn)) == NULL) errx(EX_SOFTWARE, "elf32_etshdr() failed: %s.", elf_errmsg(-1)); pShdr->sh_name = _strtab_offset; pShdr->sh_type = SHT_STRTAB; pShdr->sh_flags = 0; // Create the section ".symtab" if ((pScn = elf_newscn(pElf)) == NULL) errx(EX_SOFTWARE, "elf_newdata() failed: %s.", elf_errmsg(-1)); if ((pData = elf_newdata(pScn)) == NULL) errx(EX_SOFTWARE, "elf_newdata() failed: %s.", elf_errmsg(-1)); Elf32_Sym x[4]; // Definition of the undefined section (this must be the first item by the definition of TIS ELF) x[0].st_name = 0; x[0].st_value = 0; x[0].st_size = 0; x[0].st_info = 0; x[0].st_other = 0; x[0].st_shndx = SHN_UNDEF; // Definition of the name of the source file (this must be the second item by the definition in TIS ELF) x[1].st_name = 1; x[1].st_value = 0; x[1].st_size = 0; x[1].st_info = ELF32_ST_INFO(STB_LOCAL, STT_FILE); // This is the value that st_info must have (because of TIS ELF) x[1].st_other = 0; x[1].st_shndx = SHN_ABS; // The section where the symbol is // Definition of the ".text" section as a section in the ".symtab" section x[2].st_name = 0; x[2].st_value = 0; x[2].st_size = 0; x[2].st_info = ELF32_ST_INFO(STB_LOCAL, STT_SECTION); x[2].st_other = 0; x[2].st_shndx = _text; // The section where the symbol is // Definition of the "_start" symbol x[3].st_name = 13; // Offset in the "strtab" section where the name start x[3].st_value = 0; x[3].st_size = 0; x[3].st_info = ELF32_ST_INFO(STB_GLOBAL, STT_NOTYPE); x[3].st_other = 0; x[3].st_shndx = _text; // The section where the symbol is pData->d_align = 4; pData->d_buf = (void *) x; pData->d_type = ELF_T_BYTE; pData->d_size = sizeof(x); if ((pShdr = elf32_getshdr(pScn)) == NULL) errx(EX_SOFTWARE, "elf32_etshdr() failed: %s.", elf_errmsg(-1)); pShdr->sh_name = _symtab_offset; // Point to the name of the section pShdr->sh_type = SHT_SYMTAB; pShdr->sh_flags = 0; pShdr->sh_link = _strtab; // point to the section .strtab (the section that contain the strings) pShdr->sh_info = ELF32_ST_INFO(STB_LOCAL, 3); // the second argument is beause of TIS ELF (One greater than the symbol table index of the last local symbol (binding STB_LOCAL)) // Create many sections named .text for (int i = 0; i < 70000; ++i) { if ((pScn = elf_newscn(pElf)) == NULL) errx(EX_SOFTWARE, "elf_newdata() failed: %s.", elf_errmsg(-1)); if ((pData = elf_newdata(pScn)) == NULL) errx(EX_SOFTWARE, "elf_newdata() failed: %s.", elf_errmsg(-1)); pData->d_align = 4; pData->d_buf = (void *)TEXT_CONTENTS; pData->d_type = ELF_T_BYTE; pData->d_size = sizeof(TEXT_CONTENTS); if ((pShdr = elf32_getshdr(pScn)) == NULL) errx(EX_SOFTWARE, "elf32_etshdr() failed: %s.", elf_errmsg(-1)); pShdr->sh_name = _text_offset; pShdr->sh_type = SHT_PROGBITS; pShdr->sh_flags = SHF_ALLOC | SHF_EXECINSTR; } // Update the sections internally if (elf_update(pElf, ELF_C_NULL) < 0) errx(EX_SOFTWARE, "elf_update(NULL) failed: %s.", elf_errmsg(-1)); // Write the object file if (elf_update(pElf, ELF_C_WRITE) < 0) errx(EX_SOFTWARE, "elf_update() failed: %s.", elf_errmsg(-1)); // Close all handles elf_end(pElf); close(FileDes); printf("Generated file: %s\n", OUTFILE); return 0; } pyelftools-0.26/test/external_tools/readelf000077500000000000000000023011501357220457300212240ustar00rootroot00000000000000ELF>v@z @8 @@@@888 ((8<Pf ((TTTDDPtdD D QtdRtd((PP/lib64/ld-linux-x86-64.so.2GNU GNUIOecv=A ^ADH(ĉݣk\|Ĺ@9!c2aO btA H5Q vXs<ym/.P( [`Oni7 &"Hf)g!)h!)C0!f)p @f )B))libdl.so.2_ITM_deregisterTMCloneTable__gmon_start___ITM_registerTMCloneTablelibc.so.6fflushstrcpyexitsprintf_IO_putcsetlocalembrtowcfopenstrncmpoptindstrrchr__strdupdcgettextftellstrncpy__stack_chk_failputcharreallocabortsbrk__assert_failrewindgmtime__ctype_get_mb_cur_maxcallocstrlenmemsetwarnstrstr__errno_locationfseekstdoutfputcfputsstrnlenmemcpyfclosestrtoulmallocstrcatoptargstderrfscanfgetopt_longstrncatfwritefreadstrchrqsort__cxa_finalize__xstatmemmovebindtextdomain_IO_getcstrcmpstrerror__libc_start_mainferrorstpcpyvfprintfsnprintffree__environ_initGLIBC_2.14GLIBC_2.4GLIBC_2.2.5Qvii ui (w(v(8(E(U(d(m(y((8(H(X(h(Ʊx(ұ(((((&(:(A(P(c(o((x@( H(P(X(`(h(p(ϲx((9W(( ((%(*(9(H(N(T(Y(_(g (q0(|@([P(G`(p((((((ó(ӳ(((( (0(@(`(h($p(4x(D(T(e(}((((((((p(t(x(| (((0(8(ƚ@(H(P(X(`(h(p(x(º(y(D((O(U([((<((_() (h((o0({8(@(H(P(X(`(h(p(x(ȶ((((@((((((((@(((`( (u(EZ(?)( (((0(8(@(H(:)X( `(:)p(o,x(:)( (:)(Z (:)( (:)((:)((:)(X(:)(;b (:)0(8(:)H(nGP(:)`(! h(:)x(<(:)(2<(:)(3(:)(,(:)(X (:)( (:)( (:) ( ((:)(c (T-(a-(f (G-(i (l (o  (n-((r 0(v 8(z @(~ H( P( X( `( h( p( x( ( ( ( ( ( ( ( ( ( ( ( ( ( (,(,( (,( ( (  (,(( 0( 8( @( H( P( X( `( h( ( ( ( ( ( ( ( (# (' (+ (/ (3 (7 (; (? (C (/(G (J (M  (P ((S 0(V 8(Y @(\ H(_ P(b X(f `(j h(n p(r x(v (z (~ ( ( ( ( ( ( ( ( ( ( ( ( ( (l( (((( ((( 0(8(;@(H(;P( X( `( h( p( x( ( ( ( ( ( ( ( (# (' (7 (+ (; (/ (? (3 (C ( ( ( (  ( (( 0( 8( @( H( P( X( `( h( p( x( ( ( ( ((( ((((!(&(+(1(7(=(C(I(O(S(W ([((C0(_8(c@(gH( P( X(`( h(p(x(((k((Y(r=(a((6=(r(z(((((( (((0(8(@(H(P(X(`(h(p(x((((((,(,((,(((((( ( (((0(8( @($H((@(H(YP(r=X(a`(h(6=((@(H(P( X(`(h(p(x( ($(((O(S(W([(C(_(c(g( ( ((( (( ((( 0( 8(@( H(P(X(`(h(p(x(((Y(r=(a((6=((((0(,8(,@(H(,P(X(`((f( f((+f(6f(Cf(Nf(bf(of((@f((((ɴH(ִh(ߴx((((((((`((h(((((((8((H(0X(`(h(;x(@((J( ((Z(((j(((z(((((((8(`(H(X(P(h(x(@((ӵ( (((( ((((((()8((H(6X((h(Dx(`(([( ((u(((((((((((8((H(̶X((h(Զx(((((((( ((`(((*8(@(@(AH(E`(Ah(Mp(Wx(2(A(E(2(q( 3(A(E(}(E(A(((A(E(A( (A((0(8(η@(ڷH(P(`(Ah(p(x(η(ڷ(((,(2(A(,(H(A(V(a(p(x(((4(( (((0(8(@(H(P(X(`(h(p((((A(( (O((A(˸(Ÿ(Ҹ(۸(A (Ҹ((۸0(8(A@(H(mP(GX(`(Ah(p(x(( (,(>(M(b(e(l(((b(((b((( (¹((̹0(ҹ8(ܹ@(`(bh(p(x((b(((((("('((-(2(7(;(>(C(I((O (T((b@(i;`(Ӻ(ߺ(Z((( ( @(`(*(:(J7(P(L(U (@({`(\(j(w((( (@(`(((˻(׻()|f )@)))4)B)p):))Q)`X)0`):)p)px)})):)))()0Z0):)@)H))):)))) ):)))`)h):)x)X))):))) 0)8):)H) P)' )):))5 )@ )0):))L  )\ h)0p):))m )x )e):)) ) 8)e@):)P) X) ) ):)) ) )):) ) () p) ^x):)) ) ) ^):))- )@ @)0X)T `)g )0){ )  ) Z ):)( ) 0 ) x )0 )X ) ) ):) )Y )H )@P ):)` ) h ) )@Z ):) )  ) )p ):)0 ) 8 ) )0 ):) )  )  )0Z ):) )  ) P )pX ):)h )( p )9  ) Z ):) )  )K  )( ):)8 )\ @ )k  )e ):) ){  )  ) ):)) ) X)`):)p) x) )0):)) ) ()`@) H)" )`): )F )[):))S )`)@h):)x)))@):))((%(+(=(?)A)I)E)J )G( (((0(8(@(H(P( X( `( h( p( x((((((((((((((((((( (!(" (#(($0(&8('@((H()P(*X(,`(-h(.p(/x(0(1(2(3(4(5(6(7(8(9(:(;(<(>(@HH(HtH5(%(@%(h%(h%(h%(h%(h%z(h%r(h%j(hp%b(h`%Z(h P%R(h @%J(h 0%B(h %:(h %2(h%*(h%"(h%(h%(h% (h%(h%(h%(h%(hp%(h`%ڈ(hP%҈(h@%ʈ(h0%ˆ(h %(h%(h%(h%(h %(h!%(h"%(h#%(h$%z(h%%r(h&%j(h'p%b(h(`%Z(h)P%R(h*@%J(h+0%B(h, %:(h-%2(h.%*(h/%"(h0%(h1%(h2% (h3%(h4%(h5%(h6%(h7p%(h8`%ڇ(h9P%҇(h:@%(fH`HH`HRwpH`Hw-H `HH`HH`HwH`Hc\H`HJw-H`H4H`H H`HHHHFH%`HwxH`Hw-H`HH`HH!`HH#`HtwH`HyueHpHҤtVw"H)`HtDH+`Ht40HH~t"HHttHHHt1ÐAWAVAUATUSHH4$H5*|$ dH%(H$1H5}*1H5=DH=NDH=BDH|$ H l$ L4$1L-(L%BL|$DE1LLLh~Wv~|:$2(뀃RadICegu?#(6fDrnHplH5C1H1跭H=0(D?t݃A뫐xg1zuB(DVWSgO(^fDthI(:f.I7(c((ΰ(((((((p(R(D(2($(cF(Q(AH=((H(fƯ((Nɯ((fDH= (1L(HT$:uH=ڠ(V(qH=(/(Hc(BfH=(1L(HT$:|tH=A(1L(HT$:47((r(H=(1LoH(j(qH=(1L?(T@H=(.?(((D((=(=έ(u|=(us=(uj=(ua=(uX=(uO=t(uF=g(u==Z(u4=M(u+=@(u"=c(u=*(u=](|ʬ(T$ Hc(J99/1Hl$ L$I! MfD$8%=H5?>1tLH1觨Hc(T$ 9P(H$L H9$tW={(\LLLHD(H1(Lu5H(LL"LHؽ(lH=(HtH=(HtH$dH3 %("H[]A\A]A^A_(H5p1WLH1芦LH5aHHH(tJH5(HH(LH51LH1H5l1H1H H=:(H5$;1H1Hf.@1I^HHPTL(H #(H= y(DH=(UH(H9HtHry(Ht ]f.]@f.H=q(H5j(UH)HHHH?HHtH9y(Ht ]f]@f.=a(u/H=y(UHt H=*{(=H9(]fDUH]ffDHH,HcHH2H1H1H1H1H1Hh1HM1H61HOHNHNHNH0H0H0H0Hv0HS0H/0H 0H/H/H NHMHMH|MHLMHMHLHLHLHdLH1H"1H1H0H0H0H0H0Hq0HZ0H?0H$0H 0H/H/H/H/H/Hl/HQ/H7/H/H/H.H.H.H.Hr.HX.H?.H#.H.H-H-H-H-H-He-HJ-H/-H-H,H,H,H,H,Ht,HZ,H@,H&,H ,H+H+H+H+H+Hs+H[+HC+H++H+H*H*1HHHcHH3H56H6H5H5H5H5Hi5HG5H*5H5H4H4H4H4Ha4H?4H4H3H3H3H3Hs3HS3H93H!3H3H2H2H2H2Hu2HX2H82H2H2H1H1H1H1Hj1HN1H21H1H01f.HtH-H*HHH 8%HH8H7H8HFfDHHwTH.$H>4lHDH4t}HFH4tjH3H4HFÐHWPHeHlH5t)HnH5tH5r HoH5ukH pvYHp6HpH8tHpH8tH8rHpH8t1@HpU%HpH7gHpH7MHs7H7HF@HNHHSH3QHUH3Hs3H3HFDH{HH5.HH5HH5HH4H%8H*H1UAH,H1>H0H 1HFDHH4HH4HH4O@HwH3HuH|3HvH{3DH^H2H\HT2vH]HV2DH"H/MHHu/7H!Hp/fDH3H40 H/H/H2H/PDHKH0HIH0HJH0DH pH*5H pH4pH pH4@HpH3BwZHH3,HH3HH2HH2YfDHpH3HpH3)fDHyH1HzH1@H_H0}HdH0@H#H-UH$H-@H:Hd.-H;Hc.@HLH/HMH/_@HpH3HpH31fDHOH.HRH.@HpH|2HpH2fDHfH/UHgH/@HpH3*HpH3fDH&H,H'H,W@H?H@-HCHB-/@HH0HH0fDHH/zHH/H?0H,H.HU/H2Hd-H+H1H.H,H+Hg0Ht/H-HM1fDH=&HHcHfDH'2He5HA5H"5H4H4H4H4Hf4HA4H"4H4H3H3H3Hy3HX3H73H3H2H2H2H2Hw2HV2H32H2H1H1H1H1H[1H51H1H0H0H0H0H~0H]0H<0H0H/H/H/H/Hx/HY/H8/1f.HHPHcHHL2H9H9H9Hp9H\9H@9H"9H8H8H8H8Hs8HW8H<8H8H8H7H7H7H7Hv7H^7HA7H$7H7H6H6H6H6Hz6H_6HE6H)6H 6H5H5H5H5H5H{5H[5H;5H5H4H4H4H4H4H~4Hf4HO4H84H$4H4H3H3H3H3H3H3Hf3HH3H-3H3H2H2H2H2H2Ho2HS2H72H2H2H1H1H1H1H1Hy1H`1HI1H31H1H1H0H0H0H0H0Hz0Hb0HP0H:0H$0H 0H/H/H/H/H/H/Hr/H[/HG/H3/H!/H /H.H.1H9vHHcHfDH36H9Hi9HK9H.9H9H8H8H8H8Hv8HV8H68H8H7H7H7H7Hl7HN7H07H7H6H6H6H6Hz6HU6H06H 6H5H5H5H5Hh5HE5H!5H4H4H4H4H4Hb4H>4H4H3H3H3H3Hd3HG3H&3H 3H21f.HfHHcHfDH6H7Ho7HL7H,7H 7H6H6H6H6H]6H56H 6H5H5H5Hk5HC5H$5H5H41f.HPHܴHcHHH@H.@H@H?H?H?H?H?H?Hm?HU?H4?H?H>H>H>H>H>Hs>HW>H>>H">H>H=H=H=H=H=Hl=HP=H4=H=H<H<H<H<H<Hr<HP<H/<H<H;H;H;H;H;Hb;HF;H*;H;H:H:H:H:H:H`:H@:H :H:H9H9H9H9Hl9HM9H.9H9H8H8H8H8Hv8HX8H:8H8H7H7H7H7H7H}7Hc7HI7H37H7H7H6H6H6H6H|6Hd6HM6H46H6H6H5H5H5H5Hy5H\5H?5H"5H5H4H4H4H4H{4H]4H?4H!4H4H3H3H3H3H3Hj3HR3H:3H"3H 3H2H2H2H2H2H2Hf2HN2H;2H(2H2H21HMH׳HcHfDH;H?H?Ht?HR?H0?H?H>H>H>H>Hh>H@>H>H=H=H=H=H|=HX=H9=H=H<H<H<H<Hs<HP<H/<H<H;H;H;H;Hg;HE;H#;H;H:H:H:H:Hp:HL:H&:H:H9H9H9Hz9H]9H@9H#9H9H8H8H8H8Hl8HP81f.HHHcHH%CH CHBHBHBHBHBH~BHeBHFBH'BHBHAHAHAHAHxAH`AHHAH0AHAHAH@H@H@H@H@Hn@HS@H8@H@H@H?H?H?H?H?Hg?HJ?H-?H?H>H>H>H>H>Hw>H\>H?>H">H>H=H=H=H=Hz=H]=H@=H#=H =H<H<H<H<H<Hw<H^<HE<H,<H<H;H;H;H;H;H;Hw;H`;HI;H2;H;H;H:H:H:H:H:H:Hj:HS:H@:H):H:H9H9H9H9H9H9Ho9HQ9H49H9H9H8H8H8H8H8H81HHHcHH?HHHHHHHHHkHHUHH;HH"HHHHGHGHGHGH{GH]GH@GH#GHGHFHFHFHFHFH_FH?FH FHFHEHEHEHEHfEHKEH+EH EHDHDHDHDHhDHIDH*DH DHCHCHCHCHsCHWCH>CH"CHCHBHBHBHBHBHhBHPBH7BH#BHBHAHAHAHAHzAH^AHBAH)AH AH@H@H@H@H@Hq@HX@H?@H&@H@H?H?H?H?H?Ht?HU?H7?H ?H ?H>H>H>H>H>Ho>HV>H=>H'>H>H=H=H=H=H=H=Hh=HO=H6=H =H=H<H<H<H<Hx<Ha<HG<H-<H<H;H;H;1HHxHcHHDHGHGHGHGH~GHbGHEGH%GHGHFHFHFHFHqFHTFH7FHFHEHEHEHEHEH`EH=EHEHDHDHDHDHDHcDHFDH(DH DHCHCHCHCHiCHHCH*CH CHBHBHBHBHcBHFBH)BH BHAHAHAHAHyA1f.HCH$HcHHeDHGHGHzGH_GHDGH*GHGHFHFHFHFHFHdFHIFH.FHFHEHEHEHEHEHgEHJEH)EHEHDHDHDHDHyDH]DHBDH&DH DHCHCHCHCHsCHTCH5CHCHBHBHBHBHBH_BH>BHBHBHAHAHAHAHmAHKAH)AHAH@H@H@H@H@Hj@HO@1f.HSH HcHHqCHGHFHPDH2DHCHCHFHrFHSFH7FHFHEHEHEHEH|EH]EH>EHEHDHDHDHDH~DH\DH:DHDHCHCHCHCH|CH]CH>CHCHBHBHBHBHBHdBHGBH+BHBHAHAHAHAHAHCAH%AH@H@H@H@Hw@HX@H9@H@H@H?H?H?H?H}?Hd?HL?1f.HHHcHHHHHHHHHHHHHH`HHFHH)HHHHGHGHGHGHGHGHmGHQGH6GHGHGHFHFHFHFHFHFHiFHPFH:FH"FHFHEHEHEHEHEHfEHPEH7EHEHEHDHDHDHDHDHkDHQDH:DH$DHDHCHCHCHCHCHCHCHjCHPCH6CHCHCHBHBHBHBHBHBHoBH[BHHBH5BH"BHBHAHAHAHAHAHAHAHuAHaAHOAHFHFHEHEHEHEHEHkEHMEH/EHEHDHDHDHDHDHbDHBDH"DHDHCHCHCHCHmCHRCH7CHCHBHBHBHBH|BH^BHABH BHAHAHAHAHAHhAHJAH,AHAH@H@H@H@H~@H^@H?@H @H@H?H?H?1f.H3HHcHHXEHnGHOGH1GHGHFHFHFHFHtFHQFH+FHFHEHEHEHyEHWEH5EHEHDHDHDHDHmDHMDH-DHDHCHCHCHCHsCHUC1f.HHHcHHLLH-LH LHKHKHKHKHhKHDKH KHJHJHJHJHJHiJHKJH-JHHdH4HHHHtHDHHHIHIHHtHDHHHHHTH.IH IHHHHH HHHHlHDHHHHH|HTH=HHHHHHHHTH$HGHGHGH[GH7GHGHFHFHFHFHbFH?FHFHEHEHEHEHEHcEHEEH'EH EHDHDHDHDHDHkDHNDH1DHDHCHCHCHCHCHsCHYCH?CH%CH CHBHBHBHBHBH}BHhBHSBH:BH BHBHAHAHAHAHAHA1HH̫HcHHPHPHePH8PH PHOHOHOHZOH0OH OHNHNHNHbNH5NHNHMHMHMHZMH-MHMHLHLHyLHLLH"LHKHKHKHxKHKKHKHJHJHJHJHhJHEJH"JHIHIHIHIHaIH7IH IHHHHHHHkHH?HHHHGHGHGHcGH:GHGHFHFHFHyFHSFH-FH FHEHEHEHyEHWEH5EHEHDHDHDH}DHZDH7DHDHCHCHCHCHvCHSCH7CHCHBHB1f.H3VHHcHfDHJHjNHNNH-NH NHMHMHMHMHrMHTMH6MHMHLHLHLHLHhLHJLH*LHLHKHKHKHKHmKHMKH-KH KHJHJHJHeJH7JHJHIHIHIHwIHQIH)IHIHHHHHHH~HHaHHEHH)HH HHGHG1f.HHTHcHHOHOHOHdOHIOH,OHOHNHNHNHNHrNHUNH7NHNHMHMHMHMHMHfMHGMH)MH MHLHLHLHLHtLHVLH8LHLHKHKHKHKH|KH\KH=KH"KHKHJHJHJHJHtJHTJH6JHJHIHIHIHIHIHbIHBIH#IHIHHHHHHHHHqHHSHH5HHHHGHGHGHGHGHdGHHGH*GH GHFHFHFHFHyFH^FHCFH'FH FHEHEHE1f.HHHHcHH/JHMHLHLHLHqLHOLH+LHLHKHKHKHxKHXKH6KHKHJHJHJHJHmJHOJH.JH JHIHIHIHIHiIHGIH*IHIHHHHHHHHHzHHXHH5HHHHGHGHGHGH}G1f.H8H;HcHfDH*JHMHMHMHMHaMHHpHJwH`HNJaf.H`HoIAf.H`HI!f.HIHYIHIHH9wDf.1(f\Gwufw?fEffff1@f*w|fl1f(u@ftkf#t^f3fǫ1 f&u1f>t2fSf+W1Dftf91fvIftft1f1 1fsf]t8f^1fOfWtf11f.1$11 /(f2v-ftVf&tYftb1fu-ÐfvTft>f+1,ft11@1 1ftJ1Hfuf.f>t rffw1@1O1.HHH|@(HHH;_@(H ((L eL'DtD@^QHt0HPt$DAC<HQ@yH5 F1t/H5Etf.H5E1tf-(AVAUATUSIH-,(E1L-E!@Lut\AD95%-(DHHHHtHH=>(Ht\HH;>(r1LsLHLuuH[]A\A]A^@H5D1sHmDH5DsHO1H[]A\A]A^f.AUATL%DUSHHHHHC97,(vHHH+(ItMH==(HtqHH;=(sHstuHL[]A\A]Ð1LrH@H5 D1rHHH[]A\A]>fDH5CrHf'H HcHDHCHCHCHCHCHCHCHCHCHCHCHCHCHCHCHCHC?v)>*(f=t}wTf(aHC|SH5C1,qH=#(H¾ 1qHm#([f=tf=YuuH55C1p@tAHCufiuH5C1pwkH HcHк@H59C1pfH5BC1rpfH5B1bpfH5B1RpfH5B1BpfSH5C=v H5C=vH5 C1oH=6"(H¾ 1pH"([ff.uwuB(E75>.1HCc 3HCHCHCHFÁwETxHEt vHx^wLHÐ[ h` raa cdHi fHDHHi_ ~m L *HFyHFzHFmX HFD  4H H]EHHTEHFD /  R 3   H>@f.N Hc EH(trX CHt`DN H& WAd #HFth H]F ;I 1>HeAtw@HtHhAHHFÁ HCtHtHHrCHF HiEG}HeE.HRE! HGEÐQ $H" &HJ?H0?H??HFn2 qqHA[sHQ HDt fH9O Hp6HCHHF  HD HyDt  HgDfDKH?IHl?J HfHI=lH=VD H=f+H=,)H=* H=fH3'HHÁHI@gH{HÁH;i'HP;H@ÃH\<,H2<H!<fHwHP@H?@Ã8H>6H7H<fHiHAP;HaÃkH6,iHjH=fHH;>HÃ^:\H<]H<H8<TQH]OHQGP5Hcf.ZH@FATH@ǫUEH7@fDW#Yk]H;f/HR:|0jHL:H>ÐHtH@<fHYDHfH<)Hf_H`HH=H=ÐH;Hf9H8|:jH8H7TBH7H)H:f,H7-H7LH^MHxH:HfH'6|jH6 H<6T BH56lH 9,mH9FHGHHS9HI9ÃH6Á0%H*03H7ÃRHk7tSbHÁvv_Pv6HD7Át3H9ÁH19H69HH 8H3HH7H9HHn4H4H9H5;1aHnHH7H6H:HH6H>H9H8H4HHM6H86HFÁAt؁tSH5:1w`H=p(H¾@1`HX([H4H*:HZ3HH3H5HH7H9H'ÃU:VgHz5Á+BW*H"HoMHoHo=HoH:HoH:HoH;HS(HH^f+af=f2fqHpHk<[@HHH >H H9H; HH9HH8HocHoHH-pHH.HH -wHHHHM>Ht81H Hk8 H!Hh8FHo;%HoH8H8HoH8HoH8HH;HHW7t{H8H,HFfHH9tRvyHH[7tCHWdHS7HFÐHoH:twHoHd8t Hv8HoHj7tHX7Hb7HFDHH 9tH=H6HFHH?9tHEWH8HFH7f=~(uH^HH5<1[H=(HH¾@18\Hq([H H6H5H5HF@HoH7H6H6HFfHoH}6Hi6HZPHFfHH5H5H5HF@HoH6cH5H5HFÐHoH{6;rHoHP6RHoH62H4H5Hs5H}5HH 5HH4Hm5H"H4HHf=HH=*HH}HcHH5[H5[Hv[H5[H5[H5[H5[H5[H5[H5[H5[H5[H5[H5[H6[H6[H6[H 6[H4[H4[H5[H4[H4[H4[Dff2HH5zH59f Dff:HpuHpH=63HpH6[f=tMf=&HpH35[À=R(GpZ4HpH[HpHpH5HpHJ[qHpH5lHpH4R[HH4?H{HcHHHH|HcHH4[H4[H4[H54[H4[H4[HHpH4[HpH=4[H3[H4[H6[H4[H4[H4[H4[H4[H4[H4[H4[H4[H5[H 5[H5[H5[H&5[H/5[H<5[HC5[HJ5[HP5[H^5[Hi5[Hr5[Hx5[H5[H5[H5[H5[H5[H5[H5[H5[H5[H5[H5[H5[H5[H5[H5[H5[H5[H1[H*2[H33[HV2[H3[@f= (t>m H561lT@ v Q8H5y1SDH551S@ k  u-H541SfH5e51mSDSH551RSH=+'H¾@1SH'[ÐH541SDBtH51RfhI H51qRELIF9+FMIGISH5313RH51RfnUH5)1QD H51Q:H521QH5T1pQH51QQH51>QH5G1+QH521QH51QH51PH51PH501PH5U1PH5 1PH5?1PH51PH51mPH51ZPH51GPH514PH5 1!PH521PH571OH5L1OH51OH51OH5[1OH5h1OH5-1OH51vOfDUSHHH(tRH H߾"(H{E"(H{HE"(HEH []DHvJH߾|"(H{Ej"(H{HEW"(HEH[]H51NH1H1[]fAWAVIAUATUSMHH MLMHL9IIv=MH5]1E16NLHHH1cfDH(L9H5(HJ6H9H|$1LOLD$MMLHHLLD$cMH9tIMLD$t(H51MLHL1LD$M9tLLE1HL[]A\A]A^A_MH5t1E15MLHL1eMtL-$(H51MLH1LE1.@1HHH9wMH5uYI~LD$cNHILD$tB0ff.AVAUIATUISH HĀH2HHHD$ dH%(HD$x1H{HChHHt$H$l$ AH5j.pHIFL$u9pD$ HHH)HLHD$>GuHDT$t9tLJIE1HT$xdH3%(u5H[]A\A]A^fDHduD$ uMeI.KfAWAVAUATIUSHIHr(H $LD$H5}-1/K1IILLHHHH:HIE11HtH@L,H@ML-(ME1IMmMIEP(HH+'HIH9uH5)1LT$EGIM1ILHQLA HI I}LT$LG LHH;D$tLD$Le E1+H51HFLD$HLH11LLEH<$EDHH5Ѿ1HFLsf.1E1qfDH|$ HH]H|$ID$1Vf.=v -AEI|$ I I|$ AEt(D$AET$H;T$IHT$IL$$L>(I|$IE*(I|$IE(I|$IE(=AEH (HT$?M=I<H (AE+MtL;DH<$2D(H51 EHt$H1;H<$1E1CH5ٽ1DHt$H1MtLE1CH<$CH|$ HHpE1@DAWAVAUATUSH(Lv Mu!H1H(H[]A\A]A^A_fDL~8HHIMtvM9rqL;5*(L1IIHD$IH@HL9HE14Hm H5YIĺ1CHHLL116HH51HCLHH11E1L+%DH5c1mCHULE 1ILHH$6L5'ME1IMvMIP(HH+'HIH9uH5%1LT$BI1ILHQLA 1HI"I>LT$LG LHH;D$wLD$Le E1H571HpBLD$HLH11LL^AH<$UAHxH5q1H"BL{f.1E1yfDH|$ 1HHeH|$ ID$1Vf.=v -AFI|$I I|$IF(D$IFT$H;T$H $HRHT$L$L(I|$IF(I|$AF(I|$AF(=AFH (HT$>M12+H=w1"+H=;1+밁{H=1*@@[H=1*q>H= 1*T@H= 1*=DH= 1*%DH= 1r* DH=U 1Z*DH=E 1B*DH=N 1**DH=L 1*DL1)f@f.HXOHHcHк@H5ٰ1:)HH1)@H5 H5 H5ѯH5H5 H5H5 {@H5!k@H= 1)AWAVAUATIUSHH'HH'HIHt H98'HHHH9L%%'HIPHHI9A~uۋ!'H&'LH߅H'AN('H['9sL<1LII׺'IWMG 1IH1HH'tIW H'`'H'FH'H'HH5j'HH b'E1H=H'HHH9rWH H9L9(uHPH9sH;tD@DƒuEuH51&HH= H1!'H[]A\A]A^A_DtAEAZMAQLE=D[fD N%H1[]A\A]A^A_DMtSIYH,H51%H'fIHDIH5 1%HMLDff.AWAVIAUATI)USHH9MIH$L5oH4$IAH=} MF1Ll$DE1%(C4,H=b 1z%t$IIt.D9D1LV%uܿ I#Iu1A<G^v.H#9H5B' (%Lcl$L,$MM)3H5'H []A\A]A^A_$H mlH5H=09%DUSHH5HH1!$HH1$HHH)%H<HjHH[]AUAT1USHH=HIHI<$H/ "I$H9H= 1D)# "H'HL)H|HDI9H'оH=S'HHHD[]A\A]fH5RH={1k# "HpH5X1"='H=H1%#zHDI9rH''PDH5Q1}"H1CH51`"=}'H=H1"HH[]A\A]@f.ATU1SHH=!HIu"Hh !HtI='HL)H߃S'H.='[HHD(]A\H5W1!='H=JH1!뭐f.AWAVIAUATUSHhD%'dH%(HD$X1E-''L%'M߾G"HH'H'L111zu HHP9wD'EurfHt$XdH34%(Hh[]A\A]A^A_V'O'tH5Q1= H1 두H5fH5Q1 H1C1a@H5Q1H117HH-'H!HH'E1Lt$HD$PEHD$ HD$H$HD$1IMAIPD955'AuLtIAG(;'HHH'{H9t7H$HtHD'HT$PHH|$EH$H<$H5˧QE_,L;\$P6IL$AC<C(;q'/HD$H2HyHD$ HD$HD$H51;HD$@Io8IG H9'H5V1IWMG Ht$1IfHHHD$(HIG 1ҾHHmIw8HD$8D$0B'D 'E#t$0EuHD$8HL$(H\$0L|$8HDHpfAHn'N LHHtEz ' L('+IUDxIEHH9HH'D%'IA9t'P 'wH51AL$DDH1=i' H5u1H1RkDH5Y1eLH1H<$t H<$PH|$H=H\$0L|$8H|$(IHKHfD@HH0H! t€DHpHDƉ@HH)HHl$7D'AS@Hr'@tcHe'HHڋ H!%tDHJHDщHH)@Ht | HDINFO@t+H5K1H='HH[Ð'BASE'>' | H5'HHH!ʁ t€DHHHDHH)HWEAK@DH51DH1'HHڋ H!%tDHJHDщHH) | AWAVIAUATAUSHHdH%(HD$81LSD$'AHD$0L%HD$0ED1HD$HD$,EHD$*@Atbw@H=1AIEtBAIot6ADuAtlH5'I}EuD9}$|$tDHH=XA)1D'HL$8dH3 %(HH[]A\A]A^A_fH=NL1HL$H|$HLHPMIHMB&DAD$H [H5]H=GAWAVAUATIUSH(='D5E'EAA='ۃEkH'HHfL%'HD$HD$HD$fDLHL!HHI!EtiHH6H H@zHڹHTH9sHH=HsH H@1HJMHHH9H X'f(f>af+Qf2HH =' HH9HH9H H9HH9H}HH9He X'Lfvf>u H9H u f(jpADH>HtKfDHHgA@HHH=AH191HHL{T$HӅH51H=H1M1LHHzT$H=1H@H=@DHHHH5 1bDH5J1JDH5_12?DuH=g#fH5L1H1cfDH5H5H5H5H5H5f.H=H=>hH=PH=8RfAWAVAUATUSHxHL$X 'dH%(HD$h1H'H|$PHt$@T$LLD$ D$4HD$D$HLt$d*f;D$Lt*D$HHD$PD$H9'HD$@=ouH5 1mIHD$Ht$P1HPL@ 輢HI'H;D$(IHH)D$(ILL^L9SH5,1cH1LH5' HD$@D$HtHL~D${gD$0u{nu{uu1{D$0I)I\-HL$HD$HA H9IfD+H{%'L9HH&I)HL$HD$HHA H9HAAmAH5E15AH1D$D$0H9H|$(H|$(*Ll$H5@H5|1DH1LE1D$4H5j1H1M`T$TH9sHHHAH9wHH9D$MHL$HD$HHA H9IiLl$H5|1H17D$4f.H51H18fDH=H1 1HHLtT$dHӅuտ fDH5[H9vTHEHD$8HHD$ HH9v51HHL,tT$dHӃ tHHtHމ?HH9wH9H 4H50H=g:H1HLsIŋD$dH5&1HDH1H9H;\$8IHI)IDHLzH\H5' H51EH1HHMH|$(HLl$fDH5<1HH1XnH5|1H13H51H1v[H5:y1Hl$(DH1I跟HD$(D$4H5y1Ll$IH1}D$4#D$4yLl$H5xHL$hdH3 %(D$4u`Hx[]A\A]A^A_H5x1Ll$DH1D$4H A2H5H=y::YH 2H5H=_:5DC'ftf+u@DAUATLUSHHD'fA(LDHL7L91A H~ L9sRLH)HIH?LHHHL&MIfA(MDLnMt fEtG;FtBM9vIL9rHtpLmL9J*vKHL$0HHD$8HH[]A\A]M9wLL)H9\HtFHHL@H51EHD$0HHD$8LH[]A\A]1nf.'H9vH'1H.'B'fWf=vf$lH5H='1qHڐ'f=ff=fief=-HHHuTH5u1]H=6'H‰ 1H'2f f H HcHHHHHHHҲHfDHsHSif=f==f=DpHIM,JH5H HcHH[ H\H\H]H]H[HZH\H^HaH^H[H<zHVnHbHKVH\JH>Df(H4 HcHHHHHvHtf>pHf]pHtfj*aH HcHHXHcEpH-pHKpHjpH6GoH rpHpHpHHHHuHiH]HQHEH9H-H!HH HHHHHHHHHHHHyHmHaHUHIH=H`1H%HH HHHHHH4HɽH˽HAWAVAUATUSHhx'H'dH%(HD$X1uMH=%''H\$XdH3%(jHh[]A\A]A^A_fv'HtD=P'ED5 '1HE6ٛ6˔'L=d't ;'sHHLH{ f=͓'HV'Hs'H8'H'Ǯ'B'f/f.Df:f 0D-%'E1i@o6   ='IW8MAIL9 @'IP9MH5'H AH;h'L$AG aH=9'H5iyD%'IW8EHAAtlLl$0H51LH5i1 LHlj1QH5i1DH11D'Mw8E/H'LHH|'賜1X@H5)h1H1S10@fxt f=(H1'Hu'DL%'H5Rh1&LHlj1fHّ'%H=@H=-ldH1'@H51IDH=Lǐ'D'ED 'EuDȫ'Eus='ui5'u_ 'uU{'uK='uB=['u9=f'u0=}'u'=\'u='u=v'H=RL1H=CLu 'tH='LӪ'tH= LD5'Et.H= LH= LWD-'ED'EDc'E2H5LVID3'EH=MzLԠA|$zMD$uMD$uҋ'D5ũ'EtH=yLtD-'Et*H=wLtH=LoD%h'EH=תLHDm' H=nwEL!D'EtH=HyLD 'Et.H=ѡLH=GxL='tH=vL5ͨ'tGH5vLLD$xLD$H5vLLD$R=;'t&H5vLǺLD$PLD$#= 'tGH5LLD$!LD$H5vLLD$=ا't&H5LǺLD$LD$=٧'H5JyLLD$vLD$H5]L}=PH='M H5c1H1%H51I/D='a H5P1H15'ԋ' H5c 1]H1'e +'L=ȋ' 1L-KL%<IG@|AG,t;'r$H5f1H1譌DHѝ'I9G vAGP_w k H=1'H5['H AHH;='/襽AEw(H5@c1$DHlj1LHYH= H1gfI׻H=,H1FAG UH5k1Lt$0IWIAHLHH|$L Dt$A H5-1YDH1H|$譚Ht$ H=1D=='IW8MAIL9)Lt$0H5ɰ1L[H5t]1LHlj1 H5]1DH1Mg8H5ʞ1ID*NEw(A9s!EtDHHHޅ'x$H5`'H5v' I聙IwH=1oH=g1aI SH=1EI87I讹H=H1IO0AW,H=-Aw(1 fDIIwH=1Iw H=1Iw8H=m1D'EdH u'H=7Aw(AW,H=M1qIw0H=-1_ff.HG'L8H='HP@HHg'LH_Ew,EH5^1YDHlj1mDH5t1-HDIW8H:Ld$0H5ڭ1LlH5Z1LHlj1H5Z1H1~IG8{'ftft)f uL5IO0AW,H=y1fDIH=H1foooH51H13'L=F'~fD 'IH5]1H1P'Lff>f(H=P@H5)X1%H1fDEw(EH5[fH51HfDI践H=H1&H51IWMG 1IHy1HH\'tIW HG'f. '"H5YYH515H1H5Xf.Hـ'%H=JH=H=H=uff>68f-f:D'9H5?fJfH5,1RH1H5lWhH51H1H5yX1H1cH5X~fH=L H=L)DH=H= H=uDH=ʮUD1HH葭L)IfDH=o:H=oH=H}Hv'HH;=v'L,8H5~A}w1葫LH1H ev'Hc'H H=o fH51HL$(HL$HH3H5aB1H13_0fDH=tH=H=H=oTH=oSH=oH5u1聪H1HPu'HtHuH;58u'H=<1輪H}"fDHFfH-u'H5B1HHH1f \b'cLCvH= 15HEHxDvfHuLHAH rt'H+t'Ha'kH51]H1éLmMt2AAH={1I蔩H5H}H=o Hs'H5#1ΨHH1]Lɧ@Hs'H5#1E1蓨HH1\L莧_fH5?1]H1\fDHHOfH=L1菨f.H51LH10\E1H=H=H54@H)L1薧H1[H mr'H_' H=^H1اH Ir'H_'mH=`L- 'A+DI}M11H 'IL9M}MtH5P'uʿ 耧H5P'fH-pH. H HcHE1MAuDLuDDHLt(HKH5 H=-HD1צ1IIu^L-/q'Mt L95q'rLl$`H5L1L蔨H59H|$Lt$4H0Ll$`HPHLVpDBH؊lVpVDH 1]H H5ܛH=L1Ll$H5uH5=1iH1YAH5uH58Mu3uH5N' 覥1L|qH5՘nH=L1IQoH=*1I:A( H=1IAaH=ۙ1IH=1IѤH=1I跤H=m1I@蝤H=K1I 胤`H=*1Ii9H=1IOH=1I5H=1IH=1IH=r1IvH=M1I@ͣOH=*1I 賣(H=1I虣H=1IH=1IeH=1IKH=|1I1eH=Z1AAH=;1I@ H=1I H=1IբH=ז1I辢H=1I觢H=1I萢{H=~1IyZHBH5[1LH1JH5s\'L+H5:1谡H1LnHEtH=ȗ1HEtH=1ءHEtH=1¡HEtH=1謡HEtH=1薡HE tH=1耡HE@tH=1jHEtH=u1THEtH=d1=HEtH=W1&HEtH=L1HEtH=A1HE tH=61HE@tH=+1ʠHEĀUH=1诠BL25H5ȕ H5H5?qLl$`1HL1聠#H5H5ϕ1踟Kt5H1ϟDf.AWAVAUATUSHW'dH%(H$1H|$`teHW'I<I>It"MtH5'1ЉH1>f=B' B'tm H.B'I~HXfHH9wHPMN(IL9s/H@9uH5V'1YH1= -B'A'I@9M>I IH5gt,6MH5EtIH5I}fH=1B @'D\'I~RHH=1I~UH5,2' I~ TH5 2' Iv(H=I1Iv0H=K1诈IFH=BHƒHHɃۃEH҃ɃWH΃R1jIv8H={1XH51' gM>IH=R'H=D@'IFIV(HR'HR'H=ȁ HHP Hx H@INHMR'H9HKR'Iv(HH9H9v8H5%@1!H1@HR'HQ'fHH;Q'H5%1݆H1;HQ'HQ' ?'?'i@H5"1蕆H1[@1A@=Q?'H5Hú1^HH1H51>H1褆H=>'R?'H5"1 H1nH5>'H=:1Y H=_>'A>'>'L5<>'HP'HP'nKHu7IIF(I9F0 >>'='M @HBHHHK1 fDHdtH{MEL9NL)ME0MHL9:Ht .H{ I9@H5O'Iv1H胆H5#*f./K'efDIPtdH5}lFIH5|UIH5DIHIHIH<'ff2<I`H5TI`H5{TI`H5tTH5_}H=0'1H50'f.OH5,' ՃI~OH5,' 趃I~ OH=(}1zI~(lOH5,' {I~0MOIFH=|HƒHHɃۃEH҃ɃWH1΃RI~8NDIvH=f|1ނIvH=f1̂Iv H=f1躂Iv(H=:|1訂Iv0H=(|1薂IFH=*|HƒHHɃۃEH҃ɃWH΃RIH| L1bH[<'1LHL<'藂9'! o:'CfDf=R:'2u =:' H5H51=H1s5fDH5I1H1K5JfDIQtdH5y IRtdH5yIH5yIH5mfH5q1荀H16fH5 1]H5:'H1輀8'H5)12H1蘀H5TnL(H5q1H1#4?8'f(f=f=IpH5yH5ayH=,'1H5,'H57HDJ' 28'7'H5xH=U,'1螁H5G,'Bf7'f scfLOHHJfDH5`1~H=+'H¾ L1LH5+'H=17'IokIoH5RwwIoH5wcIoH5lwOf.LxHH'f2dIpH5Tw IpH5i7IpH5vIpH57lfIpH5vIpH5\IpH5lrfIpH5vOf=tI`H5>M+{IPtdH5vIoH5vIPddH5u?IpH5Zi|H5uH5uDf.AWAV AUATUSHH-4'Ld$@H|$D$dH%(H$1LH 5'#1E1'=pHÉIHPL9HEu9M(sD 4'IT$8HH|$EM7HD$pE(L,IL-F4'H$t2H51{H1/H$zD$H5o1f{IUME 1Ht$I,1HH$tIU H$ 4'@HKE1HH $@L53'KHLI9r@IHPL9{puLIC H2'H-HH L ML- uHl$fDLtfM$$MAD$HHLH H5E'HN HH;D'rH5dK1zHLuI2'Hl$M-H YH5^H=uZzL%D'M 3H-D'H9.M,4H=5tLL^H=Jt L I DZ2'EHsH\$1LIEI<LHuHxHz2'HIPH9:MMA>H;=C'rH5 J1xHLuA>H9=C' H5I1xHxHyrH\$q1'H51mxH1xH=+C' HH=sH1xH,$H$H1'HH5;I1xHLH5I1wf.H\$H9BIFH5r1HD$`wIVMF 1Ht$I(1HHD$PtIV H5Sr1HT$XbwH1wH= B'HH= rH1wJ'1LcH56$1 @HC HHwHHL1ew/'HD$H^H_/'H HHk HH9s5fDH8u HKHpH9rHx0HHH9 H@H9rH5sq1vvHSHt$1II'HIbI'1Ҿ0 @HHHHD$H%5~I'IHD$@HvH)HLH\$LE1E11fEFfEN fA>HiI'D-2I'IFLILOI'IFI'IHL6I'I'HL$hININI0HHI\HIFRH)HLH9pH\$LstI.'H-'HHHHHH9sGL-7pf}uE,9sHHHH9HPHHHH9rH|$HUH|$@HtsH|$PHtsH,$HD$@H$HD$PHH|$pHtsH$HtsH$dH3%(D$ Hĸ[]A\A]A^A_@H5E1EtHLH5\E1tf.HU HuHL$8H|$LD$0d; HD$0LT$8H@MII9H\$@I5HHHIH HL5F'I1HȍH;=<'rH5B1qHLuA>H9=T<'H5B1sqqfDH5B1UqHLYH5eB1/q-f.H5JB1 qHLH5$B1pffDLGH\$LoHL)' )'H5)1pHH1`*LT$8~fDHk H5A1]pHD3H= 1p fDOLG"f.H51 pLH1)LT$8fDH5A1oHUH5@1oH=|jHƹ L-2'@H|$xH:eHt$xH$HtQHT$pHL1fH:t*JuHoHHHoBAH L9uH @HǺ H$nHD$HH\$@H@HHH9RLl$0Lt$8L|$@@H5i1nH1+oHD$HH0H@HHD$@H9DAULKAVH$H$H$H$H 'H=iipH|$HXZHtH5'oHt$0HH 'H=.ipH{m:H5'- oH{N:Hs(H+t$hH=h17nLd$PMS Hk(HftHHH*&'HPHHH+D$`H;D$X0IľL@'HD @'LgHHޜHAHH=>LDHH gHDH H0MЉ1|mH*T@'D$,IIlHD$XHD$PH9HCID$H91Ld$,t$,HLHH9w@L|$H$kfH=g1lED3H=1lIL+d$@HH5 1IL#lHH1L%SfDH52=1kH=fHƹ H5=1k$'Ht$h-fDH|$親H$'u$'@3H9H5<1jkH=$fHƹ D+L9H5{<14kIG"UH5L<1kIH5( 1jH1Zk;H|$@iHD$@HD$HMCI<~M,4jL#'eI<@f.AWAVAUATUSHH$HT$(HL$0H$HD$8H$HD$@dH%(HD$x1H5#'HEIMKlH赬H5Le1IƺiJT5Hl$vIALH<H~H=='fHD$HA^tf=tH5"'HH5"'H2LHl$`HD$HD$PHD$HD$XHD$ HEH$@H5a1-iLd$Lt$IALLLwHH|$ v<'HI~ La<'HD$@H5$d1hAIHLHHtDH<$<'H} Iľ<'IH}L;'fE9tPMuHL$HL$H1H\$xdH3%(HHĈ[]A\A]A^A_f.HT$(HL$8\$HHH9D$0HL$@fwH591gH뎺LH\$`oHD$HLd$fD|$f%f$HCIDH5`1gAIHLHHtLL:'H{ Iƾ:'H{IǾ:'fD94$HTt.HHf<$D|$Ld${E1DMD|$Ld$H5{_1fLIAHLH(H(H):'I;$T$HH\$8H;D$0HT$(H(D|$ff.AWAVAUATUSHHdH%(HD$x1$H|$HT$8HL$LD$ LL$ti$HT$8H|$HL$HLD$8HN-.'9'RH5|H5fs'f=7 yf>'  fEf f u>f t?^@f ft)fH51eH1HT$8H|$HL$HLD$8HD '48'ɉ$D$H5EEH5D1dH1e1H|$8D$0LdmHD$HD5'ILEH0HXH=IIH$ډ1Id'fq8f=t8f=6f=5f=5f=$ f=AFH$HHcH@D$0HL$xdH3 %(D$0.@HĈ[]A\A]A^A_fDH5 H5M$H5u1.cH1cDŽ$}@f=0%:f= f=Pv5<f=WA~>f=ATnf=ZHI5xD-5'H=^IH$H ^I HEHD1b8Df0f.d/f f$/fj/LffH<$'If=^1f=WA&1`f=#8f=Wy f=YA H$HHcHfDfW7fL&6f>5 f2/ H<$͍I(f  fuH<$跆I@MH5y1E1E1`H4$H1`aM%H|$&L9t$ &MHEILT$HD$JPHD$TMJPIBPH$HT$8$H|$0LT$ H I_L$AB<  &=}'HD$H5.CHtIrH;$s H'H5CLT$($SKM$LT$(t1|$DD$4H=H LHE1O`L$4LT$($rH=WL$)9HQB1`L$IJH %ARH5&JD$Et+HD$HJt H`&H=1_f.f='+u EH5' _5:'uf='%HH9l$8uH|$H]FfDf=5f=.5f=f=AG858A{L-t\D1'HpH=rLAEHE1^f=-'&]H=uLFD$E$HT$HJ|"5JD"H $HcHf=E.0f=&.)f=f=f= AH$H݉HcH@f]fe,fifjMH<${{I3f*f ~fnf A H$HHcHfDftNfrfsAH$HHcHfDf*)f'6f(uH<$vI[f=Z(@'f=Ff=AT=A0H$HLHcHf=V+0f=H<$IDfZ>,$f[zf\A"H$HHcHfDf=1X&f=&A)}H$HMHcHfT 'fPA$EH$HHcHffA*H$HHcHf=^f=H<$ÏIffAH$H[HcHfDH5!@f^2fre5fxt5f=Vf=,@DŽ$NfFfKA H$H HcHfDf=0%SAH$HAHcHfxf=AH$H+HcHfDf=f=}H<$KIcA_H$H7HcHfA ?H$H7HcHfA 51AT5k4AL-&aL- aH aLFpAH$HHcHfAH$HHcHfH<$臿IH<$Ig=I'-t ='H<$豗I9f8H<$ƁIL-H=1LXf='+H==LHH=1H H(PXL-L-ڄL-]L-̄L-{f=03A H$H HcHL-nGf=VALH$H HcHfS.A$$H$HpHcHf5AH$H܌HcHf=AA@H$H HcHH<$藯IH<$ώIAH$HHcHff^:!fcUAKH$HHcHfDA 'H$HˍHcHf+1f*f'f(f$f=/f=ǫ~1f=Enf=_f+t%f-H<$7kIofnH<$LITL-!mL-#mL-mL-QL-@mL-KmL-PmL-VmL-lL-ltL-lhL-R\L-RPL-RDL-R8L-kR,L-iR L-gRL-zL-oL-oL-oL-PL-oL-oL-oL-oL-zL-zL-OL-{zxL-~zlL-z`L-~zTL-SHL-SvL-utL-uhL-u\L-uPL-/uDL-5u8L-7u,L-:u L-=uL->uL-HuL-TuL-tL-tL-tL-tL-VL-VL-VL-VL-OL-OxL-OlL-O`L-PTL-PHL-Pt f=PH5df2u5&&u<H5d< u H5dLt$PH5d1L9LffX1fYA"H$HnHcHL-vVjL-}V^L-VRL-VFL-V:L-V.L-V"L-VL-V L-VL-VL-VL-VL-VL-VL-VL-VL-VL-VL-VL-VzL-VnL-VbL-WVL-WJL-W>L-W2L-W&L-"WL-(WL-.WL-.WL-1L-TL-Tf.f=vf=ǫ%H<$3I f=Pvf=vvA H$HWmHcHL-aWbL-eWVL-cWJL-iW>L-mW2L-kW&L-qWL-uWL-sWL-xWL-0L-VL-Vf.fUt2fV,$f=f=AH$HlHcHL-VfL-VZL-VNL-WBL-W6L- W*L-WL-WL-/fDA gH$H#lHcHL-UL-UL-#UL-,UL-2UL-8UL->UL-FUL-IUvL- /jfH<$TIH<$IH<$gIH<$IwAlH$HPkHcHL-AL-AL-AL-AL-AL-AL-AL-AL-A{L-AoL-AcL-AWL-AKL-A?L-A3L-A'L-AL-AL-AL-AL-AL-AL-AL-AL-AL-AL-AL-AL-AL-AL-AsL-AgL--[L-#@OH<$w@IE AL-.fAoH$HlHcHL--L-8L-8L-8L-8L-8L-8L-8L-8~L-8rL-8fL-8ZL-8NL-8BL-86fDAH$H;lHcHL-NL-NL-NL-NL-NL-NL-NL-m+f.A H$HkHcHL-+{L-;oL-;cL-;WL-;KL-;?L-;3L-;'L-;L-;L-;L-;L-;L-;L-;H<$oI'AH$HlHcHL-4L-4L-4vL-4jL-4^L-4RL-4FL-4:L-4.L-4"L-4L-4 L-4L-4L-4L-4L-4L-}*f.AH$H3lHcHL-50L->0L-F0vL-J0jL-N0^L-Q0RL-T0FL-V0:L-X0.L-Y0"L-Z0L-\0 L-]0L-^0L-_0L-`0L-`0L-`0L-a0L-b0L-g0L-k0L-o0L-t0zL-x0nL-|0bL-0VL-0JL-0>L-)2L-.&L-.fH<$WgIoH<$pIWf-fRH<$`I8A/H$HjHcHL-=<L-?<L-C<L-G<zL-O<nL-W<bL-\<VL-a<JL-`<>L-a<2L-f<&L-k<L-s<L-|<L-<L-<L-<L-<L-<L-<L-<L-<L-<L-<L-<~L-<rL-<fL-<ZL-<NL-&BL-:6L-:*fH<$藜IA(A 9A AAL-03+fH<$gIA H$HiHcHL-1vL-2jL-2^L- 2RL-2FL-2:L-2.L-2"L-!2L-)2 L-12L-82L-:2L-r%ff=5f=f=f=f=f=H5& (HD$HH5xU1Nd 'H1LM(D$0f\nfTfUfZxKA AAA UL-/AL- 2AL->$L-1H0LFf=f=f=f=f=f.ffnfL-@$#f=IDf=&9f=AwRH51o&HL-<$L-"f=W^f=Yf=#f=f=f= H5AShH5SPH51%H5fSUfKsfLAfP_2f=Gf=f=<AL-/L-/H/LFA L-/L-r/H/LFfqfeͿiffѿ鬿fs¿靿H5Rc3E AL-!f-\f0*f2HAtOAL-1,@f=vvf=03f=L-,L-+fFfԾfžf=f=zL-+>L-+2L-5+&L->+L-+L--L--L--L--L--#f=H5nPAWAVMAUATIUS1IHIHHLfAH$IAtH$HL9kH;LSLL$`H5P1Lk"IUME 1I6I &HHH&HCHCH4IHHH9s,L$HQ,D9sHHHI9)HPH9r1HC(fHOIE HAHL94M+L}&HSH$D$HHLKLC(KIHI9H$L|$ MHl$(D$LI%HD$0H HD$8LuM9s#D$M0M9LD$AH5M9IGHDS A  ALULmIWMII9IIHCMLpLL)HD$&f(f=A覇HIH= H+H=HHl$IL|$ Hl$($T$% H$ACT$LUfEtICH$HD$ALC(HH[]A\A]A^A_DDIA t AA HQ HqDK LCI>Lt(Su(1HH[]A\A]A^A_KtHCH;HC(wH5 1AH1VLCLKfDKIHIH9IL|$ H519LH1LCLKfH$@LT$0LET$8A9HIƺH5DH=d HPH='g H^IL|$ Hl$(%$AH5,7H5XHT$1L\$H,$L|$ QL\$HL$H1LHwL$H51DT$H,$L|$ DT$H1D;L$H51H,$L|$ H1L$L|$ }fATUSHo HHt@t:IH5K1HSIL[]A\I1H蘧H5iHú1BHH1[1]A\@f.HLteUSH&ftXf2fH5ZK1H=r&H‰پ 1aHZ&H[]fDtH5J1H=&H¾ 1HH&[]f. HJtHwJqH]J^HeJF=& &e&fw4;/& CAH=!&HH H!%tDHJHDщHH)Htqt\ts IGNBH&=&HPHEpf.HLIVH3IF LNKB@ STDB RSVBF& VECC&f.&& RSV#&f.& FDHofHHttHHtiS%&t_Lfvf>uHHt4uVfHHtH5HH=C&1iH2&[fDf2fHSHufDu fHEHtvw1;w&H5NHH=&1H&[DH5HH=&1H&[=&HgF-H5GH=J&1pH9&[H5G1H=&H1:H&[ÐUSHHH~UH=rG1HHE&Ht H9A&wOH51lHHH[]1fH=W H5&HHfDHHH;H5& H{l{ /H=FH1O{@@UH=FH1-=]&k@UH=uFH1{@8un{H=fFH1H5F&H[Ht H;.&rdH5DF1AHH1H5&H []D1@H=EH1lqH޿#뭐{UH=EH16;AWAVAUATUSHD-&dH%(H$1H|$EwD%&Eg-&H5"&HH&E1E1E1HD$0HHD$8fH\$Ht$8HXH"&1HHH5oH$HL$HHHB&H{H0&H{HD$P&H &HQ &L$H|$LXHn&H|$1H/3H514H1jHD$XHD$@H&HHmHv&HHD$8 E1HD$0E1E1D&E=&H5y&H HHD$XHD$PHD$`HD$@HD$8-&3&e H==&W H=&I HH=&fb&H|$0 H5W1LH1fL9HH5b H51HD$H1"MLL$ LT$0111fIHMIH<L93L9*M1I)L9s3L9s.L9w)LeHI4H9s HMLIIDHHuL9I4H5DB1LL$H11LL$LLL$*HILL$QK LfHHIH9ufI4$I*Hd$^fH*R^H=ALL$YT$^D$HLL$ HfH*l$E1Ll$ HMAHBMUDfI*YL$H^L$r fH*YD$LH߸I^D$9I9KHIIyLLfHH H*Xf&D&EH &HHL$PHD$8HD$XHD$`E1HD$@HD$0E1E1cHI LHH|$@H|$`H$dH3 %(H[]A\A]A^A_fD &EH=x&fc&f=&fu f=u1ۀ=&ÍLt$LRHP&1LHH5u5L$HL$ݺHLH H51E1H1HD$0D &Et1H|$0E1E1LE1HD$0H&H5L&HHD$8HHHD$PHD$8HD$XHD$`HD$@DD&E>D &Eb&BL%&M2D&ED$Lt$hL|$pLl$xAD$t 5='&u "IL$8HID$ 1LHHϘH51HúyHHH15&FH51HH1 \&H$LH|$;HD$(H|$(zAD$(;&E1E1;&OH$(HD$(1HXH$HD$H$HD$ vfDD{ AAKH=k<H1 { D8tD1@PH=Q<H1 { H=y<H1 H3L9Lm1A|$ HC IALL@Ht$ t$0PH|$(zH Ht.$H=9H 9HHE13 H5\& B CuWAL$,9L$LwJf=l&t@=0&t7L迖H581Ii L$LHL1&fDEH H;$HH=T;1 H{H5& H{k{#H=:H1N {@@IH=:H1, =\&{ fJH={:H1 1H &HHL$8 HD$0E1E1E15&uH=7&!H5 &DHL9BfDH|$0H=7&0l@HHfHH H*XvHHfHH H*XvL$H51CH1DV&H5FEuH5z11H1wH|$8L|$Ll$ILd$XLt$H\$PL|$@Hl$`IL;l$8bKHtH)I IBDuI<LM9rH531~H1&H5uH511NH1MLd$0fDI,Ht!L9rHtHHPIlI9wHL9uL$HL$HLHH5LB&LIƉ4&Ll$IljLLLHʼnLHD$0HIHFHHfHH H*XHHfHH H*XH|$HHHHD$@kHbLD$P1HfH4HtL9H9wH9uHHH9uHD$8H9H+T$PHHT$XI4Hl$H"EH{&1HH>"Ld$Hl$XLd$$HHH&LHHtH51H1)HD$XMLl$ HfHH H*XD$[HfHH H*XD$PHD$XtLH5TLt$L|$Ll$HD$0E1E1E1H5)Ld$HD$8H\$Hl$XI4HCH&1HHuHt$XH|$HHD$`HD$PXff.AWAVAUATUSHdH%(HD$x1H=G&H<$D$ K&fHD$pH۸&)D$0)D$@)D$P)D$`E1E1L%/Ll$PD$ IH5&H HH;&>LLDIHPI9HB{u9C(sD ܷ&LHH<$E} HD$HC(H,HH-&H|$ht/H5r1nH1褳H|$hjD$ H51?HULE 1H4$I蔰1HHD$htHU HT$p&$@H|$HHtH|$hHtHL$xdH3 %(D$  HĈ[]A\A]A^A_H51HƋ&Mo H-&pE1N&IHPI9QHH5&H EHH;&EH=-ug&1LeHtHE HI3H51HúLHL1H:&l H=&H HH] HH9v3@H8u HMHpH9rHx0HHH9 H@H9rH5S1VHUH4$1IIع謮HIH߾(HHH|$膬IHD$0IDI9uHHl$LHHDLIIǐE11fDEf}HL&H{HE9&H{HE&&H{ Iľ&HT$@HUDHUU D D D D D U DU f DfU  DU!DU" D D  D D  D D ? D U"DU# D D D D  DA? A U$De# ƃ  H(HUU ЉEL9Hl$Li&H&HHHHHH9sGHD$(Ll$ HD${uC,9sHHHH97HPHHHH9rH|$HD$HD$8H|$0HtHD$0~fDH51HDH51HDHD$8D$ HD$H|$H|$PH$Ht$PHD$XHtNHT$HHL1fDH:t*JuHoHHHoBAH I9uH 0HǺ Ht$`HD$8H\$0HHH9sLl$ Ld$( @@ s fƀs!@/C"EWi{ @C# @+=C$K]os$HD$8H(HHD$0HH9YDAULKATH$HT$xHt$pH|$hQ H :&H=H|$8XZHtH5&HD$H\$dH3%(uH [DH="1:AWAVIAUATUSLH8dH%(H$(1H|$t$LLL$HD$husMt>Mt9HHHD$pPHt$ H|$L$LD$\_AXu6@1H$(dH3 %(H8[]A\A]A^A_DDd$LԨ&EH]DH5)!HHLA@HEfH HD1HH1HT$pHL$xfHHD$hHH|$H;G0HG(1H迻HH ߘ&H=t H5˜&HH5&>)H5& }f(FAH5 1ADH1.ED-&ADT$LT$Lf( f=6AL A\$L5H5!16H1H5!1H1wA|$LH5& jD$LHo_&H5j!1HºH1H1kH|$HH5,&Hÿ H&H=Ht3H=Ht H=HyfH|$HIHjHt$ LH|$L$LD$\Y^D$LD-&AD$LD7D-&d$L1ɻD@ApH5 1DH1CDd$LH5& xfDH5A1-DH1`1ffA(H51H1踥H51H1;1@H=VHyT@H5R1DH1CfA/1D$LA͉D$\H$HD$HD$\HD$ H$HD$0@@oD%=D=y=AH56%AA3 A$8AD%=y =n A$@ A A[EIHHD$HHLHjLL$(HLD$0H|$[A\AD$\H=AAD$\1DNEtAH5 @1H1 EHt$IHAHA0HHLjLL$(LD$0H|$A\ZAD$\H=AAD$\1DD%B4H=1@V:AA!@EoIHzHD$HlHLHjLL$(HLD$0H|$QA[[>AD$\H=6AAD$\1DAuEH5JtH=rA1A1E \$(A"sH=21W1҃ DDtuH=1+fB4H=1@fDDH5=DH=1fH5E15H1fD}\$(2fDEIHHD$HHLHjLL$(HLD$0H|$Y^AT$\H=wA׉ЉT$(ADD$\1T$(AH=ABD1։T$(ET$(}bDEIHHD$HHLHjLL$(HLD$0H|$AYAZAD$\H=AAD$\1D)EAH=1AA1ɉ\$(%H=11҃ :DDtuH=E1f.D$LAHl$ D$`H$HD$@fD_D%=AOArA=AAH5V&H=J41H5& EHT$ Ht$IH@H@HLjH|$L$LD$pAZA[AD$`H=AAD$`1DMD%AH=1AAw"-Dh@!D@HT$ IH=HD$H/HLHjH|$L$LD$pAXAYAD$`H=AAD$`1D|AuEH5 tNDD A !H=1;d}5DH5i1H1fD8I tDH=AD$(1\$8DD|$(H=`1A9GH=1iAD|$(H$1E1Lt$HD$0HD$`HD$8EHT$ HD$HL$H^HD$HPHHjLL$@LD$HH|$;^_)ADt$`H= EDAD$`D1DtCt-ĔĐDtCT-ĔĐA;l$( mDA\$8fH=1H=1EE1Hl$(LL|$0fEHT$(IHHD$HHLHjLL$(LD$0H|$_AXAD$\H=AD$\1B4;]B<;HH AYy@H=1DH5y1H1_H=1DA4H=1H=s1DH=1(L|$`H$E1L|$(HD$MAH\$@EHT$ IHHD$HHLHjLL$(LD$8H|$ZYmAAD$`H=dD$`1A4A<II LEDYEAH51Hl$((H1^rH=1AwEAt$H=1[H=-1HSH51Lt$H1EuD@ĔH 2O&H1*H1}6H5b1H1ĖH=1AMEAt$ H=q11pE IHnHD$H`HHLjLL$(HLD$0H|$EA_Z2ADd$\H=)EDAADD$\1H=1ADEC4fDH5A1L$L$H1豋L$XD$1H Z{&H=4HH)DH$Ht$HH$iHt$@H$HSD$8fD[fDLHL$c[H5|~1H HL$HH1HȊ H$Ht$HH$Ht$@H$Hf.AWAVAUATUSHHHdH%(HD$81Vt7HHHL$8dH3 %(H HH[]A\A]A^A_fDHt$4HH1WIƋD$4H=H1~EDEEEED$DD EAD$ DA@AAD$D %AAD$EnEEH5$D$5D$ L$^ H5DH5x&0WH5x& FHt$4H1VIċD$4H=H1iEtDEEEED$ DDEAD$DA AA@D$D@AD$ D%D$$D%D$D%D$D%D$D% AD$EEH5DL$ EvH=h1T$ D$5t$ L$$T$DL$EbDD$E@H5H=/1EH5}H=1|$H5\H=1EtH5BH=1tH5)H=1ESH5H=1DD$~DD$EH5H=1[EL$D$ D|$EDt$EE+@DH5sH=1ECH5UH=1)H5;H=01T$t`H5H=1D$ uOt$udD$u{EDhExfEuD$uD$ H5H=12D$tzH5H=1D\$EtcHvH=H1ErH5UH=t1ED$uT$uEutf.H t&H= DD$DL$DL$DD$E>EEtD$H5JH=1DL$(DL$(E|$ DD$ED$Dd$ ETD\$$ED$ f.HH=H1D$D$PEet$zEEfDH5H=m13fDH5B@H5{@H5sH=1t$ L$u|$DD$ EEL$$ DT$ED\$EDD$E\EqD$EfH5H=01KD$lH5H=1*DT$ EDL$$EubT$VD$uDd$EEdfH5KH=1DT$E,H5H=1D$f.H5H=]1k|$$ut$D$kDL$E E"|$7EHXf.H5{j@H )q&H=DD$,DL$(DD$,DL$(EEDT$ EuD$GD\$EZD$  D$$|$|$|$01EC|$H5bQEfDH5D$D$Dd$ E|$$J|$H8|$H|$E`p|$|$jE1|$EtHH5|$HUEHjDEYtH5KmaEoH5(fUSHHdH%(HD$1t2Hރ腻HHL$dH3 %(HH[]@Ht$H1!LHŋD$H=FH1tTt'H5@t#H=1_DH5/1H1;dfDH5f.USHHdH%(HD$1t1Hރ茺HHL$dH3 %(HH[]Ht$H1)KHŋD$H=H1t-upH51H1kfH5mfHt$H1JHŋD$H=H1)BDDH=1*@f.AWAVAUATUSH(kq&dH%(HD$1[)H-Aq&$b2*+{(%@r+Hp&=DT&=C=]B=BBfo A>BEABIfDrt)H51~H=wp&HH|$dH3<%(HSp&oSH([]A\A]A^A_fD& A*  u%=@$=>A=A=@H51H=o&H%=<c"tl=w<H5bo&HH H!%tfo{ ArDHJHD@HH)HfDr1ځ1}H5K1Ln&LL9H! t€DHqHD@HH1L)H| D7.H51H=n&HgfiG jh@+3%% CH5m&HHH!ʁ t€DHHHD@H, data iHH)HH8@n L1@ @SAK@/}$H5m&HHH!ʁ t€DHHHD@H, G-FloaHH)HHtfP?/Ht$0H, abiv0HHD$\$HHcHf.kvHHcHffo l&dulel&)k&fW Xv0j2rk&, m3k&f=k&HH, avr:10Hk&7fk&H k&H!%tDHQHD@HH)H5@H=2k&H):H, avr:10Hk&6fk&sH, avr:10Hj&5fj&QH, avr:10Hj&4fj&/H, avr:103Hj&fj& H, avr:102Hj&f j&H, avr:101Hej&f5fj&H, avr:100HCj&f=Dj&H, avr:51.j&Hj&H, avr:35j&Hj&mH, avr:31i&Hi&PH, avr:25i&Hi&3H, avr:6Hi&H, avr:5Hi&H, avr:4Hi&H, avr:3Hpi&H, avr:2HZi&H, avr:1HDi&H5HfD\H5i&HH H!%tDHJHD@H, fdpicHH)HDUH5GHH5Hlfo)h&fo)h&IH, sh3-noeh&mmuHVh&)H5 HfoSf:h&u)#h&H5t HH, sh4-nog&fpuHg&H57HH5HH5H~g&, shfg&5fg&, shfg&4NH5H8H, sh4al-Tg&dspHEg&H, sh3-dsf5g&pH&g&H, sh-dspg&H g&f&, shff&3f&, shff&2f&, shff&1fo)f&H51蕸H=f&HYh@|@.H5Df&HHH!ʁ tA6€DHHHD@HH)H, grfDx]hH, no delaye&He&f=e&? %=1=n6=//H51JH5W1I4Iʼn؃(HpHcHLH=H5d&HH H!%tAa DHJHDщH, cf, isHH)H5d&HHEfDME fL2 HH H!%tDHJHD@IHH)HD@20=N: =0D:L-H5d&HH H!%tDHJHD@Ǹ, HH)LH|fD,OH5OH=c&HH H!%tDHJHDщa HH)H, cf, isHDH8H| fH跴H5 L"H=!H5jH5^LH=H5b&HHH!ʁ t€DHHHD@H, cf, isHH)LHTH:H| fBa >f.AT ;<;9;9H, simple)b&Hb&D 7O@7`20^7H5a1H=a&HED&}&&  À>a%=C1=JC*=BA=A=A1HHH5HȹHHDH%= .?td=9-H5`&HH H!%tA2DHJHD@HH)H, o3fDj[P:x <+A<H_&: H!%tDHJHD@H, mips2HHHH5W1蝱MH!ʁ tH€DHMHD@HHJӃ cH HcHHMSP430x1@1x1 @ HH5]_1H=^&HRHMSP430XHHMSP430x4A4HfDPHMSP430x4A3HfDXHMSP430x42HfhoHMSP430x4A1HfD`RHMSP430x3A3HfDh5HMSP430x3A2HfDpHMSP430x3A1HfDxHMSP430x1H6fPHMSP430x15HfHHMSP430x14HfpHMSP430x13HfxHMSP430x1A2HfD@rHMSP430x1A1HfDHUH551bH=[]&H賱.fD@X($n'H5]&HH H!%tfoDHJHD@HH)HBVfDGH, highgpArs\&H\&fD\&@@!@t|HH=H\&H5ÀHEHHH!ʁ to€DHHHDHVHH)HHPVfPVPiH5[&HHH!ʁ t€DHHHD@HH)H, V2@@H, 64-bit][&HN[& À@#o=e& 29S9H5Z&HHH!ʁ t€DHHHD@H, warninHH)HHf@g,@!l! ! > =$H5>Z&HH H!%tDHJHD@ǸoHH)H, rmfBfAAAA1AAHA HcNA@SAPIA0?fo~Y&ABI>{Y&A)ZY&HAHv&DH Hr1ѫAǹDHH)HERA z g A0g A@Z H%1yl@%=p"K`h 30HiX&H, r4 freI, r5 fixI, r2 fixI, r2 freI, r5 freH, r30 fiH, r30 frH, regmodJ==@ = = ofDC!e!=w i +IuE,$IAAD!%tAfo3AADMl$AMDAƸPUIA$AD$on FfAD$AD$Wc H5W&HHH!ʁ tfoN€DHHHD@HnventionHH)HHx@9  uA0tV&, G1fD5pV&H5\V&HHH!ʁ tfo€DHHHD@HH)H@DÃ,HHcHH, ARC HSU&HU&H5U&HHH!ʁ t€DHHHD@HH)Hk $4 H, v4 ABI@H8H, ARC EM'U&HU&SH, ARC601 U&HT&6H, ARC700T&HT&H, ARC600T&HT&]4H, UnknowCT&n ARHT&f5T&=K== u'H, PA-RISTT&C 1.HET&0fET& 3 @H5S&HHH!ʁ tѻap€DHHHD@H, lazyswHH)HH8fX@ @R=IE,$IAAD!%tAAADMl$AMDAH, r4 fixII$edAD$ fAD$.fD=.=IE,$IAAD!%tAAADMl$AMDAƸeeII4$fAD$AD$ H, 32-bitR&HvR&#HjR1A#,Et AH&DH=:R&H Ha1IH)=3=43[2=}4=21HHfoHHHD@,`+pHQ&f, H!%tDHJHD@H, mips32HHfBr2B f.]*F'5*o(H, fr450HP&xL%P&E,$IAAD!%tAAADMl$AMDAAeIM $fEl$L%~P&E,$IAAD!%tAAADMl$AMDAǸedIM$fAD$AD$ ML%P&E,$IAAD!%tAAADMl$AMDAII $AD$e:23AD$ L%O&E,$IAAD!%tAAADMl$AMDAII<$AD$xedL%hO&E,$IAAD!%tAAeAADMl$AMDAIM$fE|$&HHH!ʁ tfo4€ANDHHHD@HH)HfD@H5W>&HHH!ʁ tAed€DHHHD@H, FPU noHH)HH8@t usfDH @CH5=&HHH!ʁ tfoM€AeDHHHD@HH)HfDPH, non-PICHq=&f5r=&GH=^=&HH1H!%tDHqHDΉ@H5rH1H)H| }H5=&HHH!ʁ tfoY€DHHHD@HH)H@aryH5<&HHH!ʁ tfo€AgpDHHHD@HH)H@ ant fDP$fo@&@H5$<&HHH!ʁ tfo|€AelDHHHD@HH)HfDX@}H;1HL$OAHL$5AG&HH)H|1H H-t;&HHH!ʁ t€DHHHD@׹icHH)H, cpfH@H-;&HHH!ʁ t€DHHHD@HH)cH, pifp%H, noreor:&derH:&C:&, PIf:&H5y:&HHH!ʁ t€DHHHD@׺oHH)H, tsfPH5:&HHH!ʁ t€DHHHD@H, ledataHH)HH8@bH59&HH H!%tDHJHD@H, halr1HH)HDH5b9&HH H!%tfoDHJHD@HH)DH5 9&HHH!ʁ t€DHHHD@׹IHH, ultrasH)HH8@parcfH (+8&, v8f58&H5|8&HH H!%tfo%DHJHD@HH)HBH, PA-RIS8&C 1.H 8&1f 8&A47&, G1fD%7&rA37&, G1fD-7&UH, PA-RIS7&C 2.H7&0f7&\H, mcm24H7&+H5x7&HHH!ʁ tAp€DHHHD@H, constaHH)HH@nt gfDH =<==1HHH5ڿHȹHHDHAb6&, emfD6&c=w=!=&1HHH, octeonHHHDH@nH, RH850 B6&ABIH36&pH, fido_a%6&H6&H5 6&HH H!%tDHJHD@ǸoHH)H, psfBMH55&HH H!%tfoABIDHJHD@HH)HfDJBfoFHRC OSABIAgHx@ flafDxfoHyscalls Hx@ABIH, (ABI:v2)@ H8fPrH54&HH H!%tfoABIDHJHD@HH)HfDRB 0@HZ4&? H!%tDHJHD@H, mips5HHH3& H!%tDHJHD@H, mips64HHfBr6B 5H, m680003&H3&H51mH=f3&H辇H5R3&HH H!%tfoAorDHJHD@HH)HfDbBH5$1߄H=2&H0H52&HH H!%tfoAorDHJHD@HH)HfDjB\H5]2&HH H!%tDHJHD@H, eabi32HH)HHBH51&HH H!%tA4DHJHD@HH)H, o6fDbHH51&HH H!%tDHJHD@H, floatHH)HD H, (ABI:ly)@egacH8fH @H, GNU EAABIHfDBB 1H50&He alignmI, softwaI, MaveriI, uses nI, uses oH, uses A= ==HD!HA$AD!%tAAADLaAIDAHLAld AfA BIA_!؉!˃@ a   HVD!HA$AD!%tAfoAADLaAIDAHAendefAntAZ=o =HD!HA$AD!%tAAADLaAIDAHLAck FfA PH, v850e3Av5/&H/&fD/&钾H, cpu32H.&|H, MeP C3.&H.&7H, MeP C4.&H.&H, MeP H1.&H.&H, MeP C5.&Hu.&fofo1d=@=O1H!%tA8DHqHD@H, BEfDQ!؉!=H -&tSw=1H!%tfomDHqHD@HA닋1H!%tfo7DHqHD@HAB1H!%tA8DHqHD@H, LEfDIfo_1SH ,&1H!%tƽ8DHqHD@H, BEfi!؉!=@t=tH H,&1H!%tA8DHqHD@H, LEfDYfoH1$ftz!؉!˃uH +&1H!%tfoDHqHD@HA dexfoAH Q+&1H!%tfopAesDHqHD@HAtablfDaA)H *&1H!%tfoNDHqHD@HA fo3AA50*&, v8*&fD*&H, v850e2m*&H^*&H, v850e1P*&HA*&ԹH, generiAP**&c MeH*&fD=*&~H, v850e2Av3*&H)&fD )&{sMjD5H, fr400H)&>t"DHH|H)A 1 |u"DHײH|H)A1{ t"DHH|H)A1{@DHVH|H)1A{[H5(&HHH!ʁ t€DHHHD@H, vms_liHesH)HH@nkagfx @{H, fr???Hv(& DHH|H)1AzEDHQH|H)1AzDH$H|H)1AzDHH|H)1AzzCDHeH|H)1ASzDHH|H)1A,z-DH'H|H)1AzEt"DH H|H)A1yEt"DHH|H)A 1yDH)H|O / H1A ryjH, fr405H&&OH, fr550H&&9H, fr300H&&#H, tomcat&&Hs&&H, fr500H]&&L-m4L-(HD!HA$AD!%tAfoAADLaAIDAHAnablfAedAH5%&HHH!ʁ t€DHHHD@H, mips64HH)HH@ H5n%&HHH!ʁ t€DHHHD@H, mips32HH)HH@魴H5:1wH=$&HSy醴H5$&HHH!ʁ t€DHHHD@H, mips64HH)HHf@r2@ H5$&HH H!%tDHJHD@H, mips4HH)HDdzH5($&HHH!ʁ t€DHHHD@H, mips32HH)HHf@r6@ aH5#&HH H!%tDHJHD@H, mips1HH)HDH5i#&HH H!%tDHJHD@H, mips3HH)HD鯲H #&D!HA$AD!%tAAADLaAIDAH, VFfAPH "&D!HA$AD!%tAAADLaAIDAHLAre FfA P0H `"&D!HA$AD!%tAfo9AADLaAIDAHfAtH"&D HA$AD!ကtAAADL`AIDAHH8@PCS/f@ 26@uH5!&HH H!%tDHJHD@H, abortHH)HDH5L!&HH H!%tDHJHD@H, errorHH)HD钰H &D!HA$AD!%tAfoAADLaAIDAHHiAentcYH &D HA$AD!ကtAAADL`AIDAHL@ew Af@ BI@HG1Ar=1HHH5HȹHHDHfo&act)&=ui1HHH5HȹHHDH鱾=u61HHH, octeonHHHDHf@2|tH5]1AqH=:&HsM1HHH5ɧHȹHHDH!HӨ1Aq1HHH5HȹHHDH޽1HHH, octeonHHHDHf@3鰽1HHH5%HȹHHDH鄽1HHHHHD, sbf@1]1HHHHHD, xlf@r61HHH5ܦHȹHHDH 1HHH5HȹHHDH޼H1ALpDH1A5p-1HHH5:HȹHHDH鄼1HHH5#HȹHHDHX1HHH5HȹHHDH,HD1AoQHh1Ao ofAWAVIAUATIUSMHxdH%(HD$h1MHT$tIIf=a'&t/AHT$hdH3%(D Hx[]A\A]A^A_>'&L&&H HHLI9sL HPH9sD}AA  uE,9sHHLH9uHU Ht9}(sAHD$HuLL$HL$XLD$PLtKV"LL$t0f=&&*tAËE(H4HH5*&&Ft" tE1D4LL$u=%&LL$ HT$`L(LL$ HD$HD$PLt$XH@II9{ HD$\$GHl$HLd$0LL$8IHLl$ADl$ D %&InLD$`QDH%&f=JfYTfinAH=DHcH#LL$ HD$6I9H5 HD$HHHH1&HD$PIH@HD$XHI99Dl$ Ld$0LL$8H|$LL$#k$&LL$f=b fYfiu H&MH|$X HD$PI<$I&H(&fi=$&-t=#&1A…GDG75#&f2^m fWft1A@f&0AEDI.HHH9D$,H9#IF"&II tHIL9D$` HD$IN,L9tAE<t< |$GIFHD$("&f^9pfu AfV@f=vv@tA DLO=&Iu DHt$(DHABfi=Q"&-[="&NH=G&H9ffi fDftf=6f=f=f=f=.f=f=A1AH=&H5r1hH1t!&UDHH ~A@f=Yf=$A!zAT$H=&H1AI9T M&ME HcLHH9D$1 IFH+HH|$HH7J<#Hl;&H&|@A f-t<fYfXs&f>t XfLtfSuAT$Efr f2 ff(Q f. f$K 1Af';-&tH51fH1&&@ACr|AAnHO&H+P&H=&H:&H#&fDH|$I.H5Iź15fLHH1D$ HD$(DH9&HD$(!f=Fxf=WZ f=#Xf=WANRf=hf=bf=WAf f=Z, f=F1Af=ATtLf 1A@f=*E1Af=f=+f>1AfffDf=pf=fjH5 1[LH11A@f81A'@f1A@1A@1A@1A@AAAApCf=1Af=f=ADLE.&IufZfigfsNftfq1A @1Af=&/f=?f=1Af= fDPff=~1AffD1A3D1҃࿃%f\'+1Ak1A]f1A"@f=&AA) f2f=f=f1Af1Af=f=fDf=Pv"f=vv1A f5f>1A ]fcJfecfY.fZ$Gf01fAff]1A @ f=Wf=YfWtdfYt*f=&-=O&1A@f0fUtUfYfS1A@WfPvt&ftfFe}1A@[1A@Lf]8fetf\(@Lfnf=f=f|1A@1A@ff.sf-1A@AWAVL5%AUATIUSHH5!1HdH%(H$1H[L|$@HM$IL$HL$VHL$H¾@L1VHEID$H1MLID$ HULE <HID$E LU HD$LT$tJ= &H҃ H I9I\$H51xUHH1;1NI H[H HIHPLP(Ht΋p`6H@8H@@H$dH3%(HĘ[]A\A]A^A_ID$(DH|$ LH`D|$ AI\$H5 1TDHH1i1yfH=jH#PpI H HHHHpHPLT$HHHPHHpHHHHpHPHD$HHHuxLT$fDML@MD8HLLH}0H9|$0uHt$(HD$H)D$fI\$H5'f.HT$H|$t-H[HM$I|$wRHD$ID$PHH5Hú12SHH1e1ISfAWAVAUATAUSHHHXdH%(HD$H145HHD$HD$ HL{ H51IźRLH1S &Eq &H= &H HHHH9saHfDHPH9sMPt uP,9sHHHH9uHx t9p(sH51RH1zRHCMLd$ HD$L5C@Ht$IAH=6MF1Ll$DE1,R/f.C4,H=51 Rt$IIt.D9D1LQuܿ IPIu1A<G^v.H]P9H5% QLcl$Ll$MM)*H|$PH5% Q2H(H59Hú1PDHH1 f1HL$HdH3 %(HX[]A\A]A^A_C L|$(I HD$ H=WHu~Pp H HPHHHPHHHPHHHPHHHPHHHPHD$ HIGHD$(HHHHHD$EHD$ NHT$ E1E1LHHHt$ H|$0L1Dl$0AHK0H9L$@uHt$8HD$ H)D$(|HH5H1SOHH1 HT$(H|$ t L|$(H\H5H1OHH194ODf.AWAVAUATUSHHxHH|$8HHH1HHD$(HT$(H|$8E1E1HHHH5H1dNHH1NH5҇1DNH5ɇ1I.NH5H1NHHL1xNH\$(HH9Hl$"ID$XGfIOHILLHMOMC>M"H5HD$H=?1Ht$ MHHt$ HHD$0c8 &HT$H=5L1MH=LH=LH=LLH=Li H|$0]M  &>fDMtLKLt$L9t$HD$L)f=e&2HD$H|$ tI~Mf &LH&II~Io&HILH;l$(rH9l$s.H51L LHT$LHE11L)IEHHHD$ LH9sHL$H9eM\MSHL)H9D$BC|<E1MH=LH=LH=R LEH=L H=L ID$H5HD$hH5{1IԺJHt$81IIL@HHD$( fD$XD$XHx[]A\A]A^A_DHT$H=L1JHD= & HI~Mf&LH&II~Io&IH@HLHHHD$,M_IUA $MG +D$ wH HH51It$ H1H51IH4&HfHj Hg HhH5 1)IHH1I_=-&H51HH1TII1҉LHJD-HKLl$0Lt$ IʼnL$fDLeH&H}Iƾ &IljLI9NA@= 4&f>PH511=HDH1HEt.AGMHl A6H=y1IrHL9u>GD|$A!K,%@12DH+%LHD$fD=%EAAHELIFG$?H5M9L] B|-H5E DH&DDHD$HT$ HHHT$H&HT$ LT$H4Ht$0HHT$HLHt$@MM9 HD$HHD$ H5́1LT$hL$BH1CHL$HH=u1HB AH51eBKH51HD$`L$\FBH5t1HD$P.BH5b1HD$HBHsHLL$h1AQL$lHT$XLD$`A]BHD$ LT$xY^HKHPJD-H9HD$H Lt$PHH9\$H LDH&IHD$ DI<&IHD$0DI<&H=s3HD$1Ld$@AL H=P31AL H=531AH|$~ H=QH1mAHAHH\6Lt$P$@  H5"1L$@L$H=u%H¾@1&AH_%LHD$fH=zLA8H={L/a H5F"1@H=4%H¾@1@H%LHD$VA|$AD$ GH=*{16@MT$AL$H5l1L%qqI?H1?fu1LH?I9u@HHl H=yHL1?{HkHlH5{pD$XKH5Q1>HHL1M?H5w|1>H1#?M*}@H]L@H{@=H9uInH&IH}&H}H&H} Iľ&IIUHƂJcHDH5_{1=H1S>MZL%<Iu1LH.>I9u D$1L5I] %H$HDmHt$HLHHXHH HLHE IH9X%H5u]vhHH7%H;{{Iǃ.LHL1H$%H[Ht H; %@H5F1HH1~ H H9$ LH$jH l%H=lOFfDH I%H=(P# O @ÀZ)e@4t-H5|1 H=%H5=PH‰1?Ht$(H=/P1,Ht$0H=-P1H5B% H H $%H=NL%%H51O LHH ض%H=MmH %H=MKH %H=M n)H r%H=MLH P%H=M *H .%H=wM H %H=`M H %H=HM H ȵ%H=1M ]H %H=M ;H %H=M ^H b%H=L<H @%H=L H %H=L  H %H=L  H ڴ%H= oH %H= MH %H=fKp +H q%H=MK fDH I%H=L # yfDH !%H=L HfDH %H=yL  fDH ѳ%H=GL  fDH %H=L fDH %H=K[ fDH Y%H=K3 SfDH 1%H=wK  "fDH %H=DK  fDH %H=K fDH %H=J fDH %H=J k ^fDH i%H=YJ C -fDH A%H='J  fDH51mH=%H5JH1 J4(LL=SE1kH5Hú1DHH1McrH\$ IHJ#HD$ @H9\$ 0C< bH NHcHHCH=H1Hf{O$.wEHCH9v*A,AGHuH=K1HCH9wH5% LcUCIiH °%H=|K  HCuO\H %H=AK o :H s%H=K M HCtH N%H=J( HCH +%H=J  H %H=J H %H=-J HCmH %H=JKH %H=I ^HCH K%H=I%H )%H= I{*H %H=H H{H*H5Ԯ%)JHCZH %H=Hm8H=)H1LcHk2f=%LCHK HL$xHLD$p%LD$pHD$hL%HL$xHD$pH%LHD$x%HH$%H{H$%Ht$hH=GH1~H=%H5H1f L$H$H=eHT$xHt$p14@LsHSH=F1HCH=H1HH5BF1G<6bH1H55F1EH5(F1HD$ -H5F1HD$H5F1HD$LL$ HL$EHT$DH1NHLLH IIHD$LL)HHH9r"H|D%B HH SHKH=F1 gOH5IG1/H1H5F1H5D1HD$ H5D1HD$LL$ HL$H=DAH‰12l$HH\$ @I9HLHL HHu@@N@H5F1MH1M9}Ht$LHL-H561HH1mH|$H4!H5\1H=b%H5/HD1|$ H4( Hl$GH %H=tD HC>H %H=FDHCH Ω%H=3DHCH %H=CHCHL$xL$H߾V%H{HD$hB%L$HD$pL'%HL$xHþH%LH$%HHD$x%Ht$hH=BH1LD$xH$H=ƻHt$pH1bH %H=BHCH %H=BoHCH o%H=BIHCH I%H=vB#HCLHLH IIH5C1EHt$0H1vD$fAWAVHAUATUSHH=%HhH4$dH%(H$X1HtVH5Ǽ1HH1D$ H$XdH3 %(D$ ,Hh[]A\A]A^A_Ð=%uH|H%H>H%%1H$H $Lc<‰W% $LH;L%H{f˵%u%H{f%_%H{H%I%H{Ha%3%H{ HS%%H{$HE%%H{(H?%%H{*6%%H{,%%%H{.%%H{0%%H{2%%%H=%tD5 %H<$EҾHC%HPHHH9uHA%HfHHH9uD-%H%E D%N%-X%A9 t'E D9)H5:%H=#%=ʳ%ELFtPH5i1H1KD$ PHGHx%HiHr%D=%茨D% %EH=E%HtY=%D%Eu HG v%t%=;_%r W%rH%H<$uRD%i%o%a%g%Eul%f%`%H<$u -%H<$HlD$ tH<$c=D$ D %ED%EL-4%H-k%E1E1MdLuHLH\$MAu AH5CI\1DT$8LD$(LD$HHL1LHH$L %L%H %LH%HLL$0LD$(HL$ HD$~;HLHjDT$HHARt$(LL$PLD$HHL$@PH HI9/HcE DULEHcUMdMAuσuf=2%2H\$Eu H515H1H HH{DŽ$(DŽ$2H$ ;%H$H$DŽ$DŽ$H$DŽ$HDŽ$tT=y%(fD9{HHCHu襇H5H1_HH1H<$ED$ H=%D$ %H=%H=%H=%H5,1H1Fp%h1L-=_H V%H== 0@@@H=&;%H%A܉LBl1L;%%LH %HH%HLpt L95%mH5(=1LH1ZH5% iH%Bffft4H;%s(H %HtHH%HrH;5^%!H=<1D$ fH<$UED$ D$ %D^%Etbf=%y=%u)H5V1H1h+Dt$0Eu H<$D$t$ED$ D$ %L=N%%HL$`AE1HL$H$HL$fDAIPD9KAouA;G(vH5a71LL$$IW1MG IL螥HH*AG(H5q<1H,HH-%L1IHULE RHIt I8HE1L%1H=N<%HHtoH=I<H5W<1~HSLC 1H4$IӤH o!U!u!H=<L=%H=%HtH%MtLH|%H=%HtH%H%H=%HtH%Hv%H=O%HtH:%H7%H= %HtvH %H=Ԫ%HtZH%H=@%Ht>H+%L%,%MtUL-(%Mt611HI<HtHHHuEL9HrLHҩ%- H571HH1H=i%D1W0LHL%H{f%%H{f%%H{H٩%%H{ H%}%H{(H%g%H{0H%Q%H{4H%;%H{6%&%H{8o%%H{:^%%H{<M%%H{>A%%4%E1VD%%-%EED$ D$ =%ب%f(Jfijf=#f=NH<$L9H RH58pIH-%D-z%L=HfDE11EurfD-E%D9siLmHHḨ%6H=%HFHH;%Lluu߃AD-٧%D9rEHmHZEL%X%% {D$E1H<oSAIPD;-e%S%A9HE%EB0tH4$1L3H"%B0uD$f1LHfH5#1HDH5 HML5%MA$IH;h%rH5Ҿ1ILwI|$ HD$ A|$H5ݲPH=LH3L=%Ld$ MLD13HI<$Ljt%' HIhI|$LAEuLd$ D|$HcD$H- %LH@HHLHL$ 1xINjD$M9AOAK@IH|Ht7DL$(DD$(K@MIHDH@H@ H@(|$H3hHcD$LLD$8DL$0H@HHTH HT$(HHL$@lHT$(DL$0LD$8} HBHBK@IH|L4$DLD$(LuH%HcD$LH|$ H@HTPM9Hd%ALD$(jK@IHlH}Ht{HEHE HE(EED$D$H4$LHIHD$PLIl$ SuH51HD$Ht$H1\%Hl$XAD$ %H HD$PH=#Hu~Pp H HPHHHPHHHPHHHPHHHPHHHPHD$PHHEHD$XHHHHL|$P%H=%H HHHH9s^H HPH9sMPt uP,9sHHHI9uHx t9p(sH51H1HT$P1HIHI9wHI9tECtI9uH51]H1L[H5% H%B0H4$LH%B0lD$_H]H5d1HH1裢D-%L$D\$EED$ D$ oHt$PH|$`H&L$`L$QLrH5Κ1HgL$HH1$H5%B0D$H5.1H-Ơ%L%.H1Lm|H5j.1H1_u1LHFI9u L%--]%@tG @L%-t4H51L%+%H=%H@; 1 H51YLH1-%@@)H5-1HH5Ʀ1L%7-HH1^-%@t@L%hCH51@LH1=M%tH5Hź1HH1-%H51dH1=)%uH5H16HH1=%MvH5Hź1HH1jH-%H5Ħ1HH1CH5Ԧ1H1&H=_%H5Φ1H1H59%H=1H5Ħ1`H1H5%H=1H5+1.H15%=%!H-۝%H51IĺHHL1U-%H51H1H/-%H51H1H -w%H5Ħ1H1HH%Ht=A% H5% -(%H51-H1H-%H51H1HjH%Ht-Ԝ%uHp H=*1BH5k% Q-%H51H1H H$%~%Ht = t 9`% H5% HH+t$PLH)H=*LD$ HD$1HD$LD$ H;HUH5% Ht$HLD$ HŹKТ =%HD$`E1E1H-S%HD$H\$ %IHPI9Et uH] HtH5n)1LedH1H="% HlH= H11HH5?Hu81ILHL1tE1ۋU(}AÅԚ%9L M5 A H #DHcHf-~f]tf+L H<$1ɺo1H54$1*H=1$H1H|$(H%HúH5$Iw~H K#JcHH5#1H5}#1H5O#1uH5 #1bH5b#1~OH5#H5#1QH1HT$(H=QL1D$HIE H9D$ LLl$8Lt$@H|$DD$HE xH5#1H1/떃GH5"̓'H5GH51oH=H%HD@1H/% f.H5N!1-H14H %H=R! @aH=1Y@SH=-!1A@EH=!1)7H=1$J42A9HBL$@AD;-E%H@%D<tߺH1@DH11IVH<$L? H551IoHs%AAH`HD$ LHL5s%D$uH=7r1hH5ũ1IffLfLMDD$H$LDLD$(辁LD$(HD$H5c1H=h%@H¾ 1H-S%n@,gH=1RH51HyH581{-%IH<$LH H5p)H<$D$H<$LH H5pf=tf=vH<$LaH jH5 pqr(H=1#@H51H1H LH#I<$LaLd$ D$u@ÑD\$(HD$IL$0H9L$pL\`H5H1HH1ɏHE LHD$(HIg HHT$ `H5=1HHT$ HH1H5M1H I HHD$ {L9T$(KwH51RH=H1HL$8HT$0H=LD$@Ht$1HHHD$ Ig HL$ HH9Ho%H}HD$H[%H}HD$`G%H} HD$03%HD$8H}%H|$HD$@0HPHVpDBHmlVpVH|$0DH 1H Ht$ H=1%LT$HL9T$(KwH5L1H=sH1dHLŌ%THο H5`}% FD$ c@HT$XH|$PHl$XOHt$hHD$PH)D$X+H5B1LLt$@Ll$8AH+\$HH1H51HL$(HLL1׌H51Ll$8Lt$@H+l$H뢺H5H5H5L=1%D$ tHH5/1D\$(HH%IjIVMF 1H4$I迃HID\$(H1A MHLPASAv L$HL$0H|$ LT$HkH LT$(LH= bH=QL=Z%H=9L=B%L[H5NH1HH1…)H|$LH H5H=qwFLd$ LHT$\HT$II95H=l%H%Hk%D$AHD$ H`m!AWAVAUATIUSHxD%9%H\$0H|$ T$HHHD$0HHD$8HD$HdH%(H$h1HD$PHD$`L$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$D-B%ED$H$HD$gf.HD$xLLH%Hߚ%HD$xuD$H=%HtH%{%LHt$x1LdAyH{XL<H<!f$` yH1 HD$x11 fD-@t HtH,H1HzbJuf.11A:@DAHDAB1GA)A0DGt2@tt,HfA2HGu@SH_Hƒy"1@H{HHH @xH=;H51"H[f.SH H5uH=1H[H=c1H[f.SHHdH%(H$1txH4E1HtEHtH,H~rFA<8uH5DH= 1EHH$dH3%(u6H[fDIL#H5EDH=L1@SHH ILdH%(HD$1H5e?H=1LHL$dH3 %(u H H[T@SH_IAy!1H{HHI @x1H=mH5`LL%HAH5HE1H[f1S HH5*H=HHH %HD1H[f.AVAUIATUSHdH%(H$1@@u;H_ȃ @ +H@HcHWIH_1ME1HfHHҁH ֨t%ELtHA,DI4LGrDOAuL\$ ALH5AH=9LL1Mf.DLL$ H_LD ;H5(=DH=L1]HH$dH3%(H[]A\A]A^H5ь%HH7H9H5&AH=1H=%E11H-IFDIEMA]H5j%Iu6DIу|L95A%v7AtH5j%LIHHRI9u,H5j%DH=La@H=1L7fH1LH)H=f@HH5;H=41@H5;H=;1nH H5;H= 1G@H`H5X;H= 1@H7H50;H= 1Y@HH5;H=t 11@HH5:H=L 1 @HH5:H=$ 1@H5:H= 1^H_H5p:H= 1虿7@H$H5H:H= 1q@HH5 :H= 1I@H= @1.@AVAUATUD$6SH_AH`D/dH%(HD$X1GDA@HA y$1fDHsHHH @xAH-Q%D$H5ALt$AAubIH5 AL1ZH= H5_1ILLHt$(H=1HL$HL$HHT$0HL!H9uHL!H9HD$ J<0HD$ I<M9L%?%H5-t]rOL 袖HL$D|$8HL$I9wUL9l$ AGDDH5x-1轕LH肖L%K?%fH51荕Hlj1IHEI9vfH|$FRHIL LL|H=蠔Ld$ fDHH[]A\A]A^A_ÐE11E1,H5:1͔HHH1[]A\A]A^A_%DAUATIUSHHxdH%(HD$h1G9t>H}85g%}]$expIH=1L蹔MtoL-1fHEPftEfVtf:f fA$n/afDLL1K9]w HD$hdH3%(Hx[]A\A]f.ff=t`fuHE H52L1눋}HH]PI\H5H‰L1趕ufA$IHE H5L1舕+A$vexpAD$DHE 1kHD$(@Ht$4HٺApH=41HDI艽H=<HLD1jD$4HD$(HD$(Ht$4H19IƾD$4DHD$(0H=S1LIlH=HL1xjHD$(>fDHt$4HٺAH=j1HH=H1.jD$4HD$(HD$(L|$4H1L|$4HٺH|$(IH|$(hH=1H跿DHD$UH=x1LI葿HL$H=)LH1iD$4HD$(HD$(UDAPDH=HD1[iHD$(!Ht$4H1H=H1H=HHH9G 1H9O HH)P= ( HH9 1H9 HH)P H=1hHD$(hLt$41HLHD$4HD$(HL$ HL$ H=1HD$H&HHL$H5AH= HDH1hH1LH|$(T$4ItH= HT$(1ɽH=H1gHD$(fDHH9 1H9sHH)F fHH1H5;AH|$(H=HD1pgHt$4H1RHt$4H1T$4H=[HT$(J(HHE1H H5H AH=HEH1gHD$(Ht$4H1aT$4H=HT$(J(HHE1H蜼AH5H DH=1fHD$(XH=1rfHD$(8H=1Lt$4MfH|$(HL1H=1H H5I1eLH1f|$4HLH|$(1H|$(lH=1H軻H5XI1UeLHdf.H=K1eH|$(Ht$4H1|$4 HH|$(HH|$(HD$(6fDH=1ReHD$(|$ |$L$ HH9;H9)FHL$8%HL$IHt$4H1IFT$4H5H=HT$(I)HT$(I9LGHAHD1dHMMt$t$H|$8L$T$ZYH5 %)DEedHD$(LH9H\$(H'Ht$4H1T$4ItH=HT$(1չH<H5FAH=HDH1cH|$(LGI9!1H9-HH)PDH=l1cHD$(HHH9H9LsHH)tH|$(J4(H1H|$(H=D H= H1cHD$(HH9H9LsHH)tbH|$(J4(H1H|$(H=ܘ袸H=H1bHD$(w|$=|$;Dt$ AJ7H9H9)Fg5%HH=12bHD$(H511aH1bHD$(fH=;1aHD$(H=-1aHD$(H= 1aHD$(hE1H9sHPHT$(DpHD$H|$(IDHH HPH=ID1Iat$LHD$(H=1"aHD$(HH9UH9LsHH)F@LfDH1H|$(H=詶H=2H1`HD$(~fDHt$4H1T$4H=HHT$(1_H=H1n`HD$(4@H= 1R`HD$(H=12`HD$(H=1`HD$(H51_t$HǺ1H|$(HGH9H97)2%H|$(HH1H|$(H=_HD$(U2%H|$(HH1H|$(H=[_H|$(HWH9r1H9s)HH)HwA2%HHD$(HPH=J1HT$( _HD$( 2%H|$(HH1H|$(H=L^HD$(1%H|$(HH1H|$(H=S^HD$(h1%HHD$(L@ HLLD$(HD$(2o1%H|$(HH1H|$(H=8^HD$(;1%H|$(HH1H|$(H= ^HD$(1%H|$(HH1H|$(H=]HD$(0%H|$(H0%H|$(J4(HD$([11H=1Lt$(OH=H1^]HD$($E1HL$(Ht$4HHL$(HH=L1HH=/1LHD$HH5AHL$H=HDH?t$ tt$ B(U0^L$HH9Ht$LDt$AJ7H9t$H51HL$[t$ H1H|$(HL$HGH9H51[[t$ H1H|$(HGH93GH5u1HL$[t$mH5O1Zt$H5I1ZH1;[H#H3AH5HD1ZHH1Z`ZAWAVAUATAUSIHHXdH%(HD$H1BHL$L$H|$D$4HD$DHD$f.HkHH+t$Ht$L9H=d1xZL9L9s:LH)ލFw,Hk-%AwH HcHDH51YH1ZHD$HdH3%(HX[]A\A]A^A_EIAM9DFH,%IH$N0Ht$LL1LD$ \$DLD$ LM<H$J,8DALL M9|$4.EHDLL$(HL$ HV,%IH$HL$ LL$(N0ALI9wM9^EE)I AGLD$ DL+%IH$LD$ J,8F@L|$HL1L;\$DL1IHH$INjD$DHH$N0J,8LDcDHXM9H-%H5H iX@EIAM9DFXH'+%H$H<$DLܮH51yWH1W:f.H51MWDH1 BfDH51WHHWH-%fDH51VHt$H1.H51H VHD1 I9L9ED)H5Ѯ1H qVHD1 I9&L9D)L9EH9LH)ƃL#%<AF_DhAV^B"V"%M9/AF_E1DL"%AFXIF(1E1ɀ8zL1HLL$4IHHI9HH9IF(HI9H95"%HADf8@@P@R,@SHI9H9y0@LuHDH5)1UNH5HHٺ1|LL$ fLH)ލFcfH51LMDH1I9PH51MH1fD2@t@ t @LIEHf2HAv\H51HL$(HD$ CMLL$ H1LE1HL$(!@LL)F}fLL)΍FNfeH51HD$LLL$LHH)1LLLrLAWAVAUATMUSHHH$(L$D$8HD$HHD$H$0HD$dH%(H$1L9wIHIuSHtMH51ILH1H$dH3 %(L'H[]A\A]A^A_ÐH H HH Ld$D1HLDD$(LL$ LLT$bHËD$DDD$(LT$LL$ EHŋ$ H!ZAPt$Mt$$8HLHLPAW$8P$8$8nH@IfH &H&H $$'$$HI9wL9!D)F!DD$ LL$H%DD$ LL$HD$HL$I싄$ E1ۅF%%MeIM 9I VI2!yI3!"HD$HIG H  H HH L$$IH$M9wL9kD)FZDD$ LL$H%LL$DD$ HD$H$ E1ۅHt$HH=1LL$ L\$DD$(RDD$(H=H1AXIL\$LL$ fD%u ,%tD%E$ MI@2I  IIRIIQ dGHD$HHHbHH5'1HH1tHH+ HHHt$DL1HDD$ LL$Dd$DLL$DD$ HD$HI싄$ E1ۅYH$H$Ht$HHt!H$HH;$N#DD$ LL$H<0$%H=}1HwDD$ LL$HHt$HH=}1DD$0LL$(HL$ HH5HD$1FDD$0HL$ HHT$1A3GE1LL$(fDH Ht$DLHDD$ LL$wDd$DLL$DD$ HD$HI싌$ E1ۅ.Ht$HDD$(1LL$ L\$H=茜DD$(H=H1AFL\$LL$ ;HLeM9iDD$(LL$ HLT$d%LT$LL$ DD$(HD$HHHt .Hk H q  H! $ E1ۅ?DD$(LL$ 1L\$LfDHHO$$HI9wL9'D)FDD$(LL$ HLT$v%DD$(LL$ LT$HD$HL$If.HVHL FHt HVH M\$M9DD$(LL$ L\$L%L\$IHD$HLL$ DD$(II9rI9vIH51DD$(LL$ L\$DLH1L\$MDD$(LL$ M)Ld$H$ : MfI8ID%EHD$HIGL9LH)FI2> I8I> I6E XBHD$HHH>HH@H=H51BH1XCIQwfINIHtz|IB AHD$HHHHH=1BwIIsI~W@$ HCHvHu1H561LL$L\$BH1BLL$L\$MLL$L\$H=1TBHt$L\$ LL$(LD$X$ $$L)@Y^%H51yAH1Amf.H VH H "H QM\$M9DD$(LL$ L\$IFt;I@F%$ HCHv HAODAW@I09IG8Ht$HL$HHt HN0HL$HH ׋ % AG@HAoHtzHy$ E1ۅLHt$HH=v1L\$ LL$DD$(yDD$(H=H1A@LL$L\$ (H$ IL$|I91HHD$hHHD$HIDHT$pLL$ HL$DD$(۳DD$(H=bH1A?%HL$LL$ u %t+v%uI9M9$HD$HI̋$ E1ۅKfDHD$HIHfDI LeM9CfHt$DL1HDD$ LL$Dd$DLL$DD$ HD$HI싔$ DD$GHD$.LL$ Hx?HLL$ DD$H=MHH($HA"$AHL$H$Ht$HHtHq8H<@H /$HH9t(KRIH Hy*HL$(DD$ H<2LL$$1%HL$(LL$DD$ H+A HHA(H9HQH)DD$0LL$(HD$ HHHHHL$Z>HT$ HL$LL$(DD$0H9uHt$HH=s1DD$0LL$(HL$ kHD$H5QDHLeM9YHt$DL1HDD$(LL$ LT$Dd$DHD$HLT$LL$ DD$(IfDM9 HD$HH5p1DD$ LL$E1^4HD$HHHHH514H1N5f 3Ht$HH  Hm H- H5F14H14~ 3Ht$HHHG H HH=14fDH  H HCHt$HH6H,HD$H9p(LpI<6L11詺H51Hź3HH14Ht2H)%Ht&H;(u f.H9( H@(Hu]t2RIL T2HD$HH1HH=A1w3fH$ E1ۅH|$HDD$8LL$0L\$(%Ht$HH=>i1HD$ HD$H5;LL)FDD$ LL$L%LL$HD$HDD$ II ? R1HD$HHHH512H1f2HL$$IH$M9wL9 D)F DD$ LL$H%LL$HD$HDD$ 5HLL$(LT$ DD$3DD$H=H1D1LL$(LT$ DD$H51DD$(LL$ LT$1$HǺ1>HELT$LL$ DD$(I9H5!1DD$ LL$0$HǺ1HELL$DD$ I91H51DD$ LL$Id0H1LL$DD$ ME1I*I/'I" II*OHD$HHD$HHLLLL$ DD$赶I‹D$DLL$ DD$HpH9 ]H" CHe H!H H+ H1H=eH= 蝅H5=H17/HH1/(DHt$HH=e1LL$ L\$DD$(NDD$(H=H1AT/L\$LL$ H=DAL1LL$ LT$#/LL$ LT$YLL$ ALLH51}.H1CHD$HME1LL$DD$ H$HbE1A #DLL$8L\$0T$(J4DD$ LD$6$LD$I8IG0J4$L$ IG8I0LL$8L\$0T$(AODIHIJLHt$HLL$ HL$L%LL$ HD$HHL$?H=1-gH=K1-TH=1-AH=1-.H=1-H=1z-H=c1GH51H,HHHL)1H=1+-H=1-H51DD$ LL$,$HǺ1HELL$DD$ I9H=41,?H=-1,,H5d1,H1|, H="1i,H=1V,H=1C,H51DD$ LL$+$HǺ1HELL$DD$ I9I{I}HeIHOHHHH=1w+H CH  H=1D+Ht$hHT$HLDD$(LL$ HL$HHt$HH|$hHL$LL$ DD$(LHH|$hHt$hHT$HLDD$(LL$ HL$Ht$HH|$hHL$LL$ DD$(HHT$XHt$PLLL$(LT$ HD$dHD$LT$ LL$(HT$hHt$`HLL$ LT$4HL$`LD$hLT$LL$ H=1-*H=1*H5/1)H1)H=1)sH=_1H53H1L)HH1)=H51')H1)H5Ѻ1)H1k)H51(H1I)HD$HvHHt$`HL$PHHLHT$hLD$XIHHD$HHHHHAoTIGHAWPIJUfI@I!I*LL)FpfH5Ľ1'H1X(H=a^1DD$(LL$ ~H5L1HD$'Ht$H1tH51'LL$ HDD$(BHDHxoH= H1'HNHe.H#H=1'H5KDD$ LL$1&LL$HDD$ DD$ LL$H55H=I]1DD$(LL$ }H5d1HD$&Ht$H1\H5pH]HH=A1&WHHH=1&0HH H=<1{& IFH5f1DD$ LL$%LL$HDD$ H5ه1DD$ LL$%DD$ HLL$\H=1%H=m1%vH=q1%cH=S1%PH=շ1%=H=׷1%*H=1%H=1v%H=1c%H=ͷ1P%H=)1=%H= 1*%H=1%H=1%H=T1$H=Ӷ1$lH=1$YH=_1$FH=1$3H=1$ H=Զ1$ 5$H=Z1DD$0LL$(=zH >$H5?1HD$HL$ #HT$Ht$ H1H BLL$(DD$0EDD$ LL$H5H5xH51f#H1#ZyH5_H1<#HH1#-f.AWAVHAUATUSHH(LhLx(H|$ L$,dH<%(H$1MDD$D5$E$$L$H=$@H ZH ZH"YH#YH$YH%Y V$$SDŽ$HYH[H=K$HH$H|M9H[Ll$8DŽ$Ll$MHH$HD$HDŽ$HDŽ$HhL9LH)ƍFH\$H$HHD$@H92HD$HHD$D$0LeM9E1L9fDT$sLH)FwH$fD$DD$Ll$L+l$8EH$$t6L9lt1HHHHH DL;ltHÈH9u1f|$L}M9" M9 LL)F LLe$D$XM9D$ M9LL)FL$D$+HD$M<M9M9HD$Ps DD)FLu$HD$PHHC Lc`HD$`f|$w8IoL9] M9|LL)FjLI$D$+D$+< |$1Ʌt\IoL9{ HDŽ$HDŽ$HD$L|M9 1L9sD)FH$Ht$,PN$u d$t$>H=f$HD$HHD$@HL$ ITH;Q(2HD$HL$I9D$f(l$XEH= U1LtH5eHú1fHH1'$L9t$@l$,r$$D;$Eu.T$u&$$$DL$,9CEɉ$^ ODt$M9MDŽ$E1\$m@LL)FlL$H9?HHH7MtHM9 ʄ$AM9G I^L9sD%$EUH=$DŽ$oHD$ H51L`H1LFA@fDD$ED$uq$|$0HHPH$HT$+xLhH@Hx T$Hx(H@0H@8H@@H@HH@PPD$,KH=$=H=R1LHL$hWrH5 Hź1HH1T|$0H+Ht$@H-H=JRHE1 rH5+1HD$0Ht$0HH1H51}t$H1Ht$PH=Q1qH51HEHH1H51%t$+H1D$HL$h HH51H1OHs`H=YQ1qHs H=GQ1HD$0qH5~1HHT$0HH1HshH=Q1pHs(H=P1HD$0pH5~1HOHT$0HH1HspH=P1{pHs0H=P1HD$0dpH5~1HHT$0HH1\HsxH=fP1*pHs8H=TP1HD$0pH5~1HHT$0HH1 fDHD$D$XD$+M<M9[t$0fHI$O$bffDH L9L9sLH)F@HHD$H HD$LeD$0M9eE1HD$@fDL$H=>O1LnH5~1HźHH1\D$Lt$fH=N1LnH5~1HNT$HH1 H$H$HD$`Ld(;DslL;d$PHD$`H$J, H$HL`(L9H=f$ L9|$^$DŽ$DŽ$D$@Lt$0Ll$HH\$PHHPHH$H$HD$xLt$Ht$x1LML+d$8L1HË$IHD$@uCHD$0LI9u6M9v$A?u+L fD8uHH9uDt$,Eu&L9%O$w$n;D$@d@l$@H=$tQ$9L$@}DH$dH3 %(- H([]A\A]A^A_L$EeEtD$@L;|$Lt$0DDl$,ERH$Ht"L9v 1E1>$DD$@$$l$@9A\H55}1HHL1$fDLeD$D$XM9<fDfDt$0IF I9 L91HL$ H=K1HHi^kH5xHú1HHH11Xl$+H5x1T$0Hlj1D$0D$+(f.=$HD$ H5g{1HXwLH1H7$$H5p{1<H1DHH$HD$H HD$@HD$D$0H$H$L(l$,E1L-b$MtI9]tGMm(MuEMI8H5 {1LHL1L1DEI}HH.k$eH[I]HH;D$ l$,L$Dd$+AmL$EHSL[Lj t$XLt$0jLAPULt$@ATL$LD$p$H@IH[H@H;6EL$Mt$9$nE1EHSL[LsLL\$pHT$hLD$`LT$X蛁H=H1j t$XLt$0jL$APUt$@ATL$L$L$LD$pH$LLJH@ I@LH+t$8H=1DLeHD$HHD$D$0M9HD$@GfDHD$M<M9D$+HD$PSI1SfDH$Mt H59w1Ht$PHL1&fD$$H=BH1I}>t$0D$+LH)ލF]Q;$D$@1퉄$fH5m1=t$@HL1wH5v1 LHH18ED$\$EDHL$PILy1LHH$D\$,D5$EH&GH[H ˨$HH$H|H[H$H5HH\1KH1H1H$H$H$HL$0UH5Hź1HH1bHL$0H=kE1H,eH5ƥH1HH1)=$D$ DHt$@H= E1dH=D1LHdH5jsHź1SHHH1$$H|$ 1HHoH=DfdHH5qD_$EHD$ H59q1HX H1H14H@H|$`H|$PH4(H蓕H5٤11 Dl$@HL1D D$ } H=$1)p W0A1W0E11@f.USH $tOt H[]fH8HkDt7H=H$E11ҹHt$f1H[]DH#Du$H[]@H=$E1HHL$H5o1H $(H $H1H1HL)FWfMD$ I9I9sIwFDL{(MŸ 1Ld$(D$H<$$H $E1H4HrHAPHѨfDD8HXH9EuEhLHHD$M$H5/$LT$HLNXHPMf.FPt?HNHD@LHQJ<@HH HHpHHH9HuIIMM9LIXLM}HL$$I9D$HL$r#H9HH)΍FvH$IEH9HD$(jL9HL)FTjH|$H WL$L{H51LH15H5;1H1H!HJmML|$L\$(LHEE1H\$(HD$D$DHl$D,$D$$@MIGDT$$I/ARM,,L@P$tlthM9s]I9LD$8DT$0tiHD$(H5Bn1L\$HHHHL$@L\$HHL$@HH1LL)蛽LD$8DT$0HDHt$LHD$LMI;$5H5.$ H|$DH5)m1HL$@L\$8DT$0>DT$0HH1DL\$8HL$@uf.LLD$$LD$HL{(H@ MH5Ql1H136fH[H5}j1HH1\1DHD$(H5l1LD$@DT$8L\$HHHHL$0PL\$HHL$0HH1LL)DT$8LD$@d@HL)FsfHD$L{HHH5k1H $H $HL1H萻H5Y1H$H[H $AWAVAUATUSH.HdH%(H$1H_H|$HH5qIHMHD$PDŽ$tH=+L$HD$H@(HHD$HHD$H|$PH@HD$0HL$HIHXIL9H|$0=$H9wLkM9BH$fHD$H5j1HhcH1H$1H$dH3%(Hĸ[]A\A]A^A_fL9ȃBfH51HH1P1@LsM9LLkA$M9M9LL)FL$IHL9M9vLL)FDH+\$0H;cD X$EL<$A11D$,1E1Is0VA9DBtzEtuE1uH|$,AHD9vJH.DLTL9=AHD)HHDLLDHHPH9HI9uA@HXA9hT$,DD$1HXHL$XHT$LHH)1H)H)谄1H ͂H5R[H=W>uD$8D$@D$@f.AWAVIAUATUSHHLLg(H|$P dH%(H$x1H޿MI^H5HQ1HH1{M9 L|$8LMLcHH+l$8M92LH)ލF HO$HD$ HL9 M9p H5i>1IHH1H5n>1jt$H1H5u>1IH1D$D$XHD$HD$@ .M9DH5>1H1#}1H$xdH3 %(cHĈ[]A\A]A^A_fDL$AăAL$X D$H5;=1_HH1H5C=1?t$H1H5J=1Dt$H1D|T$XHD$tRDHL9t$FgH[$HD$H5=1HHt$H1E LkM93L9LH)ލFLd$pH$H‰D$01LHH5<1Im7H1HD$hL9D$ Ld$@HD$HM9 LL)F Lq$HL$@ÉHHt$H1HH(LM|$hHIƺLl=MH56<1H1D$ D$ ;D$0hImL9fwfLd$pH߾ՙ$H‰D$01LH GLd$@MHD$hL5?tI\$HD$L9LL)FLm${ 2IcLDT$N$M9n1L9H5=1HH1nfDHt$1HLVL|$hDT$HHN$M91I9D)DHt$1HLL|$hDT$HHN$M921I9@D)!DDT$N$M9f1L9wD)UHt$1HLK|$hDT$HHN$M91I9D)yDHt$1HLVK|$hDT$HHN$M9 1I9D)DH53]1IH1M9I\$L9Ls$ fHl$1HLHJDT$h1LHD$(LHJDT$hHD$ D$XN$oH591tH1wH591WT$ t$(H10Ht$1HLJ|$hLHHH)HH59LdD1HHlj1ZDHt$1HLI|$hLHHH)HLdH5e9HL$@HZL$MKHt$1LLaIHH5[1IRH11t$F$H4HH539fDt$Fgz$HJ4HH5+9fDt$F(B$HúH5S9fDt$F$HúH5c9vfDt$FHߔ$HźH58t$FH$H|H- \$\$ HH5\$HD$H9H|LlHMEL9ALD$0LF$H9LD$0!HH; [$'I@H9L9HL)ƍF~@ vk@L9qD)MDLL)FH541 HH1nH541t$H1MH541ʿH1+ ξfD)ZfDI9H9D$|$hH5{XHD$ I19H1蝿LD$ LDl$l$D|$HI@HD$ KIHD$(HHHD$0qD1I9vD$H)؃wAw)Z$Hcj jE1jjLjAU1Uj1MrIHD$pH@HH9D$ t ,讽H;\$(HtH_L9s@ 膽QH5EW1RH1趾KD5LD|$\IHD$(IFHD$I9D$\D)AwD)$IK.H9D$DH-H-H=EHH12ApDHZL;t$(LTLwM9gO.L;T$1:-HeH=DHE11追L-H52Hú11HH1dq1<DHD$@10@HD$PH51HX빐T$HLLD$0a$HcT$HLD$0ITHLjHzL9w#H90HH)Fv$IA}Ll$0eHLL)BMlA}uA}MMHLd$HLl$lIL ItjHHIH)H\1LHHBD$l1HHHBD$l1HHHBD$lHÀ;uLd$H3DLd$HII9HLLL$HL)Ll$loLL$H1HLI|HBHHLL$Ht^HD$08HvALl$0LL$HDHLHL)MlA}HuLL$HLl$0H]HwHD$0HH5W11LL$HƺLL$HHL$0HNjT$ t$(I1H)ƍF1fI L9weL9HL)ƍFvSM 1@IMH5y21%H1Yn11L$M QLl$0H5T$M RH-A1)H@MIHD$@1111Y1(1HD$蒹fAWAVAUATIUSIHxH$HL$LD$ LL$(HD$XdH%(HD$h1HGH9HD$@H9sHH)FHl$@Lt$dE11HLL?HD$PD$dHI9H|$PH5>11蟸Ht$XHHL)1H5Q1wH1ݸD$ Hl$0EOD$ H\$@1Af1HLL ?T$dHHD8HoH `fHcHu$"Hl$@E1Lt$d@AD81HLL>D$d1LHH>D$dHI9uH5/1耷Ht$XH1AqHL$hdH3 %(HHx[]A\A]A^A_H5P15H1蛷1HLL>D$dHD8|$ D$ H5gPfH5LPfH56PH5)PkH=1H H5@/1HD$wHt$H1ض8Hl$0H5_$ ڶHl$HHD$8D|$ t$8H=O1莶D$0|$ Hl$HD|$0Hl$HH\$@AAD|$E1fD1LHLM1H1dL;t$x'@D$$)H=$DDD$Dz$1LHHHՈe$1H48H=H55$H=L1HD$H5{.1IDHL$HALD1蜲DD%$H=K$1I$AHcD%Ą$CH5KLIź1ݱDHL1=L9t$xLH+t$H=L1I^E&$A8A i!H5_JcHfH$dH3%(5,Hĸ[]A\A]A^A_fH5M1IH1耱L9t$xCDH5Z$ M9?$Lt$tH$H5/1HX蹰H1HD$lH5LcIM9#H$IH5$H=1'$LH5$H=_L1HxH5.Iĺ1HHL1r0D$x"$D$H5$H=KI1HLLH5n$H=L1IH5-Iĺ1LHL1߯f.H5K1IJH1谯$d-$H=HIޅA1AE[H5NKIź1LH1XD%$@Lt$tLH1L5Dt$tH=1HIH5J1IH葮HH1D%M$Lt$tLH1LK5Dt$tH=G1HIH5S,1IH)HH1茮D%݀$CLt$tLHߺL4Dt$tH=}G1HIދ$É$!H5II1軭HL1Lt$t1HLL{4Dt$t$IH=4$IހB =$1$LHHHӈ$1H48H=H5$xH=K1LIdH5+I1HLL1\H5HLt$tL1HD$L3L$tHHمI9LH)H9p)H5F1LaHL$ D$Y@H1軬@HL$ !HZ@HcHLt$tL1HL2Dt$tH=)1HEH5H1IHܫHH1?H$H5*1HX诫H1HM99HD$lHD$HDH$H|$H H@HH=EHfov$Hv$L|$x)$fov$H$)$HE1L$H}$H}$}$}$fD}$}$HD$8}$HD$(D$ HD$0HD$@I9L-D}$L|$L|$03)D$Iu$$A }$H1IHLj|$HIE$ |$M|$D`D;d$ <KdM4LH#H }$HHHT$`HT$LHI|$$IMI|$DK|$H=FL1ΩL]IHL$xL9A$In8  H=YHcHH\$IL9.1H9vH)SHރw HX|$HL$xIE{$L9{L|$0L|$HD$0HtH褧HD$(HtH蒧H5R$ M9U $Iu$$H!{$IH1HHLjz$HIEfz$IfDH\$tHL$1HH.Dt$tz$ItfDH\$tHL$1HH.Dt$tIĉ[z$XIM|$ ;\$ .H[INjhH|$(H|$8H\$8H9H=V1HrH5S&H1 HډH1`H5&'1H1Nf5y$1Iy$kDH\$tHL$HH-Dt$tWy$I9HL$H\$t1HHY-Dt$t$IuI!y$H1H$Hy$HIEf.H\$t1HH,IL$tIHD ALAAH=VAHcHH\$tHL$1HH,Dt$tH5BH1~HH1IޥAADLH9D$wL9D$,Dd$E)AD$DLx$IEw$IH5g!1H1^Lct$tI@HHHT$HT$LHI (H5 %1蝤DH1`^H5u1}IDH=A1LϤ lHHIE$HD$љHT$HIItݺ$WUw$j$IMv$Dv$H=zAL18eH<$H$LD$xLL$HHD$@"$$HE1H4v$$Hv$v$v$fDv$ v$HD$@v$LtM9mf$ A>HD$8HD$(MnM9v A~SID$ HD$0H5'"1賢H1fo$H$HL$x),n$fo$HH=dH5q$#H=1LHH5I1詞HHLD1eH511}H1HD$@HDdEH\$tLt$KLH1HA%H=1HkHH=:H1sD$tHAuHL$H1H$H=b1H#H]H=:H1+D$tH@H5IG$ I,MH5Y1}H1CWƄ$fDL1f; LHHH)5H\I9wH51H1VD$lDHt$` H\$@I9H\$  LL)FLKp$%HLd$ Hl$tE11LLHI|#D$t1LILh#D$tII9uLl$1LHLG#DT$tHD$8O4M9H\$8H<ޑHHD$(oHD$H|$4H\$ E1IujiLI9wM9DD)AL\$L4o$L\$HL\$HL$(H|$L\$H$j jE1t$j1j$1MLIPQLjNH@IL9d$tq1HLH!"IŋD$t1LHH "IËD$tHM9wI$vIHD$(H|$L4YfM9THD$HD$H9D$8IFI9HD$P Ln$%HyLd$PE11LLHIT!D$t1LIL@!D$tIL9uLl$1LHL!DT$tD$ O4M9ÿL$[ILHHD$0HXJD Hl$H\$HD$X@H|$OH\$PE1MuHuI II$j jE1t$j1j$1MLIPQLjLH@IL;d$Lt$1HLL% HŋD$t1LHH IƋD$tHM9HII$tdI]LI9wM9DD)AL9l$H HL$HA$@HD$LhfIM9dHD$HD$H9D$XfDHD$0hhH(HH5651+HHH1苘PfDIEI9vWLk$HL$$YfDL11LHL$1DIEI9vM9HD$$H5M41}H1CQH5041`H1&QIFI9HD$PLd$PHD$H541MH1PH531H1PHD$0hH|$8H;D$8H\$(EHD j$HD$0EH(eH軖HKSH=3H1H51L\$L$0\L$0HǺ1JIFL\$I9vM9Y1|LL)F bfH5I1L$hL$hHǺ1JIEI9D1H5y1蝕H1cOƄ$fD$H5y1eH1ɕ@Ht$` I]$IH5/1&HLIPLt$HLd$LLMH5.Hź1LLMILHH$oA]IXj@fDH51袔HH+t$H1I9vS}tME1Hp.f}t2MAHI)DHD1轔HLBHlI9wIGH9E}H]H51 HH+t$H1hH5-1H1KI9t}jH\$Ll$tL%H-fDD;H\$6nf$H=Y.MI)ލp15Vf$HLfH\L1LHA1HLHH1觓D$tL1LHH1HLcHH1vD$tL1LHH1HL2HH1ED$tHT$H=,DH1(I9H5x1蜒H1bL/DM1Hl$t @A<$tkLLL)`Md1HLL;D$t1LIL'D$t1LILD$tIM9wH5/؉\$ H<@H裇A~HD$0tpH@LL+LL)H˒Ml1HLLCD$t1LILCD$t1LILxCD$tIA}uH|$(Mt$HD$0H5P.1HKH1H讑sf$HHIEHIHIEDH5.1H1I@H5) 1I躐H1JaH<Hl$8FHD$(A>Ht)LLuLL)HjMtA>uIhzfDH561-HjDH51 AH1oHD$HFd ELt$t<H=Q1HAHH=m,H1D$tH1ALLHuyH=1HHH=',H1ЏD$tHH58$ IՏsH51-T$ DH1HH5Ht$8H=)1HH5)Hú1HHlj1HH5`1HM9kLL)FTDd$ LLD$IAD$H4@D$H蚄IDLD$H@4a$M$LM$dLD$HL$xH1MDLLD$AD$D$t1LD$HL$xILLD$AD$ |$t1LD$HL$xLDL$AD$DL$ $HE1Hm`$Hn`$Ii`$g`$fDc`$]`$K`$( E1I9LH)ލFDH\$(UH=*H4H1蛍$1LI4H $Ht$CHʼnCHHH9t,H513uH5HH%1Z)Dt$x-H$L$C]L${H1H=H1HuL$KH $Ht$HʼnCHHH9t,H5l1tH5HH1(|$xH $1H$Ht$H$KDt$x-G$L$HCPC]L$P{H1HD$H!HT$HH=H1{tL$~DkG$E8Ht$PHHFPH.HHCPFHCHFXCXF]C]FpD$H0>Lt$PH{AVIvHuAVIv H{ H uI~rI~ xrLprHl$PL$1H $Ht$1,HʼnH9HD$Ht,H51sH5HHd1A'|$xH $1H$Ht$H$ID$xL`H$9kLFT$ IH$MM9u L9H=L11rL$H $Ht$1ZDt$xHL$M9L$cLL)H9TD E$EuMH=41rH5nE$It$HH$E1ɹ1H=~lqL$_AXIC]1L$KH $Ht$1Dt$x-$E$L$HCPL$H=p1qL$H $Ht$1WHʼnH9HD$Ht,H51EqH5HHJ1l%|$xH $1H$Ht$H$ID$xLH$9kLFT$ N4H$M9L9u L94H51LD$HpLD$HLH1 q5-D$`-fHHCPHEPCHEHCXEXC]E]CH<Ef}HEHeUH}HsHE HqUH} Hs HqHD$PL$Hl$PHE1xHt$H $1Hcs4Dt$xL$-EC$HL$HsPH=1pL$H $Ht$1~HʼnH9HD$Ht,H5@1loH5HH麚1#|$xH $1H$Ht$H$Dt$xIL$9kL$D{B$EtHD$ 8Lcs41LL$`MH=H1LLt$ L2oA>LL$`SL$\fDH $Ht$}HʼnCHHH9t,H5A1mnH5HH麜1"|$xH $1H$Ht$H$ HcS4Dt$xL$-A$C]HЅL$HSP{H1HT$HHT$HH=H1HnL$KH $Ht$1HʼnH9HD$`t,H5m1mH5HH1!|$xH $1H$Ht$H$LDt$xHD$HL$9kL$ @$tHD$ 81Lt$ H= H1Lom|$H1HllA>DHD$@s\H$MHH HPHŋ"@$HT$Ht$(HHk8L$1H $Ht$1aHʼnH9HD$Ht,H5#1OlH5HH麊1v |$xH $1H$Ht$H$Dt$xIL$9kL$a_?$tHD$ 8YLcs41LL$`MþH=H1LLt$ LlA>LL$`8L$ D9C>$t HD$ 8t7D1DD$H[Lt$ H=g H1LkA>DD$HH$@D9B5>$HJ At fHR Hs1L$f F HS \H $Ht$1AHI9t6H51LD$HjH5.HH1LD$HDt$x=$L$9kL$ tHD$ 8 1LD$HGLt$ H= H1LjA>LD$H9f.H $Ht$1AHI9t,H51iH5gHH麪1 D$xH$9k(=$s tHD$ 8i 1蓼Ht$ H=H1iHD$ 87 f.IM9 1L9sLH)Fw<$H$Hŋ<$HH$+s0S^1HHs8Ms0H={H1HUiH$IL9 1H9sH)Hƍ@w<<$H$Hŋ<$HH$s0S^1HHs8ɾs0H=H1HhIM9 1L9sLH)Fw;$H$Hŋ;$HH$'s0S^1HHs8Is0H=H1HQhH $Ht$1AHI9t6H51LD$HgH5.HH1LD$HDt$x:$L$9kL$ tHD$ 8 1LD$HGLt$ H=H1LgA>LD$H f.H=iH1ogL$rAL$H# H5F1fL$HH1/gL$M1-DH51HL$(fHL$(H1HN L$fDt$VO|$4H$E1$I9v |$k IH$HDŽ$H90H4$H$H$L$L$H_H$H$HHD$8LsHHD$|9CXCCXC\t$0t$t-D$<t<D$t<E8$D$LH+t$H=?1es^Hxt$Ll 8$K4S0H= Hs(DCX1beH\$8HT$Ht$(H&H$H H9H9q H)CHރ_ '8$H$HH@ HM$L9$$H$D$7T$H1諺LH+T$H=H1H$L$$HD$XHH$t-H;XH H9Z5HHuHDŽ$HSH;$rH;$` H4$H)ލFM HT$H@7$HŸH9HT$ HA H$AII9H9ƉL$()֍FLT$H6$T$4LT$L$( >H90L;$HDŽ$MH51cH1"H$H9HZ.$\$H$L.$ 1\$0LHBH<-$OX=-$H-$H9XH-$H$-$H=-$HpHcH$-$H=-$Hp HcH$t$|H=l-$HP(H-$P^-$P^_5$P_-$P0d-$P4_-$PHj-$HPP@XHd-$f-$I H$L+t$DK-$@\<-$=ƒ{4$HHD$(HD$@ELHHH AH$AAHH9$TFRHL$`LL$4$HL$`LL$HD$H,$H$oT$4H$L<$L$ _H$dH3%( Hĸ[]A\A]A^A_H51`Hlj1H$HGH9$l\$&Ht$HH=M1`HT$|H$HiH=5_$H=&1c`Hs(H=1Q`$~$s^H=15`s_H= 1#`s0H=,1`s4H=81`sXH=D1_H$qH5 $ _i\$)C\$YfDH5y1HL$`LL$HDD$_t$H1H$*$LL$HHL$`HGH9$H9<$HD$HH$LH+t$H=1_L$H$L9A>IFHxH9IH$uHD$(E1HD$J8H $Ht$x1 HH$D$xH$H$HH;$H$hH_H$H51]H'IHC1fB<@HC BD0$E1HCHt$HDK4f,pHC 1D D0$EwHCHt$HADK41fDpHC D D0$EHCHt$` L$H1fpHC n\0$ HS@ſDK41f&$k4$)HD$(8HD$(H5 1ZHH1DH$HDŽ$HDŽ$H$XH=1ZH$t-H1H$H4(1HZH9$wH5$ H2%$}ZH5$ lZDD-$EtHD$ 8@HcK41IHL$`觬Hl$ HL$`H=6H1HY}f. ,$tHD$ 8HcK41IHL$`BHl$ HL$`H=iHH1Y}DD },$EtHD$ 8HcK41IHL$`Hl$ HL$`HH=<HH=W;X/H=^*XH=XL$ HD$HHSf BHS H)H$L#$1 Hҋ\$0LHyHpH@ 1B4vBL$f1H=1bXH$t/H-HE1H$HB401I2XL9$wH5Q$ 7X1H$HK H90H9sH4$H)֍FH$1H51WWH1Hl$PC1L$1)H5H=KH1Wz*$4A:*HCHt$Hf,pL$1SLcs41HD$`L轩H5GH=H1LWLL$`L$F1臩H5H=H1V|$H1dHUL$=Lcs41HD$`L9H5ÅH=H1LVLL$`L$1LD$HH5H=6H1VVLD$HL$#Lcs4D1LL$HM轨H5GH=H1LVLL$HL$5($2A:(HCHt$Hf pHL$H($HL$HHʹ1LD$H+H5H=}H1ULD$HL$NHT$X.HT$8$ΉL$(FwD$4w1LD$hLT$`跧LT$`H=H1LUH5'$E1t$HLD$x1H$H=SAZA[LT$`A:s\1LD$hLT$`=LT$`H=\H1LTH5r'$1t$HLD$xE1H$H=nSXZLT$`A:`H5H4$L$H$H$L$L+L$MvHD$XIYLLL$ID$|A9AXACAXܦLL$wH$\$0B\t#<t<t<Ep&$LQ$ 1LL$XLHIH!SH#O%$eHP%$HY#/%$eH0%$H9#%$~H%$H#$$`H$$HY#$$TH$$>wtPtbÁrH#o$$`Hp$$Hy#O$$eHP$$H#/$$eH0$$H#$$TH$$H##$~H#$@f.St:D=$$Et.H9$$;t%HH1DHH9YtzD9u1[fDы)CfH HcHDH@@@GWHHH H fDDGH H fGWH H(H ЋH GWH H(H ЋH WH0H SH5R1&CH1ZEBDS$wHH IHcHH5H-[fH1H[ÀH-[D4H[AAUATHUSIHHLoHH9$t,LHI${HEH[]A\A]@LI$HEH[]A\A]AWAVIAUATIUSIH6A}/tmI9thL)N4 HI~H9I9CHHHLHYCH|LLICBD5HH[]A\A]A^A_ÐLHt'BCHHtJLLH CBD%@1@H5I11SALH1@H51-AH1ck@f.AWAVEAUATIUSHHIHB1ҾHLcHCLHCHC HC(HC0HC8HC@kPCTHCHlBH5u2L{XL<L@H@LH1qH[]A\A]A^A_H=qLH=kLE!H=uLuH1 BHHHC8H5HHCHH}HDLH1?H{0=HC0H5n7H5*1n>H17L'@HC8@f.SHH?Ht?=H{Ht1=H{ Ht#=H{0Ht [=@[@f.USHHHH?Ht 7?tHH{Ht=H}H5΋H?HtHHH[]E11HH[]@USHH1HHI?u=HKH{X<1=HH1EH1[]@HH5HH5Df.AUATUSHH(dH%(HD$1X/tEDHHtn|X/uDXHCXHL$dH3 %(H([]A\A]H0tH8uJH517KPIąHs8I9HK0B! Lu t t HH9uHt|/HPHEH9HHFHSPtQH{@tJI9rH5Hs0H;L)HLHItHH,twL :HC0L@HD$H8:Hx 1)=HC@H5Q1:LH11+LHs@1HHHD$mL9HD$:@f.AWAVAUATIUSH5 HI1H6:H+IHH:LI=:SPLLxt?H{@uxL;HHHMHLH1z:6Lx;HHHkMHLH1B:HH[]A\A]A^A_I}LxHtC9IL#;HHtSMEMt=MHHLH19fDLX9IL:HHt MMDH5Z119H19R@HATUSH?HtjDHH|uyHcHc.H}IHtG1D /IHH|HuLHL[]A\fHE1fDHt;USHHH?HtHH77H;HuHH[]!7@f.AWAVAUATUSH8HZHL='E17Hx1E1E1v-HD$HD$ D$L$AG@tfHAG@uHD$HD$HT$t I491Md$LHct$H-IHD$I4HHL$ uffD1HHtMA@tD D  u<\E<'HHuH|$ Ht$(&-Ht$(HD$HHD$ID AO@HtDH AO@HuH|$ u5H8L[]A\A]A^A_&fDEt<"tWDH f<'tL<"txDEHE1E11fDDE1DDAf@f+D$IZfDDEAoE1"HAWAVIAUATI!USHL%v%HHHuKnDAT@u "<:wIsH\86tCHD(6t3HuH 6tIIHu1 fDH[]A\A]A^A_@fAWAVAUATIUS1HHD$@H<$D$ dH %(H$1HD$]9 IELcN<J: #z #H :HH2HjD] !j2 c cfHyT hHcHHHFf.! > ! | !H !HHHHFD6 . 2H4HHHHFÐP! I LH'XNH=BHH9HFf^ G H,HH}HHFÃqi tHFwHSHVvyH!D!  ) H8IE!HG0HI#!Hf? ?H?HH?HtÐ 1HHqHd YHDv V H)K HHHHF! !Hv1!HH0!HIÐV YH'w[H3aHH2HF<a ?H'AHHHHF?H v?HrHHHFÐmHoHHHHF Hc_ HJH= /H9H7Ha8HWf!H~!H!HÃ'H&h"H%uHf|H}VzH6@{5H5f6!H>4!H5!HÁH6HHÃH~HKuHCfFHVDH@E5Hf`H@7^H_HfSH'QHRHf!Hl!Ht~!utHHtZnHtHuAHD H7t' Ht uH1Á" Ht# uHÁ?HLtЁ?uHUÁH&tuH*ÃHtuHÃkH_xlmH_Á?HUT?FHRÃJH0K%HÃdHeHÁ H HÃ/H1HÁ H/ H0ÃrHstHà H^ SH}Á !H: !,HÁ!H{!HÁ#Hg#HbÁ H! H ÃWH/XH+Ã=HL>uHGÁ H\ NHÁ"Hx5#'HÁ!H !HÃ:H;H~ÃaHbHÃTHUHÁHvHÃGH`HUHÁ!H<!.HÃ*H, Hà H HÃHHÃ}H~HH6HxHHnHHHH0HHkHHHHCHH5H+HHHGH&HLHHHRHHDHHHHfDHHcHHaHHHHpHHɦHҡHHxHIHHHHHtHlHOH4HHHHHdH<HHH֠HHxHOH;H.H¤H̤H HmHNHHHHգHãHHyHeHQH=H*HHHHHHHHHmHXHCH.HHHHHHHHHqH\HHH4H H HHHHHHHHlHXHDH0HHHHHHHHH|HhHTH@H,HHHHHHHHH}HjHWHDH1HH HHHHHHH~HjHVHBH.HHHHHHHHHzHfHSH@H-HHHHHHHHHHHHHzHiHSH@H-HH HH؞HǞHHHHHkHYHGH5H HHHHНHHHqH\HFH0HHHHHHH1@f.DHHcHfHHHnHEHHHHHHbH5H HHHHjHHH+HHHHHHhHBHHHHHHoHRH-HH1f.HHcHfHhH/HH7HrHHHHHcH:HHHHH|HTH5HHҬHHHHHcH?HHHHHH1f.t{v9 Ht vP Ht?Hu+H=tHEwHt1@HFuf.H#HHHt:t7Hu=fD\ttH/uHuWHHuDf.HtfDH/HDDŽu@fDf.@H#SHtЉ H= #H=q#tDH1 H#HÐUSH1HH-#HtI H)IH'#H1:H=Y#H {GH5I؀:HD1 P H#H)Iff.HSHHDH Ht[HYfUSHHt%HHHtHHO HtH[]HHHSHHDHtH Ht[@HP HfDUSHH HXH&HHH[]H fAUATHUSIAHH_8H{HHu'K8HxPP@HHCHHtTS?A}V111L\$(*Ht$L\$(IE HF`AE??D$$fELt$E1DAu?t6HL ulAEH[]A\A]f=>?u)111~LHqI9E t@ff.AER?덐Ht3H@t,HHt%uHW8BtHr0FHfDfUSHdH%(HD$1HdH@IVHHKSA;D_LO8EAyS?AqXIAPAAS?AqXHIAPL\$I{LHHHH9uIAPAAX11ɻ,DE7)ƒƒI9s1t-HEA8uɃIƒ9rfDAEXI8E 1ҽ"@)ƃD9s+t'у4@8u̓D9r@ALMXAA)PI8MXIX(LMXIX(AA??H\$dH3%(DH[]fAyXNAD1@14AI8E E11D$AGHt$HHD$Aw"C3AHHHDAHHHHD$H!'@@@LDH!HI 1AIHA)@΅uHH;\$sH;|$rDDI|$H)øI$H!HD$H9H)؃AD$HD$H9D$)AD$ HUPMX[]A\A]A^A_f.t:DE9vD3DHAILAE)AD!ȉHAHL$H!!DA@EADH!HILD qIHA)AAtAEE9v!D;DIAHLA9hHADAE)AAA!HHH+L$AA9D)9t$sDEXt$rDt$A9t$)D)Ht$9#)ȃHLH9u9D$Ht$Ht$+D$H 7Ht$H9uDHH)H@ tsE??D$)؃AD$HD$H9H)sD AHHHDAILHQHID$0EQ?pHID$0EQ?PHHONONOw܅FHGt$)Ht$9v)ȃHLDH9uDHIH) HI1H@wq@wHqDNDOw҅qqI~Av\AI~AFKD{AHILt$)Ht$9)ȃHLH9uHID$0EQ? Hf.AWAVIAUATL%^6#UH-^6#SAIL)HHvQ#Ht1LLDAHH9uH[]A\A]A^A_Ðf.HHR_AARCH64_NONER_AARCH64_P32_ABS32R_AARCH64_P32_ABS16R_AARCH64_P32_PREL32R_AARCH64_P32_PREL16R_AARCH64_P32_MOVW_UABS_G0R_AARCH64_P32_MOVW_UABS_G0_NCR_AARCH64_P32_MOVW_UABS_G1R_AARCH64_P32_MOVW_SABS_G0R_AARCH64_P32_LD_PREL_LO19R_AARCH64_P32_ADR_PREL_LO21R_AARCH64_P32_ADD_ABS_LO12_NCR_AARCH64_P32_TSTBR14R_AARCH64_P32_CONDBR19R_AARCH64_P32_JUMP26R_AARCH64_P32_CALL26R_AARCH64_P32_GOT_LD_PREL19R_AARCH64_P32_ADR_GOT_PAGER_AARCH64_P32_TLSDESC_CALLR_AARCH64_P32_COPYR_AARCH64_P32_GLOB_DATR_AARCH64_P32_JUMP_SLOTR_AARCH64_P32_RELATIVER_AARCH64_P32_TLS_DTPMODR_AARCH64_P32_TLS_DTPRELR_AARCH64_P32_TLS_TPRELR_AARCH64_P32_TLSDESCR_AARCH64_P32_IRELATIVER_AARCH64_NULLR_AARCH64_ABS64R_AARCH64_ABS32R_AARCH64_ABS16R_AARCH64_PREL64R_AARCH64_PREL32R_AARCH64_PREL16R_AARCH64_MOVW_UABS_G0R_AARCH64_MOVW_UABS_G0_NCR_AARCH64_MOVW_UABS_G1R_AARCH64_MOVW_UABS_G1_NCR_AARCH64_MOVW_UABS_G2R_AARCH64_MOVW_UABS_G2_NCR_AARCH64_MOVW_UABS_G3R_AARCH64_MOVW_SABS_G0R_AARCH64_MOVW_SABS_G1R_AARCH64_MOVW_SABS_G2R_AARCH64_LD_PREL_LO19R_AARCH64_ADR_PREL_LO21R_AARCH64_ADR_PREL_PG_HI21R_AARCH64_ADR_PREL_PG_HI21_NCR_AARCH64_ADD_ABS_LO12_NCR_AARCH64_LDST8_ABS_LO12_NCR_AARCH64_TSTBR14R_AARCH64_CONDBR19R_AARCH64_JUMP26R_AARCH64_CALL26R_AARCH64_LDST16_ABS_LO12_NCR_AARCH64_LDST32_ABS_LO12_NCR_AARCH64_LDST64_ABS_LO12_NCR_AARCH64_MOVW_PREL_G0R_AARCH64_MOVW_PREL_G0_NCR_AARCH64_MOVW_PREL_G1R_AARCH64_MOVW_PREL_G1_NCR_AARCH64_MOVW_PREL_G2R_AARCH64_MOVW_PREL_G2_NCR_AARCH64_MOVW_PREL_G3R_AARCH64_LDST128_ABS_LO12_NCR_AARCH64_MOVW_GOTOFF_G0R_AARCH64_MOVW_GOTOFF_G0_NCR_AARCH64_MOVW_GOTOFF_G1R_AARCH64_MOVW_GOTOFF_G1_NCR_AARCH64_MOVW_GOTOFF_G2R_AARCH64_MOVW_GOTOFF_G2_NCR_AARCH64_MOVW_GOTOFF_G3R_AARCH64_GOTREL64R_AARCH64_GOTREL32R_AARCH64_GOT_LD_PREL19R_AARCH64_LD64_GOTOFF_LO15R_AARCH64_ADR_GOT_PAGER_AARCH64_LD64_GOT_LO12_NCR_AARCH64_LD64_GOTPAGE_LO15R_AARCH64_TLSGD_ADR_PREL21R_AARCH64_TLSGD_ADR_PAGE21R_AARCH64_TLSGD_ADD_LO12_NCR_AARCH64_TLSGD_MOVW_G1R_AARCH64_TLSGD_MOVW_G0_NCR_AARCH64_TLSLD_ADR_PREL21R_AARCH64_TLSLD_ADR_PAGE21R_AARCH64_TLSLD_ADD_LO12_NCR_AARCH64_TLSLD_MOVW_G1R_AARCH64_TLSLD_MOVW_G0_NCR_AARCH64_TLSLD_LD_PREL19R_AARCH64_TLSLE_MOVW_TPREL_G2R_AARCH64_TLSLE_MOVW_TPREL_G1R_AARCH64_TLSLE_MOVW_TPREL_G0R_AARCH64_TLSDESC_LD_PREL19R_AARCH64_TLSDESC_ADR_PREL21R_AARCH64_TLSDESC_ADR_PAGE21R_AARCH64_TLSDESC_LD64_LO12R_AARCH64_TLSDESC_ADD_LO12R_AARCH64_TLSDESC_OFF_G1R_AARCH64_TLSDESC_OFF_G0_NCR_AARCH64_TLSDESC_LDRR_AARCH64_TLSDESC_ADDR_AARCH64_TLSDESC_CALLR_AARCH64_COPYR_AARCH64_GLOB_DATR_AARCH64_JUMP_SLOTR_AARCH64_RELATIVER_AARCH64_TLS_DTPMOD64R_AARCH64_TLS_DTPREL64R_AARCH64_TLS_TPREL64R_AARCH64_TLSDESCR_AARCH64_IRELATIVER_ARC_NONER_ARC_8R_ARC_16R_ARC_24R_ARC_32R_ARC_N8R_ARC_N16R_ARC_N24R_ARC_N32R_ARC_SDAR_ARC_SECTOFFR_ARC_S21H_PCRELR_ARC_S21W_PCRELR_ARC_S25H_PCRELR_ARC_S25W_PCRELR_ARC_SDA32R_ARC_SDA_LDSTR_ARC_SDA_LDST1R_ARC_SDA_LDST2R_ARC_SDA16_LDR_ARC_SDA16_LD1R_ARC_SDA16_LD2R_ARC_S13_PCRELR_ARC_WR_ARC_32_MER_ARC_32_ME_SR_ARC_N32_MER_ARC_SECTOFF_MER_ARC_SDA32_MER_ARC_W_MER_AC_SECTOFF_U8R_AC_SECTOFF_U8_1R_AC_SECTOFF_U8_2R_AC_SECTOFF_S9R_AC_SECTOFF_S9_1R_AC_SECTOFF_S9_2R_ARC_SECTOFF_ME_1R_ARC_SECTOFF_ME_2R_ARC_SECTOFF_1R_ARC_SECTOFF_2R_ARC_SDA_12R_ARC_SDA16_ST2R_ARC_32_PCRELR_ARC_PC32R_ARC_GOT32R_ARC_GOTPC32R_ARC_PLT32R_ARC_COPYR_ARC_GLOB_DATR_ARC_JMP_SLOTR_ARC_RELATIVER_ARC_GOTOFFR_ARC_GOTPCR_ARC_S21W_PCREL_PLTR_ARC_S25H_PCREL_PLTR_ARC_TLS_DTPMODR_ARC_TLS_TPOFFR_ARC_TLS_GD_GOTR_ARC_TLS_GD_LDR_ARC_TLS_GD_CALLR_ARC_TLS_IE_GOTR_ARC_TLS_DTPOFFR_ARC_TLS_DTPOFF_S9R_ARC_TLS_LE_S9R_ARC_TLS_LE_32R_ARC_S25W_PCREL_PLTR_ARC_S21H_PCREL_PLTR_ARC_NPS_CMEM16R_ARM_NONER_ARM_PC24R_ARM_ABS32R_ARM_REL32R_ARM_LDR_PC_G0R_ARM_ABS16R_ARM_ABS12R_ARM_THM_ABS5R_ARM_ABS8R_ARM_SBREL32R_ARM_THM_CALLR_ARM_THM_PC8R_ARM_BREL_ADJR_ARM_TLS_DESCR_ARM_THM_SWI8R_ARM_XPC25R_ARM_THM_XPC22R_ARM_TLS_DTPMOD32R_ARM_TLS_DTPOFF32R_ARM_TLS_TPOFF32R_ARM_COPYR_ARM_GLOB_DATR_ARM_JUMP_SLOTR_ARM_RELATIVER_ARM_GOTOFF32R_ARM_BASE_PRELR_ARM_GOT_BRELR_ARM_PLT32R_ARM_CALLR_ARM_JUMP24R_ARM_THM_JUMP24R_ARM_BASE_ABSR_ARM_ALU_PCREL7_0R_ARM_ALU_PCREL15_8R_ARM_ALU_PCREL23_15R_ARM_LDR_SBREL_11_0R_ARM_ALU_SBREL_19_12R_ARM_ALU_SBREL_27_20R_ARM_TARGET1R_ARM_SBREL31R_ARM_V4BXR_ARM_TARGET2R_ARM_PREL31R_ARM_MOVW_ABS_NCR_ARM_MOVT_ABSR_ARM_MOVW_PREL_NCR_ARM_MOVT_PRELR_ARM_THM_MOVW_ABS_NCR_ARM_THM_MOVT_ABSR_ARM_THM_MOVW_PREL_NCR_ARM_THM_MOVT_PRELR_ARM_THM_JUMP19R_ARM_THM_JUMP6R_ARM_THM_ALU_PREL_11_0R_ARM_THM_PC12R_ARM_ABS32_NOIR_ARM_REL32_NOIR_ARM_ALU_PC_G0_NCR_ARM_ALU_PC_G0R_ARM_ALU_PC_G1_NCR_ARM_ALU_PC_G1R_ARM_ALU_PC_G2R_ARM_LDR_PC_G1R_ARM_LDR_PC_G2R_ARM_LDRS_PC_G0R_ARM_LDRS_PC_G1R_ARM_LDRS_PC_G2R_ARM_LDC_PC_G0R_ARM_LDC_PC_G1R_ARM_LDC_PC_G2R_ARM_ALU_SB_G0_NCR_ARM_ALU_SB_G0R_ARM_ALU_SB_G1_NCR_ARM_ALU_SB_G1R_ARM_ALU_SB_G2R_ARM_LDR_SB_G0R_ARM_LDR_SB_G1R_ARM_LDR_SB_G2R_ARM_LDRS_SB_G0R_ARM_LDRS_SB_G1R_ARM_LDRS_SB_G2R_ARM_LDC_SB_G0R_ARM_LDC_SB_G1R_ARM_LDC_SB_G2R_ARM_MOVW_BREL_NCR_ARM_MOVT_BRELR_ARM_MOVW_BRELR_ARM_THM_MOVW_BREL_NCR_ARM_THM_MOVT_BRELR_ARM_THM_MOVW_BRELR_ARM_TLS_GOTDESCR_ARM_TLS_CALLR_ARM_TLS_DESCSEQR_ARM_THM_TLS_CALLR_ARM_PLT32_ABSR_ARM_GOT_ABSR_ARM_GOT_PRELR_ARM_GOT_BREL12R_ARM_GOTOFF12R_ARM_GOTRELAXR_ARM_GNU_VTENTRYR_ARM_GNU_VTINHERITR_ARM_THM_JUMP11R_ARM_THM_JUMP8R_ARM_TLS_GD32R_ARM_TLS_LDM32R_ARM_TLS_LDO32R_ARM_TLS_IE32R_ARM_TLS_LE32R_ARM_TLS_LDO12R_ARM_TLS_LE12R_ARM_TLS_IE12GPR_ARM_ME_TOOR_ARM_THM_TLS_DESCSEQR_ARM_THM_ALU_ABS_G0_NCR_ARM_THM_ALU_ABS_G1_NCR_ARM_THM_ALU_ABS_G2_NCR_ARM_THM_ALU_ABS_G3_NCR_ARM_IRELATIVER_ARM_RXPC25R_ARM_RSBREL32R_ARM_THM_RPC22R_ARM_RREL32R_ARM_RABS32R_ARM_RPC24R_ARM_RBASER_BFIN_UNUSED0R_BFIN_PCREL5M2R_BFIN_UNUSED1R_BFIN_PCREL10R_BFIN_PCREL12_JUMPR_BFIN_RIMM16R_BFIN_LUIMM16R_BFIN_HUIMM16R_BFIN_PCREL12_JUMP_SR_BFIN_PCREL24_JUMP_XR_BFIN_PCREL24R_BFIN_UNUSEDBR_BFIN_UNUSEDCR_BFIN_PCREL24_JUMP_LR_BFIN_PCREL24_CALL_XR_BFIN_VAR_EQ_SYMBR_BFIN_BYTE_DATAR_BFIN_BYTE2_DATAR_BFIN_BYTE4_DATAR_BFIN_PCREL11R_BFIN_GOT17M4R_BFIN_GOTHIR_BFIN_GOTLOR_BFIN_FUNCDESCR_BFIN_FUNCDESC_GOT17M4R_BFIN_FUNCDESC_GOTHIR_BFIN_FUNCDESC_GOTLOR_BFIN_FUNCDESC_VALUER_BFIN_FUNCDESC_GOTOFF17M4R_BFIN_FUNCDESC_GOTOFFHIR_BFIN_FUNCDESC_GOTOFFLOR_BFIN_GOTOFF17M4R_BFIN_GOTOFFHIR_BFIN_GOTOFFLOR_BFIN_PUSHR_BFIN_CONSTR_BFIN_ADDR_BFIN_SUBR_BFIN_MULTR_BFIN_DIVR_BFIN_MODR_BFIN_LSHIFTR_BFIN_RSHIFTR_BFIN_ANDR_BFIN_ORR_BFIN_XORR_BFIN_LANDR_BFIN_LORR_BFIN_LENR_BFIN_NEGR_BFIN_COMPR_BFIN_PAGER_BFIN_HWPAGER_BFIN_ADDRR_BFIN_PLTPCR_BFIN_GOTR_BFIN_GNU_VTINHERITR_BFIN_GNU_VTENTRYR_H8_NONER_H8_DIR32R_H8_DIR32_28R_H8_DIR32_24R_H8_DIR32_16R_H8_DIR32UR_H8_DIR32U_28R_H8_DIR32U_24R_H8_DIR32U_20R_H8_DIR32U_16R_H8_DIR24R_H8_DIR24_20R_H8_DIR24_16R_H8_DIR24UR_H8_DIR24U_20R_H8_DIR24U_16R_H8_DIR16R_H8_DIR16UR_H8_DIR16S_32R_H8_DIR16S_28R_H8_DIR16S_24R_H8_DIR16S_20R_H8_DIR16SR_H8_DIR8R_H8_DIR8UR_H8_DIR8Z_32R_H8_DIR8Z_28R_H8_DIR8Z_24R_H8_DIR8Z_20R_H8_DIR8Z_16R_H8_PCREL16R_H8_PCREL8R_H8_BPOSR_H8_DIR16A8R_H8_DIR16R8R_H8_DIR24A8R_H8_DIR24R8R_H8_DIR32A16R_H8_DISP32A16R_H8_ABS32R_H8_ABS32A16R_H8_SYMR_H8_OPnegR_H8_OPaddR_H8_OPsubR_H8_OPmulR_H8_OPdivR_H8_OPshlaR_H8_OPshraR_H8_OPsctsizeR_H8_OPhwordR_H8_OPlwordR_H8_OPhighR_H8_OPlowR_H8_OPscttopR_PARISC_NONER_PARISC_DIR32R_PARISC_DIR21LR_PARISC_DIR17RR_PARISC_DIR17FR_PARISC_DIR14RR_PARISC_DIR14FR_PARISC_PCREL12FR_PARISC_PCREL32R_PARISC_PCREL21LR_PARISC_PCREL17RR_PARISC_PCREL17FR_PARISC_PCREL17CR_PARISC_PCREL14RR_PARISC_PCREL14FR_PARISC_DPREL21LR_PARISC_DPREL14WRR_PARISC_DPREL14DRR_PARISC_DPREL14RR_PARISC_DPREL14FR_PARISC_DLTREL21LR_PARISC_DLTREL14RR_PARISC_DLTREL14FR_PARISC_DLTIND21LR_PARISC_DLTIND14RR_PARISC_DLTIND14FR_PARISC_SETBASER_PARISC_SECREL32R_PARISC_BASEREL21LR_PARISC_BASEREL17RR_PARISC_BASEREL17FR_PARISC_BASEREL14RR_PARISC_BASEREL14FR_PARISC_SEGBASER_PARISC_SEGREL32R_PARISC_PLTOFF21LR_PARISC_PLTOFF14RR_PARISC_PLTOFF14FR_PARISC_LTOFF_FPTR32R_PARISC_LTOFF_FPTR21LR_PARISC_LTOFF_FPTR14RR_PARISC_FPTR64R_PARISC_PLABEL32R_PARISC_PLABEL21LR_PARISC_PLABEL14RR_PARISC_PCREL64R_PARISC_PCREL22CR_PARISC_PCREL22FR_PARISC_PCREL14WRR_PARISC_PCREL14DRR_PARISC_PCREL16FR_PARISC_PCREL16WFR_PARISC_PCREL16DFR_PARISC_DIR64R_PARISC_DIR14WRR_PARISC_DIR14DRR_PARISC_DIR16FR_PARISC_DIR16WFR_PARISC_DIR16DFR_PARISC_GPREL64R_PARISC_DLTREL14WRR_PARISC_DLTREL14DRR_PARISC_GPREL16FR_PARISC_GPREL16WFR_PARISC_GPREL16DFR_PARISC_LTOFF64R_PARISC_DLTIND14WRR_PARISC_DLTIND14DRR_PARISC_LTOFF16FR_PARISC_LTOFF16WFR_PARISC_LTOFF16DFR_PARISC_SECREL64R_PARISC_BASEREL14WRR_PARISC_BASEREL14DRR_PARISC_SEGREL64R_PARISC_PLTOFF14WRR_PARISC_PLTOFF14DRR_PARISC_PLTOFF16FR_PARISC_PLTOFF16WFR_PARISC_PLTOFF16DFR_PARISC_LTOFF_FPTR64R_PARISC_LTOFF_FPTR14WRR_PARISC_LTOFF_FPTR14DRR_PARISC_LTOFF_FPTR16FR_PARISC_LTOFF_FPTR16WFR_PARISC_LTOFF_FPTR16DFR_PARISC_COPYR_PARISC_IPLTR_PARISC_EPLTR_PARISC_TPREL32R_PARISC_TPREL21LR_PARISC_TPREL14RR_PARISC_LTOFF_TP21LR_PARISC_LTOFF_TP14RR_PARISC_LTOFF_TP14FR_PARISC_TPREL64R_PARISC_TPREL14WRR_PARISC_TPREL14DRR_PARISC_TPREL16FR_PARISC_TPREL16WFR_PARISC_TPREL16DFR_PARISC_LTOFF_TP64R_PARISC_LTOFF_TP14WRR_PARISC_LTOFF_TP14DRR_PARISC_LTOFF_TP16FR_PARISC_LTOFF_TP16WFR_PARISC_LTOFF_TP16DFR_PARISC_GNU_VTENTRYR_PARISC_GNU_VTINHERITR_PARISC_TLS_GD21LR_PARISC_TLS_GD14RR_PARISC_TLS_GDCALLR_PARISC_TLS_LDM21LR_PARISC_TLS_LDM14RR_PARISC_TLS_LDMCALLR_PARISC_TLS_LDO21LR_PARISC_TLS_LDO14RR_PARISC_TLS_DTPMOD32R_PARISC_TLS_DTPMOD64R_PARISC_TLS_DTPOFF32R_PARISC_TLS_DTPOFF64R_386_NONER_386_32R_386_PC32R_386_GOT32R_386_PLT32R_386_COPYR_386_GLOB_DATR_386_JUMP_SLOTR_386_RELATIVER_386_GOTOFFR_386_GOTPCR_386_32PLTR_386_TLS_TPOFFR_386_TLS_IER_386_TLS_GOTIER_386_TLS_LER_386_TLS_GDR_386_TLS_LDMR_386_16R_386_PC16R_386_8R_386_PC8R_386_TLS_GD_32R_386_TLS_GD_PUSHR_386_TLS_GD_CALLR_386_TLS_GD_POPR_386_TLS_LDM_32R_386_TLS_LDM_PUSHR_386_TLS_LDM_CALLR_386_TLS_LDM_POPR_386_TLS_LDO_32R_386_TLS_IE_32R_386_TLS_LE_32R_386_TLS_DTPMOD32R_386_TLS_DTPOFF32R_386_TLS_TPOFF32R_386_SIZE32R_386_TLS_GOTDESCR_386_TLS_DESC_CALLR_386_TLS_DESCR_386_IRELATIVER_386_GOT32XR_386_USED_BY_INTEL_200R_386_GNU_VTINHERITR_386_GNU_VTENTRYR_IA64_NONER_IA64_IMM14R_IA64_IMM22R_IA64_IMM64R_IA64_DIR32MSBR_IA64_DIR32LSBR_IA64_DIR64MSBR_IA64_DIR64LSBR_IA64_GPREL22R_IA64_GPREL64IR_IA64_GPREL32MSBR_IA64_GPREL32LSBR_IA64_GPREL64MSBR_IA64_GPREL64LSBR_IA64_LTOFF22R_IA64_LTOFF64IR_IA64_PLTOFF22R_IA64_PLTOFF64IR_IA64_PLTOFF64MSBR_IA64_PLTOFF64LSBR_IA64_FPTR64IR_IA64_FPTR32MSBR_IA64_FPTR32LSBR_IA64_FPTR64MSBR_IA64_FPTR64LSBR_IA64_PCREL60BR_IA64_PCREL21BR_IA64_PCREL21MR_IA64_PCREL21FR_IA64_PCREL32MSBR_IA64_PCREL32LSBR_IA64_PCREL64MSBR_IA64_PCREL64LSBR_IA64_LTOFF_FPTR22R_IA64_LTOFF_FPTR64IR_IA64_LTOFF_FPTR32MSBR_IA64_LTOFF_FPTR32LSBR_IA64_LTOFF_FPTR64MSBR_IA64_LTOFF_FPTR64LSBR_IA64_SEGREL32MSBR_IA64_SEGREL32LSBR_IA64_SEGREL64MSBR_IA64_SEGREL64LSBR_IA64_SECREL32MSBR_IA64_SECREL32LSBR_IA64_SECREL64MSBR_IA64_SECREL64LSBR_IA64_REL32MSBR_IA64_REL32LSBR_IA64_REL64MSBR_IA64_REL64LSBR_IA64_LTV32MSBR_IA64_LTV32LSBR_IA64_LTV64MSBR_IA64_LTV64LSBR_IA64_PCREL21BIR_IA64_PCREL22R_IA64_PCREL64IR_IA64_IPLTMSBR_IA64_IPLTLSBR_IA64_COPYR_IA64_LTOFF22XR_IA64_LDXMOVR_IA64_TPREL14R_IA64_TPREL22R_IA64_TPREL64IR_IA64_TPREL64MSBR_IA64_TPREL64LSBR_IA64_LTOFF_TPREL22R_IA64_DTPMOD64MSBR_IA64_DTPMOD64LSBR_IA64_LTOFF_DTPMOD22R_IA64_DTPREL14R_IA64_DTPREL22R_IA64_DTPREL64IR_IA64_DTPREL32MSBR_IA64_DTPREL32LSBR_IA64_DTPREL64MSBR_IA64_DTPREL64LSBR_IA64_LTOFF_DTPREL22R_IA64_VMS_DIR8R_IA64_VMS_DIR16LSBR_IA64_VMS_CALL_SIGNATURER_IA64_VMS_EXECLET_FUNCR_IA64_VMS_EXECLET_DATAR_IA64_VMS_FIX8R_IA64_VMS_FIX16R_IA64_VMS_FIX32R_IA64_VMS_FIX64R_IA64_VMS_FIXFDR_IA64_VMS_ACC_LOADR_IA64_VMS_ACC_ADDR_IA64_VMS_ACC_SUBR_IA64_VMS_ACC_MULR_IA64_VMS_ACC_DIVR_IA64_VMS_ACC_ANDR_IA64_VMS_ACC_IORR_IA64_VMS_ACC_EORR_IA64_VMS_ACC_ASHR_IA64_VMS_ACC_STO8R_IA64_VMS_ACC_STO16LSHR_IA64_VMS_ACC_STO32LSHR_IA64_VMS_ACC_STO64LSHR_METAG_HIADDR16R_METAG_LOADDR16R_METAG_ADDR32R_METAG_NONER_METAG_RELBRANCHR_METAG_GETSETOFFR_METAG_REG32OP1R_METAG_REG32OP2R_METAG_REG32OP3R_METAG_REG16OP1R_METAG_REG16OP2R_METAG_REG16OP3R_METAG_REG32OP4R_METAG_HIOGR_METAG_LOOGR_METAG_REL8R_METAG_REL16R_METAG_GNU_VTINHERITR_METAG_GNU_VTENTRYR_METAG_HI16_GOTOFFR_METAG_LO16_GOTOFFR_METAG_GETSET_GOTOFFR_METAG_GETSET_GOTR_METAG_HI16_GOTPCR_METAG_LO16_GOTPCR_METAG_HI16_PLTR_METAG_LO16_PLTR_METAG_RELBRANCH_PLTR_METAG_GOTOFFR_METAG_PLTR_METAG_COPYR_METAG_JMP_SLOTR_METAG_RELATIVER_METAG_GLOB_DATR_METAG_TLS_GDR_METAG_TLS_LDMR_METAG_TLS_LDO_HI16R_METAG_TLS_LDO_LO16R_METAG_TLS_LDOR_METAG_TLS_IER_METAG_TLS_IENONPICR_METAG_TLS_IENONPIC_HI16R_METAG_TLS_IENONPIC_LO16R_METAG_TLS_TPOFFR_METAG_TLS_DTPMODR_METAG_TLS_DTPOFFR_METAG_TLS_LER_METAG_TLS_LE_HI16R_METAG_TLS_LE_LO16R_MIPS_NONER_MIPS_16R_MIPS_32R_MIPS_REL32R_MIPS_26R_MIPS_HI16R_MIPS_LO16R_MIPS_GPREL16R_MIPS_LITERALR_MIPS_GOT16R_MIPS_PC16R_MIPS_CALL16R_MIPS_GPREL32R_MIPS_UNUSED1R_MIPS_UNUSED2R_MIPS_UNUSED3R_MIPS_SHIFT5R_MIPS_SHIFT6R_MIPS_64R_MIPS_GOT_DISPR_MIPS_GOT_PAGER_MIPS_GOT_OFSTR_MIPS_GOT_HI16R_MIPS_GOT_LO16R_MIPS_SUBR_MIPS_INSERT_AR_MIPS_INSERT_BR_MIPS_DELETER_MIPS_HIGHERR_MIPS_HIGHESTR_MIPS_CALL_HI16R_MIPS_CALL_LO16R_MIPS_SCN_DISPR_MIPS_REL16R_MIPS_ADD_IMMEDIATER_MIPS_PJUMPR_MIPS_RELGOTR_MIPS_JALRR_MIPS_TLS_DTPMOD32R_MIPS_TLS_DTPREL32R_MIPS_TLS_DTPMOD64R_MIPS_TLS_DTPREL64R_MIPS_TLS_GDR_MIPS_TLS_LDMR_MIPS_TLS_DTPREL_HI16R_MIPS_TLS_DTPREL_LO16R_MIPS_TLS_GOTTPRELR_MIPS_TLS_TPREL32R_MIPS_TLS_TPREL64R_MIPS_TLS_TPREL_HI16R_MIPS_TLS_TPREL_LO16R_MIPS_GLOB_DATR_MIPS_PC21_S2R_MIPS_PC26_S2R_MIPS_PC18_S3R_MIPS_PC19_S2R_MIPS_PCHI16R_MIPS_PCLO16R_MIPS16_26R_MIPS16_GPRELR_MIPS16_GOT16R_MIPS16_CALL16R_MIPS16_HI16R_MIPS16_LO16R_MIPS16_TLS_GDR_MIPS16_TLS_LDMR_MIPS16_TLS_DTPREL_HI16R_MIPS16_TLS_DTPREL_LO16R_MIPS16_TLS_GOTTPRELR_MIPS16_TLS_TPREL_HI16R_MIPS16_TLS_TPREL_LO16R_MIPS16_PC16_S1R_MIPS_COPYR_MIPS_JUMP_SLOTR_MICROMIPS_26_S1R_MICROMIPS_HI16R_MICROMIPS_LO16R_MICROMIPS_GPREL16R_MICROMIPS_LITERALR_MICROMIPS_GOT16R_MICROMIPS_PC7_S1R_MICROMIPS_PC10_S1R_MICROMIPS_PC16_S1R_MICROMIPS_CALL16R_MICROMIPS_GOT_DISPR_MICROMIPS_GOT_PAGER_MICROMIPS_GOT_OFSTR_MICROMIPS_GOT_HI16R_MICROMIPS_GOT_LO16R_MICROMIPS_SUBR_MICROMIPS_HIGHERR_MICROMIPS_HIGHESTR_MICROMIPS_CALL_HI16R_MICROMIPS_CALL_LO16R_MICROMIPS_SCN_DISPR_MICROMIPS_JALRR_MICROMIPS_HI0_LO16R_MICROMIPS_TLS_GDR_MICROMIPS_TLS_LDMR_MICROMIPS_TLS_DTPREL_HI16R_MICROMIPS_TLS_DTPREL_LO16R_MICROMIPS_TLS_GOTTPRELR_MICROMIPS_TLS_TPREL_HI16R_MICROMIPS_TLS_TPREL_LO16R_MICROMIPS_GPREL7_S2R_MICROMIPS_PC23_S2R_MIPS_PC32R_MIPS_EHR_MIPS_GNU_REL16_S2R_MIPS_GNU_VTINHERITR_MIPS_GNU_VTENTRYR_RISCV_NONER_RISCV_32R_RISCV_64R_RISCV_RELATIVER_RISCV_COPYR_RISCV_JUMP_SLOTR_RISCV_TLS_DTPMOD32R_RISCV_TLS_DTPMOD64R_RISCV_TLS_DTPREL32R_RISCV_TLS_DTPREL64R_RISCV_TLS_TPREL32R_RISCV_TLS_TPREL64R_RISCV_BRANCHR_RISCV_JALR_RISCV_CALLR_RISCV_CALL_PLTR_RISCV_GOT_HI20R_RISCV_TLS_GOT_HI20R_RISCV_TLS_GD_HI20R_RISCV_PCREL_HI20R_RISCV_PCREL_LO12_IR_RISCV_PCREL_LO12_SR_RISCV_HI20R_RISCV_LO12_IR_RISCV_LO12_SR_RISCV_TPREL_HI20R_RISCV_TPREL_LO12_IR_RISCV_TPREL_LO12_SR_RISCV_TPREL_ADDR_RISCV_ADD8R_RISCV_ADD16R_RISCV_ADD32R_RISCV_ADD64R_RISCV_SUB8R_RISCV_SUB16R_RISCV_SUB32R_RISCV_SUB64R_RISCV_GNU_VTINHERITR_RISCV_GNU_VTENTRYR_RISCV_ALIGNR_RISCV_RVC_BRANCHR_RISCV_RVC_JUMPR_RISCV_RVC_LUIR_RISCV_GPREL_IR_RISCV_GPREL_SR_RISCV_TPREL_IR_RISCV_TPREL_SR_RISCV_RELAXR_RISCV_SUB6R_RISCV_SET6R_RISCV_SET8R_RISCV_SET16R_RISCV_SET32R_RISCV_32_PCRELR_MSP430_ABS32R_MSP430_ABS16R_MSP430_ABS8R_MSP430_PCR16R_MSP430X_PCR20_EXT_SRCR_MSP430X_PCR20_EXT_DSTR_MSP430X_PCR20_EXT_ODSTR_MSP430X_ABS20_EXT_SRCR_MSP430X_ABS20_EXT_DSTR_MSP430X_ABS20_EXT_ODSTR_MSP430X_ABS20_ADR_SRCR_MSP430X_ABS20_ADR_DSTR_MSP430X_PCR16R_MSP430X_PCR20_CALLR_MSP430X_ABS16R_MSP430_ABS_HI16R_MSP430_PREL31R_MSP430_EHTYPER_MSP430X_10_PCRELR_MSP430X_2X_PCRELR_MSP430X_SYM_DIFFR_NDS32_NONER_NDS32_16R_NDS32_32R_NDS32_20R_NDS32_9_PCRELR_NDS32_15_PCRELR_NDS32_17_PCRELR_NDS32_25_PCRELR_NDS32_HI20R_NDS32_LO12S3R_NDS32_LO12S2R_NDS32_LO12S1R_NDS32_LO12S0R_NDS32_SDA15S3R_NDS32_SDA15S2R_NDS32_SDA15S1R_NDS32_SDA15S0R_NDS32_GNU_VTINHERITR_NDS32_GNU_VTENTRYR_NDS32_16_RELAR_NDS32_32_RELAR_NDS32_20_RELAR_NDS32_9_PCREL_RELAR_NDS32_15_PCREL_RELAR_NDS32_17_PCREL_RELAR_NDS32_25_PCREL_RELAR_NDS32_HI20_RELAR_NDS32_LO12S3_RELAR_NDS32_LO12S2_RELAR_NDS32_LO12S1_RELAR_NDS32_LO12S0_RELAR_NDS32_SDA15S3_RELAR_NDS32_SDA15S2_RELAR_NDS32_SDA15S1_RELAR_NDS32_SDA15S0_RELAR_NDS32_RELA_GNU_VTINHERITR_NDS32_RELA_GNU_VTENTRYR_NDS32_GOT20R_NDS32_25_PLTRELR_NDS32_COPYR_NDS32_GLOB_DATR_NDS32_JMP_SLOTR_NDS32_RELATIVER_NDS32_GOTOFFR_NDS32_GOTPC20R_NDS32_GOT_HI20R_NDS32_GOT_LO12R_NDS32_GOTPC_HI20R_NDS32_GOTPC_LO12R_NDS32_GOTOFF_HI20R_NDS32_GOTOFF_LO12R_NDS32_INSN16R_NDS32_LABELR_NDS32_LONGCALL1R_NDS32_LONGCALL2R_NDS32_LONGCALL3R_NDS32_LONGJUMP1R_NDS32_LONGJUMP2R_NDS32_LONGJUMP3R_NDS32_LOADSTORER_NDS32_9_FIXED_RELAR_NDS32_15_FIXED_RELAR_NDS32_17_FIXED_RELAR_NDS32_25_FIXED_RELAR_NDS32_PLTREL_HI20R_NDS32_PLTREL_LO12R_NDS32_PLT_GOTREL_HI20R_NDS32_PLT_GOTREL_LO12R_NDS32_SDA12S2_DP_RELAR_NDS32_SDA12S2_SP_RELAR_NDS32_LO12S2_DP_RELAR_NDS32_LO12S2_SP_RELAR_NDS32_LO12S0_ORI_RELAR_NDS32_SDA16S3_RELAR_NDS32_SDA17S2_RELAR_NDS32_SDA18S1_RELAR_NDS32_SDA19S0_RELAR_NDS32_DWARF2_OP1_RELAR_NDS32_DWARF2_OP2_RELAR_NDS32_DWARF2_LEB_RELAR_NDS32_UPDATE_TA_RELAR_NDS32_9_PLTRELR_NDS32_PLT_GOTREL_LO20R_NDS32_PLT_GOTREL_LO15R_NDS32_PLT_GOTREL_LO19R_NDS32_GOT_LO15R_NDS32_GOT_LO19R_NDS32_GOTOFF_LO15R_NDS32_GOTOFF_LO19R_NDS32_GOT15S2_RELAR_NDS32_GOT17S2_RELAR_NDS32_5_RELAR_NDS32_10_UPCREL_RELAR_NDS32_SDA_FP7U2_RELAR_NDS32_WORD_9_PCREL_RELAR_NDS32_25_ABS_RELAR_NDS32_17IFC_PCREL_RELAR_NDS32_10IFCU_PCREL_RELAR_NDS32_TLS_LE_HI20R_NDS32_TLS_LE_LO12R_NDS32_TLS_IE_HI20R_NDS32_TLS_IE_LO12S2R_NDS32_TLS_TPOFFR_NDS32_TLS_LE_20R_NDS32_TLS_LE_15S0R_NDS32_TLS_LE_15S1R_NDS32_TLS_LE_15S2R_NDS32_LONGCALL4R_NDS32_LONGCALL5R_NDS32_LONGCALL6R_NDS32_LONGJUMP4R_NDS32_LONGJUMP5R_NDS32_LONGJUMP6R_NDS32_LONGJUMP7R_NDS32_RELAX_ENTRYR_NDS32_GOT_SUFFR_NDS32_GOTOFF_SUFFR_NDS32_PLT_GOT_SUFFR_NDS32_MULCALL_SUFFR_NDS32_PTRR_NDS32_PTR_COUNTR_NDS32_PTR_RESOLVEDR_NDS32_PLTBLOCKR_NDS32_RELAX_REGION_BEGINR_NDS32_RELAX_REGION_ENDR_NDS32_MINUENDR_NDS32_SUBTRAHENDR_NDS32_DIFF8R_NDS32_DIFF16R_NDS32_DIFF32R_NDS32_DIFF_ULEB128R_NDS32_DATAR_NDS32_TRANR_NDS32_TLS_LE_ADDR_NDS32_TLS_LE_LSR_NDS32_EMPTYR_NIOS2_NONER_NIOS2_S16R_NIOS2_U16R_NIOS2_PCREL16R_NIOS2_CALL26R_NIOS2_IMM5R_NIOS2_CACHE_OPXR_NIOS2_IMM6R_NIOS2_IMM8R_NIOS2_HI16R_NIOS2_LO16R_NIOS2_HIADJ16R_NIOS2_BFD_RELOC_32R_NIOS2_BFD_RELOC_16R_NIOS2_BFD_RELOC_8R_NIOS2_GPRELR_NIOS2_GNU_VTINHERITR_NIOS2_GNU_VTENTRYR_NIOS2_UJMPR_NIOS2_CJMPR_NIOS2_CALLRR_NIOS2_ALIGNR_NIOS2_GOT16R_NIOS2_CALL16R_NIOS2_GOTOFF_LOR_NIOS2_GOTOFF_HAR_NIOS2_PCREL_LOR_NIOS2_PCREL_HAR_NIOS2_TLS_GD16R_NIOS2_TLS_LDM16R_NIOS2_TLS_LDO16R_NIOS2_TLS_IE16R_NIOS2_TLS_LE16R_NIOS2_TLS_DTPMODR_NIOS2_TLS_DTPRELR_NIOS2_TLS_TPRELR_NIOS2_COPYR_NIOS2_GLOB_DATR_NIOS2_JUMP_SLOTR_NIOS2_RELATIVER_NIOS2_GOTOFFR_NIOS2_CALL26_NOATR_NIOS2_GOT_LOR_NIOS2_GOT_HAR_NIOS2_CALL_LOR_NIOS2_CALL_HAR_NIOS2_R2_S12R_NIOS2_R2_I10_1_PCRELR_NIOS2_R2_T1I7_1_PCRELR_NIOS2_R2_T1I7_2R_NIOS2_R2_T2I4R_NIOS2_R2_T2I4_1R_NIOS2_R2_T2I4_2R_NIOS2_R2_X1I7_2R_NIOS2_R2_X2L5R_NIOS2_R2_F1I5_2R_NIOS2_R2_L5I4X1R_NIOS2_R2_T1X1I6R_NIOS2_R2_T1X1I6_2R_NIOS2_ILLEGALR_PPC_NONER_PPC_ADDR32R_PPC_ADDR24R_PPC_ADDR16R_PPC_ADDR16_LOR_PPC_ADDR16_HIR_PPC_ADDR16_HAR_PPC_ADDR14R_PPC_ADDR14_BRTAKENR_PPC_ADDR14_BRNTAKENR_PPC_REL24R_PPC_REL14R_PPC_REL14_BRTAKENR_PPC_REL14_BRNTAKENR_PPC_GOT16R_PPC_GOT16_LOR_PPC_GOT16_HIR_PPC_GOT16_HAR_PPC_PLTREL24R_PPC_COPYR_PPC_GLOB_DATR_PPC_JMP_SLOTR_PPC_RELATIVER_PPC_LOCAL24PCR_PPC_UADDR32R_PPC_UADDR16R_PPC_REL32R_PPC_PLT32R_PPC_PLTREL32R_PPC_PLT16_LOR_PPC_PLT16_HIR_PPC_PLT16_HAR_PPC_SDAREL16R_PPC_SECTOFFR_PPC_SECTOFF_LOR_PPC_SECTOFF_HIR_PPC_SECTOFF_HAR_PPC_ADDR30R_PPC_TLSR_PPC_DTPMOD32R_PPC_TPREL16R_PPC_TPREL16_LOR_PPC_TPREL16_HIR_PPC_TPREL16_HAR_PPC_TPREL32R_PPC_DTPREL16R_PPC_DTPREL16_LOR_PPC_DTPREL16_HIR_PPC_DTPREL16_HAR_PPC_DTPREL32R_PPC_GOT_TLSGD16R_PPC_GOT_TLSGD16_LOR_PPC_GOT_TLSGD16_HIR_PPC_GOT_TLSGD16_HAR_PPC_GOT_TLSLD16R_PPC_GOT_TLSLD16_LOR_PPC_GOT_TLSLD16_HIR_PPC_GOT_TLSLD16_HAR_PPC_GOT_TPREL16R_PPC_GOT_TPREL16_LOR_PPC_GOT_TPREL16_HIR_PPC_GOT_TPREL16_HAR_PPC_GOT_DTPREL16R_PPC_GOT_DTPREL16_LOR_PPC_GOT_DTPREL16_HIR_PPC_GOT_DTPREL16_HAR_PPC_TLSGDR_PPC_TLSLDR_PPC_EMB_NADDR32R_PPC_EMB_NADDR16R_PPC_EMB_NADDR16_LOR_PPC_EMB_NADDR16_HIR_PPC_EMB_NADDR16_HAR_PPC_EMB_SDAI16R_PPC_EMB_SDA2I16R_PPC_EMB_SDA2RELR_PPC_EMB_SDA21R_PPC_EMB_MRKREFR_PPC_EMB_RELSEC16R_PPC_EMB_RELST_LOR_PPC_EMB_RELST_HIR_PPC_EMB_RELST_HAR_PPC_EMB_BIT_FLDR_PPC_EMB_RELSDAR_PPC_VLE_REL8R_PPC_VLE_REL15R_PPC_VLE_REL24R_PPC_VLE_LO16AR_PPC_VLE_LO16DR_PPC_VLE_HI16AR_PPC_VLE_HI16DR_PPC_VLE_HA16AR_PPC_VLE_HA16DR_PPC_VLE_SDA21R_PPC_VLE_SDA21_LOR_PPC_VLE_SDAREL_LO16AR_PPC_VLE_SDAREL_LO16DR_PPC_VLE_SDAREL_HI16AR_PPC_VLE_SDAREL_HI16DR_PPC_VLE_SDAREL_HA16AR_PPC_VLE_SDAREL_HA16DR_PPC_REL16DX_HAR_PPC_IRELATIVER_PPC_REL16R_PPC_REL16_LOR_PPC_REL16_HIR_PPC_REL16_HAR_PPC_GNU_VTINHERITR_PPC_GNU_VTENTRYR_PPC_TOC16R_PPC64_NONER_PPC64_ADDR32R_PPC64_ADDR24R_PPC64_ADDR16R_PPC64_ADDR16_LOR_PPC64_ADDR16_HIR_PPC64_ADDR16_HAR_PPC64_ADDR14R_PPC64_ADDR14_BRTAKENR_PPC64_ADDR14_BRNTAKENR_PPC64_REL24R_PPC64_REL14R_PPC64_REL14_BRTAKENR_PPC64_REL14_BRNTAKENR_PPC64_GOT16R_PPC64_GOT16_LOR_PPC64_GOT16_HIR_PPC64_GOT16_HAR_PPC64_COPYR_PPC64_GLOB_DATR_PPC64_JMP_SLOTR_PPC64_RELATIVER_PPC64_UADDR32R_PPC64_UADDR16R_PPC64_REL32R_PPC64_PLT32R_PPC64_PLTREL32R_PPC64_PLT16_LOR_PPC64_PLT16_HIR_PPC64_PLT16_HAR_PPC64_SECTOFFR_PPC64_SECTOFF_LOR_PPC64_SECTOFF_HIR_PPC64_SECTOFF_HAR_PPC64_REL30R_PPC64_ADDR64R_PPC64_ADDR16_HIGHERR_PPC64_ADDR16_HIGHERAR_PPC64_ADDR16_HIGHESTR_PPC64_ADDR16_HIGHESTAR_PPC64_UADDR64R_PPC64_REL64R_PPC64_PLT64R_PPC64_PLTREL64R_PPC64_TOC16R_PPC64_TOC16_LOR_PPC64_TOC16_HIR_PPC64_TOC16_HAR_PPC64_TOCR_PPC64_PLTGOT16R_PPC64_PLTGOT16_LOR_PPC64_PLTGOT16_HIR_PPC64_PLTGOT16_HAR_PPC64_ADDR16_DSR_PPC64_ADDR16_LO_DSR_PPC64_GOT16_DSR_PPC64_GOT16_LO_DSR_PPC64_PLT16_LO_DSR_PPC64_SECTOFF_DSR_PPC64_SECTOFF_LO_DSR_PPC64_TOC16_DSR_PPC64_TOC16_LO_DSR_PPC64_PLTGOT16_DSR_PPC64_PLTGOT16_LO_DSR_PPC64_TLSR_PPC64_DTPMOD64R_PPC64_TPREL16R_PPC64_TPREL16_LOR_PPC64_TPREL16_HIR_PPC64_TPREL16_HAR_PPC64_TPREL64R_PPC64_DTPREL16R_PPC64_DTPREL16_LOR_PPC64_DTPREL16_HIR_PPC64_DTPREL16_HAR_PPC64_DTPREL64R_PPC64_GOT_TLSGD16R_PPC64_GOT_TLSGD16_LOR_PPC64_GOT_TLSGD16_HIR_PPC64_GOT_TLSGD16_HAR_PPC64_GOT_TLSLD16R_PPC64_GOT_TLSLD16_LOR_PPC64_GOT_TLSLD16_HIR_PPC64_GOT_TLSLD16_HAR_PPC64_GOT_TPREL16_DSR_PPC64_GOT_TPREL16_LO_DSR_PPC64_GOT_TPREL16_HIR_PPC64_GOT_TPREL16_HAR_PPC64_GOT_DTPREL16_DSR_PPC64_GOT_DTPREL16_LO_DSR_PPC64_GOT_DTPREL16_HIR_PPC64_GOT_DTPREL16_HAR_PPC64_TPREL16_DSR_PPC64_TPREL16_LO_DSR_PPC64_TPREL16_HIGHERR_PPC64_TPREL16_HIGHERAR_PPC64_TPREL16_HIGHESTR_PPC64_TPREL16_HIGHESTAR_PPC64_DTPREL16_DSR_PPC64_DTPREL16_LO_DSR_PPC64_DTPREL16_HIGHERR_PPC64_DTPREL16_HIGHERAR_PPC64_DTPREL16_HIGHESTR_PPC64_DTPREL16_HIGHESTAR_PPC64_TLSGDR_PPC64_TLSLDR_PPC64_TOCSAVER_PPC64_ADDR16_HIGHR_PPC64_ADDR16_HIGHAR_PPC64_TPREL16_HIGHR_PPC64_TPREL16_HIGHAR_PPC64_DTPREL16_HIGHR_PPC64_DTPREL16_HIGHAR_PPC64_REL24_NOTOCR_PPC64_ADDR64_LOCALR_PPC64_ENTRYR_PPC64_REL16DX_HAR_PPC64_JMP_IRELR_PPC64_IRELATIVER_PPC64_REL16R_PPC64_REL16_LOR_PPC64_REL16_HIR_PPC64_REL16_HAR_PPC64_GNU_VTINHERITR_PPC64_GNU_VTENTRYR_RL78_NONER_RL78_DIR32R_RL78_DIR24SR_RL78_DIR16R_RL78_DIR16UR_RL78_DIR16SR_RL78_DIR8R_RL78_DIR8UR_RL78_DIR8SR_RL78_DIR24S_PCRELR_RL78_DIR16S_PCRELR_RL78_DIR8S_PCRELR_RL78_DIR16ULR_RL78_DIR16UWR_RL78_DIR8ULR_RL78_DIR8UWR_RL78_DIR32_REVR_RL78_DIR16_REVR_RL78_DIR3U_PCRELR_RL78_RH_RELAXR_RL78_RH_SFRR_RL78_RH_SADDRR_RL78_ABS32R_RL78_ABS24SR_RL78_ABS16R_RL78_ABS16UR_RL78_ABS16SR_RL78_ABS8R_RL78_ABS8UR_RL78_ABS8SR_RL78_ABS24S_PCRELR_RL78_ABS16S_PCRELR_RL78_ABS8S_PCRELR_RL78_ABS16ULR_RL78_ABS16UWR_RL78_ABS8ULR_RL78_ABS8UWR_RL78_ABS32_REVR_RL78_ABS16_REVR_RL78_SYMR_RL78_OPnegR_RL78_OPaddR_RL78_OPsubR_RL78_OPmulR_RL78_OPdivR_RL78_OPshlaR_RL78_OPshraR_RL78_OPsctsizeR_RL78_OPscttopR_RL78_OPandR_RL78_OPorR_RL78_OPxorR_RL78_OPnotR_RL78_OPmodR_RL78_OPromtopR_RL78_OPramtopR_RX_NONER_RX_DIR32R_RX_DIR24SR_RX_DIR16R_RX_DIR16UR_RX_DIR16SR_RX_DIR8R_RX_DIR8UR_RX_DIR8SR_RX_DIR24S_PCRELR_RX_DIR16S_PCRELR_RX_DIR8S_PCRELR_RX_DIR16ULR_RX_DIR16UWR_RX_DIR8ULR_RX_DIR8UWR_RX_DIR32_REVR_RX_DIR16_REVR_RX_DIR3U_PCRELR_RX_RH_3_PCRELR_RX_RH_16_OPR_RX_RH_24_OPR_RX_RH_32_OPR_RX_RH_24_UNSR_RX_RH_8_NEGR_RX_RH_16_NEGR_RX_RH_24_NEGR_RX_RH_32_NEGR_RX_RH_DIFFR_RX_RH_GPRELBR_RX_RH_GPRELWR_RX_RH_GPRELLR_RX_RH_RELAXR_RX_ABS32R_RX_ABS24SR_RX_ABS16R_RX_ABS16UR_RX_ABS16SR_RX_ABS8R_RX_ABS8UR_RX_ABS8SR_RX_ABS24S_PCRELR_RX_ABS16S_PCRELR_RX_ABS8S_PCRELR_RX_ABS16ULR_RX_ABS16UWR_RX_ABS8ULR_RX_ABS8UWR_RX_ABS32_REVR_RX_ABS16_REVR_RX_SYMR_RX_OPnegR_RX_OPaddR_RX_OPsubR_RX_OPmulR_RX_OPdivR_RX_OPshlaR_RX_OPshraR_RX_OPsctsizeR_RX_OPscttopR_RX_OPandR_RX_OPorR_RX_OPxorR_RX_OPnotR_RX_OPmodR_RX_OPromtopR_RX_OPramtopR_390_NONER_390_8R_390_12R_390_16R_390_32R_390_PC32R_390_GOT12R_390_GOT32R_390_PLT32R_390_COPYR_390_GLOB_DATR_390_JMP_SLOTR_390_RELATIVER_390_GOTOFF32R_390_GOTPCR_390_GOT16R_390_PC16R_390_PC12DBLR_390_PLT12DBLR_390_PC16DBLR_390_PLT16DBLR_390_PC24DBLR_390_PLT24DBLR_390_PC32DBLR_390_PLT32DBLR_390_GOTPCDBLR_390_64R_390_PC64R_390_GOT64R_390_PLT64R_390_GOTENTR_390_GOTOFF16R_390_GOTOFF64R_390_GOTPLT12R_390_GOTPLT16R_390_GOTPLT32R_390_GOTPLT64R_390_GOTPLTENTR_390_PLTOFF16R_390_PLTOFF32R_390_PLTOFF64R_390_TLS_LOADR_390_TLS_GDCALLR_390_TLS_LDCALLR_390_TLS_GD32R_390_TLS_GD64R_390_TLS_GOTIE12R_390_TLS_GOTIE32R_390_TLS_GOTIE64R_390_TLS_LDM32R_390_TLS_LDM64R_390_TLS_IE32R_390_TLS_IE64R_390_TLS_IEENTR_390_TLS_LE32R_390_TLS_LE64R_390_TLS_LDO32R_390_TLS_LDO64R_390_TLS_DTPMODR_390_TLS_DTPOFFR_390_TLS_TPOFFR_390_20R_390_GOT20R_390_GOTPLT20R_390_TLS_GOTIE20R_390_IRELATIVER_390_GNU_VTINHERITR_390_GNU_VTENTRYR_SH_NONER_SH_DIR32R_SH_REL32R_SH_DIR8WPNR_SH_IND12WR_SH_DIR8WPLR_SH_DIR8WPZR_SH_DIR8BPR_SH_DIR8WR_SH_DIR8LR_SH_LOOP_STARTR_SH_LOOP_ENDR_SH_GNU_VTINHERITR_SH_GNU_VTENTRYR_SH_SWITCH8R_SH_SWITCH16R_SH_SWITCH32R_SH_USESR_SH_COUNTR_SH_ALIGNR_SH_CODER_SH_DATAR_SH_LABELR_SH_DIR16R_SH_DIR8R_SH_DIR8ULR_SH_DIR8UWR_SH_DIR8UR_SH_DIR8SWR_SH_DIR8SR_SH_DIR4ULR_SH_DIR4UWR_SH_DIR4UR_SH_PSHAR_SH_PSHLR_SH_DIR5UR_SH_DIR6UR_SH_DIR6SR_SH_DIR10SR_SH_DIR10SWR_SH_DIR10SLR_SH_DIR10SQR_SH_DIR16SR_SH_TLS_GD_32R_SH_TLS_LD_32R_SH_TLS_LDO_32R_SH_TLS_IE_32R_SH_TLS_LE_32R_SH_TLS_DTPMOD32R_SH_TLS_DTPOFF32R_SH_TLS_TPOFF32R_SH_GOT32R_SH_PLT32R_SH_COPYR_SH_GLOB_DATR_SH_JMP_SLOTR_SH_RELATIVER_SH_GOTOFFR_SH_GOTPCR_SH_GOTPLT32R_SH_GOT_LOW16R_SH_GOT_MEDLOW16R_SH_GOT_MEDHI16R_SH_GOT_HI16R_SH_GOTPLT_LOW16R_SH_GOTPLT_MEDLOW16R_SH_GOTPLT_MEDHI16R_SH_GOTPLT_HI16R_SH_PLT_LOW16R_SH_PLT_MEDLOW16R_SH_PLT_MEDHI16R_SH_PLT_HI16R_SH_GOTOFF_LOW16R_SH_GOTOFF_MEDLOW16R_SH_GOTOFF_MEDHI16R_SH_GOTOFF_HI16R_SH_GOTPC_LOW16R_SH_GOTPC_MEDLOW16R_SH_GOTPC_MEDHI16R_SH_GOTPC_HI16R_SH_GOT10BY4R_SH_GOTPLT10BY4R_SH_GOT10BY8R_SH_GOTPLT10BY8R_SH_COPY64R_SH_GLOB_DAT64R_SH_JMP_SLOT64R_SH_RELATIVE64R_SH_GOT20R_SH_GOTOFF20R_SH_GOTFUNCDESCR_SH_GOTFUNCDESC20R_SH_GOTOFFFUNCDESCR_SH_GOTOFFFUNCDESC20R_SH_FUNCDESCR_SH_FUNCDESC_VALUER_SH_SHMEDIA_CODER_SH_PT_16R_SH_IMMS16R_SH_IMMU16R_SH_IMM_LOW16R_SH_IMM_LOW16_PCRELR_SH_IMM_MEDLOW16R_SH_IMM_MEDLOW16_PCRELR_SH_IMM_MEDHI16R_SH_IMM_MEDHI16_PCRELR_SH_IMM_HI16R_SH_IMM_HI16_PCRELR_SH_64R_SH_64_PCRELR_SPARC_NONER_SPARC_8R_SPARC_16R_SPARC_32R_SPARC_DISP8R_SPARC_DISP16R_SPARC_DISP32R_SPARC_WDISP30R_SPARC_WDISP22R_SPARC_HI22R_SPARC_22R_SPARC_13R_SPARC_LO10R_SPARC_GOT10R_SPARC_GOT13R_SPARC_GOT22R_SPARC_PC10R_SPARC_PC22R_SPARC_WPLT30R_SPARC_COPYR_SPARC_GLOB_DATR_SPARC_JMP_SLOTR_SPARC_RELATIVER_SPARC_UA32R_SPARC_PLT32R_SPARC_HIPLT22R_SPARC_LOPLT10R_SPARC_PCPLT32R_SPARC_PCPLT22R_SPARC_PCPLT10R_SPARC_10R_SPARC_11R_SPARC_64R_SPARC_OLO10R_SPARC_HH22R_SPARC_HM10R_SPARC_LM22R_SPARC_PC_HH22R_SPARC_PC_HM10R_SPARC_PC_LM22R_SPARC_WDISP16R_SPARC_WDISP19R_SPARC_UNUSED_42R_SPARC_7R_SPARC_5R_SPARC_6R_SPARC_DISP64R_SPARC_PLT64R_SPARC_HIX22R_SPARC_LOX10R_SPARC_H44R_SPARC_M44R_SPARC_L44R_SPARC_REGISTERR_SPARC_UA64R_SPARC_UA16R_SPARC_TLS_GD_HI22R_SPARC_TLS_GD_LO10R_SPARC_TLS_GD_ADDR_SPARC_TLS_GD_CALLR_SPARC_TLS_LDM_HI22R_SPARC_TLS_LDM_LO10R_SPARC_TLS_LDM_ADDR_SPARC_TLS_LDM_CALLR_SPARC_TLS_LDO_HIX22R_SPARC_TLS_LDO_LOX10R_SPARC_TLS_LDO_ADDR_SPARC_TLS_IE_HI22R_SPARC_TLS_IE_LO10R_SPARC_TLS_IE_LDR_SPARC_TLS_IE_LDXR_SPARC_TLS_IE_ADDR_SPARC_TLS_LE_HIX22R_SPARC_TLS_LE_LOX10R_SPARC_TLS_DTPMOD32R_SPARC_TLS_DTPMOD64R_SPARC_TLS_DTPOFF32R_SPARC_TLS_DTPOFF64R_SPARC_TLS_TPOFF32R_SPARC_TLS_TPOFF64R_SPARC_GOTDATA_HIX22R_SPARC_GOTDATA_LOX10R_SPARC_GOTDATA_OP_HIX22R_SPARC_GOTDATA_OP_LOX10R_SPARC_GOTDATA_OPR_SPARC_H34R_SPARC_SIZE32R_SPARC_SIZE64R_SPARC_WDISP10R_SPARC_JMP_IRELR_SPARC_IRELATIVER_SPARC_GNU_VTINHERITR_SPARC_GNU_VTENTRYR_SPARC_REV32R_C6000_NONER_C6000_ABS32R_C6000_ABS16R_C6000_ABS8R_C6000_PCR_S21R_C6000_PCR_S12R_C6000_PCR_S10R_C6000_PCR_S7R_C6000_ABS_S16R_C6000_ABS_L16R_C6000_ABS_H16R_C6000_SBR_U15_BR_C6000_SBR_U15_HR_C6000_SBR_U15_WR_C6000_SBR_S16R_C6000_SBR_L16_BR_C6000_SBR_L16_HR_C6000_SBR_L16_WR_C6000_SBR_H16_BR_C6000_SBR_H16_HR_C6000_SBR_H16_WR_C6000_SBR_GOT_U15_WR_C6000_SBR_GOT_L16_WR_C6000_SBR_GOT_H16_WR_C6000_DSBT_INDEXR_C6000_PREL31R_C6000_COPYR_C6000_JUMP_SLOTR_C6000_EHTYPER_C6000_PCR_H16R_C6000_PCR_L16R_C6000_ALIGNR_C6000_FPHEADR_C6000_NOCMPR_TILEGX_NONER_TILEGX_64R_TILEGX_32R_TILEGX_16R_TILEGX_8R_TILEGX_64_PCRELR_TILEGX_32_PCRELR_TILEGX_16_PCRELR_TILEGX_8_PCRELR_TILEGX_HW0R_TILEGX_HW1R_TILEGX_HW2R_TILEGX_HW3R_TILEGX_HW0_LASTR_TILEGX_HW1_LASTR_TILEGX_HW2_LASTR_TILEGX_COPYR_TILEGX_GLOB_DATR_TILEGX_JMP_SLOTR_TILEGX_RELATIVER_TILEGX_BROFF_X1R_TILEGX_JUMPOFF_X1R_TILEGX_JUMPOFF_X1_PLTR_TILEGX_IMM8_X0R_TILEGX_IMM8_Y0R_TILEGX_IMM8_X1R_TILEGX_IMM8_Y1R_TILEGX_DEST_IMM8_X1R_TILEGX_MT_IMM14_X1R_TILEGX_MF_IMM14_X1R_TILEGX_MMSTART_X0R_TILEGX_MMEND_X0R_TILEGX_SHAMT_X0R_TILEGX_SHAMT_X1R_TILEGX_SHAMT_Y0R_TILEGX_SHAMT_Y1R_TILEGX_IMM16_X0_HW0R_TILEGX_IMM16_X1_HW0R_TILEGX_IMM16_X0_HW1R_TILEGX_IMM16_X1_HW1R_TILEGX_IMM16_X0_HW2R_TILEGX_IMM16_X1_HW2R_TILEGX_IMM16_X0_HW3R_TILEGX_IMM16_X1_HW3R_TILEGX_IMM16_X0_HW0_LASTR_TILEGX_IMM16_X1_HW0_LASTR_TILEGX_IMM16_X0_HW1_LASTR_TILEGX_IMM16_X1_HW1_LASTR_TILEGX_IMM16_X0_HW2_LASTR_TILEGX_IMM16_X1_HW2_LASTR_TILEGX_IMM16_X0_HW0_PCRELR_TILEGX_IMM16_X1_HW0_PCRELR_TILEGX_IMM16_X0_HW1_PCRELR_TILEGX_IMM16_X1_HW1_PCRELR_TILEGX_IMM16_X0_HW2_PCRELR_TILEGX_IMM16_X1_HW2_PCRELR_TILEGX_IMM16_X0_HW3_PCRELR_TILEGX_IMM16_X1_HW3_PCRELR_TILEGX_IMM16_X0_HW0_GOTR_TILEGX_IMM16_X1_HW0_GOTR_TILEGX_IMM16_X0_HW0_TLS_GDR_TILEGX_IMM16_X1_HW0_TLS_GDR_TILEGX_IMM16_X0_HW0_TLS_LER_TILEGX_IMM16_X1_HW0_TLS_LER_TILEGX_IMM16_X0_HW0_TLS_IER_TILEGX_IMM16_X1_HW0_TLS_IER_TILEGX_TLS_DTPMOD64R_TILEGX_TLS_DTPOFF64R_TILEGX_TLS_TPOFF64R_TILEGX_TLS_DTPMOD32R_TILEGX_TLS_DTPOFF32R_TILEGX_TLS_TPOFF32R_TILEGX_TLS_GD_CALLR_TILEGX_IMM8_X0_TLS_GD_ADDR_TILEGX_IMM8_X1_TLS_GD_ADDR_TILEGX_IMM8_Y0_TLS_GD_ADDR_TILEGX_IMM8_Y1_TLS_GD_ADDR_TILEGX_TLS_IE_LOADR_TILEGX_IMM8_X0_TLS_ADDR_TILEGX_IMM8_X1_TLS_ADDR_TILEGX_IMM8_Y0_TLS_ADDR_TILEGX_IMM8_Y1_TLS_ADDR_TILEGX_GNU_VTINHERITR_TILEGX_GNU_VTENTRYR_TILEPRO_NONER_TILEPRO_32R_TILEPRO_16R_TILEPRO_8R_TILEPRO_32_PCRELR_TILEPRO_16_PCRELR_TILEPRO_8_PCRELR_TILEPRO_LO16R_TILEPRO_HI16R_TILEPRO_HA16R_TILEPRO_COPYR_TILEPRO_GLOB_DATR_TILEPRO_JMP_SLOTR_TILEPRO_RELATIVER_TILEPRO_BROFF_X1R_TILEPRO_JOFFLONG_X1R_TILEPRO_JOFFLONG_X1_PLTR_TILEPRO_IMM8_X0R_TILEPRO_IMM8_Y0R_TILEPRO_IMM8_X1R_TILEPRO_IMM8_Y1R_TILEPRO_MT_IMM15_X1R_TILEPRO_MF_IMM15_X1R_TILEPRO_IMM16_X0R_TILEPRO_IMM16_X1R_TILEPRO_IMM16_X0_LOR_TILEPRO_IMM16_X1_LOR_TILEPRO_IMM16_X0_HIR_TILEPRO_IMM16_X1_HIR_TILEPRO_IMM16_X0_HAR_TILEPRO_IMM16_X1_HAR_TILEPRO_IMM16_X0_PCRELR_TILEPRO_IMM16_X1_PCRELR_TILEPRO_IMM16_X0_LO_PCRELR_TILEPRO_IMM16_X1_LO_PCRELR_TILEPRO_IMM16_X0_HI_PCRELR_TILEPRO_IMM16_X1_HI_PCRELR_TILEPRO_IMM16_X0_HA_PCRELR_TILEPRO_IMM16_X1_HA_PCRELR_TILEPRO_IMM16_X0_GOTR_TILEPRO_IMM16_X1_GOTR_TILEPRO_IMM16_X0_GOT_LOR_TILEPRO_IMM16_X1_GOT_LOR_TILEPRO_IMM16_X0_GOT_HIR_TILEPRO_IMM16_X1_GOT_HIR_TILEPRO_IMM16_X0_GOT_HAR_TILEPRO_IMM16_X1_GOT_HAR_TILEPRO_MMSTART_X0R_TILEPRO_MMEND_X0R_TILEPRO_MMSTART_X1R_TILEPRO_MMEND_X1R_TILEPRO_SHAMT_X0R_TILEPRO_SHAMT_X1R_TILEPRO_SHAMT_Y0R_TILEPRO_SHAMT_Y1R_TILEPRO_DEST_IMM8_X1R_TILEPRO_TLS_GD_CALLR_TILEPRO_IMM8_X0_TLS_GD_ADDR_TILEPRO_IMM8_X1_TLS_GD_ADDR_TILEPRO_IMM8_Y0_TLS_GD_ADDR_TILEPRO_IMM8_Y1_TLS_GD_ADDR_TILEPRO_TLS_IE_LOADR_TILEPRO_IMM16_X0_TLS_GDR_TILEPRO_IMM16_X1_TLS_GDR_TILEPRO_IMM16_X0_TLS_GD_LOR_TILEPRO_IMM16_X1_TLS_GD_LOR_TILEPRO_IMM16_X0_TLS_GD_HIR_TILEPRO_IMM16_X1_TLS_GD_HIR_TILEPRO_IMM16_X0_TLS_GD_HAR_TILEPRO_IMM16_X1_TLS_GD_HAR_TILEPRO_IMM16_X0_TLS_IER_TILEPRO_IMM16_X1_TLS_IER_TILEPRO_IMM16_X0_TLS_IE_LOR_TILEPRO_IMM16_X1_TLS_IE_LOR_TILEPRO_IMM16_X0_TLS_IE_HIR_TILEPRO_IMM16_X1_TLS_IE_HIR_TILEPRO_IMM16_X0_TLS_IE_HAR_TILEPRO_IMM16_X1_TLS_IE_HAR_TILEPRO_TLS_DTPMOD32R_TILEPRO_TLS_DTPOFF32R_TILEPRO_TLS_TPOFF32R_TILEPRO_IMM16_X0_TLS_LER_TILEPRO_IMM16_X1_TLS_LER_TILEPRO_IMM16_X0_TLS_LE_LOR_TILEPRO_IMM16_X1_TLS_LE_LOR_TILEPRO_IMM16_X0_TLS_LE_HIR_TILEPRO_IMM16_X1_TLS_LE_HIR_TILEPRO_IMM16_X0_TLS_LE_HAR_TILEPRO_IMM16_X1_TLS_LE_HAR_TILEPRO_GNU_VTINHERITR_TILEPRO_GNU_VTENTRYR_V850_NONER_V850_9_PCRELR_V850_22_PCRELR_V850_HI16_SR_V850_HI16R_V850_LO16R_V850_ABS32R_V850_16R_V850_8R_V850_SDA_16_16_OFFSETR_V850_SDA_15_16_OFFSETR_V850_ZDA_16_16_OFFSETR_V850_ZDA_15_16_OFFSETR_V850_TDA_6_8_OFFSETR_V850_TDA_7_8_OFFSETR_V850_TDA_7_7_OFFSETR_V850_TDA_16_16_OFFSETR_V850_TDA_4_5_OFFSETR_V850_TDA_4_4_OFFSETR_V850_SDA_16_16_SPLIT_OFFSETR_V850_ZDA_16_16_SPLIT_OFFSETR_V850_CALLT_6_7_OFFSETR_V850_CALLT_16_16_OFFSETR_V850_GNU_VTINHERITR_V850_GNU_VTENTRYR_V850_LONGCALLR_V850_LONGJUMPR_V850_ALIGNR_V850_REL32R_V850_LO16_SPLIT_OFFSETR_V850_16_PCRELR_V850_17_PCRELR_V850_23R_V850_32_PCRELR_V850_32_ABSR_V850_16_SPLIT_OFFSETR_V850_16_S1R_V850_LO16_S1R_V850_CALLT_15_16_OFFSETR_V850_32_GOTPCRELR_V850_16_GOTR_V850_32_GOTR_V850_22_PLTR_V850_32_PLTR_V850_COPYR_V850_GLOB_DATR_V850_JMP_SLOTR_V850_RELATIVER_V850_16_GOTOFFR_V850_32_GOTOFFR_V850_CODER_V850_DATAR_V800_NONER_V810_NONER_V810_BYTER_V810_HWORDR_V810_WORDR_V810_WLOR_V810_WHIR_V810_WHI1R_V810_GPBYTER_V810_GPHWORDR_V810_GPWORDR_V810_GPWLOR_V810_GPWHIR_V810_GPWHI1R_V850_HWLOR_V850_EP7BITR_V850_EPHBYTER_V850_EPWBYTER_V850_REGHWLOR_V850_GPHWLOR_V850_PCR22R_V850_BLOR_V850_EP4BITR_V850_EP5BITR_V850_REGBLOR_V850_GPBLOR_V810_WLO_1R_V810_GPWLO_1R_V850_BLO_1R_V850_HWLO_1R_V850_GPBLO_1R_V850_GPHWLO_1R_V850_EPBLOR_V850_EPHWLOR_V850_EPWLO_NR_V850_PC32R_V850_W23BITR_V850_GPW23BITR_V850_EPW23BITR_V850_B23BITR_V850_GPB23BITR_V850_EPB23BITR_V850_PC16UR_V850_PC17R_V850_DW8R_V850_GPDW8R_V850_EPDW8R_V850_PC9R_V810_REGBYTER_V810_REGHWORDR_V810_REGWORDR_V810_REGWLOR_V810_REGWHIR_V810_REGWHI1R_V850_REGW23BITR_V850_REGB23BITR_V850_REGDW8R_V810_EPBYTER_V810_EPHWORDR_V810_EPWORDR_V850_WLO23R_V850_WORD_ER_V850_REGWORD_ER_V850_WORDR_V850_GPWORDR_V850_REGWORDR_V850_EPWORDR_V810_TPBYTER_V810_TPHWORDR_V810_TPWORDR_V810_TPWLOR_V810_TPWHIR_V810_TPWHI1R_V850_TPHWLOR_V850_TPBLOR_V810_TPWLO_1R_V850_TPBLO_1R_V850_TPHWLO_1R_V850_TP23BITR_V850_TPW23BITR_V850_TPDW8R_V810_ABS32R_V850_SYMR_V850_OPaddR_V850_OPsubR_V850_OPsctsizeR_V850_OPscttopR_X86_64_NONER_X86_64_64R_X86_64_PC32R_X86_64_GOT32R_X86_64_PLT32R_X86_64_COPYR_X86_64_GLOB_DATR_X86_64_JUMP_SLOTR_X86_64_RELATIVER_X86_64_GOTPCRELR_X86_64_32R_X86_64_32SR_X86_64_16R_X86_64_PC16R_X86_64_8R_X86_64_PC8R_X86_64_DTPMOD64R_X86_64_DTPOFF64R_X86_64_TPOFF64R_X86_64_TLSGDR_X86_64_TLSLDR_X86_64_DTPOFF32R_X86_64_GOTTPOFFR_X86_64_TPOFF32R_X86_64_PC64R_X86_64_GOTOFF64R_X86_64_GOTPC32R_X86_64_GOT64R_X86_64_GOTPCREL64R_X86_64_GOTPC64R_X86_64_GOTPLT64R_X86_64_PLTOFF64R_X86_64_SIZE32R_X86_64_SIZE64R_X86_64_GOTPC32_TLSDESCR_X86_64_TLSDESC_CALLR_X86_64_TLSDESCR_X86_64_IRELATIVER_X86_64_RELATIVE64R_X86_64_PC32_BNDR_X86_64_PLT32_BNDR_X86_64_GOTPCRELXR_X86_64_REX_GOTPCRELXR_X86_64_GNU_VTINHERITR_X86_64_GNU_VTENTRYR_XTENSA_NONER_XTENSA_32R_XTENSA_RTLDR_XTENSA_GLOB_DATR_XTENSA_JMP_SLOTR_XTENSA_RELATIVER_XTENSA_PLTR_XTENSA_OP0R_XTENSA_OP1R_XTENSA_OP2R_XTENSA_ASM_EXPANDR_XTENSA_ASM_SIMPLIFYR_XTENSA_32_PCRELR_XTENSA_GNU_VTINHERITR_XTENSA_GNU_VTENTRYR_XTENSA_DIFF8R_XTENSA_DIFF16R_XTENSA_DIFF32R_XTENSA_SLOT0_OPR_XTENSA_SLOT1_OPR_XTENSA_SLOT2_OPR_XTENSA_SLOT3_OPR_XTENSA_SLOT4_OPR_XTENSA_SLOT5_OPR_XTENSA_SLOT6_OPR_XTENSA_SLOT7_OPR_XTENSA_SLOT8_OPR_XTENSA_SLOT9_OPR_XTENSA_SLOT10_OPR_XTENSA_SLOT11_OPR_XTENSA_SLOT12_OPR_XTENSA_SLOT13_OPR_XTENSA_SLOT14_OPR_XTENSA_SLOT0_ALTR_XTENSA_SLOT1_ALTR_XTENSA_SLOT2_ALTR_XTENSA_SLOT3_ALTR_XTENSA_SLOT4_ALTR_XTENSA_SLOT5_ALTR_XTENSA_SLOT6_ALTR_XTENSA_SLOT7_ALTR_XTENSA_SLOT8_ALTR_XTENSA_SLOT9_ALTR_XTENSA_SLOT10_ALTR_XTENSA_SLOT11_ALTR_XTENSA_SLOT12_ALTR_XTENSA_SLOT13_ALTR_XTENSA_SLOT14_ALTR_XTENSA_TLSDESC_FNR_XTENSA_TLSDESC_ARGR_XTENSA_TLS_DTPOFFR_XTENSA_TLS_TPOFFR_XTENSA_TLS_FUNCR_XTENSA_TLS_ARGR_XTENSA_TLS_CALLIA_64_PLT_RESERVEVMS_SUBTYPEVMS_IMGIOCNTVMS_LNKFLAGSVMS_VIR_MEM_BLK_SIZVMS_IDENTVMS_NEEDED_IDENTVMS_IMG_RELA_CNTVMS_SEG_RELA_CNTVMS_FIXUP_RELA_CNTVMS_FIXUP_NEEDEDVMS_SYMVEC_CNTVMS_XLATEDVMS_STACKSIZEVMS_UNWINDSZVMS_UNWIND_CODSEGVMS_UNWIND_INFOSEGVMS_SEG_NOVMS_SYMVEC_OFFSETVMS_SYMVEC_SEGVMS_UNWIND_OFFSETVMS_UNWIND_SEGVMS_STRTAB_OFFSETVMS_SYSVER_OFFSETVMS_IMG_RELA_OFFVMS_SEG_RELA_OFFVMS_FIXUP_RELA_OFFVMS_PLTGOT_OFFSETVMS_PLTGOT_SEGVMS_FPMODESUNW_AUXILIARYSUNW_RTLDINFSUNW_FILTERSUNW_CAPSUNW_SYMTABSUNW_SYMSZSUNW_SORTENTSUNW_SYMSORTSUNW_SYMSORTSZSUNW_TLSSORTSUNW_TLSSORTSZSUNW_CAPINFOSUNW_STRPADSUNW_CAPCHAINSUNW_LDMACHSUNW_CAPCHAINENTSUNW_CAPCHAINSZSUNW_PARENTSUNW_ASLRSUNW_RELAXSUNW_NXHEAPSUNW_NXSTACKUSEDHP_TLSHP_CORE_NONEHP_CORE_VERSIONHP_CORE_KERNELHP_CORE_COMMHP_CORE_PROCHP_CORE_LOADABLEHP_CORE_STACKHP_CORE_SHMHP_CORE_MMFHP_PARALLELHP_FASTBINDHP_OPT_ANNOTHP_HSL_ANNOTHP_STACKHP_CORE_UTSNAMEPARISC_ARCHEXTPARISC_UNWINDPARISC_WEAKORDERUNIX - System VUNIX - HP-UXUNIX - NetBSDUNIX - GNUUNIX - SolarisUNIX - AIXUNIX - IRIXUNIX - FreeBSDUNIX - TRU64Novell - ModestoUNIX - OpenBSDVMS - OpenVMSHP - Non-Stop KernelAROSFenixOSNuxi CloudABIStratus Technologies OpenVOSARMLinux C6000Standalone AppBare-metal C6000NONE (None)REL (Relocatable file)EXEC (Executable file)DYN (Shared object file)CORE (Core file)Processor Specific: (%x)OS Specific: (%x): %xWE32100SparcIntel 80386MC68000MC88000Intel MCUIntel 80860MIPS R3000IBM System/370MIPS R4000 big-endianSparc v9 (old)HPPAFujitsu VPP500Sparc v8+Intel 90860PowerPCPowerPC64IBM S/390SPUFujitsu FR20TRW RH32MCOREDigital Alpha (old)Renesas / SuperH SHSparc v9Siemens TricoreARCRenesas H8/300Renesas H8/300HRenesas H8SRenesas H8/500Intel IA-64Stanford MIPS-XMotorola ColdfireSiemens PCPDenso NDR1 microprocessprMotorola Star*Core processorToyota ME16 processorAdvanced Micro Devices X86-64Sony DSP processorSiemens FX66 microcontrollerSilicon Graphics SVxDigital VAXVitesse PrismFujitsu FR30d10vd30vRenesas V850mn10300mn10200picoJavaOpenRISC 1000ARCompactTensilica Xtensa ProcessorTenor Network TPC processorTrebia SNP 1000 processorMAX ProcessorFujitsu F2MC16Analog Devices BlackfinSharp embedded microprocessorArca RISC microprocessorUnicoreAltera Nios IIInfineon Technologies xc16xRenesas M32cAltium TSK3000 coreSUNPLUS S+CoreLattice Mico32Seiko Epson C17 familyTI PRU I/O processorCypress M8C microprocessorQUALCOMM DSP6 ProcessorIntel 8051 and variantsCyan Technology eCOG1X familyRenesas RXCyan Technology eCOG16 familyXilinx MicroBlazeIntel L1OMIntel K1OMIntel (reserved)AArch64ARM (reserved)NVIDIA CUDA architectureARCv2Renesas RL78Renesas 78K0RBeyond BA1 CPU architectureBeyond BA2 CPU architectureXMOS xCORE processor familyMicrochip 8-bit PIC(r) familyKM211 KM32 32-bit processorKM211 KMX32 32-bit processorKM211 KMX16 16-bit processorKM211 KMX8 8-bit processorKM211 KVARC processorBluechip Systems CoolEngineNanoradio Optimized RISCZilog Z80CDS VISIUMcore processorFTDI Chip FT32MoxieAMD GPURISC-VLanai 32-bit processorLinux BPFAlphaWeb AssemblyOpenDLXSanyo XStormy16 CPU coreVitesse IQ2000Altera NiosToshiba MeP Media EngineAdapteva EPIPHANYFujitsu FR-VNone: 0x%xSTRTABRELASZRELAENTSTRSZSYMENTFINISONAMERPATHRELENTTEXTRELJMPRELFINI_ARRAYFINI_ARRAYSZRUNPATHPREINIT_ARRAYPREINIT_ARRAYSZSYMTAB_SHNDXPLTPADSZMOVEENTMOVESZFEATUREPOSFLAG_1SYMINSZSYMINENTADDRRNGLOCONFIGDEPAUDITPLTPADMOVETABSYMINFOVERSYMTLSDESC_GOTTLSDESC_PLTRELACOUNTRELCOUNTFLAGS_1VERDEFVERDEFNUMVERNEEDVERNEEDNUMGNU_PRELINKEDGNU_CONFLICTGNU_CONFLICTSZGNU_LIBLISTGNU_LIBLISTSZGNU_HASHMIPS_FLAGSHP_UX10_INITSZHP_UX10_INITHP_DLD_FLAGSHP_LOAD_MAPHP_DLD_HOOKDLT_SIZEDLTPLT_SIZEHP_BIND_NOW_COUNTHP_LAZYLOADHP_COMPAT_FILTEREDHP_FILTER_TLSHP_FILTEREDHP_GST_EPLTRELSZHP_GST_EPLTRELHP_GST_HASHVALHP_GST_VERSIONHP_GST_SIZEHP_CHECKSUMHP_TIME_STAMPHP_NEEDEDHP_PREINITSZHP_PREINITMIPS_IVERSIONPPC_OPTPPC64_OPDALPHA_PLTROSCORE_LOCAL_GOTNOMIPS_TIME_STAMPNIOS2_GPC6000_PREEMPTMAPC6000_DSBT_SIZEC6000_DSBT_BASESCORE_BASE_ADDRESSSCORE_HIPAGENOSCORE_UNREFEXTNOSCORE_GOTSYMSCORE_SYMTABNOPPC64_GLINKPPC64_OPTPPC64_OPDSZPPC_GOTMIPS_RLD_VERSIONMIPS_ICHECKSUMMIPS_RWPLTMIPS_PLTGOTMIPS_AUX_DYNAMICMIPS_GP_VALUEMIPS_COMPACT_SIZEMIPS_PERF_SUFFIXMIPS_RLD_TEXT_RESOLVE_ADDRMIPS_INTERFACE_SIZEMIPS_DYNSTR_ALIGNMIPS_INTERFACEMIPS_OPTIONSMIPS_PROTECTED_GOTIDXMIPS_HIDDEN_GOTIDXMIPS_LOCAL_GOTIDXMIPS_LOCALPAGE_GOTIDXMIPS_SYMBOL_LIBMIPS_PIXIE_INITMIPS_CXX_FLAGSMIPS_DELTA_CLASSSYM_NOMIPS_DELTA_CLASSSYMMIPS_DELTA_SYM_NOMIPS_DELTA_SYMMIPS_DELTA_RELOC_NOMIPS_DELTA_RELOCMIPS_DELTA_INSTANCE_NOMIPS_DELTA_INSTANCEMIPS_DELTA_CLASS_NOMIPS_DELTA_CLASSMIPS_RLD_MAP_RELMIPS_RLD_MAPMIPS_HIPAGENOMIPS_GOTSYMMIPS_UNREFEXTNOMIPS_SYMTABNOMIPS_LIBLISTNOMIPS_CONFLICTNOMIPS_LOCAL_GOTNOMIPS_LIBLISTMIPS_CONFLICTMIPS_MSYMMIPS_BASE_ADDRESSProcessor Specific: %lx: %lxNT_AUXV (auxiliary vector)NT_PSINFO (psinfo structure)NT_SIGINFO (siginfo_t data)NT_FILE (mapped files)NT_VERSION (version)NT_ARCH (architecture)NT_GNU_BUILD_ATTRIBUTE_OPENNT_GNU_BUILD_ATTRIBUTE_FUNCUnknown note type: (0x%08x)1.2.1132-bit relocation dataout of memory parsing relocs 64-bit relocation datasymbol table section indiciessection headersReport bugs to %s %016lx%5ld???dynamic string sectiondynamic section image fixups %-32s %6u Image relocs 0x%08x %-31s %08lx i486586686SSESSE2SSSE3SSE4_1SSE4_2AVXAVX2AVX512FAVX512CDAVX512ERAVX512PFAVX512VLAVX512DQAVX512BWHard or soft float Soft float NaN 2008 compatibility ??? (%d) ) (%s: %s) readelf.cend > p 0x%8.8lx %2.2x Unknown GNU attribute: %s %6d(gp)%10sCOMDAT [0x%x: [Index] Name [%5u] %s nonewidth != 0^%c%.1s[%*.*lx]: OS (%*.*lx)PROC (%*.*lx)UNKNOWN (%*.*lx)%04u-%02u-%02uT%02u:%02u:%02u Tag_unknown_%d: %ld (0x%lx) p <= end Tag_ISA: C62xC67xC67x+C64xC64x+C674x Tag_ABI_wchar_t: Not used 2 bytes 4 bytes 8-byte 16-byte Tag_ABI_DSBT: DSBT addressing not used DSBT addressing used Tag_ABI_PID: Tag_ABI_PIC: 4-byte Tag_ABI_compatibility: flag = %d, vendor = Tag_ABI_conformance: " Tag_GNU_Power_ABI_FP: (%#x), unspecified hard/soft float, single-precision hard float, unspecified long double 128-bit IBM long double 64-bit long double 128-bit IEEE long double Tag_GNU_Power_ABI_Vector: unspecified generic AltiVecSPEr3/r4MSP430 MSP430X Tag_Code_Model: Small Tag_Data_Model: Restricted Large : %d (0x%x) Tag_%s: Application Microcontroller Application or Realtime ??? 38-byte, except leaf SP True attr->type & 0x80 Tag_ARC_ABI_sda: Tag_ARC_ABI_pic: r25 Tag_ARC_PCS_config: Absent/Non standard Bare metal/mwdt Bare metal/newlib Linux/uclibc Linux/glibc Unknown Tag_ARC_CPU_base: Absent ARC6xxARC7xxARCEMARCHS Tag_ARC_CPU_variation: Core%d Unknown Tag_ARC_CPU_name: yesno Tag_ARC_ABI_rf16: %s Tag_ARC_ABI_osver: v%d MWDT Tag_ARC_ABI_tls: %s defaultsmallest Tag_ARC_ABI_enumsize: %s OPTFP Tag_ARC_ABI_exceptions: %s Tag_ARC_ISA_config: Tag_ARC_ISA_apex: Tag_ARC_ISA_mpy_option: %d attributesTag section ends prematurely Attribute Section: File Attributes Section Attributes:Symbol Attributes:Unknown tag: %d p == endcorrupt vendor attribute Unknown attribute: NOTYPEOBJECTFILESRELCTHUMB_FUNCIFUNCPARISC_MILLIHP_STUBHP_OPAQUE: %d: %d: %dIA_64_EXTIA_64_UNWINDIA_64_PRIORITY_INITVMS_TRACEVMS_TIE_SIGNATURESVMS_DEBUGVMS_DEBUG_STRVMS_LINKAGESVMS_SYMBOL_VECTORVMS_FIXUPPROGBITSNOTENOBITSSHLIBSYMTAB SECTION INDICIESMIPS_PACKAGEMIPS_REGINFOMIPS_DEBUGSUNW_tlssortRENESAS INFORENESAS IOPSUNW_symsortSUNW_capchainGNU_ATTRIBUTESSUNW_ancillarySUNW_capinfoGNU_INCREMENTAL_INPUTSSUNW_versymSUNW_verneedSUNW_verdefSUNW_syminfoSUNW_COMDATSUNW_moveSUNW_DEBUGSUNW_DEBUGSTRSUNW_ANNOTATESUNW_SIGNATURESUNW_capSUNW_dofSUNW_LDYNSYMMIPS_UCODEX86_64_UNWINDAARCH64_ATTRIBUTESARM_PREEMPTMAPMSP430_SYM_ALIASESV850 Tiny CommonV850 Small CommonARC_ATTRIBUTESV850 Zero CommonMSP430_SEC_FLAGSMSP430_ATTRIBUTESARM_EXIDXARM_OVERLAYSECTIONARM_DEBUGOVERLAYARM_ATTRIBUTESPARISC_EXTPARISC_DLKMPARISC_STUBSPARISC_SYMEXTNPARISC_ANNOTPARISC_DOCC6000_UNWINDTI_PHATTRSTI_INITINFOTI_HANDLERTI_XREFTI_ICODEC6000_ATTRIBUTESMIPS_GPTABMIPS_ABIFLAGSMIPS_PDR_EXCEPTIONMIPS_XLATE_OLDMIPS_EH_REGIONMIPS_WHIRLMIPS_XLATE_DEBUGMIPS_XLATEMIPS_PIXIEMIPS_TRANSLATEMIPS_EVENTSMIPS_DELTADECLMIPS_DWARFMIPS_DELTACLASSMIPS_DELTAINSTMIPS_DELTASYMMIPS_RFDESCMIPS_LINEMIPS_LOCSTRMIPS_OPTSYMMIPS_AUXSYMMIPS_LOCSYMMIPS_PDESCMIPS_DENSEMIPS_EXTSYMMIPS_FDESCMIPS_SHDRMIPS_CONTENTMIPS_IFACEMIPS_RELDMIPS_PACKSYMLOPROC+%#xLOOS+%#xLOUSER+%#x%08x: %-15s %-15.15s AFTERBEFORE.gcc_compiled_long32.dynstrdynamic strings.debug_.zdebug_.gnu.linkonce.wi..eh_frame.gdb_index.debug_names Section Headers: Section Header: [Nr] Name Flags .rel.dyn.rela.dyn [%2u] %s %6.6lx %6.6lx %2.2lx%2u %2u %3u %2lu %6.6lx%2u %3u %-15.15s %16.16lx %u %-16u %lu %8.8lx %2u %3u %lu compression header ZLIB, [: 0x%x], , %lu l (large), y (purecode), p (processor specific).trace_<%s> WEAKUNIQUEDEFAULTINTERNALHIDDENEXPORTEDELIMINATEprogram headersdynamic sectionInvalid DT_SYMTAB entry: %lxdynamic string tablesymbol information (%s)%*sSTATIC_TLSAuxiliary libraryFilter libraryConfiguration fileDependency audit libraryAudit libraryFlags: None PARINIT CONFEXP LAZYLOAD GROUPPERM NOW GLOBAL GROUP NODELETE LOADFLTR INITFIRST NOOPEN ORIGIN DIRECT TRANS INTERPOSE NODEFLIB NODUMP CONFALT ENDFILTEE DISPRELDNE DISPRELPND NODIRECT IGNMULDEF NOKSYMS NOHDR EDITED NORELOC SYMINTPOSE GLOBAUDIT SINGLETON STUB PIEShared library: [%s] program interpreterLibrary soname: [%s]Library rpath: [%s]Library runpath: [%s] (bytes) Not needed object: [%s] Time Stamp: %s -- CALL_DEBUG NOP0BUFS P0IMAGE MKTHREADS UPCALLS IMGSTA INITIALIZE MAIN EXE_INIT TBK_IN_IMG DBG_IN_IMG TBK_IN_DSF DBG_IN_DSF SIGNATURES REL_SEG_OFF Addr: 0xversion definition section %#06x: Rev: %d Flags: %s Index: %d Cnt: %d Name index: %ld %#06x: Parent %d: %s Version Needs section %#06x: Version: %d File: %s File: %lx Cnt: %d %#06x: Name: %s %#06x: Name index: %lx Flags: %s Version: %d version string table Addr: version symbol data*invalid* %03x: 0 (*local*) 1 (*global*) %4x%cversion needversion need aux (2)version defversion def aux*both*(%s%-*s%*cINTERPPHDRGNU_EH_FRAMEGNU_STACKGNU_RELROC6000_PHATTRPT_SUNWSTACKPT_SUNWBSSPT_SUNW_EH_FRAMEPT_SUNW_UNWINDPT_LOSUNWPT_HISUNWPT_SUNWCAPPT_SUNWDTRACES390_PGSTEIA_64_ARCHEXTRTPROCAARCH64_ARCHEXT Elf file type is %s Entry point Program Headers: GNU_MBIND+%#lxLOPROC+%#lxLOOS+%#lx %-14.14s 0x%6.6lx 0x%5.5lx 0x%6.6lx %c%c%c %c%c%c .dynamic%%%ds Segment Sections... %2.2d uhandler ehandler.IA_64.unwind_info.gnu.linkonce.ia64unw..gnu.linkonce.ia64unwi..IA_64.unwind'%s'unwind info Unwind section unwind tableR_IA64_SEGREL <+%lx>: [], info at +0x%lx Unknown version. unwsec != NULLversion dataversion need aux (3)%16.16lx %16.16lx %12.12lx %12.12lx R_M32R_24R_M32R_32R_PRU_16_PMEMR_M32R_16R_M68HC11_8R_68K_32R_960_12R_AVR_32R_SPU_ADDR10R_D10V_10_PCREL_RR_D30V_6R_DLX_RELOC_8R_MN10300_32R_MN10200_32R_FR30_8R_FRV_32R_FT32_32R_MCORE_ADDR32R_MMIX_8R_MOXIE_32R_MSP430_32R_ALPHA_REFLONGR_OR1K_32R_PJ_DATA_DIR32R_CRIS_8R_860_32R_I370_ADDR31R_SCORE_HI16R_XSTORMY16_32R_CRX_REL4R_VAX_32R_VISIUM_8R_EPIPHANY_8R_IP2K_16R_IQ2000_16R_LM32_8R_M32C_16R_MT_16R_RELCR_CR16_NUM8R_MICROBLAZE_32R_XC16X_ABS_8R_WASM32_32R_XGATE_8R_WASM32_NONER_MT_NONER_MT_LO16R_MT_HI16R_MT_PC16R_MT_32_PCRELR_MT_32R_MOXIE_NONER_MOXIE_PCREL10R_PRU_NONER_PRU_ILLEGALR_PRU_GNU_DIFF32_PMEMR_PRU_GNU_DIFF16_PMEMR_PRU_GNU_DIFF32R_PRU_GNU_DIFF16R_PRU_GNU_DIFF8R_PRU_GNU_BFD_RELOC_8R_PRU_LDI32R_PRU_U8_PCRELR_PRU_S10_PCRELR_PRU_BFD_RELOC_32R_PRU_32_PMEMR_PRU_U16R_PRU_BFD_RELOC_16R_PRU_U16_PMEMIMMR_XGATE_NONER_XGATE_RL_GROUPR_XGATE_RL_JUMPR_XGATE_IMM5R_XGATE_IMM4R_XGATE_IMM3R_XGATE_IMM8_HIR_XGATE_IMM8_LOR_XGATE_PCREL_10R_XGATE_PCREL_9R_XGATE_GPAGER_XGATE_LO16R_XGATE_24R_XGATE_GNU_VTENTRYR_XGATE_GNU_VTINHERITR_XGATE_PCREL_16R_XGATE_32R_XGATE_16R_XGATE_PCREL_8R_XC16X_NONER_XC16X_SOFR_XC16X_SEGR_XC16X_POFR_XC16X_PAGR_XC16X_8_PCRELR_XC16X_ABS_32R_XC16X_ABS_16R_MICROBLAZE_NONER_MICROBLAZE_TLSTPREL32R_MICROBLAZE_TLSGOTTPREL32R_MICROBLAZE_TLSDTPREL64R_MICROBLAZE_TLSDTPREL32R_MICROBLAZE_TLSDTPMOD32R_MICROBLAZE_TLSLDR_MICROBLAZE_TLSGDR_MICROBLAZE_TLSR_MICROBLAZE_COPYR_MICROBLAZE_GOTOFF_32R_MICROBLAZE_GOTOFF_64R_MICROBLAZE_GLOB_DATR_MICROBLAZE_JUMP_SLOTR_MICROBLAZE_RELR_MICROBLAZE_PLT_64R_MICROBLAZE_GOT_64R_MICROBLAZE_GOTPC_64R_MICROBLAZE_GNU_VTENTRYR_MICROBLAZE_GNU_VTINHERITR_MICROBLAZE_32_SYM_OP_SYMR_MICROBLAZE_64_NONER_MICROBLAZE_SRW32R_MICROBLAZE_SRO32R_MICROBLAZE_32_LOR_MICROBLAZE_64R_MICROBLAZE_32_PCREL_LOR_MICROBLAZE_64_PCRELR_MICROBLAZE_32_PCRELR_CR16_NONER_CR16_GLOB_DATR_CR16_GOTC_REGREL20R_CR16_GOT_REGREL20R_CR16_SWITCH32R_CR16_SWITCH16R_CR16_SWITCH8R_CR16_DISP24aR_CR16_DISP24R_CR16_DISP16R_CR16_DISP8R_CR16_DISP4R_CR16_IMM32aR_CR16_IMM32R_CR16_IMM24R_CR16_IMM20R_CR16_IMM16R_CR16_IMM8R_CR16_IMM4R_CR16_ABS24R_CR16_ABS20R_CR16_REGREL20aR_CR16_REGREL20R_CR16_REGREL16R_CR16_REGREL14aR_CR16_REGREL14R_CR16_REGREL4aR_CR16_REGREL4R_CR16_NUM32aR_CR16_NUM32R_CR16_NUM16R_MEP_NONER_MEP_GNU_VTENTRYR_MEP_GNU_VTINHERITR_MEP_ADDR24A4R_MEP_UIMM24R_MEP_TPREL7A4R_MEP_TPREL7A2R_MEP_TPREL7R_MEP_TPRELR_MEP_GPRELR_MEP_HI16SR_MEP_HI16UR_MEP_LOW16R_MEP_PCABS24A2R_MEP_PCREL24A2R_MEP_PCREL17A2R_MEP_PCREL12A2R_MEP_PCREL8A2R_MEP_32R_MEP_16R_MEP_8R_M32C_NONER_M32C_RL_2ADDRR_M32C_RL_1ADDRR_M32C_RL_JUMPR_M32C_HI16R_M32C_HI8R_M32C_LO16R_M32C_8R_M32C_16_PCRELR_M32C_8_PCRELR_M32C_32R_M32C_24R_LM32_NONER_LM32_RELATIVER_LM32_JMP_SLOTR_LM32_GLOB_DATR_LM32_COPYR_LM32_GOTOFF_LO16R_LM32_GOTOFF_HI16R_LM32_16_GOTR_LM32_GNU_VTENTRYR_LM32_GNU_VTINHERITR_LM32_BRANCHR_LM32_CALLR_LM32_GPREL16R_LM32_LO16R_LM32_HI16R_LM32_32R_LM32_16R_IQ2000_NONER_IQ2000_GNU_VTENTRYR_IQ2000_GNU_VTINHERITR_IQ2000_32_DEBUGR_IQ2000_UHI16R_IQ2000_OFFSET_21R_IQ2000_OFFSET_16R_IQ2000_LO16R_IQ2000_HI16R_IQ2000_PC16R_IQ2000_26R_IQ2000_32R_IP2K_NONER_IP2K_EX8DATAR_IP2K_FR_OFFSETR_IP2K_TEXTR_IP2K_PC_SKIPR_IP2K_HI8INSNR_IP2K_LO8INSNR_IP2K_HI8DATAR_IP2K_LO8DATAR_IP2K_PAGE3R_IP2K_ADDR16CJPR_IP2K_BANKR_IP2K_FR9R_IP2K_32R_EPIPHANY_NONER_EPIPHANY_IMM8R_EPIPHANY_IMM11R_EPIPHANY_SIMM11R_EPIPHANY_LOWR_EPIPHANY_HIGHR_EPIPHANY_SIMM24R_EPIPHANY_SIMM8R_EPIPHANY_32_PCRELR_EPIPHANY_16_PCRELR_EPIPHANY_8_PCRELR_EPIPHANY_32R_EPIPHANY_16R_VISIUM_NONER_VISIUM_GNU_VTENTRYR_VISIUM_GNU_VTINHERITR_VISIUM_IM16_PCRELR_VISIUM_LO16_PCRELR_VISIUM_HI16_PCRELR_VISIUM_IM16R_VISIUM_LO16R_VISIUM_HI16R_VISIUM_PC16R_VISIUM_32_PCRELR_VISIUM_16_PCRELR_VISIUM_8_PCRELR_VISIUM_32R_VISIUM_16R_VAX_NONER_VAX_GNU_VTENTRYR_VAX_GNU_VTINHERITR_VAX_RELATIVER_VAX_JMP_SLOTR_VAX_GLOB_DATR_VAX_COPYR_VAX_PLT32R_VAX_GOT32R_VAX_PC8R_VAX_PC16R_VAX_PC32R_VAX_8R_VAX_16R_CRX_NONER_CRX_SWITCH32R_CRX_SWITCH16R_CRX_SWITCH8R_CRX_IMM32R_CRX_IMM16R_CRX_NUM32R_CRX_NUM16R_CRX_NUM8R_CRX_ABS32R_CRX_ABS16R_CRX_REGREL32R_CRX_REGREL28R_CRX_REGREL22R_CRX_REGREL12R_CRX_REL32R_CRX_REL24R_CRX_REL16R_CRX_REL8_CMPR_CRX_REL8R_XSTORMY16_NONER_XSTORMY16_GNU_VTENTRYR_XSTORMY16_GNU_VTINHERITR_XSTORMY16_12R_XSTORMY16_HI16R_XSTORMY16_LO16R_XSTORMY16_FPTR16R_XSTORMY16_24R_XSTORMY16_REL_12R_XSTORMY16_PC8R_XSTORMY16_PC16R_XSTORMY16_PC32R_XSTORMY16_8R_XSTORMY16_16R_SCORE_NONER_SCORE_IMM32R_SCORE_IMM30R_SCORE_DUMMY_HI16R_SCORE_REL32R_SCORE_GPREL32R_SCORE_CALL15R_SCORE_GOT_LO16R_SCORE_GOT15R_SCORE_GNU_VTENTRYR_SCORE_GNU_VTINHERITR_SCORE_GP15R_SCORE_DUMMY2R_SCORE_ABS16R_SCORE_ABS32R_SCORE16_PC8R_SCORE16_11R_SCORE_PC19R_SCORE_24R_SCORE_BCMPR_SCORE_LO16R_I370_NONER_I370_RELATIVER_I370_COPYR_I370_REL8R_I370_ADDR8R_I370_REL12R_I370_ADDR12R_I370_REL32R_I370_REL31R_I370_ADDR16R_I370_ADDR32R_860_NONER_860_HIGOTOFFR_860_HIGOTR_860_HIGHR_860_HAPCR_860_HAGOTOFFR_860_HAGOTR_860_HIGHADJR_860_LOPCR_860_LOGOTOFF3R_860_LOGOTOFF2R_860_SPGOTOFF1R_860_LOGOTOFF1R_860_SPGOTOFF0R_860_LOGOTOFF0R_860_SPGOT1R_860_LOGOT1R_860_SPGOT0R_860_LOGOT0R_860_LOW3R_860_SPLIT2R_860_LOW2R_860_SPLIT1R_860_LOW1R_860_SPLIT0R_860_LOW0R_860_PC16R_860_PLT26R_860_PC26R_860_RELATIVER_860_JUMP_SLOTR_860_GLOB_DATR_860_COPYR_CRIS_NONER_CRIS_32_IER_CRIS_DTPMODR_CRIS_16_TPRELR_CRIS_32_TPRELR_CRIS_16_GOT_TPRELR_CRIS_32_GOT_TPRELR_CRIS_16_DTPRELR_CRIS_32_DTPRELR_CRIS_DTPR_CRIS_32_GDR_CRIS_16_GOT_GDR_CRIS_32_GOT_GDR_CRIS_32_PLT_PCRELR_CRIS_32_PLT_GOTRELR_CRIS_32_GOTRELR_CRIS_32_GOTPLTR_CRIS_16_GOTPLTR_CRIS_32_GOTR_CRIS_16_GOTR_CRIS_RELATIVER_CRIS_JUMP_SLOTR_CRIS_GLOB_DATR_CRIS_COPYR_CRIS_GNU_VTENTRYR_CRIS_GNU_VTINHERITR_CRIS_32_PCRELR_CRIS_16_PCRELR_CRIS_8_PCRELR_CRIS_32R_CRIS_16R_PJ_NONER_PJ_GNU_VTENTRYR_PJ_GNU_VTINHERITR_PJ_CODE_HI16R_PJ_CODE_LO16R_PJ_CODE_DIR16R_PJ_CODE_DIR32R_PJ_CODE_REL16R_PJ_CODE_REL32R_OR1K_NONER_OR1K_TLS_DTPMODR_OR1K_TLS_DTPOFFR_OR1K_TLS_TPOFFR_OR1K_TLS_LE_LO16R_OR1K_TLS_LE_HI16R_OR1K_TLS_IE_LO16R_OR1K_TLS_IE_HI16R_OR1K_TLS_LDO_LO16R_OR1K_TLS_LDO_HI16R_OR1K_TLS_LDM_LO16R_OR1K_TLS_LDM_HI16R_OR1K_TLS_GD_LO16R_OR1K_TLS_GD_HI16R_OR1K_RELATIVER_OR1K_JMP_SLOTR_OR1K_GLOB_DATR_OR1K_COPYR_OR1K_GOTOFF_LO16R_OR1K_GOTOFF_HI16R_OR1K_PLT26R_OR1K_GOT16R_OR1K_GOTPC_LO16R_OR1K_GOTPC_HI16R_OR1K_8_PCRELR_OR1K_16_PCRELR_OR1K_32_PCRELR_OR1K_GNU_VTINHERITR_OR1K_GNU_VTENTRYR_OR1K_INSN_REL_26R_OR1K_HI_16_IN_INSNR_OR1K_LO_16_IN_INSNR_OR1K_8R_OR1K_16R_ALPHA_NONER_ALPHA_TPREL16R_ALPHA_TPRELLOR_ALPHA_TPRELHIR_ALPHA_TPREL64R_ALPHA_GOTTPRELR_ALPHA_DTPREL16R_ALPHA_DTPRELLOR_ALPHA_DTPRELHIR_ALPHA_DTPREL64R_ALPHA_GOTDTPRELR_ALPHA_DTPMOD64R_ALPHA_TLSLDMR_ALPHA_TLSGDR_ALPHA_BRSGPR_ALPHA_RELATIVER_ALPHA_JMP_SLOTR_ALPHA_GLOB_DATR_ALPHA_COPYR_ALPHA_GPREL16R_ALPHA_GPRELLOWR_ALPHA_GPRELHIGHR_ALPHA_SREL64R_ALPHA_SREL32R_ALPHA_SREL16R_ALPHA_HINTR_ALPHA_BRADDRR_ALPHA_GPDISPR_ALPHA_LITUSER_ALPHA_LITERALR_ALPHA_GPREL32R_ALPHA_REFQUADR_MSP430_NONER_MSP430_SYM_DIFFR_MSP430_8R_MSP430_RL_PCRELR_MSP430_2X_PCRELR_MSP430_16_PCREL_BYTER_MSP430_16_BYTER_MSP430_16_PCRELR_MSP430_16R_MSP430_10_PCRELR_MMIX_NONER_MMIX_PUSHJ_STUBBABLER_MMIX_LOCALR_MMIX_BASE_PLUS_OFFSETR_MMIX_REGR_MMIX_REG_OR_BYTER_MMIX_ADDR27R_MMIX_ADDR19R_MMIX_JMP_3R_MMIX_JMP_2R_MMIX_JMP_1R_MMIX_JMPR_MMIX_PUSHJ_3R_MMIX_PUSHJ_2R_MMIX_PUSHJ_1R_MMIX_PUSHJR_MMIX_CBRANCH_3R_MMIX_CBRANCH_2R_MMIX_CBRANCH_1R_MMIX_CBRANCH_JR_MMIX_CBRANCHR_MMIX_GETA_3R_MMIX_GETA_2R_MMIX_GETA_1R_MMIX_GETAR_MMIX_GNU_VTENTRYR_MMIX_GNU_VTINHERITR_MMIX_PC_64R_MMIX_PC_32R_MMIX_PC_24R_MMIX_PC_16R_MMIX_PC_8R_MMIX_64R_MMIX_32R_MMIX_24R_MMIX_16R_MCORE_NONER_MCORE_JUMP_SLOTR_MCORE_GLOB_DATR_MCORE_COPYR_MCORE_RELATIVER_MCORE_GNU_VTENTRYR_MCORE_GNU_VTINHERITR_MCORE_PCRELJSR_IMM11BY2R_MCORE_PCREL32R_MCORE_PCRELIMM4BY2R_MCORE_PCRELIMM11BY2R_MCORE_PCRELIMM8BY4R_FT32_NONER_FT32_18R_FT32_17R_FT32_20R_FT32_10R_FT32_8R_FT32_16R_FRV_NONER_FRV_GNU_VTENTRYR_FRV_GNU_VTINHERITR_FRV_TLSMOFFR_FRV_TLSOFF_RELAXR_FRV_GETTLSOFF_RELAXR_FRV_TLSDESC_RELAXR_FRV_TLSOFFR_FRV_GOTTLSOFFLOR_FRV_GOTTLSOFFHIR_FRV_GOTTLSOFF12R_FRV_TLSMOFFLOR_FRV_TLSMOFFHIR_FRV_TLSMOFF12R_FRV_GOTTLSDESCLOR_FRV_GOTTLSDESCHIR_FRV_GOTTLSDESC12R_FRV_TLSDESC_VALUER_FRV_GETTLSOFFR_FRV_GOTOFFLOR_FRV_GOTOFFHIR_FRV_GOTOFF12R_FRV_FUNCDESC_GOTOFFLOR_FRV_FUNCDESC_GOTOFFHIR_FRV_FUNCDESC_GOTOFF12R_FRV_FUNCDESC_VALUER_FRV_FUNCDESC_GOTLOR_FRV_FUNCDESC_GOTHIR_FRV_FUNCDESC_GOT12R_FRV_FUNCDESCR_FRV_GOTLOR_FRV_GOTHIR_FRV_GOT12R_FRV_GPRELLOR_FRV_GPRELHIR_FRV_GPREL32R_FRV_GPRELU12R_FRV_GPREL12R_FRV_HI16R_FRV_LO16R_FRV_LABEL24R_FRV_LABEL16R_FR30_NONER_FR30_GNU_VTENTRYR_FR30_GNU_VTINHERITR_FR30_12_PCRELR_FR30_9_PCRELR_FR30_10_IN_8R_FR30_9_IN_8R_FR30_8_IN_8R_FR30_6_IN_4R_FR30_48R_FR30_32R_FR30_20R_MN10200_NONER_MN10200_PCREL24R_MN10200_PCREL16R_MN10200_PCREL8R_MN10200_24R_MN10200_8R_MN10200_16R_MN10300_NONER_MN10300_ALIGNR_MN10300_SYM_DIFFR_MN10300_TLS_TPOFFR_MN10300_TLS_DTPOFFR_MN10300_TLS_DTPMODR_MN10300_TLS_LER_MN10300_TLS_IER_MN10300_TLS_GOTIER_MN10300_TLS_LDOR_MN10300_TLS_LDR_MN10300_TLS_GDR_MN10300_RELATIVER_MN10300_JMP_SLOTR_MN10300_GLOB_DATR_MN10300_COPYR_MN10300_GOT16R_MN10300_GOT24R_MN10300_GOT32R_MN10300_PLT16R_MN10300_PLT32R_MN10300_GOTOFF16R_MN10300_GOTOFF24R_MN10300_GOTOFF32R_MN10300_GOTPC16R_MN10300_GOTPC32R_MN10300_24R_MN10300_GNU_VTENTRYR_MN10300_GNU_VTINHERITR_MN10300_PCREL8R_MN10300_PCREL16R_MN10300_PCREL32R_MN10300_8R_MN10300_16R_DLX_NONER_DLX_RELOC_26_PCRELR_DLX_RELOC_16_PCRELR_DLX_RELOC_16_LOR_DLX_RELOC_16_HIR_DLX_GNU_VTENTRYR_DLX_GNU_VTINHERITR_DLX_RELOC_32R_DLX_RELOC_16R_D30V_NONER_D30V_32_NORMALR_D30V_32_PCRELR_D30V_32R_D30V_21_PCREL_RR_D30V_21_PCRELR_D30V_21R_D30V_15_PCREL_RR_D30V_15_PCRELR_D30V_15R_D30V_9_PCREL_RR_D30V_9_PCRELR_D10V_NONER_D10V_GNU_VTENTRYR_D10V_GNU_VTINHERITR_D10V_32R_D10V_18_PCRELR_D10V_18R_D10V_16R_D10V_10_PCREL_LR_SPU_NONER_SPU_ADD_PICR_SPU_PPU64R_SPU_PPU32R_SPU_ADDR16XR_SPU_REL32R_SPU_ADDR16IR_SPU_ADDR10IR_SPU_REL9IR_SPU_REL9R_SPU_ADDR7R_SPU_REL16R_SPU_ADDR32R_SPU_ADDR18R_SPU_ADDR16_LOR_SPU_ADDR16_HIR_SPU_ADDR16R_AVR_NONER_AVR_32_PCRELR_AVR_PORT5R_AVR_PORT6R_AVR_LDS_STS_16R_AVR_DIFF32R_AVR_DIFF16R_AVR_DIFF8R_AVR_8_HLO8R_AVR_8_HI8R_AVR_8_LO8R_AVR_8R_AVR_HI8_LDI_GSR_AVR_LO8_LDI_GSR_AVR_MS8_LDI_NEGR_AVR_MS8_LDIR_AVR_6_ADIWR_AVR_6R_AVR_LDIR_AVR_CALLR_AVR_HH8_LDI_PM_NEGR_AVR_HI8_LDI_PM_NEGR_AVR_LO8_LDI_PM_NEGR_AVR_HH8_LDI_PMR_AVR_HI8_LDI_PMR_AVR_LO8_LDI_PMR_AVR_HH8_LDI_NEGR_AVR_HI8_LDI_NEGR_AVR_LO8_LDI_NEGR_AVR_HH8_LDIR_AVR_HI8_LDIR_AVR_LO8_LDIR_AVR_16_PMR_AVR_16R_AVR_13_PCRELR_AVR_7_PCRELR_960_NONER_960_OPTCALLXAR_960_OPTCALLXR_960_OPTCALLR_960_SUBR_960_IP24R_960_32R_68K_NONER_68K_TLS_TPREL32R_68K_TLS_DTPREL32R_68K_TLS_DTPMOD32R_68K_TLS_LE8R_68K_TLS_LE16R_68K_TLS_LE32R_68K_TLS_IE8R_68K_TLS_IE16R_68K_TLS_IE32R_68K_TLS_LDO8R_68K_TLS_LDO16R_68K_TLS_LDO32R_68K_TLS_LDM8R_68K_TLS_LDM16R_68K_TLS_LDM32R_68K_TLS_GD8R_68K_TLS_GD16R_68K_TLS_GD32R_68K_GNU_VTENTRYR_68K_GNU_VTINHERITR_68K_RELATIVER_68K_JMP_SLOTR_68K_GLOB_DATR_68K_COPYR_68K_PLT8OR_68K_PLT16OR_68K_PLT32OR_68K_PLT8R_68K_PLT16R_68K_PLT32R_68K_GOT8OR_68K_GOT16OR_68K_GOT32OR_68K_GOT8R_68K_GOT16R_68K_GOT32R_68K_PC8R_68K_PC16R_68K_PC32R_68K_8R_68K_16R_M68HC11_NONER_M68HC11_RL_GROUPR_M68HC11_RL_JUMPR_M68HC12_LO8XGR_M68HC12_HI8XGR_M68HC12_PCREL_10R_M68HC12_PCREL_9R_M68HC12_16BR_M68HC11_PAGER_M68HC11_LO16R_M68HC11_24R_M68HC11_GNU_VTENTRYR_M68HC11_GNU_VTINHERITR_M68HC11_PCREL_16R_M68HC11_3BR_M68HC11_32R_M68HC11_16R_M68HC11_PCREL_8R_M68HC11_LO8R_M68HC11_HI8R_M32R_NONER_M32R_GOTOFF_LOR_M32R_GOTOFF_HI_SLOR_M32R_GOTOFF_HI_ULOR_M32R_GOTPC_LOR_M32R_GOTPC_HI_SLOR_M32R_GOTPC_HI_ULOR_M32R_GOT16_LOR_M32R_GOT16_HI_SLOR_M32R_GOT16_HI_ULOR_M32R_GOTPC24R_M32R_GOTOFFR_M32R_RELATIVER_M32R_JMP_SLOTR_M32R_GLOB_DATR_M32R_COPYR_M32R_26_PLTRELR_M32R_GOT24R_M32R_REL32R_M32R_RELA_GNU_VTENTRYR_M32R_RELA_GNU_VTINHERITR_M32R_SDA16_RELAR_M32R_LO16_RELAR_M32R_HI16_SLO_RELAR_M32R_HI16_ULO_RELAR_M32R_26_PCREL_RELAR_M32R_18_PCREL_RELAR_M32R_10_PCREL_RELAR_M32R_24_RELAR_M32R_32_RELAR_M32R_16_RELAR_M32R_GNU_VTENTRYR_M32R_GNU_VTINHERITR_M32R_SDA16R_M32R_LO16R_M32R_HI16_SLOR_M32R_HI16_ULOR_M32R_26_PCRELR_M32R_18_PCRELR_M32R_10_PCREL%-22.22s%-17.17sBYTOFFJSRJSRDIRECT@@%sSUNDEFLARGE_COMMONANSI_COMVMS_SYMVECSCOMMON%8.8lx %8.8lx unrecognized: %-7lx()%-*s
- %lx + %lx-%lx Type2: Type3: unwind datasection contentsMIPS PLTOPTIONALMIPS16MICROMIPS, MIPS PICMICROMIPS: %d: %xSCOMLARGE_COMSUNDPRC[0x%04x]OS [0x%04x]RSV[0x%04x]bad section index[%3d]%3d %3lu: %-7s %-6s [%s] %3.3s Symbol table for image: %6d: %4s @%s (%d)histogram chain is corrupt 0 %-10lu (%5.1f%%) .PARISC.unwindR_PARISC_SEGREL] Cannot_unwind Millicode_save_sr0 Entry_SR Entry_FR=%d Entry_GR=%d Args_stored Variable_Frame Separate_Package_Body Frame_Extension_Millicode Stack_Overflow_Check Two_Instruction_SP_Increment Ada_Region cxx_info cxx_try_catch sched_entry_seq Save_SP Save_RP Save_MRP_in_frame extn_ptr_defined Cleanup_defined MPE_XL_interrupt_marker HP_UX_interrupt_marker Large_frame Pseudo_SP_Set Total_frame_size=%d <+0x%lx Personality routine: __gcc_personality_v0__gxx_personality_v0__gcj_personality_v0__gnu_objc_personality_v0 Compact model index: %d 0x%02x vsp = vsp + %d vsp = vsp - %d[Truncated opcode] Refuse to unwind [Reserved] vsp = r%d pop { finish[Spare]len == i + 1vsp = vsp + %ldpop {D%d-D%dpop {D8 pop {wR10-wR%dpop {wR%dwCGR%d [unsupported opcode] [reserved] sp = sp + %dpop compact {pop frame {[pad] MOV FP, SP __c6xabi_pop_rtssp = sp + %ld RETURN MV %s, B3 Stack increment %d Registers restored: (compact) Return register: %s [reserved (%d)] corrupt change to vsp|INEX%sUFLO%sOFLO%sDIV0%sINVAL [cantunwind] Tag_GNU_Sparc_HWCAPS: mul32%sdiv32%sfsmuld%sv8plus%spopc%svis%svis2%sASIBlkInit%sfmaf%svis3%shpc%srandom%strans%sfjfmau%sima%scspare Tag_GNU_Sparc_HWCAPS2: fjathplus%svis3b%sadp%ssparc5%smwait%sxmpmul%sxmont2%snsec%sfjathhpc%sfjdes%sfjaes Tag_GNU_S390_ABI_Vector: any software hardware Tag_GNU_MIPS_ABI_FP: Tag_GNU_MIPS_ABI_MSA: Any MSA or not 128-bit MSA emacemac_b, uses String instructions, bans String instructions, nodiv, nouspA+, , link-relaxunknown mac, , Configuration Index: %#x, unknown flags bits: %#x, relocatable, relocatable-lib, 3900, 4010, 4100, 4111, 4120, 4650, 5400, 5500, 9000, loongson-2e, loongson-2f, loongson-3a, unknown CPU, unknown ABI, unknown ISA, %s, 16b, , MFUSR_PC, MAC, DIV, [B8], EX9, MAC_DX, DIV_DX, IFC, PERF1, PERF2, FPU_SP, FPU_DP, FPU_MAC, FPU_REG:8/4, FPU_REG:16/8, FPU_REG:32/16, FPU_REG:32/32, AUDIO, STR, 16REG, VIDEO, SATURATION, ENCRP, L2C, sh3e, sh2e, sh4a, sh2a, sh4a-nofpu, sh2a-nofpu, sh2a-nofpu-or-sh3-nommu, sh2a-or-sh4, sh2a-or-sh3e: architecture variant: : unknown%s section dataZLIB Hex dump of section '%s': (NONE)NT_VMS_TITLENT_VMS_PATCHTIMENT_VMS_ORIG_DYNNT_VMS_LINKTIME!+*$**$!+staticpicpiestrongLinuxHurdSyllableNaClData sizeOwner %-20s %10s Description NT_GNU_PROPERTY_TYPE_0NT_PROCSTAT_PROC (proc data)NT_PROCSTAT_AUXV (auxv data)NetBSD-CORENetBSD procinfo structurePT_GETREGS (reg structure)PT_FIRSTMACH+%d NetBSD 0x%08lx MARCH <%s> SPU/IPF/VMSNT_VMS_MHD (module header)NT_VMS_LNM (language name)NT_VMS_SRC (source files)NT_VMS_FPMODE (FP mode)NT_VMS_IMGNAM (image name)NT_VMS_IMGID (image id)NT_VMS_LINKID (link id)NT_VMS_IMGBID (build id)stapsdt GA0x00x%llx0x%-.*llxtruefalse 0x%08lx %s 0x%08lx %s Creation date : %.17s Last patch date: %.17s Module name : %s Module version : %s Invalid size Language: %s Floating Point mode: 0x%016lx Link time: Patch time: Last modified : Link flags : Header flags: 0x%08x Image id : %s Image name: %s Image id: %s Linker id: %s Build ID: OS: %s, ABI: %ld.%ld.%ld Version: Hardware Capabilities: Properties: x86 ISA used: x86 ISA needed: x86 feature: IBTSHSTKstack size: no copy on protected Description data: Provider: %s Name: %s Location: , Base: , Semaphore: Arguments: %s Page size: Page OffsetEndStart %*s%*s%*s %s Applies from offset %#lx Applies to func at %#lx Applies from offset %#lx description data: .MIPS.abiflagsMIPS ABI Flags section MIPS ABI Flags Version: %d ISA: MIPS%d GPR size: %d CPR1 size: %d CPR2 size: %d FP ABI: ISA Extension: RMI XLRCavium Networks Octeon3Cavium Networks Octeon2Cavium Networks OcteonPLoongson 3ACavium Networks OcteonToshiba R5900MIPS R4650LSI R4010NEC VR4100Toshiba R3900MIPS R10000Broadcom SB-1NEC VR4111/VR4181NEC VR4120NEC VR5400NEC VR5500Imagination interAptiv MR2 ASEs: DSP ASE DSP R2 ASE DSP R3 ASE Enhanced VA Scheme MCU (MicroController) ASE MDMX ASE MIPS-3D ASE MT ASE SmartMIPS ASE VZ ASE MSA ASE MIPS16 ASE MICROMIPS ASE XPA ASE MIPS16e2 ASE %s %s (%x) FLAGS 1: %8.8lx FLAGS 2: %8.8lx.gotGlobal Offset Table data Static GOT: Canonical gp value: Reserved entries: ValueAccessAddress %*s %10s %*s liblist section data %s %#10lx %-7ld NONE NULL %d %lx REGINFO GPR %08lx GP 0x%lx GPR %08lx GP 0x EXCEPTIONS fpe_min() fpe_max( PAGE0 SMM FPDBUG DISMISS PAD PREFIX POSTFIX SYMBOL HWPATCH R4KEOP R8KPFETCH R5KEOP R5KCVTL FILL TAGS HWAND R4KEOP_CHECKED R4KEOP_CLEAN HWOR %3d ??? %d %lx\%03oconflict%5lu: %8lu Too many GOT symbols: %lu Primary GOT: Initial %*s %10s %*s Purpose Lazy resolver Local entries: Global entries: NdxTypeSym.Val. %-7s %3s Procedure Linkage Table data PLT GOT: %*s %*s Purpose PLT lazy resolver Module pointer Entries: %*s %*s %*s %-7s %3s %s No MIPS_OPTIONS header found optionsELF32ELF64(current).debug_info File: %s ELF Header: Magic: %2.2x 2's complement, little endian2's complement, big endian (bytes into file) (%ld) (%u) Relocation section %4d: SELF PARENT %-10d PASSTHRU COPY [%6tx] .debug_line.v850 notesAlignment of 8-byte objectsSizeof double and long doubleType of FPU support neededUse of SIMD instructionsUse of cacheUse of MMU %s: not set 4-bytes 8-bytes FPU-2.0 FPU-3.0 yes unknown value: %x liblist string table%-20s%-20.20s %s %#010lx %-7ld %-7ld aeabimspabi.nds32_e_flags NDS32 elf flags section:NDS32 elf flags section(VEC_SIZE): No entry.(VEC_SIZE): 4 bytes(VEC_SIZE): 16 bytes(VEC_SIZE): reservedc6xabignu%s: bad archive file name /usr/local/share/localebinutilsInvalid option '-%c' Nothing to do. '%s': No such file '%s' is not an ordinary file EXACT_MATCH IGNORE_INT_VER REQUIRE_MINOR EXPORTS DELAY_LOAD DELTAHP_DEBUG_PRIVATEHP_DEBUG_CALLBACKHP_DEBUG_CALLBACK_BORHP_NO_ENVVARHP_BIND_NOWHP_BIND_NONFATALHP_BIND_VERBOSEHP_BIND_RESTRICTEDHP_BIND_SYMBOLICHP_RPATH_FIRSTHP_BIND_DEPTH_FIRSTHP_GSTHP_SHLIB_FIXEDHP_MERGE_SHLIB_SEGHP_NODELETEHP_GROUPHP_PROTECT_LINKAGE_TABLENOTPOTNO_LIBRARY_REPLACEMENTNO_MOVESGI_ONLYGUARANTEE_INITDELTA_C_PLUS_PLUSGUARANTEE_START_INITDEFAULT_DELAY_LOADREQUICKSTARTREQUICKSTARTEDCORDNO_UNRES_UNDEFRLD_ORDER_SAFEWRITEALLOCEXECMERGESTRINGSINFO LINKLINK ORDEROS NONCONFSHORTNORECOVVMS_GLOBALVMS_OVERLAIDVMS_SHAREDVMS_VECTORVMS_ALLOC_64BITVMS_PROTECTEDEXCLUDEORDEREDCOMPRESSEDENTRYSECTARM_PURECODECOMDEFGNU_MBINDAndes Star v1.0Andes Star v2.0Andes Star v3.0Andes Star v3.0mAndes ELF V1.3 or olderAndes ELF V1.3.1Andes ELF V1.4ABI v0ABI v1ABI v2ABI v2fpAABIABI2 FP+CPU_raw_nameCPU_nameCPU_archCPU_arch_profileARM_ISA_useTHUMB_ISA_useWMMX_archAdvanced_SIMD_archPCS_configABI_PCS_R9_useABI_PCS_RW_dataABI_PCS_RO_dataABI_PCS_GOT_useABI_PCS_wchar_tABI_FP_roundingABI_FP_denormalABI_FP_exceptionsABI_FP_user_exceptionsABI_FP_number_modelABI_align_neededABI_align_preservedABI_enum_sizeABI_HardFP_useABI_VFP_argsABI_WMMX_argsABI_optimization_goalsABI_FP_optimization_goalscompatibilityCPU_unaligned_accessFP_HP_extensionABI_FP_16bit_formatMPextension_useDIV_useDSP_extensionnodefaultsalso_compatible_withT2EE_useconformanceVirtualization_useMPextension_use_legacyNot AllowedTrustZoneVirtualization ExtensionsNot allowedFollow architectureIEEE 754Alternative Formatv6Prefer SpeedAggressive SpeedPrefer SizeAggressive SizePrefer AccuracyAggressive AccuracyPrefer DebugAggressive DebugAAPCSWMMX registerscustomVFP registerscompatibleAs Tag_FP_archSP onlyReservedDeprecatedUnusedforced to intFiniteRTABINeededSign only??? 1GOT-indirectAbsolutePC-relativeSB-relativeV6Bare platformLinux applicationLinux DSOPalmOS 2004PalmOS (reserved)SymbianOS 2004SymbianOS (reserved)NoNEONv1NEONv1 with Fused-MACNEON for ARMv8NEON for ARMv8.1WMMXv1WMMXv2VFPv1VFPv2VFPv3VFPv3-D16VFPv4VFPv4-D16FP for ARMv8FPv5/FP-D16 for ARMv8Thumb-1Thumb-2YesPre-v4v4Tv5Tv5TEv5TEJv6KZv6T2v6Kv7v6-Mv6S-Mv7E-Mv8-Rv8-M.baselinev8-M.mainlineA15B15B14B13B12B11B10A14A13A12A11A10[invalid reg 13][invalid reg 14][invalid reg 15]file-headerprogram-headershistogramsegmentssectionssection-headerssection-groupssection-detailsfull-section-namedyn-symsrelocsarch-specificversion-infouse-dynamicarchive-indexhex-dumprelocated-dumpstring-dumpdecompressdebug-dumpdwarf-depthdwarf-startdwarf-checkwidehelpreadelfR_AARCH64_P32_ADR_PREL_PG_HI21R_AARCH64_P32_LDST8_ABS_LO12_NCR_AARCH64_P32_LDST16_ABS_LO12_NCR_AARCH64_P32_LDST32_ABS_LO12_NCR_AARCH64_P32_LDST64_ABS_LO12_NCR_AARCH64_P32_LDST128_ABS_LO12_NCR_AARCH64_P32_LD32_GOT_LO12_NCR_AARCH64_P32_LD32_GOTPAGE_LO14R_AARCH64_P32_TLSGD_ADR_PREL21R_AARCH64_P32_TLSGD_ADR_PAGE21R_AARCH64_P32_TLSGD_ADD_LO12_NCR_AARCH64_P32_TLSLD_ADR_PREL21R_AARCH64_P32_TLSLD_ADR_PAGE21R_AARCH64_P32_TLSLD_ADD_LO12_NCR_AARCH64_P32_TLSLD_MOVW_DTPREL_G1R_AARCH64_P32_TLSLD_MOVW_DTPREL_G0R_AARCH64_P32_TLSLD_MOVW_DTPREL_G0_NCR_AARCH64_P32_TLSLD_ADD_DTPREL_HI12R_AARCH64_P32_TLSLD_ADD_DTPREL_LO12R_AARCH64_P32_TLSLD_ADD_DTPREL_LO12_NCR_AARCH64_P32_TLSIE_ADR_GOTTPREL_PAGE21R_AARCH64_P32_TLSIE_LD32_GOTTPREL_LO12_NCR_AARCH64_P32_TLSIE_LD_GOTTPREL_PREL19R_AARCH64_P32_TLSLE_MOVW_TPREL_G1R_AARCH64_P32_TLSLE_MOVW_TPREL_G0R_AARCH64_P32_TLSLE_MOVW_TPREL_G0_NCR_AARCH64_P32_TLSLE_ADD_TPREL_HI12R_AARCH64_P32_TLSLE_ADD_TPREL_LO12R_AARCH64_P32_TLSLE_ADD_TPREL_LO12_NCR_AARCH64_P32_TLSDESC_LD_PREL19R_AARCH64_P32_TLSDESC_ADR_PREL21R_AARCH64_P32_TLSDESC_ADR_PAGE21R_AARCH64_P32_TLSDESC_LD32_LO12_NCR_AARCH64_P32_TLSDESC_ADD_LO12_NCR_AARCH64_TLSLD_MOVW_DTPREL_G2R_AARCH64_TLSLD_MOVW_DTPREL_G1R_AARCH64_TLSLD_MOVW_DTPREL_G1_NCR_AARCH64_TLSLD_MOVW_DTPREL_G0R_AARCH64_TLSLD_MOVW_DTPREL_G0_NCR_AARCH64_TLSLD_ADD_DTPREL_HI12R_AARCH64_TLSLD_ADD_DTPREL_LO12R_AARCH64_TLSLD_ADD_DTPREL_LO12_NCR_AARCH64_TLSLD_LDST8_DTPREL_LO12R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NCR_AARCH64_TLSLD_LDST16_DTPREL_LO12R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NCR_AARCH64_TLSLD_LDST32_DTPREL_LO12R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NCR_AARCH64_TLSLD_LDST64_DTPREL_LO12R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NCR_AARCH64_TLSIE_MOVW_GOTTPREL_G1R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NCR_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NCR_AARCH64_TLSIE_LD_GOTTPREL_PREL19R_AARCH64_TLSLE_MOVW_TPREL_G1_NCR_AARCH64_TLSLE_MOVW_TPREL_G0_NCR_AARCH64_TLSLE_ADD_TPREL_HI12R_AARCH64_TLSLE_ADD_TPREL_LO12R_AARCH64_TLSLE_ADD_TPREL_LO12_NCR_AARCH64_TLSLE_LDST8_TPREL_LO12R_AARCH64_TLSLE_LDST8_TPREL_LO12_NCR_AARCH64_TLSLE_LDST16_TPREL_LO12R_AARCH64_TLSLE_LDST16_TPREL_LO12_NCR_AARCH64_TLSLE_LDST32_TPREL_LO12R_AARCH64_TLSLE_LDST32_TPREL_LO12_NCR_AARCH64_TLSLE_LDST64_TPREL_LO12R_AARCH64_TLSLE_LDST64_TPREL_LO12_NCR_AARCH64_TLSLE_LDST128_TPREL_LO12R_AARCH64_TLSLE_LDST128_TPREL_LO12_NCR_AARCH64_TLSLD_LDST128_DTPREL_LO12R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NCR_TILEGX_IMM16_X0_HW0_LAST_PCRELR_TILEGX_IMM16_X1_HW0_LAST_PCRELR_TILEGX_IMM16_X0_HW1_LAST_PCRELR_TILEGX_IMM16_X1_HW1_LAST_PCRELR_TILEGX_IMM16_X0_HW2_LAST_PCRELR_TILEGX_IMM16_X1_HW2_LAST_PCRELR_TILEGX_IMM16_X0_HW0_PLT_PCRELR_TILEGX_IMM16_X1_HW0_PLT_PCRELR_TILEGX_IMM16_X0_HW1_PLT_PCRELR_TILEGX_IMM16_X1_HW1_PLT_PCRELR_TILEGX_IMM16_X0_HW2_PLT_PCRELR_TILEGX_IMM16_X1_HW2_PLT_PCRELR_TILEGX_IMM16_X0_HW0_LAST_GOTR_TILEGX_IMM16_X1_HW0_LAST_GOTR_TILEGX_IMM16_X0_HW1_LAST_GOTR_TILEGX_IMM16_X1_HW1_LAST_GOTR_TILEGX_IMM16_X0_HW3_PLT_PCRELR_TILEGX_IMM16_X1_HW3_PLT_PCRELR_TILEGX_IMM16_X0_HW0_LAST_TLS_LER_TILEGX_IMM16_X1_HW0_LAST_TLS_LER_TILEGX_IMM16_X0_HW1_LAST_TLS_LER_TILEGX_IMM16_X1_HW1_LAST_TLS_LER_TILEGX_IMM16_X0_HW0_LAST_TLS_GDR_TILEGX_IMM16_X1_HW0_LAST_TLS_GDR_TILEGX_IMM16_X0_HW1_LAST_TLS_GDR_TILEGX_IMM16_X1_HW1_LAST_TLS_GDR_TILEGX_IMM16_X0_HW0_LAST_PLT_PCRELR_TILEGX_IMM16_X1_HW0_LAST_PLT_PCRELR_TILEGX_IMM16_X0_HW1_LAST_PLT_PCRELR_TILEGX_IMM16_X1_HW1_LAST_PLT_PCRELR_TILEGX_IMM16_X0_HW2_LAST_PLT_PCRELR_TILEGX_IMM16_X1_HW2_LAST_PLT_PCRELR_TILEGX_IMM16_X0_HW0_LAST_TLS_IER_TILEGX_IMM16_X1_HW0_LAST_TLS_IER_TILEGX_IMM16_X0_HW1_LAST_TLS_IER_TILEGX_IMM16_X1_HW1_LAST_TLS_IERenesas V850 (using RH850 ABI)Motorola MC68HC12 MicrocontrollerFujitsu Multimedia AcceleratorSony nCPU embedded RISC processorSTMicroelectronics ST100 processorAdvanced Logic Corp. TinyJ embedded processorDigital Equipment Corp. PDP-10Digital Equipment Corp. PDP-11STMicroelectronics ST9+ 8/16 bit microcontrollerSTMicroelectronics ST7 8-bit microcontrollerMotorola MC68HC16 MicrocontrollerMotorola MC68HC11 MicrocontrollerMotorola MC68HC08 MicrocontrollerMotorola MC68HC05 MicrocontrollerSTMicroelectronics ST19 8-bit microcontrollerAxis Communications 32-bit embedded processorInfineon Technologies 32-bit embedded cpuElement 14 64-bit DSP processorLSI Logic's 16-bit DSP processorDonald Knuth's educational 64-bit processorHarvard Universitys's machine-independent object formatAtmel AVR 8-bit microcontrollerRenesas M32R (formerly Mitsubishi M32r)Alphamosaic VideoCore processorThompson Multimedia General Purpose ProcessorNational Semiconductor 32000 seriesSTMicroelectronics ST200 microcontrollerUbicom IP2xxx 8-bit microcontrollersNational Semiconductor CompactRISCTexas Instruments msp430 microcontrollerS1C33 Family of Seiko Epson processorseXcess 16/32/64-bit configurable embedded CPUIcera Semiconductor Inc. Deep Execution ProcessorNational Semiconductor CRX microprocessorMotorola XGATE embedded processorRenesas M16C series microprocessorsMicrochip Technology dsPIC30F Digital Signal ControllerFreescale Communication Engine RISC coreFreescale RS08 embedded processorCyan Technology eCOG2 microprocessorNew Japan Radio (NJR) 24-bit DSP ProcessorBroadcom VideoCore III processorTexas Instruments TMS320C6000 DSP familyTexas Instruments TMS320C2000 DSP familyTexas Instruments TMS320C55x DSP familySTMicroelectronics 64bit VLIW Data Signal ProcessorRenesas R32C series microprocessorsNXP Semiconductors TriMedia architecture familySTMicroelectronics STxP7x familyAndes Technology compact code size embedded RISC processor familyDallas Semiconductor MAXQ30 Core microcontrollersNew Japan Radio (NJR) 16-bit DSP ProcessorM2000 Reconfigurable RISC MicroprocessorCray Inc. NV2 vector architectureImagination Technologies Meta processor architectureMCST Elbrus general purpose hardware architectureFreescale Extended Time Processing UnitInfineon Technologies SLE9X coreAtmel Corporation 32-bit microprocessorSTMicroeletronics STM8 8-bit microcontrollerTilera TILE64 multicore architecture familyTilera TILEPro multicore architecture familyTilera TILE-Gx multicore architecture familyCloudShield architecture familyKIPO-KAIST Core-A 1st generation processor familyKIPO-KAIST Core-A 2nd generation processor familyOpen8 8-bit RISC soft processor coreBroadcom VideoCore V processorFreescale 56800EX Digital Signal Controller (DSC)Paneve CDP architecture familyCognitive Smart Memory ProcessorCSR Kalimba architecture familyMorpho Techologies MT processorOperating System specific: %lxNT_PRSTATUS (prstatus structure)NT_FPREGSET (floating point registers)NT_PRPSINFO (prpsinfo structure)NT_TASKSTRUCT (task structure)NT_PRXFPREG (user_xfpregs structure)NT_PPC_VMX (ppc Altivec registers)NT_PPC_VSX (ppc VSX registers)NT_386_TLS (x86 TLS information)NT_386_IOPERM (x86 I/O permissions)NT_X86_XSTATE (x86 XSAVE extended state)NT_S390_HIGH_GPRS (s390 upper register halves)NT_S390_TIMER (s390 timer register)NT_S390_TODCMP (s390 TOD comparator register)NT_S390_TODPREG (s390 TOD programmable register)NT_S390_CTRS (s390 control registers)NT_S390_PREFIX (s390 prefix register)NT_S390_LAST_BREAK (s390 last breaking event address)NT_S390_SYSTEM_CALL (s390 system call restart data)NT_S390_TDB (s390 transaction diagnostic block)NT_S390_VXRS_LOW (s390 vector registers 0-15 upper half)NT_S390_VXRS_HIGH (s390 vector registers 16-31)NT_S390_GS_CB (s390 guarded-storage registers)NT_S390_GS_BC (s390 guarded-storage broadcast control)NT_ARM_VFP (arm VFP registers)NT_ARM_TLS (AArch TLS registers)NT_ARM_HW_BREAK (AArch hardware breakpoint registers)NT_ARM_HW_WATCH (AArch hardware watchpoint registers)NT_PSTATUS (pstatus structure)NT_FPREGS (floating point registers)NT_LWPSTATUS (lwpstatus_t structure)NT_LWPSINFO (lwpsinfo_t structure)NT_WIN32PSTATUS (win32_pstatus structure)Compressed section is too small even for a compression header Size overflow prevents reading 0x%lx elements of size 0x%lx for %s Reading 0x%lx bytes extends past end of file for %s Unable to seek to 0x%lx for %s Out of memory allocating 0x%lx bytes for %s Unable to read in 0x%lx bytes of %s Section %s has an invalid sh_entsize of 0x%lx Section %s has an invalid sh_size of 0x%lx Size (0x%lx) of section %s is not a multiple of its sh_entsize (0x%lx) Index section %s has an sh_size of 0x%lx - expected 0x%lx Out of memory reading %lu symbols The e_shentsize field in the ELF header is less than the size of an ELF section header The e_shentsize field in the ELF header is larger than the size of an ELF section header Out of memory reading %u section headers Section %u has an out of range sh_link value of %u Section %u has an out of range sh_info value of %u Invalid number of dynamic entries: %lu Out of memory reading %lu dynamic entries Unable to read in %lu bytes of dynamic data Out of memory allocating space for %lu dynamic entries Out of memory allocating dump request table. Usage: readelf elf-file(s) Display information about the contents of ELF format files Options are: -a --all Equivalent to: -h -l -S -s -r -d -V -A -I -h --file-header Display the ELF file header -l --program-headers Display the program headers --segments An alias for --program-headers -S --section-headers Display the sections' header --sections An alias for --section-headers -g --section-groups Display the section groups -t --section-details Display the section details -e --headers Equivalent to: -h -l -S -s --syms Display the symbol table --symbols An alias for --syms --dyn-syms Display the dynamic symbol table -n --notes Display the core notes (if present) -r --relocs Display the relocations (if present) -u --unwind Display the unwind info (if present) -d --dynamic Display the dynamic section (if present) -V --version-info Display the version sections (if present) -A --arch-specific Display architecture specific information (if any) -c --archive-index Display the symbol/file index in an archive -D --use-dynamic Use the dynamic section info when displaying symbols -x --hex-dump= Dump the contents of section as bytes -p --string-dump= Dump the contents of section as strings -R --relocated-dump= Dump the contents of section as relocated bytes -z --decompress Decompress section before dumping it -w[lLiaprmfFsoRt] or --debug-dump[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames, =frames-interp,=str,=loc,=Ranges,=pubtypes, =gdb_index,=trace_info,=trace_abbrev,=trace_aranges, =addr,=cu_index] Display the contents of DWARF2 debug sections --dwarf-depth=N Do not display DIEs at depth N or greater --dwarf-start=N Display DIEs starting with N, at the same depth or deeper -I --histogram Display histogram of bucket list lengths -W --wide Allow output width to exceed 80 characters @ Read options from -H --help Display this information -v --version Display the version number of readelf corrupt library name index of 0x%lx found in dynamic entry Image fixups for needed library #%d: %s - ident: %lx Seg Offset Type SymVec DataType 0x%08x dynamic section image relocationsSeg Offset Type Addend Seg Sym Off Hard float (double precision) Hard float (single precision) Hard float (MIPS32r2 64-bit FPU 12 callee-saved) Hard float (32-bit CPU, Any FPU) Hard float (32-bit CPU, 64-bit FPU) Hard float compat (32-bit CPU, 64-bit FPU) MIPS GOT entry extends beyond the end of available data There are no sections to group in this file. Section headers are not available! Out of memory reading %u section group headers There are no section groups in this file. Out of memory reading %lu groups Bad sh_link in group section `%s' Corrupt header in group section `%s' Bad sh_info in group section `%s' Section %s has sh_entsize (0x%lx) which is larger than its size (0x%lx) %sgroup section [%5u] `%s' [%s] contains %u sections: section [%5u] in group section [%5u] > maximum section [%5u] Futher error messages about overlarge group section indicies suppressed section [%5u] in group section [%5u] already in group section [%5u] Further error messages about already contained group sections suppressed section 0 in group section [%5u] Internal error: not enough buffer room for section flag info Tag_ABI_stack_align_needed: Tag_ABI_stack_align_preserved: Data addressing position-dependent Data addressing position-independent, GOT near DP Data addressing position-independent, GOT far from DP Code addressing position-dependent Code addressing position-independent Tag_ABI_array_object_alignment: Tag_ABI_array_object_align_expected: Tag_GNU_Power_ABI_Struct_Return: 8-byte and up to %d-byte extended Tag_ARC_ABI_double_size: %d Unknown attributes version '%c'(%d) - expecting 'A' Bad attribute length (%u > %u) Attribute length of %u is too small Corrupt attribute section name Unused bytes at end of section Bad subsection length (%u > %u) Bad subsection length (%u < 6) end <= contents + sect->sh_sizepossibly corrupt ELF file header - it has a non-zero section header offset, but no section headers There are no sections in this file. There are %d section headers, starting at offset 0x%lx: File contains multiple dynamic symbol tables Section %d has invalid sh_entsize of %s (Using the expected size of %u for the rest of this dump) File contains multiple dynamic string tables Type Addr Off Size ES Lk Inf Al [Nr] Name Type Addr Off Size ES Flg Lk Inf Al Type Address Off Size ES Lk Inf Al [Nr] Name Type Address Off Size ES Flg Lk Inf Al Type Address Offset Link Size EntSize Info Align [Nr] Name Type Address Offset Size EntSize Flags Link Info Align [%2u]: Link field (%u) should index a symtab section. [%2u]: Link field (%u) should index a string section. [%2u]: Unexpected value (%u) in link field. [%2u]: Info field (%u) should index a relocatable section. [%2u]: Unexpected value (%u) in info field. [%2u]: Expected link to another section in info fieldSize of section %u is larger than the entire file! section %u: sh_link value of %u is larger than the number of sections Key to Flags: W (write), A (alloc), X (execute), M (merge), S (strings), I (info), L (link order), O (extra OS processing required), G (group), T (TLS), C (compressed), x (unknown), o (OS specific), E (exclude), Unrecognized visibility value: %uToo many program headers - %#x - the file is not that big Out of memory reading %u program headers The e_phentsize field in the ELF header is less than the size of an ELF program header The e_phentsize field in the ELF header is larger than the size of an ELF program header Cannot interpret virtual addresses without program headers. Virtual address 0x%lx not located in any PT_LOAD segment. There is no dynamic section in this file. Unable to seek to end of file! Unable to determine the number of symbols to load Unable to seek to end of file Unable to determine the length of the dynamic string table Bad value (%d) for SYMINENT entry Out of memory allocating %lu byte for dynamic symbol info Tag Type Name/Value Dynamic section at offset 0x%lx contains %lu entries: %04u-%02u-%02uT%02u:%02u:%02u No version information found in this file. Version definition section '%s' contains %u entries: Offset: %#08lx Link: %u (%s) %#06x: Parent %d, name index: %ld Version definition past end of section Version needs section '%s' contains %u entries: Missing Version Needs information Invalid vna_next field of %lx Corrupt Version Needs structure - offset to next structure is zero with entries still left to be processed Version symbols section '%s' contains %lu entries: invalid index into symbol array Version def aux past end of section Missing Version Needs auxillary information possibly corrupt ELF header - it has a non-zero program header offset, but no program headers There are no program headers in this file. There are %d program headers, starting at offset Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align Type Offset VirtAddr PhysAddr FileSiz MemSiz Flags Align the segment's file size is larger than its memory size the PHDR segment must occur before any LOAD segment the PHDR segment is not covered by a LOAD segment more than one dynamic segment no .dynamic section in the dynamic segment the .dynamic section is not contained within the dynamic segment the .dynamic section is not the first section in the dynamic segment. the dynamic segment offset + size exceeds the size of the file Unable to find program interpreter name Unable to read program interpreter name [Requesting program interpreter: %s] Section to Segment mapping: Multiple auxillary string tables encountered There are no unwind sections in this file. Skipping unknown relocation type: %u Skipping unexpected relocation type: %s Skipping reloc with overlarge offset: %lx Invalid offset %lx in table entry %ld v%u, flags=0x%lx (%s%s), len=%lu bytes Could not find unwind info section for Don't know about relocations on this machine architecture Offset Info Type Sym. Value Symbol's Name + Addend Offset Info Type Sym.Value Sym. Name + Addend Offset Info Type Sym. Value Symbol's Name Offset Info Type Sym.Value Sym. Name Offset Info Type Symbol's Value Symbol's Name + Addend Offset Info Type Sym. Value Sym. Name + Addend Offset Info Type Symbol's Value Symbol's Name Offset Info Type Sym. Value Sym. Name bad symbol index: %08lx in relocSkipping unexpected relocation at offset 0x%lx Unknown section relocation type %d encountered Bad symbol index in unwind relocation (%lu > %lu) Skipping unknown ARM relocation type: %d Skipping unexpected ARM relocation type %s Skipping unknown C6000 relocation type: %d Skipping unexpected C6000 relocation type %s Only TI and ARM unwinders are currently supported Section '%s' has no data to dump. Unable to seek to start of dynamic information Failed to read in number of buckets Failed to read in number of chains Failed to determine last chain length Num Buc: Value Size Type Bind Vis Ndx Name Num Buc: Value Size Type Bind Vis Ndx Name Symbol table of `.gnu.hash' for image: Symbol table '%s' has a sh_entsize of zero! Symbol table '%s' contains %lu entries: Num: Value Size Type Bind Vis Ndx Name Num: Value Size Type Bind Vis Ndx Name local symbol %u found at index >= %s's sh_info value of %u Dynamic symbol information is not available for displaying symbols. Histogram for bucket list length (total of %lu buckets): Out of memory allocating space for histogram buckets Length Number %% of total Coverage Out of memory allocating space for histogram counts %7lu %-10lu (%5.1f%%) %5.1f%% Histogram for `.gnu.hash' bucket list length (total of %lu buckets): Out of memory allocating space for gnu histogram buckets Out of memory allocating space for gnu histogram counts Unwind section '%s' at offset 0x%lx contains %lu entries: Skipping unexpected relocation type %s Corrupt ARM compact model table entry: %x Unknown ARM compact model index encountered Restore stack from frame pointer Unsupported architecture type %d encountered when decoding unwind table Corrupt stack pointer adjustment detected Unsupported architecture type %d encountered when processing unwind table Multiple string tables found in file. Unwind table index '%s' at offset 0x%lx contains %lu entries: corrupt index table entry: %x Unwind entry contains corrupt offset (0x%lx) into section %s Could not locate .ARM.extab section containing 0x%lx. , unknown v850 architecture variant, , Andes Star v1.0, N1213HC, MAC, PERF1: unknown extra flag bits also presentMSP430 SYM_DIFF reloc contains invalid symbol index %lu MSP430 reloc contains invalid symbol index %lu MSP430 sym diff reloc contains invalid offset: 0x%lx Unhandled MSP430 reloc type found after SYM_DIFF reloc MN10300_SYM_DIFF reloc contains invalid symbol index %lu MN10300 reloc contains invalid symbol index %lu MN10300 sym diff reloc contains invalid offset: 0x%lx Unhandled MN10300 reloc type found after SYM_DIFF reloc RL78_SYM reloc contains invalid symbol index %lu RL78 sym diff reloc contains invalid offset: 0x%lx Missing knowledge of 32-bit reloc types used in DWARF sections of machine number %d unable to apply unsupported reloc type %d to section %s skipping invalid relocation offset 0x%lx in section %s skipping invalid relocation symbol index 0x%lx in section %s skipping unexpected symbol type %s in %ld'th relocation in section %s compressed section %s is too small to contain a compression headersection '%s' has unsupported compress type: %d compressed section '%s' is corrupted Unable to decompress section %s NOTE: This section has relocations against it, but these have NOT been applied to this dump. Displaying notes found in: %s Displaying notes found at file offset 0x%08lx with length 0x%08lx: Corrupt note: only %d bytes remain, not enough for a full note Corrupt note: name size is too big: (got: %lx, expected no more than: %lx) note with invalid namesz and/or descsz found at offset 0x%lx type: 0x%lx, namesize: 0x%08lx, descsize: 0x%08lx Out of memory allocating space for inote name NT_GNU_ABI_TAG (ABI version tag)NT_GNU_HWCAP (DSO-supplied software HWCAP info)NT_GNU_BUILD_ID (unique build ID bitstring)NT_GNU_GOLD_VERSION (gold version)NT_THRMISC (thrmisc structure)NT_PROCSTAT_FILES (files data)NT_PROCSTAT_VMMAP (vmmap data)NT_PROCSTAT_GROUPS (groups data)NT_PROCSTAT_UMASK (umask data)NT_PROCSTAT_RLIMIT (rlimit data)NT_PROCSTAT_OSREL (osreldate data)NT_PROCSTAT_PSSTRINGS (ps_strings data)PT_GETFPREGS (fpreg structure) NetBSD 0x%08lx IDENT %u (%u.%u%s%c) NetBSD 0x%08lx IDENT %u (%u.%u.%u) NetBSD 0x%08lx Unknown note type: (0x%08lx) NT_VMS_EIDC (consistency check)NT_VMS_GSTNAM (sym table name)NT_STAPSDT (SystemTap probe descriptors)corrupt name field in GNU build attribute note: size = %ld unrecognised attribute type in name field: %d unrecognised byte in name field: %d attribute does not have an expected type (%c) corrupt name field: namesz: %lu but parsing gets to %ld namesz %lx name %p namedata %p corrupt numeric name field: too many bytes in the value: %x Major id: %u, minor id: %u Global symbol table name: %s num entries: %ld, enabled mask: %lx Corrupt MIPS ABI Flags section. ST Microelectronics Loongson 2EST Microelectronics Loongson 2F Section '.liblist' contains %lu entries: Library Time Stamp Checksum Version Flags Out of memory allocating space for MIPS options Invalid size (%u) for MIPS option Section '%s' contains %d entries: CPR0 %08lx CPR1 %08lx CPR2 %08lx CPR3 %08lx GP_GROUP %#06lx self-contained %#06lx IDENT %#06lx self-contained %#06lxconflict list found without a dynamic symbol table Overlarge number of conflicts detected: %lx Out of memory allocating space for dynamic conflicts The GOT symbol offset (%lu) is greater than the symbol table size (%lu) Module pointer (GNU extension) %*s %10s %*s %*s %-7s %3s %s Section '.conflict' contains %lu entries: Num: Index Value Name%s: Failed to read file header num_dump_sects >= num_cmdline_dump_sectsNot an ELF file - it has the wrong magic bytes at the start Class: %s Data: %s Version: %d %s OS/ABI: %s ABI Version: %d Type: %s Machine: %s Version: 0x%lx Entry point address: Start of program headers: (bytes into file) Start of section headers: Flags: 0x%lx%s Size of this header: %ld (bytes) Size of program headers: %ld (bytes) Number of program headers: %ld Size of section headers: %ld (bytes) Number of section headers: %ld Section header string table index: %ld '%s' relocation section at offset 0x%lx contains %ld bytes: There are no dynamic relocations in this file. There are no relocations in this file. The decoding of unwind sections for machine type %s is not currently supported. Dynamic info segment at offset 0x%lx contains %d entries: Num: Name BoundTo Flags Section '%s' was not dumped because it does not exist! String dump of section '%s': Note: This section has relocations against it, but these have NOT been applied to this dump. No strings found in this section. Section '%s' has no debugging data. section '%s' has the NOBITS type - its contents are unreliable. Section %d was not dumped because it does not exist! Displaying contents of Renesas V850 notes section at offset 0x%lx with length 0x%lx: Corrupt note: name size is too big: %lx corrupt descsz found in note at offset 0x%lx type: 0x%lx, namesize: 0x%lx, descsize: 0x%lx corrupt namesz found in note at offset 0x%lx No note segments present in the core file. Library list section '%s' contains %lu entries: Library Time Stamp Checksum Version FlagsUnrecognized debug section: %s %s: unable to dump the index as none was found Index of archive %s: (%lu entries, 0x%lx bytes in the symbol table) Contents of binary %s at offset %s: end of the symbol table reached before the end of the index %s: %ld bytes remain in the symbol table, but without corresponding entries in the index table %s: failed to seek back to start of object files in the archive %s: failed to seek to next archive header %s: failed to read archive header %s: did not find a valid archive header Input file '%s' is not readable. %s: contains corrupt thin archive: %s %s: failed to seek to archive member. ADHINR:SVWacdeghi:lnp:rstuvw::x:zCould not locate '%s'. System error message: %s %s: Failed to read file's magic number File %s is not an archive so its index cannot be displayed. TrustZone and Virtualization ExtensionsAllowed in Thumb-ISA, v7-R or v7-MAllowed in v7-A with integer division extensionIIII}IuImIeI]IUIMIEI=I5I-I%III IIHHIIIHHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHHHHHIHHHH}HuHIIIIIIIIIImHeH]HUHMHEH=H5H-HIIIIIIIIII%HHH HHGIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIGGGGGGGGGIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIGGGGGG}GuGmGeG]GUGMGEG=G5G-G%GGG GGFFFIFFFFFFFFFFFFIIIIIF}FuFmFeF]FUFMFEF=F5F-F%FFFIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII FFEEEEEEEEEEEEEEEE}EuEmEeE]EUEMEEE=E5E-E%EEE EEDDDDDDDDDDDDDDDD}DuDmDeD]DUDMDED=D5D-D%DIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIDD DDCCCCC9=========|=l=\=L=<=,== =<<<<<<<<|>>>>>>>>>>>>>>>y>q>i>a>Y>Q>I>A>9>1>)>!>>> >>================y=q=i=a=Y=Q=I=A=9=1=)=!=== ==<<<>>>>>>>t>d>T>D>4>$>>$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@>===$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@=====t=d=T=D=4=$===<<<<<<<>>>>>>>t>d>T>D>4>$>>>=?????????????????????????=======?????????????????????????????????????????????????????????????t=d=T=D=4=$===<<<<<<>>AAAAAAAAAAAAAAAAAAAAAA>>AAA>AAA>AAA>>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA>AA>>>>>>AAy>q>i>a>Y>Q>I>A>9>1>)>!>>> >>===>@@@@@t@d@T@D@4@$@@@@@????????t?d?T?D?4?$???>>>>>>>>t>d>T>D>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@4>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$>>tEtHdHTHDH4H$HHHGGGGGGGGHHHHHHHHHHHHHtGdGTGDG4G$GGGFFFFFFFFtFdFTFDF4F$FFFEEEEEEEEG)K!KKK KKJJJJJJJJJJJJJJJJyJqJiJaJYJQJIJAJ9J1J)J!JJJ JJIIIIIIIIIIIII1K1K1K1K1K1K1K1KIIIyIqIiI1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1KaIYIQIIIAI9I1I)I!III IIH1K1K1K1K1K1K1K1K1K1K1K1KHH1K1K1K1K1KHHHHHHHHHH1K1KHHHyHqHiHaHYHQHIHAH9H1H1K1K1K1K)H!HHH H1K1KHG1KGG1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1KGGG1K1KGG`GJJJJpJ`JPJ@J0J JJJJJJJIIIIIIIIpI`IPI@I0I IIIHHHHHHHHpH`HPH@H0H HHHGGGGGGGGpGXKJHK8K(KKKJJJJJJJJxJhJXJHJ8J(JJeO]OUOMOEO=O5O-O%OOO OONNNNNNNNNNNNNNNN}NuNmNeN]NUNMNEN=N5N-N%NNN NNMMMMMMMMMMMMMMMM}MuMmMeM]MUMMMEM=M5M-M%MMM MMLLLLLLLLLLLLLLLL}LuLmLeL]LULMLEL=L5L-L%LLL LLKKKKKmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOmOKKKKKKKKKKK}KuKmKeK]KUKMKEK=K5K-K8LOOOOOOOxOhOXOHO8O(OOONNNNNNNNxNhNXNHN8N(NNNMMMMMMMMxMhMXMHM8M(MOOOOOOOOOOOOOOOOOOMMLLLLLLLLxLhLXLHLURMRER=R5R-R%RRR RRQQQQQQQQQQQQQQQQ}QuQmQeQ]QUQMQEQ=Q5Q-Q]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R%QQQ QQPPPPPPPPPPPPPPPP}PuPmPeP]PUPMPEP=P]R]R]R]R5P-P%PPP PPOOOOOOOOO]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]R]ROOOOOOO}OuOmOeO]OUOMOEO=O5O]R]R]R]R]R]R]R]R]R]R]R]R]R-O]R%OOO OONNN}N]RURMRER=R5R-R%RRR RRQQQQQeRQQQQeRQQQQQQQ}QeRuQmQeQ]QUQMQEQ=Q5Q-Q%QQQ QQPPPPPPPPPPPPPPPP}PuPmPeP]PUPMPEP=P5P-P%PPP PPOOOOOOOOOOOOOOOO}OuOmOeO]OUOMOEO=O5O-O%OOO OONNNNNNNeReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReRNNNNNNNNNNRQQQQQQQQtQdQTQDQ4Q$QQQPRRRRRRRRRRRRRRRRRRRRRRRRRRPPPRRRRRRRRRRRRRRRRRPPPPtPdPTPDP4P$PPPOOOOORRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRROOOtOdOTODO4O$ORRRRORRONNNNNNOTSSSSSSSSxShSXSHS8S(SSSRTTTTTTTTTTTTTRRRRRRRxRhRXRHR8R(RRTTTTTTTTTTTTTTTTTTTRQQQQQQQQxQhQXQHQ8Q(QQQTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTPPPPPPPPxPTTTThPTTXPHP8P(PPPOQV VUUUUUUUU|UlU\ULU2&ޑґƑ~rfZNB6Β6*֒ʒBzړΓ“RF:." E9-! fffffffffffffffffffffffffffffffffffffffffffffffffffffffٕf͕fffffffffyfmfafffffffffUfIf=f1f%ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffݔfffffffffffffffєfffffffffffffffŔfffffffffffffff>2ړΓ“znbVJΓ" ړE9Քɔui1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b]QޓғƓ~rfZNB6*>2&ޔҔƔ~rfZNB6*֓J~rfZNB6*֕ʕvj^RF~rfZNB6*`J2oO,|_B%{Y7sj q T 7   Q @@#$S#PR#PSNRSSSNRPSSSSRSSSSSdO}}}|xr@ `@`†+"%eEъqQ= ^D*d\D8PnzëY1Su۬Acɭ / HhF;/ t,process_attributesdisplay_arm_attributedisplay_msp430x_attributedisplay_tag_valuedisplay_raw_attribute*+!$decode_tic6x_unwind_bytecodedecode_arm_unwind_bytecodeia64_process_unwindprint_symbolprocess_object0123456789ABCDEF, Unknown ARComp, v3 no-legacy-s, unrecognised A, relocatable ex, , AVC coprocesso, AVC2 coprocess, FMAX coprocess, IVC2 coprocess, Built for Libr, V3 architectur, regmode: COMMO, double precisi, single precisi, ugen_reserved, interaptiv-mr2, single-float A, double-float A, quad-float ABI, sh4-nommu-nofp, sh2a-nofpu-or-sh4-nommu-nofpu, ultrasparcIII, new calling co, gnu calling co, reduced fp mod, no function descriptors, const, 64-bit doubles, relocatable moY@(GNU Binutils) 2.29GNU %s %s Copyright (C) 2017 Free Software Foundation, Inc. This program is free software; you may redistribute it under the terms of the GNU General Public License version 3 or (at your option) any later version. This program has absolutely no warranty. B2B1 %s:copy_state(label=%lu) %s:label_state(label=%lu) %s:gr_mem(grmask=[%s]) %s:fr_mem(frmask=[%s]) %s:br_mem(brmask=[%s]) bodyprologueR3 %s:%s(rlen=%lu) R1psp %s:%s_gr(reg=r%u) %s:rp_br(reg=b%u) %s:priunat_gr(reg=r%u) Unknown code 0x%02x %s:spill_mask(imask=[-frb]),r%uf%ub%uX3 %s:restore(t=%lu,reg=%s) X4B4 %s:mem_stack_v(t=%lu) %s:%s_sprel(spoff=0x%lx) %s:%s_when(t=%lu) %s:priunat_when_gr(t=%lu) %s:priunat_when_mem(t=%lu) P9 %s:gr_gr(grmask=[%s],r%u) @svr4@hpux@nt@priunatar.bspar.bspstorear.rnatar.unatar.fpsrar.pfsar.lcUnknown11Unknown12Unknown13Unknown14Unknown15 %s:epilogue(t=%lu,ecount=%lu) %s:br_gr(brmask=[%s],gr=r%u) ERROR: unwind length too long (0x%lx > 0x%lx) %s:frgr_mem(grmask=[%s],frmask=[%s]) %s:prologue_gr(mask=[%s],grsave=%s,rlen=%lu) %s:spill_sprel(reg=%s,t=%lu,spoff=0x%lx) %s:spill_psprel(reg=%s,t=%lu,pspoff=0x10-0x%lx) %s:spill_sprel_p(qp=p%u,t=%lu,reg=%s,spoff=0x%lx) %s:spill_psprel_p(qp=p%u,t=%lu,reg=%s,pspoff=0x10-0x%lx) %s:spill_reg(t=%lu,reg=%s,treg=%s) %s:restore_p(qp=p%u,t=%lu,reg=%s) %s:spill_reg_p(qp=p%u,t=%lu,reg=%s,treg=%s) %s:mem_stack_f(t=%lu,size=%lu) %s:spill_base(pspoff=0x10-0x%lx) %s:%s_psprel(pspoff=0x10-0x%lx) %s:priunat_psprel(pspoff=0x10-0x%lx) %s:priunat_sprel(spoff=0x%lx) %s:unwabi(abi=%s,context=0x%02x) vM3Displaying the debug contents of section %s is not yet supported. Unfeasibly large register number: %u Out of memory allocating %u columns in dwarf frame arrays Truncated header in the %s section. The address table data in version 3 may be wrong. Version 4 does not support case insensitive lookups. Version 5 does not include inlined functions. Version 6 does not include symbol attributes. Corrupt header in the %s section. TU offset (%x) is less than CU offset (%x) Address table offset (%x) is less than TU offset (%x) Symbol table offset (%xl) is less then Address table offset (%x) Constant pool offset (%x) is less than symbol table offset (%x) Address table extends beyond end of section. Corrupt name offset of 0x%x found for symbol table slot %d Corrupt CU vector offset of 0x%x found for symbol table slot %d Invalid number of CUs (0x%x) for symbol table slot %d The length field (0x%lx) in the debug_line header is wrong - the section is too small Only DWARF version 2, 3, 4 and 5 line info is currently supported. The %s section contains unsupported segment selector size: %d. internal error: attempt to read %d bytes of data in to %d sized variableInvalid maximum operations per insn. Line length %s extends beyond end of section DW_AT_MIPS_fde or DW_AT_HP_unmodifiableEncoded value extends past end of section Encoded size of %d is too large to read Encoded size of 0 is too small to read DW_FORM_strp offset too big: %s DW_FORM_line_strp offset too big: %s Section %s is too small to contain a CU/TU header Section %s is too small for %d slots Version: %d Number of columns: %d Number of used entries: %d Number of slots: %d Section %s too small for %d hash table entries Section index pool located before start of section [%3d] Signature: 0x%s Sections: Section %s too small for shndx pool Internal error: out of space in the shndx pool. Overlarge number of columns: %x Section %s too small for offset and size tables Row index (%u) is larger than number of used entries (%u) Row index (%u) * num columns (%u) > space remaining in section Overlarge Dwarf section index detected: %u .debug_abbrev section not zero terminated (DW_OP_call_ref in frame info)DW_OP_GNU_push_tls_address or DW_OP_HP_unknownDW_OP_GNU_encoded_addr: fmt:%02x addr:DW_OP_GNU_parameter_ref: <0x%s>(User defined location op 0x%x)Range list starting at offset 0x%lx is not terminated. Invalid range list entry type %d DW_MACINFO_start_file - lineno: %d filenum: %d DW_MACINFO_define - lineno : %d macro : %s DW_MACINFO_undef - lineno : %d macro : %s DW_MACINFO_vendor_ext - constant : %d string : %s No terminator for augmentation name Invalid pointer size (%d) in CIE data Invalid segment size (%d) in CIE data Internal error: %s%d: LEB value (%#lx) too large for containing variable Augmentation data too long: %#lx, expected at most %#lx Negative augmentation data length: 0x%lxInternal error: DWARF version is not 2, 3 or 4. Corrupt attribute block length: %lx %c(indirect string, offset: 0x%s): %s%c(indirect line string, offset: 0x%s): %sDW_FORM_GNU_str_index offset too big: %s DW_FORM_GNU_str_index indirect offset too big: %s %c(alt indirect string, offset: 0x%s)Offset into section %s too big: %s (declared as inline but ignored)(declared as inline and inlined) (Unknown inline attribute value: %s)Offset %s used as value for DW_AT_import attribute of DIE at offset 0x%lx is too big. No comp units in %s section ? Reserved length value (0x%s) found in section %s Corrupt unit length (0x%s) found in section %s Invalid pointer size (%d) in compunit header, using %d instead Compilation Unit @ offset 0x%s: .debug_abbrev.dwo: 0x%s 0x%s .debug_line.dwo: 0x%s 0x%s .debug_loc.dwo: 0x%s 0x%s .debug_str_offsets.dwo: 0x%s 0x%s Debug info is corrupted, length of CU at %s extends beyond end of section (length = %s) Debug info is corrupt. CU at %s extends beyond end of sectionCU at offset %s contains corrupt or unsupported version number: %d. CU at offset %s contains corrupt or unsupported unit type: %d. Debug info is corrupted, abbrev offset (%lx) is larger than abbrev section size (%lx) Debug info is corrupted, abbrev size (%lx) is larger than abbrev section size (%lx) Bogus end-of-siblings marker detected at offset %lx in %s section Further warnings about bogus end-of-sibling markers suppressed <%d><%lx>: Abbrev Number: %luDIE at offset 0x%lx refers to abbreviation number %lu which does not exist Unable to load/parse the .debug_info section, so cannot interpret the %s section. Corrupt address base (%lx) found in debug section %u For compilation unit at offset 0x%s: The length field (0x%lx) in the debug_rnglists header is wrong - the section is too small Only DWARF version 5 debug_rnglists info is currently supported. The %s section contains unsupported offset entry count: %u. No range lists in .debug_info section. Range lists in %s section start at 0x%lx Corrupt pointer size (%d) in debug entry at offset %8.8lx There is a hole [0x%lx - 0x%lx] in %s section. There is an overlap [0x%lx - 0x%lx] in %s section. The %s section contains corrupt or unsupported version number: %d. The %s section contains unsupported offset entry count: %d. No location lists in .debug_info section! Location lists in %s section start at 0x%s Warning: This section has relocations - addresses seen here may not be accurate. Offset Begin End Expression There is a hole [0x%lx - 0x%lx] in .debug_loc section. There is an overlap [0x%lx - 0x%lx] in .debug_loc section. Offset 0x%lx is bigger than .debug_loc section size. No debug information for loc lists of entry: %u Invalid pointer size (%d) in debug info for entry %d Location list starting at offset 0x%lx is not terminated. (base address selection entry) Unknown location list entry type 0x%x. No debug information available for loc lists of entry: %u No debug information available for loclists lists of entry: %u Invalid location list entry type %d There are %ld unused bytes at the end of section %s Negative length for public name: 0x%lx Length: %ld Version: %d Offset into .debug_info section: 0x%lx Size of area in .debug_info section: %ld Only DWARF 2 and 3 pubnames are currently supported Offset Kind Name .debug_info offset of 0x%lx in %s section does not point to a CU header. Only DWARF 2 and 3 aranges are currently supported. Length: %ld Version: %d Offset into .debug_info: 0x%lx Pointer Size: %d Segment Size: %d Invalid address size in %s section! Pointer size + Segment size is not a power of two. Address Length The length field (0x%lx) for unit 0x%lx in the debug_names header is wrong - the section is too small Only DWARF version 5 .debug_names is currently supported. Padding field of .debug_names must be 0 (found 0x%x) Compilation unit count must be >= 1 in .debug_names Augmentation string length %u must be rounded up to a multiple of 4 in .debug_names. Entry pool offset (0x%lx) exceeds unit size 0x%lx for unit 0x%lx in the debug_names Out of %lu items there are %zu bucket clashes (longest of %zu entries). name_count == buckets_filled + hash_clash_countabbrev_lookup_used < abbrev_lookup_allocatedDuplicate abbreviation tag %lu in unit 0x%lx in the debug_names Undefined abbreviation tag %lu in unit 0x%lx in the debug_names Only GNU extension to DWARF 4 or 5 of %s is currently supported. Offset: 0x%lx Version: %d Offset size: %d Offset into .debug_line: 0x%lx Extension opcode arguments: DW_MACRO_%02x has no arguments Invalid extension opcode form %s .debug_macro section not zero terminated DW_MACRO_start_file used, but no .debug_line offset provided. DW_MACRO_start_file - lineno: %d filenum: %d DW_MACRO_start_file - lineno: %d filenum: %d filename: %s%s%s DW_MACRO_define - lineno : %d macro : %s DW_MACRO_undef - lineno : %d macro : %s DW_MACRO_define_strp - lineno : %d macro : %s DW_MACRO_undef_strp - lineno : %d macro : %s DW_MACRO_import - offset : 0x%lx DW_MACRO_define_sup - lineno : %d macro offset : 0x%lx DW_MACRO_undef_sup - lineno : %d macro offset : 0x%lx DW_MACRO_import_sup - offset : 0x%lx Unknown macro opcode %02x seen Corrupt %s entry format table entry The %s Table (offset 0x%lx): (Unknown format content type %s)Raw dump of debug contents of section %s: Partial .debug_line. section encountered without a prior full .debug_line section Length: %ld DWARF Version: %d Prologue Length: %d Minimum Instruction Length: %d Maximum Ops per Instruction: %d Initial value of 'is_stmt': %d Line Base: %d Line Range: %d Opcode Base: %d Line range of 0 is invalid, using 1 instead Line Base extends beyond end of section The Directory Table is empty. The Directory Table (offset 0x%lx): The File Name Table is empty. The File Name Table (offset 0x%lx): Corrupt file name table entry Special opcode %d: advance Address by %s to 0x%s Special opcode %d: advance Address by %s to 0x%s[%d]Badly formed extended line op encountered! Length (%d) of DW_LNE_set_address op is too long DW_LNE_define_file: Bad opcode length DW_LNE_HP_set_file_line_columnDW_LNE_HP_negate_post_semanticsDW_LNE_HP_negate_function_exitDW_LNE_HP_negate_front_end_logicalDW_LNE_HP_source_file_correlation DW_LNE_HP_SFC_set_listing_line (%s) UNKNOWN DW_LNE_HP_SFC opcode (%u) Advance PC by %s to 0x%s[%d] Set File Name to entry %s in the File Name Table Advance PC by constant %s to 0x%s Advance PC by fixed size amount %s to 0x%s Unknown opcode %d with operands: Decoded dump of debug contents of section %s: opcode base of %d extends beyond end of section directory index %u > number of directories %s File name Line number Starting address file index %u > number of files %u [Use file %s in directory table entry %d] corrupt file index %u encountered directory table ends unexpectedly Invalid length 0x%s in FDE at %#08lx Augmentation: "%s" Failed to read CIE information Invalid CIE pointer 0x%s in FDE at %#08lx Probably corrupt segment size: %d - using 4 instead Corrupt augmentation data length: %lx %08lx %s %s FDE cie=%08lx pc=Corrupt CFA_def expression value: %lu Corrupt CFA expression value: %lu DW_CFA_advance_loc: %d to %s DW_CFA_offset: %s%s at cfa%+ld DW_CFA_advance_loc1: %ld to %s DW_CFA_advance_loc2: %ld to %s DW_CFA_advance_loc4: %ld to %s DW_CFA_offset_extended: %s%s at cfa%+ld DW_CFA_val_offset: %s%s is cfa%+ld DW_CFA_restore_extended: %s%s Invalid column number in saved frame state Mismatched DW_CFA_restore_state DW_CFA_def_cfa_register: %s DW_CFA_def_cfa_expression: DW_CFA_expression: DW_CFA_val_expression: DW_CFA_val_expression: %s%s ( DW_CFA_offset_extended_sf: %s%s at cfa%+ld DW_CFA_val_offset_sf: %s%s is cfa%+ld DW_CFA_def_cfa_sf: %s ofs %d DW_CFA_def_cfa_offset_sf: %d DW_CFA_MIPS_advance_loc8: %ld to %s DW_CFA_GNU_negative_offset_extended: %s%s at cfa%+ld DW_CFA_??? (User defined call frame op: %#x) Unsupported or unknown Dwarf Call Frame Instruction number: %#x Attempt to allocate an array with an excessive number of elements: 0x%lx Attempt to re-allocate an array with an excessive number of elements: 0x%lx Attempt to allocate a zero'ed array with an excessive number of elements: 0x%lx Unrecognized debug option '%s' r%d (%s) The %s section is empty. Contents of the %s section: %%%s%s%%%sContents of the %s section: Version %ld Unsupported version %lu. CU table: TU table: [%3u] 0x%lx - 0x%lx Address table: [%3u] 0x%lx 0x%lx Symbol table: [%3u] [%3u] %.*s: %cT%lu%c%luglobal [%s, %s] %8.8lx (base address) LOC%-*s CFA ra %-5s %s%+d%-8s c%+dv%+dstr_offUnknown TAG value: %lxDW_AT value: 0Unknown AT value: %lxDW_FORM value: 0Unknown FORM value: %lx%c%s byte block: [%d]%*s Section %s is empty .debug_tu_index Offset table slot %-16s %8s [%3d] 0x%s %8d Size table Unsupported version (%d) Number TAG (0x%lx) has childrenno children %ld %s [%s] %-18s %sDW_OP_implicit_pointerDW_OP_GNU_implicit_pointerDW_OP_entry_valueDW_OP_GNU_entry_valueDW_OP_const_typeDW_OP_GNU_const_typeDW_OP_regval_typeDW_OP_GNU_regval_typeDW_OP_deref_typeDW_OP_GNU_deref_typeDW_OP_convertDW_OP_GNU_convertDW_OP_reinterpretDW_OP_GNU_reinterpretDW_OP_addr: %sDW_OP_derefDW_OP_const1u: %luDW_OP_const1s: %ldDW_OP_const2u: %luDW_OP_const2s: %ldDW_OP_const4u: %luDW_OP_const4s: %ldDW_OP_const8u: %lu DW_OP_const8s: %ld DW_OP_constu: %sDW_OP_consts: %sDW_OP_dupDW_OP_dropDW_OP_overDW_OP_pick: %ldDW_OP_swapDW_OP_rotDW_OP_xderefDW_OP_absDW_OP_andDW_OP_divDW_OP_minusDW_OP_modDW_OP_mulDW_OP_negDW_OP_notDW_OP_orDW_OP_plusDW_OP_plus_uconst: %sDW_OP_shlDW_OP_shrDW_OP_shraDW_OP_xorDW_OP_bra: %ldDW_OP_eqDW_OP_geDW_OP_gtDW_OP_leDW_OP_ltDW_OP_neDW_OP_skip: %ldDW_OP_lit%dDW_OP_reg%d (%s)DW_OP_breg%d (%s): %sDW_OP_regx: %s (%s)DW_OP_fbreg: %sDW_OP_bregx: %s (%s) %sDW_OP_piece: %sDW_OP_deref_size: %ldDW_OP_xderef_size: %ldDW_OP_nopDW_OP_push_object_addressDW_OP_call2: <0x%s>DW_OP_call4: <0x%s>DW_OP_call_ref: <0x%s>DW_OP_form_tls_addressDW_OP_call_frame_cfaDW_OP_bit_piece: size: %s offset: %s DW_OP_stack_valueDW_OP_implicit_valueDW_OP_GNU_uninit(%s in frame info)%s: <0x%s> %s%s: (%s: <0x%s> %s: %s (%s)%s: %ld%s <0x%s>DW_OP_GNU_addr_index <0x%s>DW_OP_GNU_const_index <0x%s>DW_OP_HP_is_valueDW_OP_HP_fltconst4DW_OP_HP_fltconst8DW_OP_HP_mod_rangeDW_OP_HP_unmod_rangeDW_OP_HP_tlsDW_OP_PGI_omp_thread_num(Unknown location op 0x%x); (base address) DW_MACINFO_end_file dwarf.cCorrupt attribute %c%s%c<0x%s>%c%c0x%s 0x%08lx%08lx%08lx%08lx%c%.*sBlock ends prematurely %c(indexed string: 0x%s): %s%csignature: 0x%s%c(addr_index: 0x%s): %sUnrecognized form: %lu (not inlined)(inlined)(ANSI C)(non-ANSI C)(Ada)(C++)(Cobol 74)(Cobol 85)(FORTRAN 77)(Fortran 90)(ANSI Pascal)(Modula 2)(Java)(ANSI C99)(ADA 95)(Fortran 95)(PLI)(Objective C)(Objective C++)(Unified Parallel C)(D)(Python)(Go)(C++11)(C11)(C++14)(Fortran 03)(Fortran 08)(MIPS assembler)(implementation defined: %s)(Unknown: %s)(void)(machine address)(boolean)(complex float)(float)(signed)(signed char)(unsigned)(unsigned char)(imaginary float)(decimal float)(packed_decimal)(numeric_string)(edited)(signed_fixed)(unsigned_fixed)(HP_float80)(HP_complex_float80)(HP_float128)(HP_complex_float128)(HP_floathpintel)(HP_imaginary_float80)(HP_imaginary_float128)(unicode string)(user defined type)(unknown type)(public)(protected)(private)(unknown accessibility)(local)(exported)(qualified)(unknown visibility)(none)(virtual)(pure_virtual)(unknown virtuality)(case_sensitive)(up_case)(down_case)(case_insensitive)(unknown case)(normal)(program)(nocall)(user defined)(unknown convention)(undefined)(row major)(column major) (location list) ( [without DW_AT_frame_base] [Abbrev Number: %ld64-bit32-bitUnable to locate %s section! Length: 0x%s (%s) Version: %d Abbrev Offset: 0x%s Pointer Size: %d Signature: 0x%s Type Offset: 0x%s Section contributions: <%d><%lx>: Abbrev Number: 0 <%d><%lx>: ... <%lx> %-18s: Index Address %d: Offset Begin End %08x (start == end) (start > end)DWO is not yet supported. Offset Name %-6lx %s,%-10s %.*s %-6lx %.*s no info Address Length Excessive header length: %lx Augmentation string: %02x[%3u] 0x%lx Foreign TU table: [%3u] Used %zu of %lu buckets. [%3u] #%08x %s:%s<%lu>Unknown IDX value: %lx DW_MACRO_%02x arguments: DW_MACRO_end_file DW_MACRO_%02x DW_MACRO_%02x -Corrupt %s list The %s Table is empty. Entry Name Dir Time Size MD5 %dCorrupt %s entries list .debug_line.dwo Opcodes: Opcode %d has %d args DirectoryFile name %d %.*s Entry Dir Time Size Name No Line Number Statements. Line Number Statements: [0x%08lx] and Line by %s to %d Extended opcode %d: End of Sequence set Address to 0x%s define new File Table entry %d %.*s set Discriminator to %s DW_LNE_HP_negate_is_UV_updateDW_LNE_HP_push_contextDW_LNE_HP_pop_contextDW_LNE_HP_set_routine_nameDW_LNE_HP_set_sequenceDW_LNE_HP_define_proc DW_LNE_HP_SFC_formfeed DW_LNE_HP_SFC_associate (%s,%s,%s) user defined: UNKNOWN: length %d [ Copy Advance PC by %s to 0x%s Advance Line by %s to %d Set column to %s Set is_stmt to %s Set basic block Set prologue_end to true Set epilogue_begin to true Set ISA to %s 0x%s%sCorrupt directories list Corrupt file name list CU: %s: CU: %s/%s: UNKNOWN (%u): length %d [Use file table entry %d] ./%s:[++] %s/%s: Set ISA to %lu %-35s %11d %#18lx %-35s %11d %#18lx[%d] %s %11d %#18lx %s %11d %#18lx[%d] file table ends unexpectedly bad register: %08lx ZERO terminator %08lx CIE "%s" cf=%d df=%d ra=%d CIE Version: %d Pointer Size: %u Segment Size: %u Code alignment factor: %u Data alignment factor: %d Return address column: %d Augmentation data: Invalid max register %04lx:%s..%s DW_CFA_restore: %s%s DW_CFA_set_loc: %s DW_CFA_undefined: %s%s DW_CFA_same_value: %s%s DW_CFA_register: %s%s in DW_CFA_remember_state DW_CFA_restore_state DW_CFA_def_cfa: %s ofs %d DW_CFA_def_cfa_offset: %d DW_CFA_nop DW_CFA_def_cfa_expression ( DW_CFA_expression: %s%s ( DW_CFA_GNU_window_save DW_CFA_GNU_args_size: %ld Rangesfunctionotherunused5unused6unused7decodedlineframesframes-interprawline.debug_abbrev.zdebug_abbrev.debug_aranges.zdebug_aranges.debug_frame.zdebug_frame.zdebug_info.debug_line.zdebug_line.debug_pubnames.zdebug_pubnames.debug_gnu_pubnames.zdebug_gnu_pubnames.debug_macinfo.zdebug_macinfo.debug_macro.zdebug_macro.debug_str.zdebug_str.debug_line_str.zdebug_line_str.debug_loc.zdebug_loc.debug_loclists.zdebug_loclists.debug_pubtypes.zdebug_pubtypes.debug_gnu_pubtypes.zdebug_gnu_pubtypes.debug_ranges.zdebug_ranges.debug_rnglists.zdebug_rnglists.debug_static_func.zdebug_static_func.debug_static_vars.zdebug_static_vars.debug_types.zdebug_types.debug_weaknames.zdebug_weaknames.trace_info.trace_abbrev.trace_aranges.debug_info.dwo.zdebug_info.dwo.debug_abbrev.dwo.zdebug_abbrev.dwo.debug_types.dwo.zdebug_types.dwo.zdebug_line.dwo.debug_loc.dwo.zdebug_loc.dwo.debug_macro.dwo.zdebug_macro.dwo.debug_macinfo.dwo.zdebug_macinfo.dwo.debug_str.dwo.zdebug_str.dwo.debug_str_offsets.zdebug_str_offsets.debug_str_offsets.dwo.zdebug_str_offsets.dwo.debug_addr.zdebug_addr.debug_cu_indexf0f6f3f5f7f10f12f14f9f11f13f15cr0cr1cr2cr3cr4cr5cr6cr7cr8cr9cr10cr11cr12cr13cr14cr15a0a3a5a6a7a9a10a11a12a13a14a15pswmpswav16v18v20v22v17v19v21v23v24v26v28v30v25v27v29v31x1x2x3x4x5x6x7x8x9x10x11x12x13x14x15x16x17x18x19x20x21x22x23x24x25x26x27x28x29x30elrv5v10v11v12v13v14v15raxrdxrcxrbxrsirdirbprspripxmm0xmm1xmm2xmm3xmm4xmm5xmm6xmm7xmm8xmm9xmm10xmm11xmm12xmm13xmm14xmm15st0st1st2st3st5st6st7rflagsfs.basegs.baseldtrmxcsrfcwfswxmm16xmm17xmm18xmm19xmm20xmm21xmm22xmm23xmm24xmm25xmm26xmm27xmm28xmm29xmm30xmm31k0k3k5k6k7eaxecxedxebxespebpesiedieipeflagst4lLLD\<\|Ll<\|,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLd,\ t<\\<\<<\Ll dTo\I6#xeR?,X@ZYXZ4\\ؚȚ`Ȥ `0`p!n]L;*X@بpXX@@KWKKKKKKKKKKKKKKKKK8Xhx8xdhC/^JM$&wxs<@  J xhdisplay_debug_names%s: Error: Unhandled data length: %d %s: Warning: Out of memory / /SYM64/ %s has no archive index // %s[%s(%s)]%s[%s]%s(%s)`8fbXNDfff <DTt%s: invalid archive header size: %ld %s: failed to skip archive symbol table %s: the archive index is empty %s: failed to read archive index %s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx Out of memory whilst trying to read archive symbol index Out of memory whilst trying to convert the archive symbol index %s: the archive has an index but no symbols Out of memory whilst trying to read archive index symbol table %s: failed to read archive index symbol table %s: failed to read archive header following archive index Abnormal length of thin archive member name: %lx %s: failed to seek to first archive header %s: long name table is too small, (size = %ld) %s: long name table is too big, (size = 0x%lx) Out of memory reading long symbol names in archive %s: failed to read long symbol name string table %s: failed to seek to next file name Archive member uses long names, but no longname table found Found long name index (%ld) beyond end of long name table Invalid Thin archive member name %s: error: too many @-files encountered %s: error: @-file refers to a directory DW_TAG_paddingDW_TAG_array_typeDW_TAG_class_typeDW_TAG_entry_pointDW_TAG_enumeration_typeDW_TAG_formal_parameterDW_TAG_imported_declarationDW_TAG_labelDW_TAG_lexical_blockDW_TAG_memberDW_TAG_pointer_typeDW_TAG_reference_typeDW_TAG_compile_unitDW_TAG_string_typeDW_TAG_structure_typeDW_TAG_subroutine_typeDW_TAG_typedefDW_TAG_union_typeDW_TAG_unspecified_parametersDW_TAG_variantDW_TAG_common_blockDW_TAG_common_inclusionDW_TAG_inheritanceDW_TAG_inlined_subroutineDW_TAG_moduleDW_TAG_ptr_to_member_typeDW_TAG_set_typeDW_TAG_subrange_typeDW_TAG_with_stmtDW_TAG_access_declarationDW_TAG_base_typeDW_TAG_catch_blockDW_TAG_const_typeDW_TAG_constantDW_TAG_enumeratorDW_TAG_file_typeDW_TAG_friendDW_TAG_namelistDW_TAG_namelist_itemDW_TAG_packed_typeDW_TAG_subprogramDW_TAG_template_type_paramDW_TAG_template_value_paramDW_TAG_thrown_typeDW_TAG_try_blockDW_TAG_variant_partDW_TAG_variableDW_TAG_volatile_typeDW_TAG_dwarf_procedureDW_TAG_restrict_typeDW_TAG_interface_typeDW_TAG_namespaceDW_TAG_imported_moduleDW_TAG_unspecified_typeDW_TAG_partial_unitDW_TAG_imported_unitDW_TAG_conditionDW_TAG_shared_typeDW_TAG_type_unitDW_TAG_rvalue_reference_typeDW_TAG_template_aliasDW_TAG_coarray_typeDW_TAG_generic_subrangeDW_TAG_dynamic_typeDW_TAG_atomic_typeDW_TAG_call_siteDW_TAG_call_site_parameterDW_TAG_skeleton_unitDW_TAG_immutable_typeDW_TAG_MIPS_loopDW_TAG_HP_array_descriptorDW_TAG_HP_Bliss_fieldDW_TAG_HP_Bliss_field_setDW_TAG_format_labelDW_TAG_function_templateDW_TAG_class_templateDW_TAG_GNU_BINCLDW_TAG_GNU_EINCLDW_TAG_GNU_call_siteDW_TAG_upc_shared_typeDW_TAG_upc_strict_typeDW_TAG_upc_relaxed_typeDW_TAG_PGI_kanji_typeDW_TAG_PGI_interface_blockDW_FORM_addrDW_FORM_block2DW_FORM_block4DW_FORM_data2DW_FORM_data4DW_FORM_data8DW_FORM_stringDW_FORM_blockDW_FORM_block1DW_FORM_data1DW_FORM_flagDW_FORM_sdataDW_FORM_strpDW_FORM_udataDW_FORM_ref_addrDW_FORM_ref1DW_FORM_ref2DW_FORM_ref4DW_FORM_ref8DW_FORM_ref_udataDW_FORM_indirectDW_FORM_sec_offsetDW_FORM_exprlocDW_FORM_flag_presentDW_FORM_ref_sig8DW_FORM_strxDW_FORM_addrxDW_FORM_ref_sup4DW_FORM_strp_supDW_FORM_data16DW_FORM_line_strpDW_FORM_implicit_constDW_FORM_loclistxDW_FORM_rnglistxDW_FORM_ref_sup8DW_FORM_GNU_addr_indexDW_FORM_GNU_str_indexDW_FORM_GNU_ref_altDW_FORM_GNU_strp_altDW_AT_siblingDW_AT_locationDW_AT_nameDW_AT_orderingDW_AT_subscr_dataDW_AT_byte_sizeDW_AT_bit_offsetDW_AT_bit_sizeDW_AT_element_listDW_AT_stmt_listDW_AT_low_pcDW_AT_high_pcDW_AT_languageDW_AT_memberDW_AT_discrDW_AT_discr_valueDW_AT_visibilityDW_AT_importDW_AT_string_lengthDW_AT_common_referenceDW_AT_comp_dirDW_AT_const_valueDW_AT_containing_typeDW_AT_default_valueDW_AT_inlineDW_AT_is_optionalDW_AT_lower_boundDW_AT_producerDW_AT_prototypedDW_AT_return_addrDW_AT_start_scopeDW_AT_bit_strideDW_AT_upper_boundDW_AT_abstract_originDW_AT_accessibilityDW_AT_address_classDW_AT_artificialDW_AT_base_typesDW_AT_calling_conventionDW_AT_countDW_AT_data_member_locationDW_AT_decl_columnDW_AT_decl_fileDW_AT_decl_lineDW_AT_declarationDW_AT_discr_listDW_AT_encodingDW_AT_externalDW_AT_frame_baseDW_AT_friendDW_AT_identifier_caseDW_AT_macro_infoDW_AT_namelist_itemsDW_AT_priorityDW_AT_segmentDW_AT_specificationDW_AT_static_linkDW_AT_typeDW_AT_use_locationDW_AT_variable_parameterDW_AT_virtualityDW_AT_vtable_elem_locationDW_AT_allocatedDW_AT_associatedDW_AT_data_locationDW_AT_byte_strideDW_AT_entry_pcDW_AT_use_UTF8DW_AT_extensionDW_AT_rangesDW_AT_trampolineDW_AT_call_columnDW_AT_call_fileDW_AT_call_lineDW_AT_descriptionDW_AT_binary_scaleDW_AT_decimal_scaleDW_AT_smallDW_AT_decimal_signDW_AT_digit_countDW_AT_picture_stringDW_AT_mutableDW_AT_threads_scaledDW_AT_explicitDW_AT_object_pointerDW_AT_endianityDW_AT_elementalDW_AT_pureDW_AT_recursiveDW_AT_signatureDW_AT_main_subprogramDW_AT_data_bit_offsetDW_AT_const_exprDW_AT_enum_classDW_AT_linkage_nameDW_AT_string_length_bit_sizeDW_AT_string_length_byte_sizeDW_AT_rankDW_AT_str_offsets_baseDW_AT_addr_baseDW_AT_rnglists_baseDW_AT_dwo_nameDW_AT_referenceDW_AT_rvalue_referenceDW_AT_macrosDW_AT_call_all_callsDW_AT_call_all_source_callsDW_AT_call_all_tail_callsDW_AT_call_return_pcDW_AT_call_valueDW_AT_call_originDW_AT_call_parameterDW_AT_call_pcDW_AT_call_tail_callDW_AT_call_targetDW_AT_call_target_clobberedDW_AT_call_data_locationDW_AT_call_data_valueDW_AT_noreturnDW_AT_alignmentDW_AT_export_symbolsDW_AT_deletedDW_AT_defaultedDW_AT_loclists_baseDW_AT_MIPS_fdeDW_AT_MIPS_loop_beginDW_AT_MIPS_tail_loop_beginDW_AT_MIPS_epilog_beginDW_AT_MIPS_loop_unroll_factorDW_AT_MIPS_linkage_nameDW_AT_MIPS_strideDW_AT_MIPS_abstract_nameDW_AT_MIPS_clone_originDW_AT_MIPS_has_inlinesDW_AT_HP_block_indexDW_AT_HP_actuals_stmt_listDW_AT_HP_proc_per_sectionDW_AT_HP_raw_data_ptrDW_AT_HP_pass_by_referenceDW_AT_HP_opt_levelDW_AT_HP_prof_version_idDW_AT_HP_opt_flagsDW_AT_HP_cold_region_low_pcDW_AT_HP_cold_region_high_pcDW_AT_HP_linkage_nameDW_AT_HP_prof_flagsDW_AT_HP_unit_nameDW_AT_HP_unit_sizeDW_AT_HP_widened_byte_sizeDW_AT_HP_definition_pointsDW_AT_HP_default_locationDW_AT_HP_is_result_paramDW_AT_sf_namesDW_AT_src_infoDW_AT_mac_infoDW_AT_src_coordsDW_AT_body_beginDW_AT_body_endDW_AT_GNU_vectorDW_AT_GNU_guarded_byDW_AT_GNU_pt_guarded_byDW_AT_GNU_guardedDW_AT_GNU_pt_guardedDW_AT_GNU_locks_excludedDW_AT_GNU_odr_signatureDW_AT_GNU_template_nameDW_AT_GNU_call_site_valueDW_AT_GNU_call_site_targetDW_AT_GNU_tail_callDW_AT_GNU_all_tail_call_sitesDW_AT_GNU_all_call_sitesDW_AT_GNU_macrosDW_AT_GNU_deletedDW_AT_GNU_dwo_nameDW_AT_GNU_dwo_idDW_AT_GNU_ranges_baseDW_AT_GNU_addr_baseDW_AT_GNU_pubnamesDW_AT_GNU_pubtypesDW_AT_GNU_discriminatorDW_AT_VMS_rtnbeg_pd_addressDW_AT_GNAT_descriptive_typeDW_AT_GNU_numeratorDW_AT_GNU_denominatorDW_AT_GNU_biasDW_AT_upc_threads_scaledDW_AT_PGI_lbaseDW_AT_PGI_soffsetDW_AT_PGI_lstrideDW_AT_APPLE_optimizedDW_AT_APPLE_flagsDW_AT_APPLE_isaDW_AT_APPLE_blockDW_AT_APPLE_runtime_classDW_AT_APPLE_omit_frame_ptrDW_AT_APPLE_property_nameDW_AT_APPLE_property_getterDW_AT_APPLE_property_setterDW_AT_APPLE_propertyDW_OP_addrDW_OP_const1uDW_OP_const1sDW_OP_const2uDW_OP_const2sDW_OP_const4uDW_OP_const4sDW_OP_const8uDW_OP_const8sDW_OP_constuDW_OP_constsDW_OP_pickDW_OP_plus_uconstDW_OP_braDW_OP_skipDW_OP_lit0DW_OP_lit1DW_OP_lit2DW_OP_lit3DW_OP_lit4DW_OP_lit5DW_OP_lit6DW_OP_lit7DW_OP_lit8DW_OP_lit9DW_OP_lit10DW_OP_lit11DW_OP_lit12DW_OP_lit13DW_OP_lit14DW_OP_lit15DW_OP_lit16DW_OP_lit17DW_OP_lit18DW_OP_lit19DW_OP_lit20DW_OP_lit21DW_OP_lit22DW_OP_lit23DW_OP_lit24DW_OP_lit25DW_OP_lit26DW_OP_lit27DW_OP_lit28DW_OP_lit29DW_OP_lit30DW_OP_lit31DW_OP_reg0DW_OP_reg1DW_OP_reg2DW_OP_reg3DW_OP_reg4DW_OP_reg5DW_OP_reg6DW_OP_reg7DW_OP_reg8DW_OP_reg9DW_OP_reg10DW_OP_reg11DW_OP_reg12DW_OP_reg13DW_OP_reg14DW_OP_reg15DW_OP_reg16DW_OP_reg17DW_OP_reg18DW_OP_reg19DW_OP_reg20DW_OP_reg21DW_OP_reg22DW_OP_reg23DW_OP_reg24DW_OP_reg25DW_OP_reg26DW_OP_reg27DW_OP_reg28DW_OP_reg29DW_OP_reg30DW_OP_reg31DW_OP_breg0DW_OP_breg1DW_OP_breg2DW_OP_breg3DW_OP_breg4DW_OP_breg5DW_OP_breg6DW_OP_breg7DW_OP_breg8DW_OP_breg9DW_OP_breg10DW_OP_breg11DW_OP_breg12DW_OP_breg13DW_OP_breg14DW_OP_breg15DW_OP_breg16DW_OP_breg17DW_OP_breg18DW_OP_breg19DW_OP_breg20DW_OP_breg21DW_OP_breg22DW_OP_breg23DW_OP_breg24DW_OP_breg25DW_OP_breg26DW_OP_breg27DW_OP_breg28DW_OP_breg29DW_OP_breg30DW_OP_breg31DW_OP_regxDW_OP_fbregDW_OP_bregxDW_OP_pieceDW_OP_deref_sizeDW_OP_xderef_sizeDW_OP_call2DW_OP_call4DW_OP_call_refDW_OP_bit_pieceDW_OP_addrxDW_OP_constxDW_OP_xderef_typeDW_OP_GNU_push_tls_addressDW_OP_GNU_encoded_addrDW_OP_GNU_parameter_refDW_OP_GNU_addr_indexDW_OP_GNU_const_indexDW_OP_GNU_variable_valueDW_OP_AARCH64_operationDW_ATE_voidDW_ATE_addressDW_ATE_booleanDW_ATE_complex_floatDW_ATE_floatDW_ATE_signedDW_ATE_signed_charDW_ATE_unsignedDW_ATE_unsigned_charDW_ATE_imaginary_floatDW_ATE_packed_decimalDW_ATE_numeric_stringDW_ATE_editedDW_ATE_signed_fixedDW_ATE_unsigned_fixedDW_ATE_decimal_floatDW_ATE_UTFDW_ATE_UCSDW_ATE_ASCIIDW_ATE_HP_float80DW_ATE_HP_complex_float80DW_ATE_HP_float128DW_ATE_HP_complex_float128DW_ATE_HP_floathpintelDW_ATE_HP_imaginary_float80DW_ATE_HP_imaginary_float128DW_ATE_HP_VAX_floatDW_ATE_HP_VAX_float_dDW_ATE_HP_packed_decimalDW_ATE_HP_zoned_decimalDW_ATE_HP_editedDW_ATE_HP_signed_fixedDW_ATE_HP_unsigned_fixedDW_ATE_HP_VAX_complex_floatDW_ATE_HP_VAX_complex_float_dDW_CFA_advance_locDW_CFA_offsetDW_CFA_restoreDW_CFA_set_locDW_CFA_advance_loc1DW_CFA_advance_loc2DW_CFA_advance_loc4DW_CFA_offset_extendedDW_CFA_restore_extendedDW_CFA_undefinedDW_CFA_same_valueDW_CFA_registerDW_CFA_def_cfaDW_CFA_def_cfa_registerDW_CFA_def_cfa_offsetDW_CFA_def_cfa_expressionDW_CFA_expressionDW_CFA_offset_extended_sfDW_CFA_def_cfa_sfDW_CFA_def_cfa_offset_sfDW_CFA_val_offsetDW_CFA_val_offset_sfDW_CFA_val_expressionDW_CFA_lo_userDW_CFA_hi_userDW_CFA_MIPS_advance_loc8DW_CFA_GNU_args_sizeDW_IDX_compile_unitDW_IDX_type_unitDW_IDX_die_offsetDW_IDX_parentDW_IDX_type_hashDW_IDX_hi_userDW_IDX_GNU_internalDW_IDX_GNU_externalDW_TAG_GNU_template_template_paramDW_TAG_GNU_template_parameter_packDW_TAG_GNU_formal_parameter_packDW_TAG_GNU_call_site_parameterDW_AT_MIPS_software_pipeline_depthDW_AT_HP_all_variables_modifiableDW_AT_GNU_exclusive_locks_requiredDW_AT_GNU_shared_locks_requiredDW_AT_GNU_call_site_data_valueDW_AT_GNU_call_site_target_clobberedDW_AT_GNU_all_source_call_sitesDW_AT_use_GNAT_descriptive_typeDW_AT_APPLE_major_runtime_versDW_AT_APPLE_property_attributeDW_AT_APPLE_objc_complete_typeDW_CFA_GNU_negative_offset_extendedS# #  #   { s k c [ S K C ; 3 + #    {skc[SKC;3+# {skc[SKC;3+# {skc[SKC;3+# {skc[SKC;3+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # {skc[hxhXH8(xhXH8(xTD4$tdTD4$td  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~  !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~CBBBBQ00000000000000000000000000000000 %s%sout of memory allocating %lu bytes after a total of %lu bytes incorrect header checkunknown compression methodinvalid window sizeunknown header flags setheader crc mismatchinvalid block typeinvalid stored block lengthsinvalid code lengths setinvalid bit length repeatinvalid literal/lengths setinvalid distances setinvalid literal/length codeinvalid distance codeinvalid distance too far backincorrect data checkincorrect length checktoo many length or distance symbolsinvalid code -- missing end-of-blockhPxx`x  7    2 x   !`.A@!  @a`10  @`Psp0  ` @ X ;x8 h( H T+t4  d$ D \ S|< l,  L R#r2  b" B Z Cz: j*  J V@3v6 f& F  ^ c~> n. N `Qq1  a! A Y ;y9 i)  I U+u5  e% E ] S}= m-  M S#s3  c# C [ C{; k+  K W@3w7 g' G  _ c? o/ O `Psp0  ` @ X ;x8 h( H T+t4  d$ D \ S|< l,  L R#r2  b" B Z Cz: j*  J V@3v6 f& F  ^ c~> n. N `Qq1  a! A Y ;y9 i)  I U+u5  e% E ] S}= m-  M S#s3  c# C [ C{; k+  K W@3w7 g' G  _ c? o/ O      @@ !1Aa  0@`M #+3;CScs inflate 1.2.11 Copyright 1995-2017 Mark Adler need dictionarystream endfile errorstream errordata errorinsufficient memorybuffer errorincompatible version0w,aQ mjp5c飕d2yҗ+L |~-d jHqA}mQDžӃVlkdzbeO\lcc=  n;^iLA`rqgjm Zjz  ' }Dңhi]Wbgeq6lknv+ӉZzJgo߹ホCՎ`~ѡ8ROggW?K6H+ L J6`zA`Ugn1yiFafo%6hRw G "/&U;( Z+j\1е,[d&c윣ju m ?6grWJz+{8 Ғ |! ӆBhn[&wowGZpj;f\ eibkaElx TN³9a&g`MGiIwn>JjѮZf @;7SŞϲG0򽽊º0S$6к)WTg#.zfJah]+o*7 Z-A1b62S-+ldEw}ZVǖAOIъ OM~-QJ#SpxAaU׮.7׵Y-6]]wll?AԞZ͢$ Faw$eڪ]]FD(koipvk19Z* ,  m86F߲]qTp0ek*1u4yީ%8S1bSWĔՖk1**ykʬHpo].*F6fcTT"eM©g0&):{ϼkZ> 8$,52F*sw1pHkQ6Fzw]cN̵J #pAF]#l8?1(BOgT~yUbL8^#ܖTZ1ObbSyOIV~P-{b-R4٠~^eGnHl/Su6: #jT$+e?yHf'*b#ٽЧ ?&~?$pi;FBzw[keZ~7 Sv8H 3?r$7jnԄYFܨ |OQ;օ U d S - =G\ p&Gw)` /a߫i5&LsZ<#0zMzFM8,9; :R:(q-v,.7/pXqYs3r%w+OQvrtEux܉~OK }!b|tyBxʠz{.lD~m8onlk[wjR1h58ib?mcf+aQ`צedd"fig HINSKyuJcO NZLݘMFGN@E$DD2AsX@*IBCPhTg3U>uW ַVS:R|P~Q9ZS [fYX4])\ZEo^m/_5qϱ٥s\ۼqދ!K7 kfֶԁ-b3Πjp]$^'~*I@VW<âM˟ŏ{ tDCm-@wm.B+(铜>Td"ŀǼϭ~8y$owJ1}05_K^ iϏ은BI#ƈdX܁T̓cQ: rՆ⩗ fn|xK)o%ƭ/3vUuA?)C:|sĵ@͂ Ͳ;bIUeh"׻_HS1޼^Z4eg Wb27_k%8ם(ŊO}do׸Jj3wVcXWP0qB{߭gCru&op-?'Bs ưGz>2[Ȏg; i8P/ _Y=чe:ZO?(3wwXR @hQ+ğH*0"ZOWoI}@mNП5+#*'G| AH=XX?#1jvʬ`p^Y<L~i/{kHwâ hs)aLoD~Pf7VM'(@ﰤ ہg9x+n&;f?/X)T`D1 ߨMߒ.FgTp'Hq/L0UEc?kǃh6ry7]P\@TN%s7@'>$!AxUʰ\3;Y^U~PGl!;b F2ȂpԞ(Q_V:1X: n3 m:@/)IJNv"2x+ٗ Kx.HҥfAj^y9*O]#kM`~b_R 7zFh!1߈Vc0a"j6nS Nr)Υ{t*F8#vufz`rs"WG9^EMvc΍&DAdQy/4Aڱ&S֚E biLQ<6'5P..T&q]w4.6IE? v\[YI>U!lDa>Ԫ΋ϩ7~8A]&nv|oY yKiw\¹9~$ 66nQfq>,o,IӔ 渱{I .H>C-Yn馑gQz tafw0a, Qmpjc5dۈ2yܸو L+~|-dj qHA}mԵQӅlVdkbze\Ocl=c ;n Li^`Agqr<KG k5Blۻ֬@2lE\u ϫ=Y&0Q:Qa!V#Ϻ(_ ٲ $/o|XhLaf-=vAq *q3xɢ4 j m=-dlc\kkQlabe0bNl{WeP|b-I|LeMaX:QΣtԻ0JߥA=ؕפmCij4ngF`D-s3 L_ |Pq<'A  Wh% of a^)ɘИ"רY=. \;l  tҚG9w&sc d; mj>zjZ '}DhibW]egl6qnkv+zZgJoC`֣ѓ~8ORѻgWg?H6K +گ L6JAz``ègU1nFiyaf%oҠRh6 w G"U&/ź; (+Z\j1,ٞ[ޮd°c&ujm 6?rgWJz{+ 8Ҏվ | !Bhݳڃn&[owGwZjpf; \ebiaklE x NT9§g&a`IiGM>nwۮjJZ@ f7;𩼮S޻G0齽ʺŠS0$6TW)#gfz.aJ]h*o+ 7 Z-1A26b+-Sdl}wEVZOAي»IˬO ~M-JQS#xpaA.U7Y-۩6˚w]]llA?Z$㧲F waރ$Ųe]]DFok(vpi91k *Z  ,8mF6]pTqke0*1¶u4%y<8syjHA}X*ݹ1SbSW§ٖծ1k**kypH]oF*.f6TTcMe"¤0g)&Ůޟ:{kZ >8,$5*F21wsHpQkzF6c]wN̵ׄJ# pȄA#]F8l1?(gOB~TUyLbˁ8#^TO1ZbbySIOP~V{-b-4R^~Ge­lHnuS/:6# $Tj?e+y䏼Hf*'˼Ѝb# &??~p$iBF;[wzek~ZS 7H8v ?3$rj7nFY |OQ; U dؓS - \G=&pGw`)/ ai5&sL <:R=Pe6^X7}o5641W0ճ2k3$k%'1&-[#bML"'{ "!$*x(+)`F(> q-q,v.Ț/7pqXsYr3w%vQO+tru՛E~xKO} |b!ytxBz{l.m~Do8nkljw[h1Ri85bcm?a+f`Qeddf"giH IKSNJuyOcN LZMݥFĚGE@ND$A2D@XsBI*CThPU3gWu>V SR:P|Q~Z9[ SYfX]4\)^oEZ_/m5qs<\kg2z &J8 좞V`a/6i\lU,zB\uHƒ=&FW A+Ox]`غ7W>9q߳!7Kk ֩fض-bѠ3pj$]^Ĝ'*~@IWVÕ<ӂMʏş{ Dt͆mC-@mw+B.(>dT"ş~Ϝ8yo$w1J}50K_ ^ϋiBۉI#dXфTQc:r Р fΫnx|)Ko%3/uUv?A)ġ:C|sд@͉ ;IbeU"hH_S1ފZ^ھ4ge ȋbW72%k_ܝ8Ŵ(}OodJֿjw3XcVPW0Bq{gǧurCo&p-?О'sB zGɠ2>[ ;g/P8i_ Y=嗇e:ϏOZw3(?RXw@ Qh+HZ"0*WOIo@}m5N#+'*GA |􏒨HX=#?X1vjʨ`^pYL'!$UxAׯ3\Y;U^GP~b;!lڇF 2p(ԐQV_:X1: 3n :m@I)/NJ2"v+x xKH.jAf^O*9y]#Mk~`bю_޶ Rz7hFм!10cV"ajحn6 SrN){t*8Fv#fu`zrϮsɛW"G9E^vMcD&dA/yQA4S&ֿ EbLil!>aDƋΪ~7A8n&]|vYoᡱ Kyi׫w¡\~9$66 Qnf>q,o,ӹI 散 I{.C>HnY-Qg̰t zfa;D ' '`` p `  0 PH @ ` @ x     ! % ) p-8 1P 05h 9 > A G I M S W( \@ _X `cp f g h j k @l @mp n p p PPp00PP@@Ц0`000H@pP(0H0м(x`@ p`8@p`0p`0PPp(x Xp#@`$p0A0S8@d@vpz8@@ ` 0 "" "0@# p#@#q#P@$$$X%p%@&&H'P`'P'8(P(@h(( (p(@() 0)pP)")@$)$)%8*&*`'*p(*)0+ ++3+03+`3,p3(,3@,3`,@4x,05,5,7@-8x-@8-@B-pIH.L.N.O/O(/ PH/Pp/P/pR0 SP0S0T0U0U01g1g1g1h1j82l2@2083P303X445 585p560h66p@7X7p77@88`'8 ,(9\9`:x: :@:`::p:;00;H;`;0x;;;P<0<`<x<<<@=М0=H=x==>h>Т>@>>`8?Ч?p??@8@@@@0A A8APA0hA`AA`AAAABp0BPBB0B`B(C@CXCpCCCD(DxD@DD8EPEEEEF@F0FHF@FPF`FFFG(G G G G GH0HHH`H0xH@HPHH8IzRx +zRx $(FJ w?;*3$"D\tpcxZ 340Ld0s|`0"(&)S .c$`2<5T;Cl>AGcJxP`SV,xYD [\([t]]8D I L_HBB A(A0 (A BBBE F(A BBBL_BBH A(J0^ (D ABBB t (D ABBK LX`_uDl(bw\bDuA,r `EXHS A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H F  D e A l A | A s A J A H A H A H A H A H A a A U A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H A H{:IuBD؀AAJ O FAF A FAH aCALDpBBE B(A0A8HP 8D0A(B BBBD D BBE A(D0L 0A(A BBBG LBBB B(D0A8OP: 8C0A(B BBBF L,8[BBB B(A0A8D`V 8D0A(B BBBG L|HcBBB B(A0A8D`V 8D0A(B BBBG dhBBB B(A0A8DPx 8A0A(B BBBH < 8F0A(B BBBE d4 BBB B(A0A8DPx 8A0A(B BBBH < 8F0A(B BBBE L _BBB B(D0D8P@ 8D0A(B BBBI L ȔBBB B(D0A8OPZ 8C0A(B BBBF L< (BBB B(D0A8F@a 8A0A(B BBBB , BAD { ABK  AT AAG O CAD V CAF D KAP o CAE dDAL, &BBB B(A0A8K 8A0A(B BBBE 4| xJHA V ABD ` Vd N d BBB B(D0A8F@ 8F0A(B BBBF n 8C0A(B BBBF L< xKBBE B(D0A8DP 8F0A(B BBBE $ xPAAV rDAL BBC A(T0 (I ABBJ (H ABB, BAC d LBH L4 BBE B(A0A8D 8A0A(B BBBI $ @R B XL شBBE B(D0A8D 8A0A(B BBBC d 8BBB B(D0A8D` 8H0A(B BBBJ  8M0A(B BBBI $dD P(J0](A T A 4XrFHH m ABJ `4YBAD J0  AABI ȿ4пBAC M0  AABE ,Lh>AAG0R AAC <|xBBD A(L@ (A ABBE L(BBE B(C0A8JP 8A0A(B BBBJ < NBBC A(M@ (A ABBF LLBBB B(A0A8D 8A0A(B BBBA 8L@6BBD A(H0 (A ABBI X (A ABBA 03$Xq K  A D4\x GF0AAAp0LBBB B(A0A8D^ 8A0A(B BBBJ $lw E s E  8"DS I A,HRbL8ddIBB A(J0 (M BBBD c (C BBBD N (C BBBI ,(AG } AJ H GA tBBB B(A0A8GV 8A0A(B BBBG G`HJUDTLt@$BBB B(A0A8G 8A0A(B BBBK L5BBB B(A0A8DpW 8A0A(B BBBA \FBBG B(A0A8G 8A0A(B BBBE FHALtPX%BBB B(A0A8GJ 8A0A(B BBBK d0\CBBB B(A0A8J 8A0A(B BBBG RJEgd,wBBE B(D0A8O 8A0F(B BBBF F 8A0A(B BBBH 4BAA s ABV lCB<XLAF WAADH D HAK 4 naAH F ` H @ H n<D@AAO G GAP ' FAJ dBBB B(A0A8G 8A0A(B BBBC DDAN\BBB B(A0A8G 8A0A(B BBBI FA,LXAM0m8F@X8A0g AF ,|$BBE B(A0A8J|N_Bf 8A0A(B BBBF IbAHZBHXAH[AHZAH[BE[BH[BEWA$HWBWHWAH[A\iJBD A(O0{ (J ABBF }(A ABBEX0l vBBB B(D0A8GeHXAJHXA 8A0A(B BBBH L|( BBB B(A0A8GF 8A0A(B BBBG ,AAG0@ AAE ,AAG0I AAD L,TBBB B(A0A8D`) 8A0A(B BBBG L|M_BBE B(D0A8GS 8A0A(B BBBD LfWBBI B(D0A8UL 8A0A(B BBBA Li!BBB B(D0A8JS 8A0A(B BBBA tll&BBB B(A0A8G 8A0A(B BBBF OaAC|AL@BBD A(D0_ (D ABBK \ (G DBBE 4')BBI B(C0A8N 8A0A(B BBBF UGJBASJBBTGUDcX/-BBE B(F0A8Qq 8A0A(B BBBB HJDX/TBB[_HBD`k GUDYTBD`L/BBD B(D0A8G 8A0A(B BBBH OdBBE B(H0A8MPs 8G0A(B BBBL N 8A0A(B BBBH T>CzLt BBB B(A0A8G 8A0A(B BBBA P]UF| 8SAQ,xCCd I R$LAO AG $tP\AJ0G DA wAuFE@DBBE A(A0Gr 0A(A BBBD D$ p0BBB A(E0L 0A(A BBBI l Xk< BBC A(HP (A ABBD D BBD A(E0DP 0A(A BBBC  !haD$!BBB A(A0Hp 0A(A BBBA Ll! BBB B(A0A8H 8A0A(B BBBA t!HAAI  DAA Z DAA Y DAJ R DAA I DAJ D DAO dDA44"pBAD G@  AABA l"!"0$"H"@"H,Aj"XxDs,#BAC  ABA ,4#\BAH wWBdd#{BBB B(A0A8DP, 8F0A(B BBBA d8C0A(B BBB4# BAC NP  AABH $ %DZd$ BBI B(D0A8I- 8A0A(B BBBD | 8C0A(B BBBH L$@,BFB B(D0A8M` 8D0A(B BBBF d$ BBB B(A0A8D6 8A0A(B BBBB w8F0A(B BBB<<%XBBD A(G (A ABBK |%9Qg%W% EAN A t$% m]NEHt%!UQN A t|&X!zBBE B(D0A8IP 8A0A(B BBBG s 8C0A(B BBBI  8C0A(B BBBE <&X"BBE A(D0 (D BBBF D&"QAD g DAF x MAJ DMAD$'P#QAD g DAF x MAJ DMAl'#>Te4'${AAJ @ DAG ]DAL'H$BBB B(A0A8J 8A0A(B BBBB $ (5Qv I ] C 4(5 $L(5aj E `Lt(6BBB B(A0A8DP 8A0A(B BBBH L(8BBI B(F0A8NPp 8F0A(B BBBE \)P:]BBE B(D0A8R 8A0A(B BBBC JWALt)PSBBB B(D0A8J 8A0A(B BBBA D)XBBI A(F0D@% 0A(A BBBK L *ZBBE B(D0A8Q 8A0A(B BBBD \*X`f)BBB B(D0A8J 8A0A(B BBBB DGTBHGGI D{A*@BBE B(A0A8L 8A0A(B BBBA ~DGBEAGBVDGBJADBt|++ +xD+pAAD S CAC F CAF _ CAE | ,BBB B(A0A8D`F 8F0A(B BBBE _ 8C0A(B BBBE h 8C0A(B BBBA d,xBBB B(A0A8G 8A0A(B BBBE D 8C0A(B BBBH ,`BBB B(A0A8OC 8A0A(B BBBJ JmBGzAJuBL|-BBB B(A0A8G 8F0A(B BBBF -( - L-BBG B(A0A8Np 8F0A(B BBBE tL.BBG B(A0A8Q 8A0A(B BBBH jBEOBBDBNt.BBE B(A0A8J 8A0A(B BBBI  BEBEBCBVt 8A0A(B BBBA  MgBDLgA0xS1S1S41SL1Sd1S$|1xTAH G m A D1T#1TO[10UR^1xUKW,2UBAA AB<42PVBBI A(D0 (A BBBD ,t2WEBAH U ABE 20X,2XAAJ AAA 2YL3ZtBBB B(D0A8R` 8A0A(B BBBK ,T3]AAJ AAA 3^k3(_D^ A 3_,3``]Al C O A J F G A L4`}BBH A(Q0o (A ABBE ^(A ABBLT4`BBE B(D0A8G@j 8D0A(B BBBB L4aBBE B(D0A8O@ 8C0A(B BBBA 4dBAv I A45@dlAAJ  GAM IAA4L5xdAAL y GAI g CAE <5eRBBA A(GPM (A ABBH L5 glBBB B(D0A8S@ 8D0A(B BBBA ,6@hEAA n ABH ,D6hBFAG gDALt6hyBBB B(A0A8Dp 8D0A(B BBBD L6kKBE B(K0A8N@8A0A(B BBBEL7kBBB B(D0A8I{ 8A0A(B BBBE d7n"|7nh7 v7x77xS7# 8ؒ$8Pa<8*T8l8H8/\R8ؓtAAI 88'DZ A ,8HHAAD d AAD  9h:D_ E $,9.AAG UGA\T90BBD A(J0 (A ABBK v (C ABBB l (C ABBD 9`*9x90>T9XKBA A(G0z (A DBBG L(F ABBA,T:EAA  ABE ::xvL:BBB B(A0A8D 8A0A(B BBBK ,;PgAAD S CAC <4;BBA A(D0K (D ABBB Lt;aBD A(I0 (A ABBJ @P0;>,;AAD0 AAJ  <FL$<PcBA A(M0] (A ABBI XH0t<к7<>< h<x@L<HBBE B(A0A8G 8A0A(B BBBG $=<=T=l= ==t=`]EBF B(A0A86 0A(B BBBA ^ 0A(R MBBA  0A(F EBBA ,>HD>@\>8t>0Mq$>AG AA >>>??D4?EBBH B(D0A8 0A(B BBBK D|?eBBE B(H0H8M@r8A0A(B BBB?wv8EUdmy Ʊ ұ@&:A P@cox ϲ9W %*9HNTY_g q | [G    óӳ     $4DTe}ptx|ƚºyDOU[(<_)ho{ȶ@@` uEZ?):) :)o,:) :)Z :) :):):)X:);b:):)nG:)! :)<:)2<:)3:),:)X :) :) :) :)c T-a-f G-i l o n-r v z ~                     ,, ,   ,                # ' + / 3 7 ; ? C /G J M P S V Y \ _ b f j n r v z ~              l  ;;             # ' 7 + ; / ? 3 C                     !&+17=CIOSW[C_cg   kYr=a6=rz,,,  $(Yr=a6=  $(OSW[C_cg      Yr=a6=,,,f f+f6fCfNfbfofQ @f ((o   (`` XS oo oo oo@f(vfffffffffgg&g6gFgVgfgvggggggggghh&h6hFhVhfhvhhhhhhhhhii&i6iFiVifiviiiiiiiiijj(ɴִߴ(( `( h( ( ( 0`(;@(J (Z(j(z((`(P(@(ӵ ( (()(6(D`([ ( u"($(&(*(,̶(.Զ(@AB(C D`(F*@(AEAMW2AE2q 3AE}EAAEAAηڷAηڷ,2A,HAVapx4A OA˸ŸҸ۸AҸ۸AmGA ,>Mbelbb¹̹ҹܹbb"'-27;>CIOTbi;aӺhߺlZeIlS Sg*t:NJ7sPsLUrn{d\AjVwDucxRpz˻׻|fvWH4Bp:)Q`0:)p}:)0Z:):) :):)X:) :) ' :)5 @ 0:)L \ 0:)m x e:)  e:)   :)  :)   ^:)   ^:)- @ 0T g 0{   Z:)  0X:)Y@:) @Z:) p:) 0:)  0Z:)  p:)( 9  Z:) K :)\ k e:){  :)  :)  0:)  ` " `: F [:)S @:)@:)GCC: (GNU) 7.1.1 20170630w}c+p>RPdxZ@3 s0` 2G [лSm0c0@CpPc ` `6L0je} )X802)(2)) )/>) IW) bs`)@~ @)@:@)@)`2)p2)"3[I)["cqP'`*p-_.1@)kH)@2`)23#4&CH2) )PX2)];l=>))()))AKp CP:pCO@EgF ~))h)x)p) )()$))P ) R! ;PTQ)d@)o({`\]r(]YP^_d>6hP0jk ( (oN@u | }6= P~3_ ~o `) z ` @x @)  ) ) 2) @2) 2)  2)% )2 82)I \  ) g `"   8 ` )   P2) ) !) @(x& ` )3  )L h2)^ 2)u 2)  ( ")  )  ) )  Я+ %M C^ 0Dw~ I @J ) ) ) L ) N P ) )" )/ )@ fT us v$   Ќi @v  С9TK`)U(g(0y`((_@)8))()0) )) W1P!G)X&q)@|@)@)@))@)@?@')3(`F@i/-U)_P)cX)v)~))(H)0)) @)@) p/)@(@(8`( S(Hh(((`(@@(  ( ( (*((G(d`(P(@( ( ( ( ( 6(Q`(8u (8(((((.(I(_`( @(0vpvv()(w(/F@|Q`S_Cm{\@wx2)F0k(Ppa(= R cu((й$9)0,`x(9)9)  8)@(л\5:)B9)N0{`o4)y8)% (@,`9)9)3pE@`9)dMmY8)df0Ut`8)dz`>p3){ 1h:)<`:)Ld:)\X:)eH:)m\:)vP:)~)@ Pp]  &<Mf)|:)i:){:)@Dx:)p:)9) Z0Z @ZPZ-[@ ^Ue`g0}h3)  0@`3)d)I/]@3)(o :)(3)(12)`'@(($((((o*(}!`(@(t:)R#)^00_*\' \4d&?d@I e@T`e>^e>i@zf ((((8Tt    `  ` @f `f j0j((((((() :)-:);M$}Yn`6h~`/y> !)$ (5I\bdp.l:)}"[a2) `_ ) 0]" :)2 F :)X e0j p ) :) )   :) O ) !0\!`7)!@!d!x!!!!)@!!P@!p)l ""*R7"(K":)Y"m"""""]:"""##W##[3#G#X#W#k#hw###:)#]'##`\/#].# $$5$>H$g$P$]w$2$\*$$=$$($$0$)%:)(%:) %/B)%<% e)!)K%(X%k%z%@F%pg%!%E%06"%:)%%%%:)&:)&:)'&@e7& RA& )BQ&e&y&&:)&`>&K;)&0bv&:)$v+&E& ':)'0! 'P,'A'0%V'O_':)n'z')W'#''0l ' b':)''pP'H'(%(И3(V#)@(S(0aa(@\g(  o(pVS( ((((\t((")$)0`>1)=)P&K)@Z)(Pc))z))))))p`)1)p#):)) *:) *@"7*UD*-lX*:)j****0]**"1& @f*@]H**:) + )elf_aarch64_reloc_typeelf_arc_reloc_typeelf_arm_reloc_typeelf_bfin_reloc_typeelf_h8_reloc_typeelf_hppa_reloc_typeelf_i386_reloc_typeelf_ia64_reloc_typeelf_metag_reloc_typeelf_mips_reloc_typeelf_riscv_reloc_typeelf_msp430x_reloc_typeelf_nds32_reloc_typeelf_nios2_reloc_typeelf_ppc_reloc_typeelf_ppc64_reloc_typeelf_rl78_reloc_typeelf_rx_reloc_typeelf_s390_reloc_typeelf_sh_reloc_typeelf_sparc_reloc_typeelf_tic6x_reloc_typeelf_tilegx_reloc_typeelf_tilepro_reloc_typev850_reloc_typev800_reloc_typeelf_x86_64_reloc_typeelf_xtensa_reloc_typeget_ia64_dynamic_typeget_solaris_dynamic_typeget_parisc_segment_typesymcmpis_32bit_pcrel_relocelf_headeris_64bit_pcrel_relocprintable_section_namestring_tablestring_table_lengthsec_name_buf.15642hex.15648find_sectionfind_section_in_setget_osabi_namebuff.16917get_file_typebuff.16343get_machine_namebuff.16353get_dynamic_typebuff.16252get_note_typebuff.20539get_compression_headeris_32bit_elfget_datacurrent_file_sizearchive_file_offsetuncompress_section_contentsslurp_rel_relocsget_32bit_elf_symbolssymtab_shndx_listget_64bit_elf_symbolsget_32bit_section_headersget_64bit_section_headersget_dynamic_dataslurp_rela_relocsrequest_dump_bynumbernum_dump_sectsrequest_dump_bynamedump_sects_bynameusageprint_vmaprocess_ia64_vms_dynamic_relocsdynamic_nentdynamic_addrdecode_x86_isaprint_mips_fp_abi_valueprint_symbol_for_build_attributesaved_file.20845nsyms.20849symtab.20848strtab.20846strtablen.20847display_raw_attribute__PRETTY_FUNCTION__.20198display_public_gnu_attributesprint_mips_got_entryprint_mips_pltgot_entryprocess_section_groupsdo_unwinddo_section_groupssection_headers_groupsgroup_countwarned.17978num_group_errors.17975num_errs.17977buff.17947get_ver_flagsbuff.18960print_symbol__PRETTY_FUNCTION__.15632get_elf_section_flagsdo_section_detailsbuff.17472flags.17483print_vms_timedecode_tic6x_unwind_regmasktic6x_unwind_regnamesdisplay_tag_value__PRETTY_FUNCTION__.19899display_generic_attributedisplay_tic6x_attributedisplay_power_gnu_attributedisplay_msp430x_attribute__PRETTY_FUNCTION__.20240display_arm_attributearm_attr_public_tagsarm_attr_tag_CPU_arch__PRETTY_FUNCTION__.20033display_arc_attributeprocess_attributes__PRETTY_FUNCTION__.20288get_reloc_type.part.0find_symbol_for_address.isra.2printable_section_name_from_indexget_symbol_typebuff.19065get_ia64_section_type_nameget_section_type_namebuff.17186process_section_headersdo_sectionsdo_headerdynamic_symbolsdynamic_stringsdynamic_syminfonum_dynamic_symsdo_debuggingdynamic_strings_lengthget_symbol_bindingbuff.19057arm_free_section.isra.7get_symbol_visibilityget_solaris_symbol_visibilityget_program_headers.part.9offset_from_vmaprocess_dynamic_sectiondynamic_sizedo_dynamicdynamic_infoopts.18743version_infodynamic_info_DT_GNU_HASHarchive_file_sizedynamic_syminfo_offsetdynamic_syminfo_nentflags.18777program_interpreterprocess_version_sectionsdo_versionprocess_program_headersdo_segmentsbuff.17029ia64_process_unwind__PRETTY_FUNCTION__.18216get_symbol_version_string.isra.10dump_relocationsget_unwind_section_word.part.12get_section_contentsget_symbol_otherbuff.19129buf.19124res.19104get_symbol_index_typebuff.19138print_dynamic_symbolprocess_symbol_tabledo_symsdo_dyn_symsdo_histogramdo_using_dynamichppa_process_unwindarm_print_vma_and_name.isra.19decode_arm_unwind__PRETTY_FUNCTION__.18569__PRETTY_FUNCTION__.18619process_mips_fpe_exceptionarm_process_unwinddisplay_sparc_gnu_attributedisplay_s390_gnu_attributedisplay_mips_gnu_attributeget_machine_flagsbuf.16708VER_STRINGS.16678ABI_STRINGS.16677ARCH_STRINGS.16679apply_relocationssaved_sym.19318saved_sym.19335prev_warn.19452saved_sym1.19345saved_sym2.19346value.19347prev_reloc.19651load_specific_debug_section.part.11dump_section_as_bytesdecompress_dumpsprocess_notes_at.part.27buff.20770buff.20610buff.20789global_offset.20874bool_expected.20883number_expected.20882string_expected.20881buff.20808tmpbuf.20907process_corefile_note_segmentsprocess_mips_specificl_flags_vals.20414process_objectshow_namenum_cmdline_dump_sectsdo_archdo_dumpdo_relocdynamic_relocationsdo_notessection_subsetbuff.17318buff.20721buff.17326__PRETTY_FUNCTION__.21154process_archivedo_archive_indexoptionsarm_attr_tag_ARM_ISA_usearm_attr_tag_THUMB_ISA_usearm_attr_tag_FP_archarm_attr_tag_WMMX_archarm_attr_tag_Advanced_SIMD_archarm_attr_tag_PCS_configarm_attr_tag_ABI_PCS_R9_usearm_attr_tag_ABI_PCS_RW_dataarm_attr_tag_ABI_PCS_RO_dataarm_attr_tag_ABI_PCS_GOT_usearm_attr_tag_ABI_PCS_wchar_tarm_attr_tag_ABI_FP_roundingarm_attr_tag_ABI_FP_denormalarm_attr_tag_ABI_FP_exceptionsarm_attr_tag_ABI_FP_user_exceptionsarm_attr_tag_ABI_FP_number_modelarm_attr_tag_ABI_enum_sizearm_attr_tag_ABI_HardFP_usearm_attr_tag_ABI_VFP_argsarm_attr_tag_ABI_WMMX_argsarm_attr_tag_ABI_optimization_goalsarm_attr_tag_ABI_FP_optimization_goalsarm_attr_tag_CPU_unaligned_accessarm_attr_tag_FP_HP_extensionarm_attr_tag_ABI_FP_16bit_formatarm_attr_tag_MPextension_usearm_attr_tag_DIV_usearm_attr_tag_DSP_extensionarm_attr_tag_T2EE_usearm_attr_tag_Virtualization_usearm_attr_tag_MPextension_use_legacyderegister_tm_clones__do_global_dtors_auxcompleted.6991__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entryunw_print_brmaskunw_print_frmaskunw_decode_b2unw_decode_b1unw_decode_p6unw_decode_p1unw_decode_r3unw_rlenunw_decode_r1unw_decode_p2_p5unw_decode_r2unw_print_abregspecial_reg.7291unw_decode_x1.isra.2unw_decode_x3.isra.4unw_print_xyregunw_decode_x2.isra.3unw_decode_x4.isra.5unw_decode_b3_x4unw_decode_p7_p10abiname.7511unw_decode_tableloc_offsets_comparloc_offsetscomp_addr_baserange_entry_compardisplay_debug_not_supportedregnamedwarf_regnames_countreg.11912frame_need_spacefree_abbrevsfirst_abbrevlast_abbrevdisplay_debug_strdwarf_vmatoa_1buf.10148buf_pos.10145print_dwarf_vmadisplay_gdb_indexkinds.11287read_debug_line_headerdisplay_debug_ranges_listframe_display_rowdisplay_debug_str_offsetsget_DW_SECT_short_namebuf.12363get_TAG_namebuffer.10337get_AT_namebuffer.10874get_FORM_namebuffer.10342get_encoded_value.isra.6display_blockfetch_indirect_stringfetch_indirect_line_stringprint_addr_index.constprop.18buf.11550dwarf_vmatoa64.constprop.19process_cu_tu_indexshndx_poolshndx_pool_usedshndx_pool_sizetu_counttu_setscu_countcu_setsload_cu_tu_indexescu_tu_indexes_read.12454display_cu_indexprocess_abbrev_section.part.10display_debug_abbrevdecode_location_expressiondisplay_debug_rnglists_listdisplay_debug_macinforead_cie.part.11read_and_display_attr_valueneed_base_addresshave_frame_baseprocess_debug_infoalloc_num_debug_info_entriesdebug_informationnum_bogus_warns.10947display_debug_typesdisplay_debug_infodisplay_trace_infoload_debug_infodisplay_debug_addrdisplay_debug_rangesdisplay_debug_locdisplay_debug_pubnames_workerwarned.11306display_debug_gnu_pubnamesdisplay_debug_pubnamesdisplay_debug_arangesdisplay_debug_names__PRETTY_FUNCTION__.12250buffer.10347display_debug_macrodisplay_formatted_table.isra.14display_debug_linessaved_linfo.11045state_machine_regssaved_linfo.11122display_debug_framesfde_fc.12027opts_table.12509process_archive_index_and_symbolsfirst_breakupdatewindowinflateStateCheck.part.0lenfix.3683distfix.3684order.3712dext.3591dbase.3590lext.3589lbase.3588adler32_combine_crc32_littlecrc32_combine___FRAME_END____init_array_end_DYNAMIC__init_array_start__GNU_EH_FRAME_HDR_GLOBAL_OFFSET_TABLE_get_crc_table__libc_csu_finicrc32_zdo_debug_strdo_debug_infofree@@GLIBC_2.2.5byte_get_64putchar@@GLIBC_2.2.5get_DW_TAG_nameabort@@GLIBC_2.2.5buildargv__errno_location@@GLIBC_2.2.5free_debug_memorystrncpy@@GLIBC_2.2.5inflateValidatestrncmp@@GLIBC_2.2.5_ITM_deregisterTMCloneTablestdout@@GLIBC_2.2.5strcpy@@GLIBC_2.2.5load_debug_sectioninflatedupargvdo_debug_arangesinflateGetDictionaryferror@@GLIBC_2.2.5qsort@@GLIBC_2.2.5fread@@GLIBC_2.2.5crc32_combine64crc32dos_lbasenamedwarf_checkinflateResetKeep_edataprint_versiondo_debug_framesfclose@@GLIBC_2.2.5do_debug_pubnamesinflate_copyrighterroroptind@@GLIBC_2.2.5do_debug_locdwarf_cutoff_levelbindtextdomain@@GLIBC_2.2.5stpcpy@@GLIBC_2.2.5do_debug_abbrevsreloc_atget_archive_member_name_atunix_lbasenameinflateUnderminedcgettext@@GLIBC_2.2.5__ctype_get_mb_cur_max@@GLIBC_2.2.5strlen@@GLIBC_2.2.5init_dwarf_regnames_s390find_cu_tu_set__stack_chk_fail@@GLIBC_2.4debug_displaysgetopt_long@@GLIBC_2.2.5inflateCodesUsedsetup_nested_archivembrtowc@@GLIBC_2.2.5get_archive_member_namestrchr@@GLIBC_2.2.5do_debug_addrrewind@@GLIBC_2.2.5_IO_putc@@GLIBC_2.2.5zErrorsnprintf@@GLIBC_2.2.5dwarf_select_sections_allxreallocstrrchr@@GLIBC_2.2.5__assert_fail@@GLIBC_2.2.5fputs@@GLIBC_2.2.5adler32_combine_sch_istableget_DW_IDX_namememset@@GLIBC_2.2.5get_DW_CFA_namefscanf@@GLIBC_2.2.5inflateMarkadler32_combine64strnlen@@GLIBC_2.2.5do_trace_arangesxmallocstrncat@@GLIBC_2.2.5xmalloc_set_program_namexstrdupdwarf_select_sections_by_namesfputc@@GLIBC_2.2.5__strdup@@GLIBC_2.2.5free_debug_section__libc_start_main@@GLIBC_2.2.5byte_get_signedexpandargvsbrk@@GLIBC_2.2.5init_dwarf_regnames_iamcuget_DW_FORM_namecalloc@@GLIBC_2.2.5__data_startstrcmp@@GLIBC_2.2.5zcfreeoptarg@@GLIBC_2.2.5do_widebyte_getfreeargvftell@@GLIBC_2.2.5__gmon_start____dso_handlememcpy@@GLIBC_2.14_IO_stdin_usedinflateSyncPointinflateEndunw_decodeinflate_fastcountargveh_addr_sizeinflateSetDictionary__xstat@@GLIBC_2.2.5adler32do_trace_abbrevsdo_debug_linesdo_debug_ranges__libc_csu_initxcreallocrelease_archivemalloc@@GLIBC_2.2.5fflush@@GLIBC_2.2.5_IO_getc@@GLIBC_2.2.5do_trace_infoinflateGetHeaderxcalloc2inflatePrimedo_debug_pubtypesdwarf_select_sections_by_lettersfseek@@GLIBC_2.2.5do_debug_macinfowarnread_leb128realloc@@GLIBC_2.2.5adjust_relative_pathxcmalloc_xexit_cleanupinflateCopy__bss_startsetlocale@@GLIBC_2.2.5maininflateInit_do_debug_frames_interpinit_dwarf_regnames_i386get_DW_OP_nameinflate_tablememmove@@GLIBC_2.2.5byte_get_big_endiancrc32_combine_sch_tolowerfopen@@GLIBC_2.2.5inflateInit2_xexitzcallocget_DW_ATE_nameinit_dwarf_regnamesgmtime@@GLIBC_2.2.5init_dwarf_regnames_x86_64vfprintf@@GLIBC_2.2.5xmalloc_failedstrtoul@@GLIBC_2.2.5byte_put_big_endianstrcat@@GLIBC_2.2.5inflateResetzlibVersionsetup_archiveget_DW_AT_namez_errmsg__environ@@GLIBC_2.2.5sprintf@@GLIBC_2.2.5exit@@GLIBC_2.2.5fwrite@@GLIBC_2.2.5__TMC_END__inflateReset2writeargvbyte_get_little_endiando_gdb_index_ITM_registerTMCloneTablebyte_putbyte_put_little_endian_sch_touppermake_qualified_namedo_debug_cu_indexinit_dwarf_regnames_aarch64strerror@@GLIBC_2.2.5zlibCompileFlagsadler32_zinflateSync__cxa_finalize@@GLIBC_2.2.5xcallocstrstr@@GLIBC_2.2.5dwarf_start_diestderr@@GLIBC_2.2.5.symtab.strtab.shstrtab.interp.note.ABI-tag.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.got.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.data.rel.ro.dynamic.got.plt.data.bss.comment88#TT 1tt$DoLN V ^o ko @z` ` XSB``@f@f`f`f j j0j0j4  D  @((( ((0(( ) * 0  h= pN +y pyelftools-0.26/test/run_all_unittests.py000077500000000000000000000017621357220457300207710ustar00rootroot00000000000000#!/usr/bin/env python #------------------------------------------------------------------------------- # test/run_all_unittests.py # # Run all unit tests (alternative to running 'python -m unittest discover ...') # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- from __future__ import print_function import os, sys import unittest # Make it possible to run this file from the root dir of pyelftools without # installing pyelftools; useful for Travis testing, etc. sys.path[0:0] = ['.'] def main(): if not os.path.isdir('test'): print('!! Please execute from the root directory of pyelftools') return 1 else: tests = unittest.TestLoader().discover('test', 'test*.py', 'test') result = unittest.TextTestRunner().run(tests) if result.wasSuccessful(): return 0 else: return 1 if __name__ == '__main__': sys.exit(main()) pyelftools-0.26/test/run_examples_test.py000077500000000000000000000053741357220457300207570ustar00rootroot00000000000000#!/usr/bin/env python #------------------------------------------------------------------------------- # test/run_examples_test.py # # Run the examples and compare their output to a reference # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- import os, sys import logging from utils import run_exe, is_in_rootdir, dump_output_to_temp_files # Make it possible to run this file from the root dir of pyelftools without # installing pyelftools; useful for Travis testing, etc. sys.path[0:0] = ['.'] # Create a global logger object testlog = logging.getLogger('run_examples_test') testlog.setLevel(logging.DEBUG) testlog.addHandler(logging.StreamHandler(sys.stdout)) def discover_examples(): """ Return paths to all example scripts. Assume we're in the root source dir of pyelftools. """ root = './examples' for filename in os.listdir(root): if os.path.splitext(filename)[1] == '.py': yield os.path.join(root, filename) def reference_output_path(example_path): """ Compute the reference output path from a given example path. """ examples_root, example_name = os.path.split(example_path) example_noext, _ = os.path.splitext(example_name) return os.path.join(examples_root, 'reference_output', example_noext + '.out') def run_example_and_compare(example_path): testlog.info("Example '%s'" % example_path) reference_path = reference_output_path(example_path) ref_str = '' try: with open(reference_path) as ref_f: ref_str = ref_f.read() except (IOError, OSError) as e: testlog.info('.......ERROR - reference output cannot be read! - %s' % e) return False rc, example_out = run_exe(example_path, ['--test', './examples/sample_exe64.elf']) if rc != 0: testlog.info('.......ERROR - example returned error code %s' % rc) return False # Comparison is done as lists of lines, to avoid EOL problems if example_out.split() == ref_str.split(): return True else: testlog.info('.......FAIL comparison') dump_output_to_temp_files(testlog, example_out) return False def main(): if not is_in_rootdir(): testlog.error('Error: Please run me from the root dir of pyelftools!') return 1 success = True for example_path in discover_examples(): if success: success = success and run_example_and_compare(example_path) if success: testlog.info('\nConclusion: SUCCESS') return 0 else: testlog.info('\nConclusion: FAIL') return 1 if __name__ == '__main__': sys.exit(main()) pyelftools-0.26/test/run_readelf_tests.py000077500000000000000000000226121357220457300207200ustar00rootroot00000000000000#!/usr/bin/env python #------------------------------------------------------------------------------- # test/run_readelf_tests.py # # Automatic test runner for elftools & readelf # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- import argparse from difflib import SequenceMatcher import logging from multiprocessing import Pool import os import platform import re import sys import time from utils import run_exe, is_in_rootdir, dump_output_to_temp_files # Make it possible to run this file from the root dir of pyelftools without # installing pyelftools; useful for Travis testing, etc. sys.path[0:0] = ['.'] # Create a global logger object testlog = logging.getLogger('run_tests') testlog.setLevel(logging.DEBUG) testlog.addHandler(logging.StreamHandler(sys.stdout)) # Set the path for calling readelf. We carry our own version of readelf around, # because binutils tend to change its output even between daily builds of the # same minor release and keeping track is a headache. if platform.system() == "Darwin": # MacOS READELF_PATH = 'greadelf' else: READELF_PATH = 'test/external_tools/readelf' if not os.path.exists(READELF_PATH): READELF_PATH = 'readelf' def discover_testfiles(rootdir): """ Discover test files in the given directory. Yield them one by one. """ for filename in os.listdir(rootdir): _, ext = os.path.splitext(filename) if ext == '.elf': yield os.path.join(rootdir, filename) def run_test_on_file(filename, verbose=False): """ Runs a test on the given input filename. Return True if all test runs succeeded. """ success = True testlog.info("Test file '%s'" % filename) for option in [ '-e', '-d', '-s', '-n', '-r', '-x.text', '-p.shstrtab', '-V', '--debug-dump=info', '--debug-dump=decodedline', '--debug-dump=frames', '--debug-dump=frames-interp', '--debug-dump=aranges', '--debug-dump=pubtypes', '--debug-dump=pubnames' ]: if verbose: testlog.info("..option='%s'" % option) # TODO(zlobober): this is a dirty hack to make tests work for ELF core # dump notes. Making it work properly requires a pretty deep # investigation of how original readelf formats the output. if "core" in filename and option == "-n": if verbose: testlog.warning("....will fail because corresponding part of readelf.py is not implemented yet") testlog.info('.......................SKIPPED') continue # stdouts will be a 2-element list: output of readelf and output # of scripts/readelf.py stdouts = [] for exe_path in [READELF_PATH, 'scripts/readelf.py']: args = [option, filename] if verbose: testlog.info("....executing: '%s %s'" % ( exe_path, ' '.join(args))) t1 = time.time() rc, stdout = run_exe(exe_path, args) if verbose: testlog.info("....elapsed: %s" % (time.time() - t1,)) if rc != 0: testlog.error("@@ aborting - '%s' returned '%s'" % (exe_path, rc)) return False stdouts.append(stdout) if verbose: testlog.info('....comparing output...') t1 = time.time() rc, errmsg = compare_output(*stdouts) if verbose: testlog.info("....elapsed: %s" % (time.time() - t1,)) if rc: if verbose: testlog.info('.......................SUCCESS') else: success = False testlog.info('.......................FAIL') testlog.info('....for option "%s"' % option) testlog.info('....Output #1 is readelf, Output #2 is pyelftools') testlog.info('@@ ' + errmsg) dump_output_to_temp_files(testlog, *stdouts) return success def compare_output(s1, s2): """ Compare stdout strings s1 and s2. s1 is from readelf, s2 from elftools readelf.py Return pair success, errmsg. If comparison succeeds, success is True and errmsg is empty. Otherwise success is False and errmsg holds a description of the mismatch. Note: this function contains some rather horrible hacks to ignore differences which are not important for the verification of pyelftools. This is due to some intricacies of binutils's readelf which pyelftools doesn't currently implement, features that binutils doesn't support, or silly inconsistencies in the output of readelf, which I was reluctant to replicate. Read the documentation for more details. """ def prepare_lines(s): return [line for line in s.lower().splitlines() if line.strip() != ''] lines1 = prepare_lines(s1) lines2 = prepare_lines(s2) flag_after_symtable = False if len(lines1) != len(lines2): return False, 'Number of lines different: %s vs %s' % ( len(lines1), len(lines2)) for i in range(len(lines1)): if 'symbol table' in lines1[i]: flag_after_symtable = True # Compare ignoring whitespace lines1_parts = lines1[i].split() lines2_parts = lines2[i].split() if ''.join(lines1_parts) != ''.join(lines2_parts): ok = False try: # Ignore difference in precision of hex representation in the # last part (i.e. 008f3b vs 8f3b) if (''.join(lines1_parts[:-1]) == ''.join(lines2_parts[:-1]) and int(lines1_parts[-1], 16) == int(lines2_parts[-1], 16)): ok = True except ValueError: pass sm = SequenceMatcher() sm.set_seqs(lines1[i], lines2[i]) changes = sm.get_opcodes() if flag_after_symtable: # Detect readelf's adding @ with lib and version after # symbol name. if ( len(changes) == 2 and changes[1][0] == 'delete' and lines1[i][changes[1][1]] == '@'): ok = True elif 'at_const_value' in lines1[i]: # On 32-bit machines, readelf doesn't correctly represent # some boundary LEB128 numbers val = lines2_parts[-1] num2 = int(val, 16 if val.startswith('0x') else 10) if num2 <= -2**31 and '32' in platform.architecture()[0]: ok = True elif 'os/abi' in lines1[i]: if 'unix - gnu' in lines1[i] and 'unix - linux' in lines2[i]: ok = True elif ( 'unknown at value' in lines1[i] and 'dw_at_apple' in lines2[i]): ok = True else: for s in ('t (tls)', 'l (large)'): if s in lines1[i] or s in lines2[i]: ok = True break if not ok: errmsg = 'Mismatch on line #%s:\n>>%s<<\n>>%s<<\n (%r)' % ( i, lines1[i], lines2[i], changes) return False, errmsg return True, '' def main(): if not is_in_rootdir(): testlog.error('Error: Please run me from the root dir of pyelftools!') return 1 argparser = argparse.ArgumentParser( usage='usage: %(prog)s [options] [file] [file] ...', prog='run_readelf_tests.py') argparser.add_argument('files', nargs='*', help='files to run tests on') argparser.add_argument( '--parallel', action='store_true', help='run tests in parallel; always runs all tests w/o verbose') argparser.add_argument('-V', '--verbose', action='store_true', dest='verbose', help='verbose output') argparser.add_argument( '-k', '--keep-going', action='store_true', dest='keep_going', help="Run all tests, don't stop at the first failure") args = argparser.parse_args() if args.parallel: if args.verbose or args.keep_going == False: print('WARNING: parallel mode disables verbosity and always keeps going') if args.verbose: testlog.info('Running in verbose mode') testlog.info('Python executable = %s' % sys.executable) testlog.info('readelf path = %s' % READELF_PATH) testlog.info('Given list of files: %s' % args.files) # If file names are given as command-line arguments, only these files # are taken as inputs. Otherwise, autodiscovery is performed. if len(args.files) > 0: filenames = args.files else: filenames = sorted(discover_testfiles('test/testfiles_for_readelf')) if len(filenames) > 1 and args.parallel: pool = Pool() results = pool.map( run_test_on_file, filenames) failures = results.count(False) else: failures = 0 for filename in filenames: if not run_test_on_file(filename, verbose=args.verbose): failures += 1 if not args.keep_going: break if failures == 0: testlog.info('\nConclusion: SUCCESS') return 0 elif args.keep_going: testlog.info('\nConclusion: FAIL ({}/{})'.format( failures, len(filenames))) return 1 else: testlog.info('\nConclusion: FAIL') return 1 if __name__ == '__main__': sys.exit(main()) pyelftools-0.26/test/test_arm_call_reloc.py000066400000000000000000000027341357220457300212050ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools tests # # Test 'R_ARM_CALL' relocation type support. # Compare the '.text' section data of ELF file that was relocated by elftools # with an ELF file that was relocated by linker. # # Dmitry Koltunov (koltunov@ispras.ru) # This code is in the public domain #------------------------------------------------------------------------------- import os import sys import unittest from elftools.common.py3compat import BytesIO from elftools.elf.elffile import ELFFile from elftools.elf.relocation import RelocationHandler def do_relocation(rel_elf): data = rel_elf.get_section_by_name('.text').data() rh = RelocationHandler(rel_elf) stream = BytesIO() stream.write(data) rel = rel_elf.get_section_by_name('.rel.text') rh.apply_section_relocations(stream, rel) return stream.getvalue() class TestARMRElocation(unittest.TestCase): def test_reloc(self): test_dir = os.path.join('test', 'testfiles_for_unittests') with open(os.path.join(test_dir, 'arm_reloc_unrelocated.o'), 'rb') as rel_f, \ open(os.path.join(test_dir, 'arm_reloc_relocated.elf'), 'rb') as f: rel_elf = ELFFile(rel_f) elf = ELFFile(f) # Comparison of '.text' section data self.assertEquals(do_relocation(rel_elf), elf.get_section_by_name('.text').data()) if __name__ == '__main__': unittest.main() pyelftools-0.26/test/test_arm_support.py000066400000000000000000000046161357220457300206230ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools tests # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- import unittest import os from elftools.elf.elffile import ELFFile class TestARMSupport(unittest.TestCase): def test_hello(self): with open(os.path.join('test', 'testfiles_for_unittests', 'simple_gcc.elf.arm'), 'rb') as f: elf = ELFFile(f) self.assertEqual(elf.get_machine_arch(), 'ARM') # Check some other properties of this ELF file derived from readelf self.assertEqual(elf['e_entry'], 0x8018) self.assertEqual(elf.num_sections(), 14) self.assertEqual(elf.num_segments(), 2) def test_build_attributes(self): with open(os.path.join('test', 'testfiles_for_unittests', 'simple_gcc.elf.arm'), 'rb') as f: elf = ELFFile(f) sec = elf.get_section_by_name('.ARM.attributes') self.assertEqual(sec['sh_type'], 'SHT_ARM_ATTRIBUTES') self.assertEqual(sec.num_subsections, 1) subsec = sec.subsections[0] self.assertEqual(subsec.header['vendor_name'], 'aeabi') self.assertEqual(subsec.num_subsubsections, 1) subsubsec = subsec.subsubsections[0] self.assertEqual(subsubsec.header.tag, 'TAG_FILE') for i in subsubsec.iter_attributes('TAG_CPU_NAME'): self.assertEqual(i.value, 'ARM7TDMI-S') for i in subsubsec.iter_attributes('TAG_CPU_ARCH'): self.assertEqual(i.value, 2) def test_DWARF_indirect_forms(self): # This file uses a lot of DW_FORM_indirect, and is also an ARM ELF # with non-trivial DWARF info. # So this is a simple sanity check that we can successfully parse it # and extract the expected amount of CUs. with open(os.path.join('test', 'testfiles_for_unittests', 'arm_with_form_indirect.elf'), 'rb') as f: elffile = ELFFile(f) self.assertTrue(elffile.has_dwarf_info()) dwarfinfo = elffile.get_dwarf_info() all_CUs = list(dwarfinfo.iter_CUs()) self.assertEqual(len(all_CUs), 9) if __name__ == '__main__': unittest.main() pyelftools-0.26/test/test_callframe.py000066400000000000000000000162331357220457300201740ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools tests # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- import unittest from elftools.common.py3compat import BytesIO from elftools.dwarf.callframe import ( CallFrameInfo, CIE, FDE, instruction_name, CallFrameInstruction, RegisterRule, DecodedCallFrameTable, CFARule) from elftools.dwarf.structs import DWARFStructs from elftools.dwarf.descriptions import (describe_CFI_instructions, set_global_machine_arch) from elftools.elf.elffile import ELFFile from os.path import join class TestCallFrame(unittest.TestCase): def assertInstruction(self, instr, name, args): self.assertIsInstance(instr, CallFrameInstruction) self.assertEqual(instruction_name(instr.opcode), name) self.assertEqual(instr.args, args) def test_spec_sample_d6(self): # D.6 sample in DWARFv3 s = BytesIO() data = (b'' + # first comes the CIE b'\x20\x00\x00\x00' + # length b'\xff\xff\xff\xff' + # CIE_id b'\x03\x00\x04\x7c' + # version, augmentation, caf, daf b'\x08' + # return address b'\x0c\x07\x00' + b'\x08\x00' + b'\x07\x01' + b'\x07\x02' + b'\x07\x03' + b'\x08\x04' + b'\x08\x05' + b'\x08\x06' + b'\x08\x07' + b'\x09\x08\x01' + b'\x00' + # then comes the FDE b'\x28\x00\x00\x00' + # length b'\x00\x00\x00\x00' + # CIE_pointer (to CIE at 0) b'\x44\x33\x22\x11' + # initial_location b'\x54\x00\x00\x00' + # address range b'\x41' + b'\x0e\x0c' + b'\x41' + b'\x88\x01' + b'\x41' + b'\x86\x02' + b'\x41' + b'\x0d\x06' + b'\x41' + b'\x84\x03' + b'\x4b' + b'\xc4' + b'\x41' + b'\xc6' + b'\x0d\x07' + b'\x41' + b'\xc8' + b'\x41' + b'\x0e\x00' + b'\x00\x00' ) s.write(data) structs = DWARFStructs(little_endian=True, dwarf_format=32, address_size=4) cfi = CallFrameInfo(s, len(data), 0, structs) entries = cfi.get_entries() self.assertEqual(len(entries), 2) self.assertIsInstance(entries[0], CIE) self.assertEqual(entries[0]['length'], 32) self.assertEqual(entries[0]['data_alignment_factor'], -4) self.assertEqual(entries[0]['return_address_register'], 8) self.assertEqual(len(entries[0].instructions), 11) self.assertInstruction(entries[0].instructions[0], 'DW_CFA_def_cfa', [7, 0]) self.assertInstruction(entries[0].instructions[8], 'DW_CFA_same_value', [7]) self.assertInstruction(entries[0].instructions[9], 'DW_CFA_register', [8, 1]) self.assertTrue(isinstance(entries[1], FDE)) self.assertEqual(entries[1]['length'], 40) self.assertEqual(entries[1]['CIE_pointer'], 0) self.assertEqual(entries[1]['address_range'], 84) self.assertIs(entries[1].cie, entries[0]) self.assertEqual(len(entries[1].instructions), 21) self.assertInstruction(entries[1].instructions[0], 'DW_CFA_advance_loc', [1]) self.assertInstruction(entries[1].instructions[1], 'DW_CFA_def_cfa_offset', [12]) self.assertInstruction(entries[1].instructions[9], 'DW_CFA_offset', [4, 3]) self.assertInstruction(entries[1].instructions[18], 'DW_CFA_def_cfa_offset', [0]) self.assertInstruction(entries[1].instructions[20], 'DW_CFA_nop', []) # Now let's decode it... decoded_CIE = entries[0].get_decoded() self.assertEqual(decoded_CIE.reg_order, list(range(9))) self.assertEqual(len(decoded_CIE.table), 1) self.assertEqual(decoded_CIE.table[0]['cfa'].reg, 7) self.assertEqual(decoded_CIE.table[0]['pc'], 0) self.assertEqual(decoded_CIE.table[0]['cfa'].offset, 0) self.assertEqual(decoded_CIE.table[0][4].type, RegisterRule.SAME_VALUE) self.assertEqual(decoded_CIE.table[0][8].type, RegisterRule.REGISTER) self.assertEqual(decoded_CIE.table[0][8].arg, 1) decoded_FDE = entries[1].get_decoded() self.assertEqual(decoded_FDE.reg_order, list(range(9))) self.assertEqual(decoded_FDE.table[0]['cfa'].reg, 7) self.assertEqual(decoded_FDE.table[0]['cfa'].offset, 0) self.assertEqual(decoded_FDE.table[0]['pc'], 0x11223344) self.assertEqual(decoded_FDE.table[0][8].type, RegisterRule.REGISTER) self.assertEqual(decoded_FDE.table[0][8].arg, 1) self.assertEqual(decoded_FDE.table[1]['cfa'].reg, 7) self.assertEqual(decoded_FDE.table[1]['cfa'].offset, 12) self.assertEqual(decoded_FDE.table[2][8].type, RegisterRule.OFFSET) self.assertEqual(decoded_FDE.table[2][8].arg, -4) self.assertEqual(decoded_FDE.table[2][4].type, RegisterRule.SAME_VALUE) self.assertEqual(decoded_FDE.table[5]['pc'], 0x11223344 + 20) self.assertEqual(decoded_FDE.table[5][4].type, RegisterRule.OFFSET) self.assertEqual(decoded_FDE.table[5][4].arg, -12) self.assertEqual(decoded_FDE.table[6]['pc'], 0x11223344 + 64) self.assertEqual(decoded_FDE.table[9]['pc'], 0x11223344 + 76) def test_describe_CFI_instructions(self): # The data here represents a single CIE data = (b'' + b'\x16\x00\x00\x00' + # length b'\xff\xff\xff\xff' + # CIE_id b'\x03\x00\x04\x7c' + # version, augmentation, caf, daf b'\x08' + # return address b'\x0c\x07\x02' + b'\x10\x02\x07\x03\x01\x02\x00\x00\x06\x06') s = BytesIO(data) structs = DWARFStructs(little_endian=True, dwarf_format=32, address_size=4) cfi = CallFrameInfo(s, len(data), 0, structs) entries = cfi.get_entries() set_global_machine_arch('x86') self.assertEqual(describe_CFI_instructions(entries[0]), ( ' DW_CFA_def_cfa: r7 (edi) ofs 2\n' + ' DW_CFA_expression: r2 (edx) (DW_OP_addr: 201; DW_OP_deref; DW_OP_deref)\n')) def test_CFIEntry_get_decoded(self): oracle_decoded = DecodedCallFrameTable( table = [ {'pc': 0, 'cfa': CFARule(reg = 29, offset = 0, expr = None)} ], reg_order = [] ) test_dir = join('test', 'testfiles_for_unittests') with open(join(test_dir, 'simple_mipsel.elf'), 'rb') as f: elf = ELFFile(f) di = elf.get_dwarf_info() entries = di.CFI_entries() decoded = entries[0].get_decoded() self.assertEqual(oracle_decoded.table[0]['cfa'].reg, decoded.table[0]['cfa'].reg ) self.assertEqual(oracle_decoded.table[0]['cfa'].offset, decoded.table[0]['cfa'].offset) if __name__ == '__main__': unittest.main() pyelftools-0.26/test/test_compressed_support.py000066400000000000000000000061601357220457300222040ustar00rootroot00000000000000#------------------------------------------------------------------------------- # Test handling for compressed debug sections # # Pierre-Marie de Rodat (pmderodat@kawie.fr) # This code is in the public domain #------------------------------------------------------------------------------- from contextlib import contextmanager import os import unittest from elftools.elf.elffile import ELFFile from elftools.common.exceptions import ELFCompressionError class TestCompressedSupport(unittest.TestCase): def test_compressed_32(self): with self.elffile('32') as elf: section = elf.get_section_by_name('.debug_info') self.assertTrue(section.compressed) self.assertEqual(section.data_size, 0x330) self.assertEqual(section.data_alignment, 1) self.assertEqual(self.get_cus_info(elf), ['CU 0x0: 0xb-0x322']) def test_compressed_64(self): with self.elffile('64') as elf: section = elf.get_section_by_name('.debug_info') self.assertTrue(section.compressed) self.assertEqual(section.data_size, 0x327) self.assertEqual(section.data_alignment, 1) self.assertEqual(self.get_cus_info(elf), ['CU 0x0: 0xb-0x319']) def test_compressed_unknown_type(self): with self.elffile('unknown_type') as elf: section = elf.get_section_by_name('.debug_info') try: section.data() except ELFCompressionError as exc: self.assertEqual( str(exc), 'Unknown compression type: 0x7ffffffe' ) else: self.fail('An exception was exected') def test_compressed_bad_size(self): with self.elffile('bad_size') as elf: section = elf.get_section_by_name('.debug_info') try: section.data() except ELFCompressionError as exc: self.assertEqual( str(exc), 'Decompressed data is 807 bytes long, should be 808 bytes' ' long' ) else: self.fail('An exception was exected') # Test helpers @contextmanager def elffile(self, name): """ Context manager to open and parse an ELF file. """ with open(os.path.join('test', 'testfiles_for_unittests', 'compressed_{}.o'.format(name)), 'rb') as f: yield ELFFile(f) def get_cus_info(self, elffile): """ Return basic info about the compile units in `elffile`. This is used as a basic sanity check for decompressed DWARF data. """ result = [] dwarf = elffile.get_dwarf_info() for cu in dwarf.iter_CUs(): dies = [] def traverse(die): dies.append(die.offset) for child in die.iter_children(): traverse(child) traverse(cu.get_top_DIE()) result.append('CU {:#0x}: {:#0x}-{:#0x}'.format( cu.cu_offset, dies[0], dies[-1] )) return result pyelftools-0.26/test/test_core_notes.py000066400000000000000000000212621357220457300204040ustar00rootroot00000000000000#------------------------------------------------------------------------------ # elftools tests # # Maxim Akhmedov (max42@yandex-team.ru) # This code is in the public domain #------------------------------------------------------------------------------ import unittest import os from elftools.elf.elffile import ELFFile from elftools.elf.segments import NoteSegment class TestCoreNotes(unittest.TestCase): """ This test makes sure than core dump specific sections are properly analyzed. """ @classmethod def setUpClass(cls): cls._core_file = open(os.path.join('test', 'testfiles_for_unittests', 'core_linux64.elf'), 'rb') def test_core_prpsinfo(self): elf = ELFFile(self._core_file) for segment in elf.iter_segments(): if not isinstance(segment, NoteSegment): continue notes = list(segment.iter_notes()) for note in segment.iter_notes(): if note['n_type'] != 'NT_PRPSINFO': continue desc = note['n_desc'] self.assertEqual(desc['pr_state'], 0) self.assertEqual(desc['pr_sname'], b'R') self.assertEqual(desc['pr_zomb'], 0) self.assertEqual(desc['pr_nice'], 0) self.assertEqual(desc['pr_flag'], 0x400600) self.assertEqual(desc['pr_uid'], 1000) self.assertEqual(desc['pr_gid'], 1000) self.assertEqual(desc['pr_pid'], 23395) self.assertEqual(desc['pr_ppid'], 23187) self.assertEqual(desc['pr_pgrp'], 23395) self.assertEqual(desc['pr_sid'], 23187) self.assertEqual( desc['pr_fname'], b'coredump_self\x00\x00\x00') self.assertEqual( desc['pr_psargs'], b'./coredump_self foo bar 42 ' + b'\x00' * (80 - 27)) def test_core_nt_file(self): """ Test that the parsing of the NT_FILE note within a core file is correct. The assertions are made against the output of eu-readelf. eu-readelf -n core_linux64.elf ... CORE 621 FILE 10 files: 00400000-00401000 00000000 4096 /home/max42/pyelftools/test/coredump_self 00600000-00601000 00000000 4096 /home/max42/pyelftools/test/coredump_self 00601000-00602000 00001000 4096 /home/max42/pyelftools/test/coredump_self 7fa4593ae000-7fa45956d000 00000000 1830912 /lib/x86_64-linux-gnu/libc-2.23.so 7fa45956d000-7fa45976d000 001bf000 2097152 /lib/x86_64-linux-gnu/libc-2.23.so 7fa45976d000-7fa459771000 001bf000 16384 /lib/x86_64-linux-gnu/libc-2.23.so 7fa459771000-7fa459773000 001c3000 8192 /lib/x86_64-linux-gnu/libc-2.23.so 7fa459777000-7fa45979d000 00000000 155648 /lib/x86_64-linux-gnu/ld-2.23.so 7fa45999c000-7fa45999d000 00025000 4096 /lib/x86_64-linux-gnu/ld-2.23.so 7fa45999d000-7fa45999e000 00026000 4096 /lib/x86_64-linux-gnu/ld-2.23.so ... """ elf = ELFFile(self._core_file) nt_file_found = False for segment in elf.iter_segments(): if not isinstance(segment, NoteSegment): continue for note in segment.iter_notes(): if note['n_type'] != 'NT_FILE': continue nt_file_found = True desc = note['n_desc'] self.assertEqual(desc['num_map_entries'], 10) self.assertEqual(desc['page_size'], 4096) self.assertEqual(len(desc['Elf_Nt_File_Entry']), 10) self.assertEqual(len(desc['filename']), 10) self.validate_nt_file_entry(desc['Elf_Nt_File_Entry'][0], desc['page_size'], 0x00400000, 0x00401000, 0x00000000) self.assertEqual(desc['filename'][0], b"/home/max42/pyelftools/test/coredump_self") self.validate_nt_file_entry(desc['Elf_Nt_File_Entry'][1], desc['page_size'], 0x00600000, 0x00601000, 0x00000000) self.assertEqual(desc['filename'][1], b"/home/max42/pyelftools/test/coredump_self") self.validate_nt_file_entry(desc['Elf_Nt_File_Entry'][2], desc['page_size'], 0x00601000, 0x00602000, 0x00001000) self.assertEqual(desc['filename'][2], b"/home/max42/pyelftools/test/coredump_self") self.validate_nt_file_entry(desc['Elf_Nt_File_Entry'][3], desc['page_size'], 0x7fa4593ae000, 0x7fa45956d000, 0x00000000) self.assertEqual(desc['filename'][3], b"/lib/x86_64-linux-gnu/libc-2.23.so") self.validate_nt_file_entry(desc['Elf_Nt_File_Entry'][4], desc['page_size'], 0x7fa45956d000, 0x7fa45976d000, 0x001bf000) self.assertEqual(desc['filename'][4], b"/lib/x86_64-linux-gnu/libc-2.23.so") self.validate_nt_file_entry(desc['Elf_Nt_File_Entry'][5], desc['page_size'], 0x7fa45976d000, 0x7fa459771000, 0x001bf000) self.assertEqual(desc['filename'][5], b"/lib/x86_64-linux-gnu/libc-2.23.so") self.validate_nt_file_entry(desc['Elf_Nt_File_Entry'][6], desc['page_size'], 0x7fa459771000, 0x7fa459773000, 0x001c3000) self.assertEqual(desc['filename'][6], b"/lib/x86_64-linux-gnu/libc-2.23.so") self.validate_nt_file_entry(desc['Elf_Nt_File_Entry'][7], desc['page_size'], 0x7fa459777000, 0x7fa45979d000, 0x00000000) self.assertEqual(desc['filename'][7], b"/lib/x86_64-linux-gnu/ld-2.23.so") self.validate_nt_file_entry(desc['Elf_Nt_File_Entry'][8], desc['page_size'], 0x7fa45999c000, 0x7fa45999d000, 0x00025000) self.assertEqual(desc['filename'][8], b"/lib/x86_64-linux-gnu/ld-2.23.so") self.validate_nt_file_entry(desc['Elf_Nt_File_Entry'][9], desc['page_size'], 0x7fa45999d000, 0x7fa45999e000, 0x00026000) self.assertEqual(desc['filename'][9], b"/lib/x86_64-linux-gnu/ld-2.23.so") self.assertTrue(nt_file_found) def validate_nt_file_entry(self, entry, page_size, expected_vm_start, expected_vm_end, expected_page_offset): self.assertEqual(entry.vm_start, expected_vm_start) self.assertEqual(entry.vm_end, expected_vm_end) self.assertEqual(entry.page_offset * page_size, expected_page_offset) @classmethod def tearDownClass(cls): cls._core_file.close() pyelftools-0.26/test/test_die_size.py000066400000000000000000000024661357220457300200440ustar00rootroot00000000000000#------------------------------------------------------------------------------ # elftools tests # # Anders Dellien (anders@andersdellien.se) # This code is in the public domain #------------------------------------------------------------------------------ import unittest import os from elftools.elf.elffile import ELFFile class TestDieSize(unittest.TestCase): """ This test verifies that null DIEs are treated correctly - i.e. removed when we 'unflatten' the linear list and build a tree. The test file contains a CU with two non-null DIEs (both three bytes big), where the second one is followed by three null DIEs. We verify that the null DIEs are discarded and that the length of the second DIE does not include the null entries that follow it. """ def test_die_size(self): with open(os.path.join('test', 'testfiles_for_unittests', 'trailing_null_dies.elf'), 'rb') as f: elffile = ELFFile(f) self.assertTrue(elffile.has_dwarf_info()) dwarfinfo = elffile.get_dwarf_info() for CU in dwarfinfo.iter_CUs(): for child in CU.get_top_DIE().iter_children(): self.assertEquals(child.size, 3) if __name__ == '__main__': unittest.main() pyelftools-0.26/test/test_double_dynstr_section.py000066400000000000000000000036061357220457300226470ustar00rootroot00000000000000#------------------------------------------------------------------------------ # elftools tests # # Yann Rouillard (yann@pleiades.fr.eu.org) # This code is in the public domain #------------------------------------------------------------------------------ import unittest import os from elftools.elf.elffile import ELFFile from elftools.elf.dynamic import DynamicSection, DynamicTag class TestDoubleDynstrSections(unittest.TestCase): """ This test make sure than dynamic tags are properly analyzed when two .dynstr sections are present in an elf file """ reference_data = [ 'libz.so.1', 'libc.so.6', 'lib_versioned.so.1', ] def _test_double_dynstr_section_generic(self, testfile): with open(os.path.join('test', 'testfiles_for_unittests', testfile), 'rb') as f: elf = ELFFile(f) for section in elf.iter_sections(): if isinstance(section, DynamicSection): d_tags = [getattr(x, x.entry.d_tag[3:].lower()) for x in section.iter_tags() if x.entry.d_tag in DynamicTag._HANDLED_TAGS] self.assertListEqual( TestDoubleDynstrSections.reference_data, d_tags) return self.fail('No dynamic section found !!') def test_double_dynstr_section(self): """ First test with the good dynstr section first """ self._test_double_dynstr_section_generic( 'lib_with_two_dynstr_sections.so.1.elf') def test_double_dynstr_section_reverse(self): """ Second test with the good dynstr section last """ self._test_double_dynstr_section_generic( 'lib_with_two_dynstr_sections_reversed.so.1.elf') if __name__ == '__main__': unittest.main() pyelftools-0.26/test/test_dwarf_attr_form_flag_present.py000066400000000000000000000017351357220457300241600ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools tests # # Eli Bendersky (eliben@gmail.com), Santhosh Kumar Mani (santhoshmani@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- import os import unittest from elftools.elf.elffile import ELFFile class TestAttrFormFlagPresent(unittest.TestCase): def test_form_flag_present_value_is_true(self): with open(os.path.join('test', 'testfiles_for_unittests', 'lambda.elf'), 'rb') as f: elffile = ELFFile(f) self.assertTrue(elffile.has_dwarf_info()) dwarf = elffile.get_dwarf_info() for cu in dwarf.iter_CUs(): for die in cu.iter_DIEs(): for _, attr in die.attributes.items(): if attr.form == "DW_FORM_flag_present": self.assertTrue(attr.value) pyelftools-0.26/test/test_dwarf_expr.py000066400000000000000000000043561357220457300204120ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools tests # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- import unittest from elftools.dwarf.descriptions import ExprDumper, set_global_machine_arch from elftools.dwarf.structs import DWARFStructs class TestExprDumper(unittest.TestCase): structs32 = DWARFStructs( little_endian=True, dwarf_format=32, address_size=4) def setUp(self): self.visitor = ExprDumper(self.structs32) set_global_machine_arch('x64') def test_basic_single(self): self.visitor.process_expr([0x1b]) self.assertEqual(self.visitor.get_str(), 'DW_OP_div') self.setUp() self.visitor.process_expr([0x74, 0x82, 0x01]) self.assertEqual(self.visitor.get_str(), 'DW_OP_breg4 (rsi): 130') self.setUp() self.visitor.process_expr([0x91, 0x82, 0x01]) self.assertEqual(self.visitor.get_str(), 'DW_OP_fbreg: 130') self.setUp() self.visitor.process_expr([0x51]) self.assertEqual(self.visitor.get_str(), 'DW_OP_reg1 (rdx)') self.setUp() self.visitor.process_expr([0x90, 16]) self.assertEqual(self.visitor.get_str(), 'DW_OP_regx: 16 (rip)') self.setUp() self.visitor.process_expr([0x9d, 0x8f, 0x0A, 0x90, 0x01]) self.assertEqual(self.visitor.get_str(), 'DW_OP_bit_piece: 1295 144') def test_basic_sequence(self): self.visitor.process_expr([0x03, 0x01, 0x02, 0, 0, 0x06, 0x06]) self.assertEqual(self.visitor.get_str(), 'DW_OP_addr: 201; DW_OP_deref; DW_OP_deref') self.setUp() self.visitor.process_expr([0x15, 0xFF, 0x0b, 0xf1, 0xff]) self.assertEqual(self.visitor.get_str(), 'DW_OP_pick: 255; DW_OP_const2s: -15') self.setUp() self.visitor.process_expr([0x1d, 0x1e, 0x1d, 0x1e, 0x1d, 0x1e]) self.assertEqual(self.visitor.get_str(), 'DW_OP_mod; DW_OP_mul; DW_OP_mod; DW_OP_mul; DW_OP_mod; DW_OP_mul') if __name__ == '__main__': unittest.main() pyelftools-0.26/test/test_dwarf_lineprogram.py000066400000000000000000000101131357220457300217370ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools tests # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- import unittest from elftools.common.py3compat import BytesIO, iteritems from elftools.dwarf.lineprogram import LineProgram, LineState, LineProgramEntry from elftools.dwarf.structs import DWARFStructs from elftools.dwarf.constants import * class TestLineProgram(unittest.TestCase): def _make_program_in_stream(self, stream): """ Create a LineProgram from the given program encoded in a stream """ ds = DWARFStructs(little_endian=True, dwarf_format=32, address_size=4) header = ds.Dwarf_lineprog_header.parse( b'\x04\x10\x00\x00' + # initial lenght b'\x03\x00' + # version b'\x20\x00\x00\x00' + # header length b'\x01\x01\x01\x0F' + # flags b'\x0A' + # opcode_base b'\x00\x01\x04\x08\x0C\x01\x01\x01\x00' + # standard_opcode_lengths # 2 dir names followed by a NULL b'\x61\x62\x00\x70\x00\x00' + # a file entry b'\x61\x72\x00\x0C\x0D\x0F' + # and another entry b'\x45\x50\x51\x00\x86\x12\x07\x08' + # followed by NULL b'\x00') lp = LineProgram(header, stream, ds, 0, len(stream.getvalue())) return lp def assertLineState(self, state, **kwargs): """ Assert that the state attributes specified in kwargs have the given values (the rest are default). """ for k, v in iteritems(kwargs): self.assertEqual(getattr(state, k), v) def test_spec_sample_59(self): # Sample in figure 59 of DWARFv3 s = BytesIO() s.write( b'\x02\xb9\x04' + b'\x0b' + b'\x38' + b'\x82' + b'\x73' + b'\x02\x02' + b'\x00\x01\x01') lp = self._make_program_in_stream(s) linetable = lp.get_entries() self.assertEqual(len(linetable), 7) self.assertIs(linetable[0].state, None) # doesn't modify state self.assertEqual(linetable[0].command, DW_LNS_advance_pc) self.assertEqual(linetable[0].args, [0x239]) self.assertLineState(linetable[1].state, address=0x239, line=3) self.assertEqual(linetable[1].command, 0xb) self.assertEqual(linetable[1].args, [2, 0, 0]) self.assertLineState(linetable[2].state, address=0x23c, line=5) self.assertLineState(linetable[3].state, address=0x244, line=6) self.assertLineState(linetable[4].state, address=0x24b, line=7, end_sequence=False) self.assertEqual(linetable[5].command, DW_LNS_advance_pc) self.assertEqual(linetable[5].args, [2]) self.assertLineState(linetable[6].state, address=0x24d, line=7, end_sequence=True) def test_spec_sample_60(self): # Sample in figure 60 of DWARFv3 s = BytesIO() s.write( b'\x09\x39\x02' + b'\x0b' + b'\x09\x03\x00' + b'\x0b' + b'\x09\x08\x00' + b'\x0a' + b'\x09\x07\x00' + b'\x0a' + b'\x09\x02\x00' + b'\x00\x01\x01') lp = self._make_program_in_stream(s) linetable = lp.get_entries() self.assertEqual(len(linetable), 10) self.assertIs(linetable[0].state, None) # doesn't modify state self.assertEqual(linetable[0].command, DW_LNS_fixed_advance_pc) self.assertEqual(linetable[0].args, [0x239]) self.assertLineState(linetable[1].state, address=0x239, line=3) self.assertLineState(linetable[3].state, address=0x23c, line=5) self.assertLineState(linetable[5].state, address=0x244, line=6) self.assertLineState(linetable[7].state, address=0x24b, line=7, end_sequence=False) self.assertLineState(linetable[9].state, address=0x24d, line=7, end_sequence=True) if __name__ == '__main__': unittest.main() pyelftools-0.26/test/test_dwarf_range_lists.py000066400000000000000000000023061357220457300217370ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools tests # # Eli Bendersky (eliben@gmail.com), Santhosh Kumar Mani (santhoshmani@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- import os import unittest from elftools.elf.elffile import ELFFile class TestRangeLists(unittest.TestCase): # Test the absence of .debug_ranges section def test_range_list_absence(self): with open(os.path.join('test', 'testfiles_for_unittests', 'arm_with_form_indirect.elf'), 'rb') as f: elffile = ELFFile(f) self.assertTrue(elffile.has_dwarf_info()) self.assertIsNone(elffile.get_dwarf_info().range_lists()) # Test the presence of .debug_ranges section def test_range_list_presence(self): with open(os.path.join('test', 'testfiles_for_unittests', 'sample_exe64.elf'), 'rb') as f: elffile = ELFFile(f) self.assertTrue(elffile.has_dwarf_info()) self.assertIsNotNone(elffile.get_dwarf_info().range_lists()) if __name__ == '__main__': unittest.main() pyelftools-0.26/test/test_dwarf_structs.py000066400000000000000000000031451357220457300211360ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools tests # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- import unittest from elftools.dwarf.structs import DWARFStructs class TestDWARFStructs(unittest.TestCase): def test_lineprog_header(self): ds = DWARFStructs(little_endian=True, dwarf_format=32, address_size=4) c = ds.Dwarf_lineprog_header.parse( b'\x04\x10\x00\x00' + # initial length b'\x02\x00' + # version b'\x20\x00\x00\x00' + # header length b'\x05\x10\x40\x50' + # until and including line_range b'\x06' + # opcode_base b'\x00\x01\x04\x08\x0C' + # standard_opcode_lengths # 2 dir names followed by a NULL b'\x61\x62\x00\x70\x00\x00' + # a file entry b'\x61\x72\x00\x0C\x0D\x0F' + # and another entry b'\x45\x50\x51\x00\x86\x12\x07\x08' + # followed by NULL b'\x00') self.assertEqual(c.version, 2) self.assertEqual(c.opcode_base, 6) self.assertEqual(c.standard_opcode_lengths, [0, 1, 4, 8, 12]) self.assertEqual(c.include_directory, [b'ab', b'p']) self.assertEqual(len(c.file_entry), 2) self.assertEqual(c.file_entry[0].name, b'ar') self.assertEqual(c.file_entry[1].name, b'EPQ') self.assertEqual(c.file_entry[1].dir_index, 0x12 * 128 + 6) if __name__ == '__main__': unittest.main() pyelftools-0.26/test/test_dynamic.py000066400000000000000000000116401357220457300176670ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools tests # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- import unittest import os from elftools.elf.elffile import ELFFile from elftools.common.exceptions import ELFError from elftools.elf.dynamic import DynamicTag from elftools.elf.enums import ENUM_D_TAG from elftools.elf.descriptions import _DESCR_D_TAG, _low_priority_D_TAG class TestDynamicTag(unittest.TestCase): """Tests for the DynamicTag class.""" def test_requires_stringtable(self): with self.assertRaises(ELFError): dt = DynamicTag('', None) def test_tag_priority(self): for tag in _low_priority_D_TAG: val = ENUM_D_TAG[tag] # if the low priority tag is present in the descriptions, # assert that it has not overridden any other tag if _DESCR_D_TAG[val] == tag: for tag2 in ENUM_D_TAG: if tag2 == tag: continue self.assertNotEqual(ENUM_D_TAG[tag2], val) class TestDynamic(unittest.TestCase): """Tests for the Dynamic class.""" def test_missing_sections(self): """Verify we can get dynamic strings w/out section headers""" libs = [] with open(os.path.join('test', 'testfiles_for_unittests', 'aarch64_super_stripped.elf'), 'rb') as f: elf = ELFFile(f) for segment in elf.iter_segments(): if segment.header.p_type != 'PT_DYNAMIC': continue for t in segment.iter_tags(): if t.entry.d_tag == 'DT_NEEDED': libs.append(t.needed) exp = ['libc.so.6'] self.assertEqual(libs, exp) def test_reading_symbols_elf_hash(self): """ Verify we can read symbol table without SymbolTableSection but with a SYSV-style symbol hash table""" with open(os.path.join('test', 'testfiles_for_unittests', 'aarch64_super_stripped.elf'), 'rb') as f: elf = ELFFile(f) for segment in elf.iter_segments(): if segment.header.p_type != 'PT_DYNAMIC': continue num_symbols = segment.num_symbols() symbol_names = [x.name for x in segment.iter_symbols()] symbol_at_index_3 = segment.get_symbol(3) symbols_abort = segment.get_symbol_by_name('abort') self.assertEqual(num_symbols, 4) exp = ['', '__libc_start_main', '__gmon_start__', 'abort'] self.assertEqual(symbol_names, exp) self.assertEqual(symbol_at_index_3.name, 'abort') self.assertIsNotNone(symbols_abort) self.assertEqual(symbols_abort[0], symbol_at_index_3) def test_reading_symbols_gnu_hash(self): """ Verify we can read symbol table without SymbolTableSection but with a GNU symbol hash table""" with open(os.path.join('test', 'testfiles_for_unittests', 'android_dyntags.elf'), 'rb') as f: elf = ELFFile(f) for segment in elf.iter_segments(): if segment.header.p_type != 'PT_DYNAMIC': continue num_symbols = segment.num_symbols() symbol_names = [x.name for x in segment.iter_symbols()] symbol_at_index_3 = segment.get_symbol(3) symbols_atfork = segment.get_symbol_by_name('__register_atfork') self.assertEqual(num_symbols, 212) exp = ['', '__cxa_finalize' , '__cxa_atexit', '__register_atfork', '__stack_chk_fail', '_ZNK7android7RefBase9decStrongEPKv', '_ZN7android7RefBaseD2Ev', '_ZdlPv', 'pthread_mutex_lock'] self.assertEqual(symbol_names[:9], exp) self.assertEqual(symbol_at_index_3.name, '__register_atfork') self.assertIsNotNone(symbols_atfork) self.assertEqual(symbols_atfork[0], symbol_at_index_3) def test_sunw_tags(self): def extract_sunw(filename): with open(filename, 'rb') as f: elf = ELFFile(f) dyn = elf.get_section_by_name('.dynamic') seen = set() for tag in dyn.iter_tags(): if type(tag.entry.d_tag) is str and \ tag.entry.d_tag.startswith("DT_SUNW"): seen.add(tag.entry.d_tag) return seen f1 = extract_sunw(os.path.join('test', 'testfiles_for_unittests', 'exe_solaris32_cc.sparc.elf')) f2 = extract_sunw(os.path.join('test', 'testfiles_for_unittests', 'android_dyntags.elf')) self.assertEqual(f1, {'DT_SUNW_STRPAD', 'DT_SUNW_LDMACH'}) self.assertEqual(f2, set()) if __name__ == '__main__': unittest.main() pyelftools-0.26/test/test_elffile.py000066400000000000000000000042251357220457300176520ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools tests # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- import unittest from elftools.elf.elffile import ELFFile class TestMap(unittest.TestCase): def test_address_offsets(self): class MockELF(ELFFile): __init__ = object.__init__ def iter_segments(self): return iter(( dict(p_type='PT_PHDR', p_vaddr=0x10100, p_filesz=0x100, p_offset=0x400), dict(p_type='PT_LOAD', p_vaddr=0x10200, p_filesz=0x200, p_offset=0x100), dict(p_type='PT_LOAD', p_vaddr=0x10100, p_filesz=0x100, p_offset=0x400), )) elf = MockELF() self.assertEqual(tuple(elf.address_offsets(0x10100)), (0x400,)) self.assertEqual(tuple(elf.address_offsets(0x10120)), (0x420,)) self.assertEqual(tuple(elf.address_offsets(0x101FF)), (0x4FF,)) self.assertEqual(tuple(elf.address_offsets(0x10200)), (0x100,)) self.assertEqual(tuple(elf.address_offsets(0x100FF)), ()) self.assertEqual(tuple(elf.address_offsets(0x10400)), ()) self.assertEqual( tuple(elf.address_offsets(0x10100, 0x100)), (0x400,)) self.assertEqual(tuple(elf.address_offsets(0x10100, 4)), (0x400,)) self.assertEqual(tuple(elf.address_offsets(0x10120, 4)), (0x420,)) self.assertEqual(tuple(elf.address_offsets(0x101FC, 4)), (0x4FC,)) self.assertEqual(tuple(elf.address_offsets(0x10200, 4)), (0x100,)) self.assertEqual(tuple(elf.address_offsets(0x10100, 0x200)), ()) self.assertEqual(tuple(elf.address_offsets(0x10000, 0x800)), ()) self.assertEqual(tuple(elf.address_offsets(0x100FC, 4)), ()) self.assertEqual(tuple(elf.address_offsets(0x100FE, 4)), ()) self.assertEqual(tuple(elf.address_offsets(0x101FE, 4)), ()) self.assertEqual(tuple(elf.address_offsets(0x103FE, 4)), ()) self.assertEqual(tuple(elf.address_offsets(0x10400, 4)), ()) if __name__ == '__main__': unittest.main() pyelftools-0.26/test/test_encoding.py000066400000000000000000000017101357220457300200260ustar00rootroot00000000000000# coding: utf-8 #------------------------------------------------------------------------------- # elftools tests # # Audrey Dutcher (audrey@rhelmot.io) # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- from __future__ import unicode_literals import unittest import os from elftools.elf.elffile import ELFFile class TestUnicodeSymbols(unittest.TestCase): """Test that we can handle a unicode symbol as produced by clang""" def test_delta(self): fname = os.path.join('test', 'testfiles_for_unittests', 'unicode_symbols.elf') with open(fname, 'rb') as f: elf = ELFFile(f) symtab = elf.get_section_by_name('.symtab') list(symtab.iter_symbols()) # this used to just fail self.assertEqual(len(symtab.get_symbol_by_name('Δ')), 1) if __name__ == '__main__': unittest.main() pyelftools-0.26/test/test_get_symbol_by_name.py000066400000000000000000000052771357220457300221120ustar00rootroot00000000000000#------------------------------------------------------------------------------- # Tests the functionality of get_symbol_by_name # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- import unittest import os from elftools.elf.elffile import ELFFile class TestGetSymbolByName(unittest.TestCase): def test_existing_symbol(self): with open(os.path.join('test', 'testfiles_for_unittests', 'simple_gcc.elf.arm'), 'rb') as f: elf = ELFFile(f) # Find the symbol table. symtab = elf.get_section_by_name('.symtab') self.assertIsNotNone(symtab) # Test we can find a symbol by its name. mains = symtab.get_symbol_by_name('main') self.assertIsNotNone(mains) # Test it is actually the symbol we expect. self.assertIsInstance(mains, list) self.assertEqual(len(mains), 1) main = mains[0] self.assertEqual(main.name, 'main') self.assertEqual(main['st_value'], 0x8068) self.assertEqual(main['st_size'], 0x28) def test_missing_symbol(self): with open(os.path.join('test', 'testfiles_for_unittests', 'simple_gcc.elf.arm'), 'rb') as f: elf = ELFFile(f) # Find the symbol table. symtab = elf.get_section_by_name('.symtab') self.assertIsNotNone(symtab) # Test we get None when we look up a symbol that doesn't exist. undef = symtab.get_symbol_by_name('non-existent symbol') self.assertIsNone(undef) def test_duplicated_symbol(self): with open(os.path.join('test', 'testfiles_for_unittests', 'simple_gcc.elf.arm'), 'rb') as f: elf = ELFFile(f) # Find the symbol table. symtab = elf.get_section_by_name('.symtab') self.assertIsNotNone(symtab) # The '$a' symbols that are present in the test file. expected_symbols = [0x8000, 0x8034, 0x8090, 0x800c, 0x809c, 0x8018, 0x8068] # Test we get all expected instances of the symbol '$a'. arm_markers = symtab.get_symbol_by_name('$a') self.assertIsNotNone(arm_markers) self.assertIsInstance(arm_markers, list) self.assertEqual(len(arm_markers), len(expected_symbols)) for symbol in arm_markers: self.assertEqual(symbol.name, '$a') self.assertIn(symbol['st_value'], expected_symbols) if __name__ == '__main__': unittest.main() pyelftools-0.26/test/test_gnuversions.py000066400000000000000000000141341357220457300206260ustar00rootroot00000000000000#------------------------------------------------------------------------------ # elftools tests # # Yann Rouillard (yann@pleiades.fr.eu.org) # This code is in the public domain #------------------------------------------------------------------------------ import unittest import os from elftools.elf.elffile import ELFFile from elftools.elf.constants import VER_FLAGS from elftools.elf.gnuversions import ( GNUVerNeedSection, GNUVerDefSection, GNUVerSymSection) class TestSymbolVersioning(unittest.TestCase): versym_reference_data = [ {'name': '', 'ndx': 'VER_NDX_LOCAL'}, {'name': '', 'ndx': 'VER_NDX_LOCAL'}, {'name': '_ITM_deregisterTMCloneTable', 'ndx': 'VER_NDX_LOCAL'}, {'name': 'puts', 'ndx': 5}, {'name': 'strlcat', 'ndx': 'VER_NDX_LOCAL'}, {'name': '__stack_chk_fail', 'ndx': 6}, {'name': '__gmon_start__', 'ndx': 'VER_NDX_LOCAL'}, {'name': 'gzoffset', 'ndx': 7}, {'name': '_Jv_RegisterClasses', 'ndx': 'VER_NDX_LOCAL'}, {'name': '_ITM_registerTMCloneTable', 'ndx': 'VER_NDX_LOCAL'}, {'name': '__cxa_finalize', 'ndx': 5}, {'name': '_edata', 'ndx': 'VER_NDX_GLOBAL'}, {'name': 'VER_1.0', 'ndx': 2}, {'name': 'function1_ver1_1', 'ndx': 'VER_NDX_GLOBAL'}, {'name': '_end', 'ndx': 'VER_NDX_GLOBAL'}, {'name': 'function1', 'ndx': 4 | 0x8000}, {'name': '__bss_start', 'ndx': 'VER_NDX_GLOBAL'}, {'name': 'function1', 'ndx': 2}, {'name': 'VER_1.1', 'ndx': 3}, {'name': '_init', 'ndx': 'VER_NDX_GLOBAL'}, {'name': 'function1_ver1_0', 'ndx': 'VER_NDX_GLOBAL'}, {'name': '_fini', 'ndx': 'VER_NDX_GLOBAL'}, {'name': 'VER_1.2', 'ndx': 4}, {'name': 'function2', 'ndx': 3}, ] def test_versym_section(self): reference_data = TestSymbolVersioning.versym_reference_data with open(os.path.join('test', 'testfiles_for_unittests', 'lib_versioned64.so.1.elf'), 'rb') as f: elf = ELFFile(f) versym_section = None for section in elf.iter_sections(): if isinstance(section, GNUVerSymSection): versym_section = section break self.assertIsNotNone(versym_section) for versym, ref_versym in zip(section.iter_symbols(), reference_data): self.assertEqual(versym.name, ref_versym['name']) self.assertEqual(versym['ndx'], ref_versym['ndx']) verneed_reference_data = [ {'name': 'libz.so.1', 'vn_version': 1, 'vn_cnt': 1, 'vernaux': [ {'name': 'ZLIB_1.2.3.5', 'vna_flags': 0, 'vna_other': 7}]}, {'name': 'libc.so.6', 'vn_version': 1, 'vn_cnt': 2, 'vernaux': [ {'name': 'GLIBC_2.4', 'vna_flags': 0, 'vna_other': 6}, {'name': 'GLIBC_2.2.5', 'vna_flags': 0, 'vna_other': 5}]}, ] def test_verneed_section(self): reference_data = TestSymbolVersioning.verneed_reference_data with open(os.path.join('test', 'testfiles_for_unittests', 'lib_versioned64.so.1.elf'), 'rb') as f: elf = ELFFile(f) verneed_section = None for section in elf.iter_sections(): if isinstance(section, GNUVerNeedSection): verneed_section = section break self.assertIsNotNone(verneed_section) for (verneed, vernaux_iter), ref_verneed in zip( section.iter_versions(), reference_data): self.assertEqual(verneed.name, ref_verneed['name']) self.assertEqual(verneed['vn_cnt'], ref_verneed['vn_cnt']) self.assertEqual(verneed['vn_version'], ref_verneed['vn_version']) for vernaux, ref_vernaux in zip( vernaux_iter, ref_verneed['vernaux']): self.assertEqual(vernaux.name, ref_vernaux['name']) self.assertEqual(vernaux['vna_flags'], ref_vernaux['vna_flags']) self.assertEqual(vernaux['vna_other'], ref_vernaux['vna_other']) verdef_reference_data = [ {'vd_ndx': 1, 'vd_version': 1, 'vd_flags': VER_FLAGS.VER_FLG_BASE, 'vd_cnt': 1, 'verdaux': [ {'name': 'lib_versioned.so.1'}]}, {'vd_ndx': 2, 'vd_version': 1, 'vd_flags': 0, 'vd_cnt': 1, 'verdaux': [ {'name': 'VER_1.0'}]}, {'vd_ndx': 3, 'vd_version': 1, 'vd_flags': 0, 'vd_cnt': 2, 'verdaux': [ {'name': 'VER_1.1'}, {'name': 'VER_1.0'}]}, {'vd_ndx': 4, 'vd_version': 1, 'vd_flags': 0, 'vd_cnt': 2, 'verdaux': [ {'name': 'VER_1.2'}, {'name': 'VER_1.1'}]}, ] def test_verdef_section(self): reference_data = TestSymbolVersioning.verdef_reference_data with open(os.path.join('test', 'testfiles_for_unittests', 'lib_versioned64.so.1.elf'), 'rb') as f: elf = ELFFile(f) verneed_section = None for section in elf.iter_sections(): if isinstance(section, GNUVerDefSection): verdef_section = section break self.assertIsNotNone(verdef_section) for (verdef, verdaux_iter), ref_verdef in zip( section.iter_versions(), reference_data): self.assertEqual(verdef['vd_ndx'], ref_verdef['vd_ndx']) self.assertEqual(verdef['vd_version'], ref_verdef['vd_version']) self.assertEqual(verdef['vd_flags'], ref_verdef['vd_flags']) self.assertEqual(verdef['vd_cnt'], ref_verdef['vd_cnt']) for verdaux, ref_verdaux in zip( verdaux_iter, ref_verdef['verdaux']): self.assertEqual(verdaux.name, ref_verdaux['name']) if __name__ == '__main__': unittest.main() pyelftools-0.26/test/test_hash.py000066400000000000000000000034541357220457300171720ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools tests # # Andreas Ziegler (andreas.ziegler@fau.de) # This code is in the public domain #------------------------------------------------------------------------------- import unittest import os from elftools.elf.elffile import ELFFile from elftools.common.exceptions import ELFError from elftools.elf.hash import HashSection, GNUHashSection class TestELFHash(unittest.TestCase): def test_get_number_of_syms(self): """ Verify we can get get the number of symbols from an ELF hash section. """ with open(os.path.join('test', 'testfiles_for_unittests', 'aarch64_super_stripped.elf'), 'rb') as f: elf = ELFFile(f) for segment in elf.iter_segments(): if segment.header.p_type != 'PT_DYNAMIC': continue _, hash_offset = segment.get_table_offset('DT_HASH') hash_section = HashSection(elf.stream, hash_offset, elf) self.assertEqual(hash_section.get_number_of_symbols(), 4) class TestGNUHash(unittest.TestCase): def test_get_number_of_syms(self): """ Verify we can get get the number of symbols from a GNU hash section. """ with open(os.path.join('test', 'testfiles_for_unittests', 'lib_versioned64.so.1.elf'), 'rb') as f: elf = ELFFile(f) for segment in elf.iter_segments(): if segment.header.p_type != 'PT_DYNAMIC': continue _, hash_offset = segment.get_table_offset('DT_GNU_HASH') hash_section = GNUHashSection(elf.stream, hash_offset, elf) self.assertEqual(hash_section.get_number_of_symbols(), 24) pyelftools-0.26/test/test_mips_support.py000066400000000000000000000023071357220457300210070ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools tests # # Karl Vogel (karl.vogel@gmail.com) # Eli Bendersky (eliben@gmail.com) # # This code is in the public domain #------------------------------------------------------------------------------- import unittest import os from elftools.elf.elffile import ELFFile class TestMIPSSupport(unittest.TestCase): def test_basic(self): with open(os.path.join('test', 'testfiles_for_unittests', 'simple_gcc.elf.mips'), 'rb') as f: elf = ELFFile(f) self.assertEqual(elf.get_machine_arch(), 'MIPS') # Check some other properties of this ELF file derived from readelf self.assertEqual(elf['e_entry'], 0x0) self.assertEqual(elf.num_sections(), 25) self.assertEqual(elf.num_segments(), 0) # Test that Mips-specific section types work; these types are # available only when the file is identified as MIPS in the # e_machine header field. sec9 = elf.get_section(9) self.assertEqual(sec9['sh_type'], 'SHT_MIPS_DWARF') if __name__ == '__main__': unittest.main() pyelftools-0.26/test/test_pubtypes.py000066400000000000000000000015431357220457300201170ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools tests # # Efimov Vasiliy (real@ispras.ru) # This code is in the public domain #------------------------------------------------------------------------------- import os import unittest from elftools.elf.elffile import ELFFile class TestEmptyPubtypes(unittest.TestCase): def test_empty_pubtypes(self): test_dir = os.path.join('test', 'testfiles_for_unittests') with open(os.path.join(test_dir, 'empty_pubtypes', 'main'), 'rb') as f: elf = ELFFile(f) # This test targets `ELFParseError` caused by buggy handling # of ".debug_pubtypes" section which only has zero terminator # entry. self.assertEqual(len(elf.get_dwarf_info().get_pubtypes()), 0) if __name__ == '__main__': unittest.main() pyelftools-0.26/test/test_py3compat.py000066400000000000000000000017561357220457300201710ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools tests # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- import unittest from elftools.common.py3compat import (iterbytes, iterkeys, itervalues, iteritems) class TestPy3Compat(unittest.TestCase): def test_iterbytes(self): bi = iterbytes(b'fo1') self.assertEqual(next(bi), b'f') self.assertEqual(next(bi), b'o') self.assertEqual(next(bi), b'1') with self.assertRaises(StopIteration): next(bi) def test_iterdict(self): d = {1: 'foo', 2: 'bar'} self.assertEqual(list(sorted(iterkeys(d))), [1, 2]) self.assertEqual(list(sorted(itervalues(d))), ['bar', 'foo']) self.assertEqual(list(sorted(iteritems(d))), [(1, 'foo'), (2, 'bar')]) if __name__ == '__main__': unittest.main() pyelftools-0.26/test/test_relocations.py000066400000000000000000000034751357220457300205740ustar00rootroot00000000000000import os import sys import unittest from elftools.common.py3compat import BytesIO from elftools.elf.elffile import ELFFile from elftools.elf.dynamic import DynamicSegment, DynamicSection class TestRelocation(unittest.TestCase): def test_dynamic_segment(self): """Verify that we can process relocations on the PT_DYNAMIC segment without section headers""" test_dir = os.path.join('test', 'testfiles_for_unittests') with open(os.path.join(test_dir, 'x64_bad_sections.elf'), 'rb') as f: elff = ELFFile(f) for seg in elff.iter_segments(): if isinstance(seg, DynamicSegment): relos = seg.get_relocation_tables() self.assertEqual(set(relos), {'JMPREL', 'RELA'}) def test_dynamic_section(self): """Verify that we can parse relocations from the .dynamic section""" test_dir = os.path.join('test', 'testfiles_for_unittests') with open(os.path.join(test_dir, 'sample_exe64.elf'), 'rb') as f: elff = ELFFile(f) for sect in elff.iter_sections(): if isinstance(sect, DynamicSection): relos = sect.get_relocation_tables() self.assertEqual(set(relos), {'JMPREL', 'RELA'}) def test_dynamic_section_solaris(self): """Verify that we can parse relocations from the .dynamic section""" test_dir = os.path.join('test', 'testfiles_for_unittests') with open(os.path.join(test_dir, 'exe_solaris32_cc.elf'), 'rb') as f: elff = ELFFile(f) for sect in elff.iter_sections(): if isinstance(sect, DynamicSection): relos = sect.get_relocation_tables() self.assertEqual(set(relos), {'JMPREL', 'REL'}) if __name__ == '__main__': unittest.main() pyelftools-0.26/test/test_solaris_support.py000066400000000000000000000067021357220457300215160ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools tests # # Yann Rouillard (yann@pleiades.fr.eu.org) # This code is in the public domain #------------------------------------------------------------------------------- import unittest import os import copy from elftools.elf.elffile import ELFFile from elftools.elf.constants import SUNW_SYMINFO_FLAGS class TestSolarisSupport(unittest.TestCase): def _test_SUNW_syminfo_section_generic(self, testfile): with open(os.path.join('test', 'testfiles_for_unittests', testfile), 'rb') as f: elf = ELFFile(f) syminfo_section = elf.get_section_by_name('.SUNW_syminfo') self.assertIsNotNone(syminfo_section) # The test files were compiled against libc.so.1 with # direct binding, hence the libc symbols used # (exit, atexit and _exit) have the direct binding flags # in the syminfo table. # We check that this is properly detected. exit_symbols = [s for s in syminfo_section.iter_symbols() if 'exit' in s.name] self.assertNotEqual(len(exit_symbols), 0) for symbol in exit_symbols: # libc.so.1 has the index 0 in the dynamic table self.assertEqual(symbol['si_boundto'], 0) self.assertEqual(symbol['si_flags'], SUNW_SYMINFO_FLAGS.SYMINFO_FLG_DIRECT | SUNW_SYMINFO_FLAGS.SYMINFO_FLG_DIRECTBIND) def test_SUNW_syminfo_section_x86(self): self._test_SUNW_syminfo_section_generic('exe_solaris32_cc.elf') def test_SUNW_syminfo_section_x64(self): self._test_SUNW_syminfo_section_generic('exe_solaris64_cc.elf') def test_SUNW_syminfo_section_sparc32(self): self._test_SUNW_syminfo_section_generic('exe_solaris32_cc.sparc.elf') def test_SUNW_syminfo_section_sparc64(self): self._test_SUNW_syminfo_section_generic('exe_solaris64_cc.sparc.elf') ldsynsym_reference_data = ['', 'exe_solaris32.elf', 'crti.s', 'crt1.o', 'crt1.s', 'fsr.s', 'values-Xa.c', 'exe_solaris64.elf.c', 'crtn.s'] def _test_SUNW_ldynsym_section_generic(self, testfile, reference_data): with open(os.path.join('test', 'testfiles_for_unittests', testfile), 'rb') as f: elf = ELFFile(f) ldynsym_section = elf.get_section_by_name('.SUNW_ldynsym') self.assertIsNotNone(ldynsym_section) for symbol, ref_symbol_name in zip( ldynsym_section.iter_symbols(), reference_data): self.assertEqual(symbol.name, ref_symbol_name) def test_SUNW_ldynsym_section_x86(self): reference_data = TestSolarisSupport.ldsynsym_reference_data self._test_SUNW_ldynsym_section_generic('exe_solaris32_cc.elf', reference_data) def test_SUNW_ldynsym_section_x64(self): reference_data = copy.deepcopy( TestSolarisSupport.ldsynsym_reference_data) reference_data[1] = 'exe_solaris64.elf' reference_data[3] = 'crt1x.o' reference_data[5] = 'fsrx.s' self._test_SUNW_ldynsym_section_generic('exe_solaris64_cc.elf', reference_data) if __name__ == '__main__': unittest.main() pyelftools-0.26/test/test_stab.py000066400000000000000000000030041357220457300171670ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools tests # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- import unittest import os from elftools.elf.elffile import ELFFile from elftools.elf.sections import StabSection class TestStab(unittest.TestCase): def test_stab(self): expected = [ ("obj_stabs.S", 0, 0, 0x2, 33), # generated by compiler ("label", 0x95, 0xc8, 0x4072, 0xdeadbeef), ("another label", 0x41, 0x66, 0xf9b1, 0xcafebabe)] with open(os.path.join('test', 'testfiles_for_unittests', 'obj_stabs.elf'), 'rb') as f: elf = ELFFile(f) # using correct type? for s in elf.iter_sections(): if s.name == '.stab': self.assertIsInstance(s, StabSection) # check section contents stab = elf.get_section_by_name('.stab') stabstr = elf.get_section_by_name('.stabstr') for entry, golden in zip(stab.iter_stabs(), expected): self.assertEqual(stabstr.get_string(entry.n_strx), golden[0]) self.assertEqual(entry.n_type, golden[1]) self.assertEqual(entry.n_other, golden[2]) self.assertEqual(entry.n_desc, golden[3]) self.assertEqual(entry.n_value, golden[4]) if __name__ == '__main__': unittest.main() pyelftools-0.26/test/test_utils.py000066400000000000000000000046061357220457300174070ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools tests # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- import unittest from random import randint from elftools.common.py3compat import int2byte, BytesIO from elftools.common.utils import (parse_cstring_from_stream, merge_dicts, preserve_stream_pos) class Test_parse_cstring_from_stream(unittest.TestCase): def _make_random_bytes(self, n): return b''.join(int2byte(randint(32, 127)) for i in range(n)) def test_small1(self): sio = BytesIO(b'abcdefgh\x0012345') self.assertEqual(parse_cstring_from_stream(sio), b'abcdefgh') self.assertEqual(parse_cstring_from_stream(sio, 2), b'cdefgh') self.assertEqual(parse_cstring_from_stream(sio, 8), b'') def test_small2(self): sio = BytesIO(b'12345\x006789\x00abcdefg\x00iii') self.assertEqual(parse_cstring_from_stream(sio), b'12345') self.assertEqual(parse_cstring_from_stream(sio, 5), b'') self.assertEqual(parse_cstring_from_stream(sio, 6), b'6789') def test_large1(self): text = b'i' * 400 + b'\x00' + b'bb' sio = BytesIO(text) self.assertEqual(parse_cstring_from_stream(sio), b'i' * 400) self.assertEqual(parse_cstring_from_stream(sio, 150), b'i' * 250) def test_large2(self): text = self._make_random_bytes(5000) + b'\x00' + b'jujajaja' sio = BytesIO(text) self.assertEqual(parse_cstring_from_stream(sio), text[:5000]) self.assertEqual(parse_cstring_from_stream(sio, 2348), text[2348:5000]) class Test_preserve_stream_pos(unittest.TestCase): def test_basic(self): sio = BytesIO(b'abcdef') with preserve_stream_pos(sio): sio.seek(4) self.assertEqual(sio.tell(), 0) sio.seek(5) with preserve_stream_pos(sio): sio.seek(0) self.assertEqual(sio.tell(), 5) class Test_merge_dicts(unittest.TestCase): def test_basic(self): md = merge_dicts({10: 20, 20: 30}, {30: 40, 50: 60}) self.assertEqual(md, {10: 20, 20: 30, 30: 40, 50: 60}) def test_keys_resolve(self): md = merge_dicts({10: 20, 20: 30}, {20: 40, 50: 60}) self.assertEqual(md, {10: 20, 20: 40, 50: 60}) if __name__ == '__main__': unittest.main() pyelftools-0.26/test/testfiles_for_location_info/000077500000000000000000000000001357220457300224035ustar00rootroot00000000000000pyelftools-0.26/test/testfiles_for_location_info/test-dwarf2.o000077500000000000000000000240201357220457300247260ustar00rootroot00000000000000ELF>@@@8 @%"@@@@@88@8@@@ `` ( ((`(`TT@T@DDPtd@@44QtdRtd``/lib64/ld-linux-x86-64.so.2GNU GNUSeF,פzc'mq  libc.so.6__libc_start_main__gmon_start__GLIBC_2.2.5ui ,``HH] Ht+H5R %T @%R h%" f1I^HHPTI@H @H@fD7`UH-0`HHvHt]0`f]@f.0`UH0`HHHH?HHtHt ]0`]fD= uUHn] @ `H?uHtUH]z u~ 9u~9DDDDAWAVAAUATL% UH- SIIL)HH?Ht 1LLDAHH9uH[]A\A]A^A_Ðf.HH;0 | ` blafs.c @*XJXxJZ,khejsanGNU C11 5.4.0 20160609 -mtune=generic -march=x86-64 -gdwarf-2 -O1 -fstack-protector-strongmain/pyelftoolsblafs.c3Q;r:r0R(0(1R8@T@t@@@@8@@@ `@ x@ @ @ @@@@@@`` `(``` `0` !  `@P@.@D0`S`z@`@ ``(``@`@- q  `I0`'@Po `| (`@ @e8`u@*0`@B 0`  @crtstuff.c__JCR_LIST__deregister_tm_clones__do_global_dtors_auxcompleted.7594__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entryblafs.c__FRAME_END____JCR_END____init_array_end_DYNAMIC__init_array_start__GNU_EH_FRAME_HDR_GLOBAL_OFFSET_TABLE___libc_csu_fini_ITM_deregisterTMCloneTable_edata__libc_start_main@@GLIBC_2.2.5__data_start__gmon_start____dso_handle_IO_stdin_used__libc_csu_init__bss_startmain_Jv_RegisterClasses__TMC_END___ITM_registerTMCloneTable.symtab.strtab.shstrtab.interp.note.ABI-tag.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.got.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.jcr.dynamic.got.plt.data.bss.comment.debug_aranges.debug_info.debug_abbrev.debug_line.debug_str.debug_loc8@8#T@T 1t@t$Do@N @HV@8^o8@8ko@@@ z`@`Bx@x@@ @@@ @@4@`` ` (`(``  ` 0`0005 e0'Z5dA0a{LrW$5 ppyelftools-0.26/test/testfiles_for_location_info/test-dwarf4.o000077500000000000000000000237701357220457300247430ustar00rootroot00000000000000ELF>@@@8 @%"@@@@@88@8@@@ `` ( ((`(`TT@T@DDPtd@@44QtdRtd``/lib64/ld-linux-x86-64.so.2GNU GNUEA^D j~6V   libc.so.6__libc_start_main__gmon_start__GLIBC_2.2.5ui ,``HH] Ht+H5R %T @%R h%" f1I^HHPTI@H @H@fD7`UH-0`HHvHt]0`f]@f.0`UH0`HHHH?HHtHt ]0`]fD= uUHn] @ `H?uHtUH]z u~ 9u~9DDDDAWAVAAUATL% UH- SIIL)HH?Ht 1LLDAHH9uH[]A\A]A^A_Ðf.HH;0 | ` blafs.c @*XJXxJZ,khejsanGNU C11 5.4.0 20160609 -mtune=generic -march=x86-64 -g -O1 -fstack-protector-strongmain/pyelftoolsblafs.c3Q;r:r0R(0(1R8@T@t@@@@8@@@ `@ x@ @ @ @@@@@@`` `(``` `0` !  `@P@.@D0`S`z@`@ ``(``@`@- q  `I0`'@Po `| (`@ @e8`u@*0`@B 0`  @crtstuff.c__JCR_LIST__deregister_tm_clones__do_global_dtors_auxcompleted.7594__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entryblafs.c__FRAME_END____JCR_END____init_array_end_DYNAMIC__init_array_start__GNU_EH_FRAME_HDR_GLOBAL_OFFSET_TABLE___libc_csu_fini_ITM_deregisterTMCloneTable_edata__libc_start_main@@GLIBC_2.2.5__data_start__gmon_start____dso_handle_IO_stdin_used__libc_csu_init__bss_startmain_Jv_RegisterClasses__TMC_END___ITM_registerTMCloneTable.symtab.strtab.shstrtab.interp.note.ABI-tag.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.got.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.jcr.dynamic.got.plt.data.bss.comment.debug_aranges.debug_info.debug_abbrev.debug_line.debug_str.debug_loc8@8#T@T 1t@t$Do@N @HV@8^o8@8ko@@@ z`@`Bx@x@@ @@@ @@4@`` ` (`(``  ` 0`0005 e0'N5dA0UtLZW$5 Xpyelftools-0.26/test/testfiles_for_readelf/000077500000000000000000000000001357220457300211625ustar00rootroot00000000000000pyelftools-0.26/test/testfiles_for_readelf/clang33-simple.o000066400000000000000000000061301357220457300240630ustar00rootroot00000000000000ELF>@@@UHH }}EEE;EA}}E}E}E}lj}EEEH ]r nVn|nxnt%.: ; 'I?@ : ; I 4: ; I $> F& dwarf4_simple.c  /1 clang version 3.3 (tags/RELEASE_33/rc2)dwarf4_simple.c/home/eliben/eli/eliben-code/elffoointvxizRx sAC .debug_abbrev.rela.text.bss.debug_pubtypes.debug_aranges.debug_ranges.debug_str.debug_macinfo.rela.debug_info.note.GNU-stack.rela.debug_line.rela.eh_frame.debug_loc.shstrtab.strtab.symtab.data@s `kvf *R/|W||J(  L0g>-w-08@ h     sdwarf4_simple.cfoobarbaz-8C   ( " 8' Y19sD aR c` eo ]3 pyelftools-0.26/test/testfiles_for_readelf/core_simple64.elf000066400000000000000000007600001357220457300243300ustar00rootroot00000000000000ELF>@@80@@ @0@00@@p0 PPP 00P00@ `    `PCORE h h@F 3F+'CORER&IN h hcoredump_self./coredump_self IGISCOREI0CORE!d@@8  @ I I NNELIFCORE @@@ @ @0@00P"#/home/max42/pyelftools/test/testfiles_for_readelf/coredump_self/home/max42/pyelftools/test/testfiles_for_readelf/coredump_self/home/max42/pyelftools/test/testfiles_for_readelf/coredump_self/lib/x86_64-linux-gnu/libc-2.15.so/lib/x86_64-linux-gnu/libc-2.15.so/lib/x86_64-linux-gnu/libc-2.15.so/lib/x86_64-linux-gnu/libc-2.15.so/lib/x86_64-linux-gnu/ld-2.15.so/lib/x86_64-linux-gnu/ld-2.15.so/lib/x86_64-linux-gnu/ld-2.15.soCOREHello WorldELF>@@`@8 @ @@@@@88@8@@@@@0d@@TT@T@DDPtdtt@t@,,QtdRtd@@/lib64/ld-linux-x86-64.so.2GNUGNU@~x 'ࢉ|) 8=C _ y __libc_start_mainGLIBC_2.2.5libc.so.6__gmon_start__putsabort_ITM_deregisterTMCloneTable_ITM_registerTMCloneTable_Jv_RegisterClassesui @ @ @ @H{H5:%<%:h%2h%*h1I^HHPTI@H @H@HHHtHffff./ @UH-( @HHvHt]( @f]fffff.( @UH( @HHHH?HHtHt ]( @]fD=yuUHn]f@@H?uHtUH]zfUH@DHl$Ld$H-L%Ll$Lt$L|$H\$H8L)AIHI3Ht1@LLDAHH9uH\$Hl$Ld$Ll$ Lt$(L|$0H8fHHHello WorldzRx AC $<Q_@Xdx$|`@FJ w?;*3$";XRrHzQ[!7Jo'Uk*pzkZ2{>6uCL5TYa}"v4`j @@{ԣ ң0`0@p pp0`y`J  @  `  4 @ `     Ҹ Ҹ$P )P@1P`7PMRR3RMR]RuRRRRRR莹R SS'S=SUSaS{SSSSSSSS T"T/TETTT0`T~TTTTTXTUU5UNU]UkUUUUUUUVV#V0VEVYVkVyVVVVVVV W'W6WIW\WhWWWЏHpWWؐWWXX5XOXgXXHXXhXX8X YY+YPNaPqk,jj6HT7qYIσ7 qR>)OqN9NL(K@K箂CAk[Sž@@? O@X`JIII`JI`JIII`JJ`JJ)JJ`J9JIJ`JYJ`JIJiJyJ`JJ`JyJJJ`JJ`JJJN O@S000 1` 7ddxk| @` %ddddddddddddd %NA `BZ D`&*PPPPPPPT@CZE`& ZF`&`#`#`#A`B@C` `٣Q $QBvG$Q$  %,;& @@{%''ɛna,} m(@@ttHello World P`dS`dS`dSdS /lib/x86_64-linux-gnu/libc.so.6t@+Xt0y@+,++++0,@,P,++`+P+, ,p++,,,p,`,,,+@أ (yhz¡ʡpڡ@x!Xyxxw <xy0t0pp7;8Hylibc.so.6/lib/x86_64-linux-gnulibc.so.6ttttk@ui w@u ui vi ii ri si ti ii ii !ii !ii !ii !ii (!3!>!I!T!_!j!c j!c  ii Vui bii lii vc ELF> @H@8@wwxxx<<Ptd<<  " T @ y6 =" @ y1" =" = * __vdso_clock_gettime__vdso_gettimeofday__vdso_time__vdso_getcpulinux-vdso.so.1LINUX_2.6 DuTD h` ^ oooarch/x86/vdso/vclock_gettime.cLinuxGNU'Ivd%"&ͩ3غ;8lT| $,DzRx $+AC a A D 4D1AJ EIF BEE F <| AC Gl BBA A q BBA A ,yAC H BBA D AM F $ =HC e H UHff1HHPH H H9w]H]DUDHAUIATIS{AAAIcH= L?HHH)HDff1H NH H+VFHHDVHHH HH~ffD AtUˁA9RHD9?AtAHK[A\H9A]HC]D$HHj AEffffff.UHAUATSH2ttXHcH[A\A]]󐐋uHHHHV;u1H[A\A]]f.juHHHHV;Ku1D%9Au1EHSHL-K 11 IID;%u1Iɚ;HvIʚ;Iɚ;wHLnHE1D%A5EHHrL-1 `IID;%7u1Iɚ;HfIʚ;Iɚ;wKHuHuH+H#HfD:*H+H#HSDHu/HufH}HuCHuDH}Hu+Hu_ff.UHAUATSHHHD% AEH.HL-1 LHD91Hɚ;HvHʚ;Hɚ;wHЋUH{HHHS㥛 H?HHH)HSH1H[A\A]]=H+=KUH#=FHTDH}HuHuHfHuHuHA`H95F1iUHHHtH]Ð=)UHt+{Ht %Ht 1]Dq;r2qw)r qrGCC: (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3.shstrtab.hash.dynsym.dynstr.gnu.version.gnu.version_d.dynamic.rodata.note.eh_frame_hdr.eh_frame.text.altinstructions.altinstr_replacement.comment   @ ``hh^!o.o8=F`Nxx<T<b0l rHee0w*0ydN`X@C@`a,} m(>\haPg h`oƢ H`9p+"o | h oooo(8 (."0ߩ bN\haX`8@(t@Xx(8H8(XHh@|آNtȢp+" 0p@Y@@8@Abhf 0@  %,;0a@X8@ @@@@P@`@p@@@@@@@@0@0@@@@ @p@`@P@@@@@ y0y@@@@@l @@ y@@PatX hx(0@ z4(Ƣwwlinux-vdso.so.18 8<<tls/x86_64/`P```J@d6d60;;`;;0t/ X yTt r%`H 00tw@;MAY < -AYmhwVeX0ɞ!w@@G4&  @ELF>@@8 @#"@@@00p9p9p9d6d6 77;7;PQ @k@k;@k;pppDD77;7;pPtd999hhQtdRtd@t @t:K;Co0D `t:y|Bhpx@KȢx|t<ɢ@+ ||#E|w@" @<qyt:y}B= `H,`zt@ɢ@ `}z#Ez@z ɢ@@;X nH,tkAYJnf7 @t @mף@QX@|@Q$Q$ @@@,@Ps >I\z$2+A^fw ds!d@@8  @ I I NNɛna,} m(x86_64./coredump_selfrvm_bin_path=/usr/local/rvm/binCOMP_WORDBREAKS= "'><;|&(:GEM_HOME=/usr/local/rvm/gems/ruby-1.9.3-p429TERM=xterm-256colorSHELL=/bin/bashSSH_CLIENT=84.201.164.119 60640 22IRBRC=/usr/local/rvm/rubies/ruby-1.9.3-p429/.irbrcOLDPWD=/home/max42/pyelftools/testMY_RUBY_HOME=/usr/local/rvm/rubies/ruby-1.9.3-p429YT_VERSION=v3SSH_TTY=/dev/pts/2YT_LOCAL_USE_PROXY_FROM_SOURCE=1USER=max42_system_type=LinuxDEBEMAIL=max42@yandex-team.rurvm_path=/usr/local/rvmSSH_AUTH_SOCK=/tmp/ssh-UzwM417775/agent.417775TMUX=/tmp/tmux-37449/default,868083,0rvm_prefix=/usr/localPATH=/home/max42/bin:/home/max42/yatool:/home/max42/hermes/bin:/home/max42/yt/source/python/yt/local/bin:/home/max42/bin:/home/max42/yt/build/bin:/home/max42/yt/build/yt/nodejs:/home/max42/yt/source/python/yt/wrapper/bin:/home/max42/bin:/home/max42/hermes/bin:/home/max42/yt/source/python/yt/local/bin:/home/max42/bin:/home/max42/yt/build/bin:/home/max42/yt/build/yt/nodejs:/home/max42/yt/source/python/yt/wrapper/bin:/usr/local/rvm/gems/ruby-1.9.3-p429/bin:/usr/local/rvm/gems/ruby-1.9.3-p429@global/bin:/usr/local/rvm/rubies/ruby-1.9.3-p429/bin:/usr/local/rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/rvm/binMAIL=/var/mail/max42PWD=/home/max42/pyelftools/test/testfiles_for_readelfLANG=CNODE_PATH=/usr/lib/nodejs:/usr/share/javascript_system_arch=x86_64TMUX_PANE=%34PS1=$(if [ $? = 0 ]; then echo "\[\033[01;36m\]-_-\[\033[00m\]"; else echo "\[\033[01;31m\]o_O\[\033[00m\]"; fi) \[\033[01;32m\]\u@\[\033[01;35m\]\h\[\033[01;33m\]$(__git_ps1) \[\033[01;31m\][$YT_PROXY]\[\033[00m\]: \[\033[01;34m\]\w\[\033[00m\] $ _system_version=12.04rvm_version=1.26.11 (latest)SHLVL=2HOME=/home/max42IBUS_ENABLE_SYNC_MODE=1PYTHONPATH=/home/max42/yt/source/python:/home/max42/hermesLOGNAME=max42SSH_CONNECTION=5.255.232.190 55096 5.255.199.115 22GEM_PATH=/usr/local/rvm/gems/ruby-1.9.3-p429:/usr/local/rvm/gems/ruby-1.9.3-p429@globalYT_PROXY=freudDEBFULLNAME=Maxim AkhmedovDISPLAY=localhost:11.0RUBY_VERSION=ruby-1.9.3-p429_system_name=Ubuntu_=./coredump_self./coredump_selfH`HH5pyelftools-0.26/test/testfiles_for_readelf/deleteme.out000066400000000000000000000000121357220457300234700ustar00rootroot00000000000000Test file pyelftools-0.26/test/testfiles_for_readelf/dt_flags.elf000066400000000000000000000152301357220457300234360ustar00rootroot00000000000000ELF4`4 ($($$Ptd$$$,,QtdRtd  GNU :sxOl @  BE|qXJ8$Թ jR" 8 {   a2 t  __gmon_start___init_fini_ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizefunctionprintflibc.so.6_edata__bss_start_endGLIBC_2.1.3GLIBC_2.0$ORIGIN/libqsi ii  SSct6[ hff$ffffff$$9ttUQЃÐt&Í»U$$)ȉSÃtt PQ҃]É'USWg$u't 5ƃ$]É'U]W$US&u8R]Ë$S[Hello, %s!;(|Dh|zR|  0 F J tx?;*2$"@, T%2AB Dj x3pq t o84t l48 ooooo GCC: (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.08t44lt     $P      !p 7 Fm y   $ #9 Ug n t"   2  t crtstuff.cderegister_tm_clones__do_global_dtors_auxcompleted.7281__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entrytmp.c__FRAME_END____x86.get_pc_thunk.bx__x86.get_pc_thunk.dx__dso_handle__x86.get_pc_thunk.ax_DYNAMIC__GNU_EH_FRAME_HDR__TMC_END___GLOBAL_OFFSET_TABLE__ITM_deregisterTMCloneTableprintf@@GLIBC_2.0_edata_fini__cxa_finalize@@GLIBC_2.1.3__gmon_start___end__bss_startfunction_ITM_registerTMCloneTable_init.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rel.dyn.rel.plt.init.plt.got.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.dynamic.data.bss.comment$.o88<8 tt@44HoUo0d 448m Bllvtt#q |3 $$,PP   0*0p, ypyelftools-0.26/test/testfiles_for_readelf/empty-cie.o.elf000077500000000000000000000044501357220457300240110ustar00rootroot00000000000000ELF>(@@ UHAWAVAUATSH8dH%(HE1EHHËEHcHHUHcIAHcIAHHHPHHйHHkH)HHHHHEEHEUHcҋM EE;E|E$HEUHcҋH=EE;E|Կ H܃E} "HudH34%(tHe[A\A]A^A_]   %dGCC: (GNU) 7.2.1 20171128zRx,2 A C - A 2 #*2dumb.cmain_GLOBAL_OFFSET_TABLE_printfputchar__stack_chk_fail.symtab.strtab.shstrtab.rela.text.data.bss.rodata.comment.note.GNU-stack.rela.eh_frame.orc_unwind_ip.rela.orc_unwind_ip.orc_unwind 12 @2@x` &,190BWD@R@@ XP  Ca{p@x pyelftools-0.26/test/testfiles_for_readelf/exe_compressed64.elf000066400000000000000000000260051357220457300250340ustar00rootroot00000000000000ELF>@@@8 @*'@@@@@88@8@@@ `` @@`@`TT@T@\\Ptd  @ @$$QtdRtd``/lib64/ld-linux-x86-64.so.2GNUSuSESuSE GNUPͨYIĪ- I} __gmon_start__libc.so.6__libc_start_mainGLIBC_2.2.5ui ,``HcH5 % @% h1I^HHPTI @H0@H@HH HtHÐUHSH= uK0`H H-(`HHXH9s%HBH (`H H9rs H[fff.UH=o HtHt8`IA@ÐUH}HuHE‹   EÐfffff.Hl$L|$H- L= Ld$Ll$Lt$H\$H8L)AIHIKHt1@LLDAHH9rH\$Hl$Ld$Ll$ Lt$(L|$0H8ÐUHSHHH Ht`DHHHuH[ÐHOH; <t$zRx @+AC zRx $4Jf@ @ @@o@0@@ 8 `@@ op@ooh@@`@ospwGGCC: (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973]ZLIBxa```b0z&F7Px/W`C=TZLIBxSd```b(@%)yũ) V*g'8%@^ڽv6A <+?k= 2A?uEbrLEO>>z-e޸SéItӾ!ZLIBWxe```b0x$##Dzzŕ)ff&9i %E%z % L , Ff=;E;f>Ҳh&Fq` dYY n V&UYT ж7PۄrxOdb*M~iq~NfPOdVg%甦20=pPqIJJj^̛ Po632J1}bǜY9߆Y09ߋ&zIL@73$9ZLIBxa`` <@B1aqP#@3/} q V`cS@;^Lmli|}̽,=ZLIB-xUJ0Qm"ު W{%2lNLZЧ7͜p0k '9΋kd7BvuW{:>?ڐH͡ۯZȸ/f'jizz93};@ 78وߣƅMwsIjy2VNpqA 8,0r,0*Z**Љ2Iq^?\N hGZLIBJxc`F(Pc `lmX 8 cτ 5 cÅ 1Bu˜pt]0j`t% ZLIBPxb ( ˠ'Pڙ;j'.symtab.strtab.shstrtab.interp.note.ABI-tag.note.SuSE.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.ctors.dtors.jcr.dynamic.got.got.plt.data.bss.comment.SUSE.OPTs.comment.zdebug_aranges.zdebug_pubnames.zdebug_info.zdebug_abbrev.zdebug_line.zdebug_frame.zdebug_str.zdebug_loc.zdebug_ranges8@8#T@T 1t@t<@$S@Oo@Y @Ha0@08ioh@hvop@p @@@@ @@@ @ $0@0`(`(8`8@`@`` ` `00"9`>,o= JYfat0d;+f")> *8@T@t@@@@@0@ h@ p@ @ @ @@@@@ @0@`(`8`@```` ` !"#$%&,@#.`<(`J8`WP@m `|(`@# `@8`@`` `@`% `0 @@@G`L [ o@u@``0`0@`0``@+ @init.cinitfini.ccall_gmon_startcrtstuff.c__CTOR_LIST____DTOR_LIST____JCR_LIST____do_global_dtors_auxcompleted.6159dtor_idx.6161frame_dummy__CTOR_END____FRAME_END____JCR_END____do_global_ctors_auxz.celf-init.c_GLOBAL_OFFSET_TABLE___init_array_end__init_array_start_DYNAMICdata_start__libc_csu_fini_startglob__gmon_start___Jv_RegisterClasses_fini__libc_start_main@@GLIBC_2.2.5_IO_stdin_used__data_start__dso_handle__DTOR_END____libc_csu_init__bss_start_end_edatamain_initpyelftools-0.26/test/testfiles_for_readelf/exe_simple32.elf000066400000000000000000000125641357220457300241610ustar00rootroot00000000000000ELF44 (444444       HHHDDQtdRtd   /lib/ld-linux.so.2GNUGNU"Hgfg}}(> K )__gmon_start__libc.so.6_IO_stdin_used__libc_start_mainGLIBC_2.0ii ;US[Pt|X[5%%h%h1^PTRhЃhQVhUS=u?9s9r[]Ít&'Utt $ÐUE]ÐU]Ít&'UWVSO )t$1ED$E D$E$9rރ[^_]Ë$ÐUS t fЋu[]ÐUS[|Y[  loЁ E o`ooV ނGCC: (Ubuntu 4.4.3-4ubuntu5) 4.4.3.shstrtab.interp.note.ABI-tag.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rel.dyn.rel.plt.init.text.fini.rodata.eh_frame.ctors.dtors.jcr.dynamic.got.got.plt.data.bss.comment 44HH !hh$8$4o > Ё@FENoVV[o`` j s  |0wȂ0lll    0#3pyelftools-0.26/test/testfiles_for_readelf/exe_simple64.elf000066400000000000000000000300551357220457300241610ustar00rootroot00000000000000ELF>@@0@8 @*'@@@@@88@8@@@ `` @@`@`TT@T@\\Ptd  @ @$$QtdRtd``/lib64/ld-linux-x86-64.so.2GNUSuSESuSE GNUPͨYIĪ- I} __gmon_start__libc.so.6__libc_start_mainGLIBC_2.2.5ui ,``HcH5 % @% h1I^HHPTI @H0@H@HH HtHÐUHSH= uK0`H H-(`HHXH9s%HBH (`H H9rs H[fff.UH=o HtHt8`IA@ÐUH}HuHE‹   EÐfffff.Hl$L|$H- L= Ld$Ll$Lt$H\$H8L)AIHIKHt1@LLDAHH9rH\$Hl$Ld$Ll$ Lt$(L|$0H8ÐUHSHHH Ht`DHHHuH[ÐHOH; <t$zRx @+AC zRx $4Jf@ @ @@o@0@@ 8 `@@ op@ooh@@`@ospwGGCC: (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973],@*,@+, @!wo_IO_stdin_used -mainglob60M__libc_csu_finii__libc_csu_inits@*@../sysdeps/x86_64/elf/start.S/usr/src/packages/BUILD/glibc-2.11.1/csuGNU AS 2.20.0~%,@,@agiNintupX @W_~z.c@@o@@oolv`int|po `,~% @@u?int @"@wj0@@LiFiiz i{4'  p 4 F ; =%% $ > $ > $ > 4: ; I?  &I% .? : ; ' I@: ; I $ >  I$ > 4: ; I?  % $ > : ; I$ > .? : ; ' @ .? : ; ' @: ; I4: ; I U 4: ; I  I &I I!' I4: ; I? < ]4 ../sysdeps/x86_64/elfstart.S @.>!>L$ uvx[# init.c5 z.c @KZ /usr/lib64/gcc/x86_64-suse-linux/4.3/includeelf-init.cstddef.h  @^oto<foJ<[ǒ#x @+AC x 8 @$80@Jf@long unsigned intshort unsigned int/usr/src/packages/BUILD/glibc-2.11.1/csushort int_IO_stdin_usedunsigned charlong intGNU C 4.3.4 [gcc-4_3-branch revision 152973]argv/tmp/ebendersglobargcmainsize_tenvp__libc_csu_initelf-init.c__init_array_startsize__init_array_end__libc_csu_finiww+v@w@wUUU^UTU]UQU\\{S(UvIM@C.symtab.strtab.shstrtab.interp.note.ABI-tag.note.SuSE.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.ctors.dtors.jcr.dynamic.got.got.plt.data.bss.comment.SUSE.OPTs.comment.debug_aranges.debug_pubnames.debug_info.debug_abbrev.debug_line.debug_frame.debug_str.debug_loc.debug_ranges8@8#T@T 1t@t<@$S@Oo@Y @Ha0@08ioh@hvop@p @@@@ @@@ @ $0@0`(`(8`8@`@`` ` `00"9`+;sGEUWa@n0-yJGP&)> 0.8@T@t@@@@@0@ h@ p@ @ @ @@@@@ @0@`(`8`@```` ` !"#$%&,@#.`<(`J8`WP@m `|(`@# `@8`@`` `@`% `0 @@@G`L [ o@u@``0`0@`0``@+ @init.cinitfini.ccall_gmon_startcrtstuff.c__CTOR_LIST____DTOR_LIST____JCR_LIST____do_global_dtors_auxcompleted.6159dtor_idx.6161frame_dummy__CTOR_END____FRAME_END____JCR_END____do_global_ctors_auxz.celf-init.c_GLOBAL_OFFSET_TABLE___init_array_end__init_array_start_DYNAMICdata_start__libc_csu_fini_startglob__gmon_start___Jv_RegisterClasses_fini__libc_start_main@@GLIBC_2.2.5_IO_stdin_used__data_start__dso_handle__DTOR_END____libc_csu_init__bss_start_end_edatamain_initpyelftools-0.26/test/testfiles_for_readelf/exe_stripped64.elf000066400000000000000000000144501357220457300245230ustar00rootroot00000000000000ELF>@@h@8 @@@@@@88@8@@@ `` @@`@`TT@T@\\Ptd  @ @$$QtdRtd``/lib64/ld-linux-x86-64.so.2GNUSuSESuSE GNUPͨYIĪ- I} __gmon_start__libc.so.6__libc_start_mainGLIBC_2.2.5ui ,``HcH5 % @% h1I^HHPTI @H0@H@HH HtHÐUHSH= uK0`H H-(`HHXH9s%HBH (`H H9rs H[fff.UH=o HtHt8`IA@ÐUH}HuHE‹   EÐfffff.Hl$L|$H- L= Ld$Ll$Lt$H\$H8L)AIHIKHt1@LLDAHH9rH\$Hl$Ld$Ll$ Lt$(L|$0H8ÐUHSHHH Ht`DHHHuH[ÐHOH; <t$zRx @+AC zRx $4Jf@ @ @@o@0@@ 8 `@@ op@ooh@@`@ospwGGCC: (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973].shstrtab.interp.note.ABI-tag.note.SuSE.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.ctors.dtors.jcr.dynamic.got.got.plt.data.bss.comment.SUSE.OPTs.comment 8@8T@T !t@t,@$C@?o@I @HQ0@08Yoh@hfop@p u@@@@ @@@ @ $0@0`(`(8`8@`@`` ` `00"9[ pyelftools-0.26/test/testfiles_for_readelf/gcc48-simple.o000066400000000000000000000063601357220457300235460ustar00rootroot00000000000000ELF> @@UHATSH }܋E܉EE0EËE܉AċEAEEE;E|ȋEH [A\]x <h \ zRx 4h \ whfooshsvsLxsXis\int% .?: ; 'I@B: ; I4: ; I$ > ,hT& dwarf4_simple.c ,J= /home/eliben/eli/eliben-code/elfdwarf4_simple.cGNU C 4.8.0 -mtune=generic -march=x86-64 -g -O0 -fno-dwarf2-cfi-asm -fstack-protectorGCC: (Ubuntu/Linaro 4.8.0-3ubuntu3~12.04) 4.8.0.symtab.strtab.shstrtab.rela.text.data.bss.rela.debug_frame.rela.eh_frame.rela.debug_info.debug_abbrev.rela.debug_aranges.rela.debug_line.debug_str.comment.note.GNU-stack @hX `&,6X1 0HPC WP{R  cYv$0q 0 TX 0031dd  8    hdwarf4_simple.cfoobarbaz*6C     1 ! ) 8 3pyelftools-0.26/test/testfiles_for_readelf/gcc48-simple.src.c000066400000000000000000000006611357220457300243160ustar00rootroot00000000000000/* Generated by compiling with gcc 4.8 as follows: ** ** gcc-4.8 -O0 -g -fno-dwarf2-cfi-asm -c dwarf4_simple.c -o gcc48-simple. ** ** Note: -fno-dwarf2-cfi-asm to tell gcc to generate .dwarf_frames as well ** as the .eh_frames it generates by default. ** */ extern int bar(int); extern int baz(int); int foo(int v) { int x = bar(v); int i; for (i = 0; i < v; ++i) x += bar(i) + bar(v) * baz(i); return x; } pyelftools-0.26/test/testfiles_for_readelf/gcc_tailcall.o.elf000066400000000000000000000055501357220457300245150ustar00rootroot00000000000000ELF>`@@5f1cc|U intvaruf2c c u% .?: ; 'I@BB1B$ > 4: ; I?<$ > .?: ; 'I< I,<% gcc_tailcall.c /usr/local/google/home/sethml/pyelftoolsgcc_tailcall.cGNU C 4.8.4 -mtune=generic -march=x86-64 -g -O3 -fstack-protectorcharGCC: (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4zRx .symtab.strtab.shstrtab.rela.text.data.bss.rela.debug_info.debug_abbrev.rela.debug_aranges.rela.debug_line.debug_str.comment.note.GNU-stack.rela.eh_frame @ 0&Q,Q6Q10 BUn0P 0i@d8  u00]*0P `      gcc_tailcall.cf1varf2   8 ) ) 7Nx z 2 pyelftools-0.26/test/testfiles_for_readelf/hello.c000066400000000000000000000013571357220457300224370ustar00rootroot00000000000000/* Generated by compiling with gcc 4.4 (or higher?) as follows: ** ** gcc -g -o hello.out hello.c ** ** To run the test that shows the error, do a readelf dump: ** readelf.py --debug-dump=info hello.out ** ** When using an unmodified descriptions.py, you will get a ** python exception when it tries to read the 'ijk' element ** from the elf file. My new version of descriptions.py fixes ** this problem. */ #include struct def { int ijk; char c; long long lint; float mno; int bit1 : 1; int bit3 : 3; int bit2 : 2; int bit4 : 4; //}; }__attribute__((__packed__)); const int GLOBAL_CONST; int tryGlobal; struct def hiLo; int main() { int abc; printf("Hello World\n"); return 0; } pyelftools-0.26/test/testfiles_for_readelf/hello.out000066400000000000000000000177651357220457300230360ustar00rootroot00000000000000ELF>@@ @8@%"@@@@@@@@@ ``0 ``@@DDPtd@@$$Qtd/lib64/ld-linux-x86-64.so.2GNUGNU<}^;no1; __gmon_start__libc.so.6puts__libc_start_mainGLIBC_2.2.5ui 1@```h`HsH5 % @% h% h1I^HHPTI@H@H@HH) HtHÐUHSH=@ uK`H: H`HHH9s$fDHH Ř`H H9r H[fff.H= UHtHt`ÐUHH@Ðfffff.Hl$Ld$H- L%| Ll$Lt$L|$H\$H8L)AIHI[Ht1@LLDAHH9rH\$Hl$Ld$Ll$ Lt$(L|$0H8ÐUHSHH Ht`DHHHuH[ÐHoHHello World; <\ tzRx AC T <$TQ_@X @ @o`@@@ = H`0`@H@ o(@oo@`@@GCC: (GNU) 4.4.7 20120313 (Red Hat 4.4.7-16),@?jmain"GLOBAL_CONST=tryGlobalShiLof!@@ugziintpdefijkWceNmno S W] WX Wb WI W@@" abc Wl 8 ` W W ` l `% $ > $ >  : ;  : ; I8  : ; I8  : ; I 8 .? : ; I@  4: ; I 4: ; I?  &IE) hello.chello.h @ Ylong long intshort unsigned intGNU C 4.4.7 20120313 (Red Hat 4.4.7-16)mainlintbit1bit2bit3bit4unsigned charlong unsigned intGLOBAL_CONSThiLo/home/bseifershello.cfloatshort inttryGlobaljldef.symtab.strtab.shstrtab.interp.note.ABI-tag.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.ctors.dtors.jcr.dynamic.got.got.plt.data.bss.comment.debug_aranges.debug_pubnames.debug_info.debug_abbrev.debug_line.debug_str.debug_pubtypes@#@ 1<@<$Do`@`N @`V@=^o@ko(@( zH@H`@`0 @@0@@@@$@|````@`@H`H(p`p`t80t-0 C j)~ 7( IC0q N; U ^$5  @@<@`@@@@(@ H@ `@ @ @ @@@@@````@`H`p`` ! @`*`8`E 0@[`j`x @`@` @H````  p` @' @. = Qc@i@p```@` @t```t` @ @call_gmon_startcrtstuff.c__CTOR_LIST____DTOR_LIST____JCR_LIST____do_global_dtors_auxcompleted.6349dtor_idx.6351frame_dummy__CTOR_END____FRAME_END____JCR_END____do_global_ctors_auxhello.c_GLOBAL_OFFSET_TABLE___init_array_end__init_array_start_DYNAMICdata_start__libc_csu_fini_start__gmon_start___Jv_RegisterClassesputs@@GLIBC_2.2.5_fini__libc_start_main@@GLIBC_2.2.5_IO_stdin_used__data_startGLOBAL_CONSThiLo__dso_handle__DTOR_END____libc_csu_init__bss_starttryGlobal_end_edatamain_initpyelftools-0.26/test/testfiles_for_readelf/improved-dwarfv4.o.elf000066400000000000000000000067601357220457300253200ustar00rootroot00000000000000ELF>(@@f USH@DH[] +Foogbimgbargbazg foo-Uintf1  a b g Us Tv f2 g%  : ;  : ; I 8 $ > .?: ; 'I@B: ; I$ > .?: ; 'I@B : ; I 1 B .?: ; 'I< I U)S)+U T*V*+T,+F) improved-dwarfv2.c #Kget_barcharimproved-dwarfv2.cGNU C 4.8.4 -mtune=generic -march=x86-64 -g -O1 -fstack-protector/usr/local/google/home/sethml/pyelftoolsGCC: (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4zRx  (0AAD UAA.symtab.strtab.shstrtab.rela.text.data.bss.rela.debug_info.debug_abbrev.debug_loc.rela.debug_aranges.rela.debug_line.debug_str.comment.note.GNU-stack.rela.eh_frame @+( &k,k6k1@ 8BzPO`0[x 0 tJo  0a0*X 0ph   "     improved-dwarfv2.cget_barf1f2    b) j o y  L  6 4 pyelftools-0.26/test/testfiles_for_readelf/issue103.elf000066400000000000000000000163201357220457300232300ustar00rootroot00000000000000ELF>@@P@8@@@@@@@@@@   ` `y 88`8`@@ Ptd@@DDQtd/lib64/ld-linux-x86-64.so.2GNU   libc.so.6__libc_start_main__gmon_start__GLIBC_2.2.5ui , `( `HH Ht+H5 % @% h% f1I^HHPTI@H0@H@fD `UH- `HHvHt] `f]@f. `UH `HHHH?HHtHt ] `]fD=e uUHn]R @0`H?uHtUH]zH HHHHSH H 0ffH HHH HHHt >$$QtdRtd-==\\GNU?žK<؃n? 3ojGk ,F C7NR%eW]/(8` 1*; ?&xI06c~^"z)4BX:!5[Lf\#gm>qrSOu'Q$s}2Z-PUl DVKd_Eb@na3ty+A{<Tp9JMwvYHh= |.i @ @d@Y @R bfF@F/aj8 <gHd@BeH) OTX "$%'()*+,-/12367<?ABDEGHIJKLMNQRTUWXZ\^`abcdfhiklosuvwy{}Œ!mʅndYS GdYS)EBz SS SS-Zo|EZrצEmnZz] ~X̅@Y#!mUa[1HaGT_l⻾GrR_2yu6['OF c,{?! )vΚ!)w9u=8}S'is9}=8 ] qX̾n-qE:^ y,CU36z8dRAY\mi\$KU3=zQeKw *秐8-j"m mG8癠"Y!@X|G@jL_"=eEbO@Xco}@CE~^# `o#"O "O%>Zԟ(@X:q}Oeɛ`zFdOgOQ[X:x}O˺hm ƾS_˺'@8= 6mv Sv % p{'j'"  :`I Fq )`G :} G & l* Bm E HI PI @N pB    p M@=A   prr s 8 FPK `9   kV  s q8 9,' 3<} Xp o0 ;} p+ :Y lN  D 2 ;}  H, )0# eo+ DpS  m@ Pж:  +0@ W@ 5(  PCu ! @=. 6mV 8 '<}  ` ` b2 Si e` D RK X@oy ` ` 6 0 _`C PlN G N * mV ) 0  @ rp hC:} E so+ D `  rP E [  ]0B/  PCPR 1IX q. ^ ZC8 ^ `v R\C?  0 u @uZ 2 8`^ Q ^ %PH 0  0   C - uP 9 r 3 ` c? G- *tMn ~} Pq8 C dCp+ __gmon_start___fini__cxa_finalize_Jv_RegisterClassesgelf_getclasself_memory_elf_version_elf_errnomallocelf_beginmemcpyfreelseek_elf_mmap_elf_readelf_cntlelf_getdata_elf_cookelf_endmunmapelf_errmsgcatgetscatopen_elf_fillelf_flagdataelf_flagehdrelf_flagelfelf_flagphdrelf_flagscnelf_flagshdrelf_getarhdrelf_getarsymelf_hashelf_getbase_elf64_xltsize_elf_xlatetom_elf32_xltsizeelf_getidentelf_getscnelf_kindelf_ndxscnelf_newdata_elf_data_init_elf_update_shnum_elf_first_scn_elf_scn_initelf_newscnelf_nextelf_nextscnelf_randelf_rawdataelf_rawfileelf_strptr_elf_sanity_checkswrite__errno_locationftruncatememsetelf_update_elf_fmsize_elf_scn_typereallocelf64_xlatetofelf32_xlatetofgetenvstrtolgelf_checksumelf64_checksumelf32_checksumelf_getaroffelf32_fsizeelf64_fsizegelf_fsizegelf_msize_elf_getehdrelf64_getehdrelf32_getehdr_elf_getphdrelf64_getphdrelf32_getphdrelf32_getshdrelf64_getshdrgelf_newehdrelf64_newehdrelf32_newehdrgelf_newphdrelf64_newphdrelf32_newphdrelf32_xlatetommemmove_elf_verdef_32L11_tom_elf_verdef_32L11_tof_elf_verneed_32L11_tom_elf_verneed_32L11_tof_elf_verdef_32M11_tom_elf_verdef_32M11_tof_elf_verneed_32M11_tom_elf_verneed_32M11_tofelf64_xlatetom__elf_assertstderr__fprintf_chkabortstrcmpnlistcloseelf_delscnelfx_remscnelfx_movscnelf_getshdrstrndxelf_getshstrndxelf_getshdrnumelf_getshnumelf_getphdrnumelf_getphnumelfx_update_shstrndxgelf_xlatetofgelf_xlatetom_elf_store_u64M_elf_load_u64M_elf_store_i64M_elf_load_i64M_elf_store_u64L_elf_load_u64L_elf_store_i64L_elf_load_i64L_elf_verdef_64L11_tom_elf_verdef_64L11_tof_elf_verneed_64L11_tom_elf_verneed_64L11_tof_elf_verdef_64M11_tom_elf_verdef_64M11_tof_elf_verneed_64M11_tom_elf_verneed_64M11_tofgelf_update_ehdrgelf_getehdrgelf_update_phdrgelf_getphdrgelf_update_shdrgelf_getshdrgelf_update_symgelf_update_dyngelf_update_relagelf_update_relgelf_getrelgelf_getrelagelf_getdyngelf_getsymlibc.so.6__stack_chk_fail_edata__bss_startlibelf.so.0GLIBC_2.1.3GLIBC_2.4GLIBC_2.3.4GLIBC_2.0si ii ti 'ii 3================>>> >>>>> >$>(>,>0>4>8><>@>D>H>L>P>T>X>\>`>d>h>l>p>t>x>|>>>>>>>>>>>>>>>>>>>>>>>>>>>>>A A$A(A,A0A4A8AE ]uE @}}ЋUB49tH<9}EG ƉẼ:M̾M8È|0 uu}̀?/g.tÙ|2/F.$ljE@ GE̍MMĉL$$ UĉGẺT$$ MĺGẺL$$ "UĉG ẺT$$(yMĺ GẺL$$ 0XMɉ‰G&MA4D<;M̅GQPQPQ P G@t!GUt$T$$<0WvU$Ur1 MЃ} F}F|d+NV~ 8NxNx} NxEo}G49w}(<$1l[^_]Í&R@UċMċU l[^_]Ël1[^_]ËUM̋uȋ}čI@@rEԍU1UEЍEEfFl FhtNFhFlEȅ[FL FHtNFHFLFT FPtNFPFTFd F`FF`FdF M6UԋMUЋV N E҉MQF4Y NM뿍 ffEUȅtűFtEFHpEEpd1&fE{uȅt ŰB$ B tuB B$NpUErd;&FFEeUrLUȅm}vUTUԉ1uE)ЉEԋŰE9B t B UJpEԁdUBd;xDPxDP 1MUB09t Efz0HpUB.9t fr.uNpÈ8t UJpù~Et FEEHpÙzLt BLuNpÈxFt @FUJpù~t FEHpUB9EtEĈBUJpù~t FEHpŨzuE@VpVpEԃ}  uVM䍋&$L$MMMȅ}vUԋEL1҉u)щMԋM̋E3A( A,tUEA,JpA(EԁEPdBP1 BTnBzPBTBU1 ‰UMA<9t EfyUȅMvE1ҍDEE)ЉEЋE3FH FLtUЃNFLVHE3FP FTtENFTFPF`1 FdpN`NFdNUЉUԃ~4tEЉE MMuVpEЋUB9EE ։UԋŰR U9EEuNpsE1ҋuF V$w;Es uEEM̉1A(Q,w ;EsEԉEЉE8FD9EN@MMԃ~4tȉEԋMuFE9Es>UBdt49t0}}9t!P@x4tHD9s 9Muۋ}M9MNU;VTFPr9Ev9NHMVLMԉU~4tȉEԋEul}wfM9Ms^UBdtT9tP}PHx4HLtxPw*;Us%}w9}t&s:ft9u}M9M(NPFGFt&BF4$w;EPLЋUȋ|;FTFTNF4$OwEPLȋM||Fh1 FlnVhFlN[EЋNE"EЋNENNUrdvUEpd\MUWVSWvU$t$U ҸoEJv1$t$]Ð1 2 ItË$t$]&'UEUElUщ8]ôuƉ}@X~VL;UU܉M؋84$: lU܋M؅EF`1E FXUfH8EB\F\t$RUNtNpJ ~\]u}]ÐU܉M؉4$ҵU܋M؅;1Ћ1 1Fx1"떍}<$´U܋M؅}EU܉MD$D$<$M؋U܁N`MFXUfH,EBLf<$1:?U$t$EßU HLqv1$t$]ÍM$t$]UEU Ew&UEU EWUW}VE t=Ut61ɐt&Tt 4 t u9wэ^_]ÍUmWE VutBMt;1ҍt&t}LtL4L4 9UwˋE^_]ÐUW}VE t=Ut61ɐt&t t t u9wэ^_]ÍUmWE VutBMt;1ҍt&t} tL4L4L9UwˋE^_]ÐUWVE}M Et"t1fTA4A fG9EwE^_]Ív'UWV}E }t*}t#1ftP}LW4P W9UwE^_]Ðt&UWVE}M Et"t1fAtA fG9EwE^_]Ív'UWV}E }t*Ut#1ftP} W4PLW9UwE^_]Ðt&UW}VE t=Mt61ɐt&Tt 4 t u9wэ^_]ÍUmW}VE tBut;1ҍt&t}LtL4L4 9UwˋE^_]ÐUW}VE t=Ut61ɐt&t t t u9wэ^_]ÍUmWE VutBMt;1ҍt&t} tL4L4L9UwˋE^_]ÐUW}VE t=Ut61ɐt&Tt 4 t u9wэ^_]ÍUmWE VutBMt;1ҍt&t}LtL4L4 9UwˋE^_]ÐUW}VE t=Ut61ɐt&Tt t 4 u9wэ^_]ÍUmWE VutBMt;1ҍt&t} tL4L4L9UwˋE^_]ÐUW}VE t=Ut61ɐt&Tt 4 t u9wэ^_]ÍUmWE VutBMt;1ҍt&t}LtL4L4 9UwˋE^_]ÐUW}VE t=Ut61ɐt&t t t u9wэ^_]ÍUmWE VutBMt;1ҍt&t} tL4L4L9UwˋE^_]ÐUmEWVth}taU 1ɍt&Br 2 r u΍rF~v z uD9MwE^_]Í&'UWVMmuU twts1Mt}OtO4O4‰|N|N|Nt}O9E}wE^_]ÍvUmEWVth}taE 1ɍt&Pp p 0 u΍pxV ~v uT9MwE^_]Í&'UWVMmuU tptl1Mt}tO4O4‰OLO|N|N|NE9EwE^_]Ív'UmW}VU1)E 1t&Hx 8 x Hx x x JH x  x x  JHx x x  J Hx x x JHx x x JHx x x JHx x x  J 9uE^_]Í&'UWVmUqEfE 1ɉMU0UJ0J0J0 xrNxNxNpJx rNx NxNpJxr NxNx Np J xrNxNxNpJxrNxNxNpJxrNxNxNpJxrNxNxNp JEU9UE^_]Ít&'UmMWUV1)E 1t&x x x Hx x x JHx  x x  JH x  x x J Hx x x JHx x x JHx x x JHx x x  J 9uE^_]Í&'UWVm}ku`E 1ɉMU0U 0J0J0JxrJxNxNxNx rJx NxNxNxr J xNx Nx NxrJxNxNxNxrJxNxNxNxrJxNxNxNxrJPVPVP VEU9UE^_]ÐUWVEM҉Ut{twE 1Px 8 x Px x x QP x  x x  Q 9uwU^_]RÍUWVEM҉UE 1})MMrJJJ xuNxNp}OHJJp M}Op OpOH JEu9us}^_]Ít&'UWVEM҉Ut{twE 1x x x Px x x QP x  x x  Q 9uwU^_]RÍUWVEM҉UE 1u)MMr JJJxuJp}OxuNxNx rJP VPVP VEu9ux}^_]UmEWM Vut^tZ1t&T| < | T| | | T9EwE^_]fUWVMmuU twts1Mt}OtO4O4‰|N|N|Nt}O9E}wE^_]ÍvUmW}VM ut^tZ1t&| | | T| | | T9EwE^_]fUWVMmEU tptl1Mt}tO4O4‰OLO|N|N|NE9EwE^_]Ív'UWṼEM҉UyqE 1Hx 8 x Hx x x JH x  x x  JHx x x  J Hx x x JHx x x JHx x x JHx x x JH#x" x x! J H'x& x$ x%( J$(9uU^_]Ít&UWṼEM҉UE 1})MMrJJJ xuNxNp}OHJJp M}Op OpOHr Jup}OpOp OH rJ up}OpOpOHrJup}OpOpOHrJup}OpOpOHrJup}OpOpOHr Jup#}Op"Op OH r$J up'}Op&Op$OH$(J$Eu9u?}^_]Í&UWṼEM҉UyqE 1x x x Hx x x JHx  x x  JH x  x x J Hx x x JHx x x JHx x x JHx x x JH x! x# x" J H$x% x' x&( J$(9uU^_]Ít&UWṼEM҉UE 1u)MMr JJJxuJp}OxuNxNx rJx NxNxNxr J xNx Nx NxrJxNxNxNxrJxNxNxNxrJxNxNxNxrJxNxNxNx#r J x"Nx Nx Nx'r$J$P&VP$VP$(VEu9u`}^_]Ð&UWVumMU 1EfL| < | L| | | LL |  | |  LL L L L L|E fLM9MTE^_]Í&UWVU m}u1EfM4M}O4O4O4|N|N|Nt}O| N| N|Nt}Ot }L t L t}OtOE}9}(E^_]Ít&'UWVumEU 1Ef | | | L| | | LL|  | |  LL L L L L|E fLM9MTE^_]Í&UWV U muM1EfM4M}4O4O4OLO|N|N|NL }uO| N|N|Nt }L t L t}OtOE}9}.E ^_]ÐU(E]MðU} u}pt$ ]u}]Íxuօtv4Ɛyvߋ몐t&r ύ,tHL$$D$nU8]I҉uƉ} 8E~zz}<NjE }}x},Et~BU܉L$$D$UU܃t4;Fwgu E~F"BD$D$$Uuۍ1]u}]Í&1ڋ1ʋ1뺋1 몋1뚐&UMEU E MUMEU E MaUuu]E蠒=U tt9tt$T$$輐]u]Ð&UD$T$$Ít&UONWVE}҉U`Xu 1ɉMFV fGFV fGFV V V ЉGFV V V ЉGFV V V ЉGF#V" V V! ЉG F'V& V$ V% ЉG$F)V( fG(F+V*M fG*F-V, fG,F/V. fG.F1V0 fG0F3V24 fG249MkE4^_]fUONWVE}҉UIAu 1)}vEM<FGFGFGFGVGPVPVPFGVGPVPVPFGVGPVPVPFGV#G PV"PV PF G V'G$PV&PV$PF$G$F)G)F(G(F+G+F*G*F-G-F,G,F/G/F.G.F1G1F0G0F3G3F24G2M9MkE4^_]É'UONWVE}҉U`Xu 1ɉMFV fGFV fGFV V V ЉGFV V V ЉGFV V V ЉGF V! V# V" ЉG F$V% V' V& ЉG$F(V) fG(F*V+M fG*F,V- fG,F.V/ fG.F0V1 fG0F2V34 fG249MkE4^_]fUONWVE}҉UIAu 1)}vEM<FGFGFGFGVGWVPVPVPVGWVPVPVPVGWVPVPVPV#G W V"PV PV PV'G$W$V&PV$PV$PF)G(F(G)F+G*F*G+F-G,F,G-F/G.F.G/F1G0F0G1F3G2F24G3M9MkE4^_]ÐUU t0v6ot!vFovtot1f]Ítv.tt1f tuʸ ]Í&u ]Ít&UU]M uu}BLt@u#BPt$ $D$x]u]Í1]u]ËBPt$ $D$mÍvUWVS|M EÞ9ȉEBLzT M|M+M u9Mu}Mԋu؋ M̍ uDuuEBt1E EЍEЉD$ED$$ E|[^_]fE B Eʐt&#|1[^_]f}+t1}փ,1륍&$UՇUt+EVU1;Up$誆1a}>t1}Ã?둍Uuu]}]~Tt" 1]u}]Í&FPv1ѐt&FLv1뱐t&1D$$FXt؋VLt1iH0x @.p9ljhwPFT‰tlt‹p<9‰t661#1HX4$N{1҉dk dt;GttWߋDx9\E`98t1D> $z1҉D>񋄕D>pp p땋t$XT$L{XT^hϋlFLt.ukыAGAfGfG G G ыAGAfGՉAfAfA A A ċt $x1+UWVS{Y,u $yu*ufFt8u,[^_]ÐD$E$-wtlD$D$$ExMEt?d‹E$UwM $y<$YyU܅d,[^_]É $x<$4y@UHuu ]Ez]}V91]u}]fE}U܋u؋NɉMtAI(Mt+M܋I ɉMt $EԉUCwM܋UЋEI(MEF,t i uJL1Jzd9ut&9tNju&;rhtYNɉF%}ωEU܉u G(wtW t $dvG(tԉ<$Tvʉzh뢋1EԉUЉ4$,vUЋErhJXRdvfq0u$vt&s;t6t#WJ4vރ tw* vuދJL9Ȑt'JLJH9t JH1ow1ɐt&ӋM܉EԉUЉ $uUЋEQrhJXRdvfqvt(J4vփ tw) vuދJ\9Ȑt&J\JX9tJX1ow1ً1JUH}} ]Ew]ux1 ]u}]ËuEU܋}؋OɉMtAI(Mt+M܋I ɉMt $EԉUDtM܋UЋEI(MEG,t&huBh@$D$ua1YW9t1>Bd9u}&9t ȋuf;zhwOuΉEU܉}t&F(~tV t $TsF(tԉ4$Dsʋ1EԉUЉ<$!sUЋEM܉EԉUЉ $sUЋEBhSUU ]EupMu҉}t)t%t!xt# 1]u}]1t&r9t1Ԑ;quFd999E 9NjuEEEt8U9t(;E‰ׁ)}tUtދUP9u؃EU}A~h9׉Bt#9)Vh!E}눋BvUVh1U8uu]st}} ~FXFLt2tEvm]u}]Í&VXR2t1׍vVXR>uVdtvteBH1밍t&}h둉4$Ur[t&r VfBX1H2USE 8sՇD$E$p[]Í&'U(uu]rÐ}} tD~uFVXt$Fh1҅tP1t]u}]É4$[quЍ&ِ ō'USE hrD$E$o[]Í&'U(uu]#r}} t4~u6NXt1tF`1]u}]É4$puڐߐ ˍ'USE qED$E$4n[]Í&'U8uu]cq}} 1ҁw&~t- 1]u}]Ðt&~uӋFXt\U4$nUtbNLtbtve1룐t&NXfy>PXNpH녍&U4$UoUu1_NXfy2PH뾍t&1;UWVE}M Et"t1fTA4A fG9EwE^_]Ív'UWV}E }t*Ut#1ftP}LW4P W9UwE^_]Ðt&UWVE}M Et"t1fAtA fG9EwE^_]Ív'UWV}E }t*Mt#1ftP} W4PLW9UwE^_]Ðt&UW}VE t=ut61ɐt&Tt 4 t u9wэ^_]ÍUmUWE VtB}t;1ҍt&t}LtL4L4 9UwˋE^_]ÐUW}VE t=Mt61ɐt&Tt t 4 u9wэ^_]ÍUmW}VE tBut;1ҍt&t} tL4L4L9UwˋE^_]ÐUW}VE t=Ut61ɐt&Tt 4 t u9wэ^_]ÍUmWE VutBMt;1ҍt&t}LtL4L4 9UwˋE^_]ÐUW}VE t=Ut61ɐt&t t t u9wэ^_]ÍUmWE VutBMt;1ҍt&t} tL4L4L9UwˋE^_]ÐU(E]MlðU} u}pt$ ]u}]Íxuօtv4Ɛyvߋ몐t&r ύLtHL$$D$nU8]Ik҉uƉ} 8E~zz}<NjE }}x}LEt~BU܉L$$D$UU܃t4;Fwgu E~F"BD$D$$Uuۍ1]u}]Í&1ڋ1ʋ1뺋1 몋1뚐&UMEU E MUMEU E MaU1(U]M i>~uu҉}}t,zuFBLtNvt^v1]u}]Ív1 1Љ|$t$ $`f뾍|$t$ $d릍&'U1(U]M h~}uu҉}}t,zuFBLtNvt^v1]u}]Ív1 1Љ|$t$ $d뾍|$t$ $hg릍&'UWVS,}mEhü|M t3t/1t&T<$MD$T$HfM9uw؋E,[^_]Ív'UWVSy}҉Uu 1)}&E<GGGVGWVPVPVPFV M܉D$GT$$rbFVD$GT$$YbFVD$GT$$@bF V$D$G T$$'bF(V,D$G(0T$$ bF0V48<$D$T$aM܃9MkE8,[^_] UWVS,}mEOcwM t3t/1t&T<$MD$T$xaM9uw؋E,[^_]Ív'UWVSLU mub|wt\MtU11UԋMԃE1L1$ET$L$aMԋET1L1 $T$L$`9}wEL[^_]Ít&UWVS,}mEObvM t3t/1t&T<$MD$T$x`M9uw؋E,[^_]Ív'UWVSmMavt.Ut'} 1t&<$]`MT9uwE[^_]Ðt&UWVS,EavM} ҉U1Et&7E7T7 T7 T7 Љ1D7D1D7D1D7T7M fD1E$_M؉D1ET1 $u_M؃ET1UD19UgU܃,[^_R]Í&'UWVS,}mu`uu 1ɐt&V V V ЉFV V VM ЉGF$^GFW $^GFW$^GF W$}^G W$F(V) V+ V* ЉG(F,V- V/ V. ЉG,F0$(^G0F8@W4$^MG8W<@9ME,[^_]ÍUWVSpu ҉U}}tv11uԍvMԋuE9L94$T$L$YMԋT9L9 T$L$N $YMԋT9L94$T$L$WE9EwUL[^_R]ÍvUWVSmUZot.Et'} 1t&<$WMT9uwE[^_]Ðt&UWVS@ fG>@9ME,[^_]Ív'UWVS,mMI_^6U+u 1ɐt&ω}M$FGFGFGFGVGPVPVPFGFVD$GT$$GF V$D$G T$$FF(V,D$G(T$$FV3G0PV2PV0PF0G0F5G5F4G4F7G7F6G6F9G9F8G8F;G;F:G:F=G=F@G>M9ME,[^_]É'UWVS,}muOH\2*u 1ɐt&MFV fGFV fGFV V V ЉGF$uFGF W$dFG F(W$$SFMG(W,F0V1 V3 V2 ЉG0F4V5 fG4F6V7 fG6F8V9 fG8F:V; fG:F<V= fG<F>V?@ fG>@9ME,[^_]Ív'UWVS,mEF[6}+u 1ɐt&ω}MDFGFGFGFGVGWVPVPVPFVD$GT$$DF V$D$G T$$DF(V,D$G(T$$DV3G0W0V2PV0PV0PF5G4F4G5F7G6F6G7F9G8F8G9F;G:F:G;F=G<FF>@G?M9ME,[^_]ÐU(uu ]sEZ}}u1]u}]Ðt&tGL<$D$mBtՋWLt!vx1뮋VPVPV P VPVPVPVPV P V$P$V(P(V,P,V0P0V4P4V8P8VfP2t&'Ux}}]eE1CUXuu u!1Ue3]u}]ËGL<$D$@t̅-WLt%$1뙋PVPVP V PVPVPVPVP V P$V$P(V(P,V,P0V0P4V4P8V8@3>U8}}]sAVuuu1]u}]Ðt&tFL4$D$M>tՋU xZU ;V`sRVLJM䋋u1 ItAtK}v-1xfF1ct&1Kt&M w ȅWE1t&M WTWTW T WTWTWTWTW T W$T$W(T(W,T,W0T0W4T4OPWiwPWXO$P W G,PW(7PW4PW0!PBUx}}]? Tuuu1]u}]ÍvGL<$D$av  ^_]Í&UWVuVF~ F  F ~v  ^_]Í&UM 4$E|$}PΈHPHPHP4$|$]fUM 4$E|$}PΈHPHPHP4$|$]fUM 4$E|$}PΈHPHPHP4$|$]fUM 4$E|$}PΈHPHPHP4$|$]ÐUWVS$).BEUn}wBrzREEfUf8H PyfRJ} f}ډEE։}I@}fPUP}fPUfPPPUԍxPUWUWUԈWx }P }WWOx}}PE}GEGEGuM܍A9EL1Mԉ}tfH׈HHpHF҈FVE}9}UԋEԃ9ErxEuEuEԃ} V6sHH׈H׍pN҈NNPq&EHEE܋E܃9E3E6EE܋PHf8pUPMHfUfMH !fEE܃} @}fPUP}fPUfPPPUԍxWUWUWUԍx P}W}WWxH U}W}}WUWUPEE$[^_]fE1E$[^_]ËE2t&UMEU E M]t&UMEU E M]t&UWVS()Ö>E܉U}B f?rJERf} E܉E}fPx@PUPUWUWUWx}P}WWOx }}P Eԋ}GEGEԈGuMЍA9EEMHHHufHMHufHMpHHNNNp H F҈FVE}9}ŰẼ9EEuűEEN} V ~fMN6fMHHHufHMHufHMpHNNNH׍p N҈NNP fUԅEEЋEЃ9EEEEЋHP f8pMHUfEEЃ} NfP@xPUWUWUWUxP}W}WWx HUԉ}W}}WUWUԈP KEE([^_]fE3E([^_]ËE4t&UMEU E M]t&UMEU E M]UWVS%6:EUI}7EEE؃} -fUPf UHfMPf Uxf}Pf UHPp x  P p p  p  x x x}x }x }@ Ef}HfQI}܋EE؉x}PUp ufHfPfxfF9EMEot&Ay A A A yI  ȋMAtE}9}ssƍF9EriME} EuQAy  A A yI  ȋMAuE܅t4EE؋E؃9Er#EE1E[^_]fPfUf UHfMPf Uxf}Pf UHPp x P  p p  p x x  x}x }x }@ EvEE[^_]ËE2 fUMEU E M]t&UMEU E M]dt&UWVS$!Ö6EUV}EEEЃ} fUPf UpPHx  P P P P x x  x }x  }x }@ Ef}fEEЋ}؉PUfpx HfЃ9EuԉUEt&P P P PfUPf UpfuPf UpP x  P  P  P  x@  ‹}EwuW fGfwE}9}UE9EEE܋UUE} UHPp  Pfu Pf Uxf}Pf Up P x P P  P x @  &U؅t4EEЋEЃ9Er#EiE3E$[^_]fPfUf UpPHx  P P P P  x x  x}x }x }@  ENEE$[^_]ËE45v'UMEU E M]$t&UMEU E M]UWVS$Ö2EUn}wBrzREEfUf8H PyfRJ} f}ډEE։}I@}fPUP}fPUfPPPUԍxPUWUWUԈWx }P }WWOx}}PE}GEGEGuM܍A9EL1Mԉ}tfH׈HHpHF҈FVE}9}UԋEԃ9ErxEuEuEԃ} V6sHH׈H׍pN҈NNPq&EHEE܋E܃9E3E6EE܋PHf8pUPMHfUfMH !fEE܃} @}fPUP}fPUfPPPUԍxWUWUWUԍx P}W}WWxH U}W}}WUWUPEE$[^_]fE1E$[^_]ËE2t&UMEU E M]t&UMEU E M]t&UWVS(f.E܉U}B f?rJERf} E܉E}fPx@PUPUWUWUWx}P}WWOx }}P Eԋ}GEGEԈGuMЍA9EEMHHHufHMHufHMpHHNNNp H F҈FVE}9}ŰẼ9EEuűEEN} V ~fMN6fMHHHufHMHufHMpHNNNH׍p N҈NNP fUԅEEЋEЃ9EEEEЋHP f8pMHUfEEЃ} NfP@xPUWUWUWUxP}W}WWx HUԉ}W}}WUWUԈP KEE([^_]fE3E([^_]ËE4t&UMEU E M]t&UMEU E M]UWVSi*EUI}7EEE؃} -fUPf UHfMPf Uxf}Pf UHPp x  P p p  p  x x x}x }x }@ Ef}HfQI}܋EE؉x}PUp ufHfPfxfF9EMEot&Ay A A A yI  ȋMAtE}9}ssƍF9EriME} EuQAy  A A yI  ȋMAuE܅t4EE؋E؃9Er#EE1E[^_]fPfUf UHfMPf Uxf}Pf UHPp x P  p p  p x x  x}x }x }@ EvEE[^_]ËE2 fUMEU E M]t&UMEU E M]dt&UWVS$f&EUV}EEEЃ} fUPf UpPHx  P P P P x x  x }x  }x }@ Ef}fEEЋ}؉PUfpx HfЃ9EuԉUEt&P P P PfUPf UpfuPf UpP x  P  P  P  x@  ‹}EwuW fGfwE}9}UE9EEE܋UUE} UHPp  Pfu Pf Uxf}Pf Up P x P P  P x @  &U؅t4EEЋEЃ9Er#EiE3E$[^_]fPfUf UpPHx  P P P P  x x  x}x }x }@  ENEE$[^_]ËE45v'UMEU E M]$t&UMEU E M]US k" UVS J"t&Ћu[^]US[" Y[ELF! ` unknown errorno errorRequest error: not an archiveRequest error: d_buf is NULLI/O error: seekI/O error: raw readI/O error: get file sizeI/O error: output writeFormat error: archive fmagFormat error: archive headerMemory error: elf descriptorMemory error: ELF headerMemory error: section dataGElf error: type mismatchInternal error: unknown reasonInternal error: not implementedRequest error: cntl(ELF_C_FDREAD) on write-only fileRequest error: invalid ELF_C_* argumentRequest error: file descriptor disabledRequest error: offset out of rangeRequest error: unknown ELF versionRequest error: ELF_C_* argument does not matchRequest error: archive member begin() for writingRequest error: archive/member file descriptor mismatchRequest error: not an ELF fileRequest error: class file/memory mismatchRequest error: invalid ELF_T_* argumentRequest error: unknown data encodingRequest error: destination buffer too smallRequest error: unknown ELF classRequest error: section does not belong to fileRequest error: no section at indexRequest error: can't manipulate null sectionRequest error: data does not belong to sectionRequest error: no string tableRequest error: string table offset out of rangeRequest error: update(ELF_C_WRITE) on read-only fileI/O error: file too big for memoryI/O error: can't truncate output fileSequence error: must set ELF version firstSequence error: must create ELF header firstFormat error: reference outside fileFormat error: archive header truncatedFormat error: archive member truncatedFormat error: archive symbol table sizeFormat error: archive string tableFormat error: archive special name unknownFormat error: ELF header truncatedFormat error: program header table truncatedFormat error: section header table truncatedFormat error: data region truncatedFormat error: program header table alignmentFormat error: section header table alignmentFormat error: bad parameter in Verdef recordFormat error: unknown Verdef versionFormat error: bad parameter in Verneed recordFormat error: unknown Verneed versionFormat error: bad e_shnum valueFormat error: bad e_shentsize valueFormat error: bad e_phentsize valueFormat error: unterminated string in string tableLayout error: section size too small for dataLayout error: overlapping sectionsMemory error: archive symbol tableMemory error: archive member headerMemory error: program header tableMemory error: section header tableMemory error: section descriptorMemory error: output file spaceMemory error: temporary bufferGElf error: value out of rangeGElf error: index out of rangeGElf error: not enough memory for GElf_SymGElf error: not enough memory for GElf_DynGElf error: not enough memory for GElf_RelaGElf error: not enough memory for GElf_RellibelfLIBELF_SANITY_CHECKS44 ((@@88@@}t,9&%s:%u: libelf assertion failure: %s \|($ H l   !(!T!|!!F!!$"H"x""""c0#sT#|###$($P$x$$$$%L%p%%%&(&X&&&&&'L'p'' ''(&$(D(d((A(((() & oXX = ?$(oooo>&''.'>'N'^'n'~'''''''''((.(>(N(^(n(~((((((((()).)>)N)^)n)~)))))))))**.*>*N*^*n*~**Au@v }}`wwxyp p zz {|vwP~~ xPx`yy 0z@{0 `||0@00PP0p`P``Ppо`0` GCC: (Ubuntu 4.4.3-4ubuntu5) 4.4.3`+. 5(O6!D"8s%9H&9':)4=.Z>@=A1I?oQ?x\pBdC(oC8pCVxD DEo H,PH7IXw`I7PKK.Mi`jl* m3 @o px%qx/q)=0sKuG)pq00 `@N֞'pSж|*4;I %%P 7`9 TEPP [\= gelf_getclass elf_memory9 elf_begin  elf_cntlOXelf_endD"/relf_errmsgs%uelf_errnoH&uelf_fillr' R elf_flagdata elf_flagehdr6 elf_flagelf elf_flagphdr elf_flagscnt elf_flagshdr)41 elf_getarhdrZ>  elf_getarsym1I>elf_getbaseoQ 5 elf_getdatax\aelf_getidentdO elf_getscn(ouelf_hashp>elf_kindVx>elf_ndxscnb elf_newdataFy _elf_update_shnumQ _elf_first_scn elf_newscno6elf_next@ elf_nextscn7@ elf_randw elf_rawdata7aelf_rawfile elf_strptr.elf_updateeelf_versionF & gelf_checksumS elf64_checksum elf32_checksumMelf_getaroff\Z elf32_fsize elf64_fsize gelf_fsize gelf_msizeB _elf_fmsizeC3  _elf_getehdr elf64_getehdr elf32_getehdrC _elf_getphdr) elf64_getphdr[ elf32_getphdr2x%j elf32_getshdr elf64_getshdrC/G 1 gelf_newehdrm elf64_newehdr elf32_newehdrC)=q gelf_newphdr elf64_newphdr elf32_newphdrGK% _elf32_xltsize!elf32_xlatetom>"elf32_xlatetofepq= _elf_scn_type/ _elf_xlatetomE_elf_cook_elf_scn_init_elf_data_initS_elf_version_elf_errno_elf_fill_elf_sanity_checks*  _elf_mmap _elf_read __elf_assert nlist֞ D elf_delscn{ elfx_remscn'z elfx_movscn elf_getshdrstrndx elf_getshstrndxD elf_getshdrnum elf_getshnum elf_getphdrnum elf_getphnumN elfx_update_shstrndxk|1`_elf64_xltsizeelf64_xlatetomelf64_xlatetofBgelf_xlatetofgelf_xlatetom44 gelf_update_ehdre gelf_getehdr4; gelf_update_phdr gelf_getphdr4 gelf_update_shdr5 gelf_getshdr%"] gelf_update_sym gelf_update_dynkgelf_update_relagelf_update_relgelf_getrelgelf_getrelagelf_getdyn.gelf_getsym7+u_elf_load_u64L_elf_load_u64M_elf_load_i64L_elf_load_i64M0_elf_store_u64Lj_elf_store_u64M_elf_store_i64L_elf_store_i64Mx9 _elf_verdef_32L11_tof_elf_verdef_32M11_tofx _elf_verneed_32L11_tof _elf_verneed_32M11_tofxTE{ _elf_verdef_32L11_tom_elf_verdef_32M11_tomt _elf_verneed_32L11_tom _elf_verneed_32M11_tomxP _elf_verdef_64L11_tof_elf_verdef_64M11_tof _elf_verneed_64L11_tof _elf_verneed_64M11_tofx[\ _elf_verdef_64L11_tom_elf_verdef_64M11_tom _elf_verneed_64L11_tom _elf_verneed_64M11_tomVt `+5 intmD  4Z$ ;lraXzcLZ   <%[ &[# 'k# {({# u({#" )#( *#0 M+#:k {    7 %O% 'O% -a1 1O' 2a 5O% 6a(  #5 #D # #  # # # # # | #$ @ D #5 #D # # # !#  "#( ##, $#0| %#8& & 7V-    AP Rk   X ]A  9 za   _   l {Elf WElf   # j #  #  # #  #  3#  Z#  # s #$ % #( #,  #0 o #4  #8 #< D #@  #D  #H $ Z#L  Z#P Z#T ( #X 7) #\  #`  #d = #h  Z#l  Z#p  Z#tb Z#x Z#x Z#x# Z#x Z#xT Z#x Z#x x #|V  Vt l  # #  #  Z# b Z# r  #   # (  # Z Z# P #$  #(E Z#,  #0  #p   #  # { # u #  s# # 9 #L l ?  #  A# # K # 5 # + Z#Y  U 0 D ?#O  #2 #9 #  Z#$+ Z#( Z#( #,L@   D J } Up    v  =  6  ^$ GhE W !"#$%| &'(&)*a+W,)-. /07 123:456^789 :Q ;<~ =>?)rTq,,1A elf1hdr2A 33 4err5 1| i 1 1 1!s`+, "str,#lenR$ 3U#err %xs&3,7, 'elf(@,-/ "elf[$ ѿy) ,* + , u\- -* -5 &:-.+ .W. w/elf0{b9 arfbhdrcA dNetmpfi.gerrh1.50"fd3/"cmd"ref2uH% 3off3elf4 /@  * +h- +5 - I5 ," u@-- +63)uT7 *&@ :8-O 0c_ Lt 2P d9M :Z9m ;3 V 56 intmD  4Z$ ;lraXzcLZ7%O%'O%-a11O'2a5O%6a(  # 5# D# # # # # # # |#$ @c # 5# D# #   # !# "#( ##, $#0 |%#8 && 7 V   -       Ao R  k    X ]`    9  z a    _   l   { ElfvElf #j # # #  # # 3# Z# # s #$% #( #, #0o #4 #8 #<D #@ #D #H$ Z#L  Z#P Z#T( #X7) #\ #` #d= #h Z#l Z#p Z#tb Z#x Z#x Z#x# Z#x Z#xT Z#x Z#xx #|VVt # # # Z# b Z#r 0# 0#( 0#Z Z# P #$ #(E Z#, #0 #p##{#u# s# #9#L^#`# #K # 5#+Z#Y t0  D ^# O 0# 2  # 9 #  Z#$+ Z#( Z#(  #,k@ 0 c i } U p      v   =  6   ^     $      G   h E   W ! " # $ % | & ' ( &) * a+ W, )- . / 0 7 1 2 3 :4 5 6 ^7 8 9 : Q ; < ~ = > ?   ) r     T q , 356Zu elfcmdscn   4 8- u m ;3V 68 intmD  4Z$ ;lraXzcLZ7%O%'O%-a11O'2a5O%6a(  # 5# D# # # # # # # |#$ @c # 5# D# #   # !# "#( ##, $#0 |%#8 && R  k    Xo ]    9  z a    _   l   { Elf,Elfb #j # # #  # # 3# Z# # s #$% #( #, #0o #4 #8 #<D #@ #D #H$ Z#L  Z#P Z#T( #X7) #\ #` #d= #h Z#l Z#p Z#tb Z#x Z#x Z#x# Z#x Z#xT Z#x Z#xx #|VmVtA # # # Z# b Z#r # #( #Z Z# P #$ #(E Z#, #0 #p##{#u# s# #9#LA## #K # 5#+Z#Y *0  D # O # 2 # 9 #  Z#$+ Z#( Z#(  #,!b@  c Z 66Rptr~K &Xelf&scn&sd'tmp'd (C K368elfKl Ls7k,! !7"A#Lu`$%8&-u '+V 89H intmD r}p}g U p      v   =  6   ^     $      G   h E   W ! " # $ % | & ' ( &) * a+ W, )- . / 0 7 1 2 3 :4 5 6 ^7 8 9 : Q ; < ~ = > ?   ) r     T q , ! "n  5w89r err53 pk;-  #gXC pk 'S) w kK +=m;3Vc 99 intmD rn399tmp3 nk9 -) m;3*V 9 :  intmD r 9 :*  3nk8 -k <3 V : =Q intmD  4Z$ ;lraXzcLZ7%O%'O%-a11O'2a5O%6a(  # 5# D# # # # # # # |#$ @c # 5# D# #   # !# "#( ##, $#0 |%#8 && 7 V   -       Ao R  k    X ]`    9  z a    _   l   { ElfvElf #j # # #  # # 3# Z# # s #$% #( #, #0o #4 #8 #<D #@ #D #H$ Z#L  Z#P Z#T( #X7) #\ #` #d= #h Z#l Z#p Z#tb Z#x Z#x Z#x# Z#x Z#xT Z#x Z#xx #|VVt # # # Z# b Z#r 0# 0#( 0#Z Z# P #$ #(E Z#, #0 #p##{#u# s# #9#L^#`# #K # 5#+Z#Y t0  D ^# O 0# 2  # 9 #  Z#$+ Z#( Z#(  #,k@ 0 c i } U p      v   =  6   ^     $      G   h E   W ! " # $ % | & ' ( &) * a+ W, )- . / 0 7 1 2 3 :4 5 6 ^7 8 9 : Q ; < ~ = > ?   ) r     T q ,4 ZL fL cmd+ZZ 'Z::V G' cmd' +'Z sd(0 7:.@ 5 , ^> 2Z: ; 6 elf2E cmd2d +2Z  :7@ 5 ,  ;Z;; elf; cmd;' +;ZF  7;0@@ 5 , ' DZ; < elfD cmdD +DZ  ;PI@ 5 ,  MZ<<b t scnM  cmdM +MZ  7<pR@ 5 ,  VZ< =% scnV Q cmdVp +VZ  <[@ 5 , !8"- # $m ;3-  V =>= intmD  4Z$ ;lraXzcLZ7%O%'O%-a11O'2a5O%6a(  # 5# D# # # # # # # |#$ @c # 5# D# #   # !# "#( ##, $#0 |%#8 && R  k    Xo ]    9  z a    _   l   { Elf,Elfb #j # # #  # # 3# Z# # s #$% #( #, #0o #4 #8 #<D #@ #D #H$ Z#L  Z#P Z#T( #X7) #\ #` #d= #h Z#l Z#p Z#tb Z#x Z#x Z#x# Z#x Z#xT Z#x Z#xx #|VmVtA # # # Z# b Z#r # #( #Z Z# P #$ #(E Z#, #0 #p##{#u# s# #9#LA## #K # 5#+Z#Y *0  D # O # 2 # 9 #  Z#$+ Z#( Z#(  #,!b@  c  } U p      v   =  6   ^     $      G   h E   W ! " # $ % | & ' ( &) * a+ W, )- . / 0 7 1 2 3 :4 5 6 ^7 8 9 : Q ; < ~ = > ?   ) r     T q , =>= elf <- K  m ;3 + V @=? intmD  4Z$ ;lraXzcLZ7%O%'O%-a11O'2a5O%6a(  # 5# D# # # # # # # |#$ @c # 5# D# #   # !# "#( ##, $#0 |%#8 && R  k    Xo ]    9  z a    _   l   { Elf,Elfb #j # # #  # # 3# Z# # s #$% #( #, #0o #4 #8 #<D #@ #D #H$ Z#L  Z#P Z#T( #X7) #\ #` #d= #h Z#l Z#p Z#tb Z#x Z#x Z#x# Z#x Z#xT Z#x Z#xx #|VmVtA # # # Z# b Z#r $# $#( $#Z Z# P #$ #(E Z#, #0 #p##{#u# s# #9#LA  # # s# R## #K # 5#+Z#Y h0  D R# O $# 2 # 9 #  Z#$+ Z#( Z#(  #,!b@ $ c ] } U p      v   =  6   ^     $      G   h E   W ! " # $ % | & ' ( &) * a+ W, )- . / 0 7 1 2 3 :4 5 6 ^7 8 9 : Q ; < ~ = > ?   ) r     T q ,  @=?? elfkptr    uLtmp\i uPs!@e" <- !m ;3: V^ ??+  intmD  4Z$ ;lraXzcLZ7%O%'O%-a11O'2a5O%6a(  # 5# D# # # # # # # |#$ @c # 5# D# #   # !# "#( ##, $#0 |%#8 && R  k    Xo ]    9  z a    _   l   { Elf,Elfb #j # # #  # # 3# Z# # s #$% #( #, #0o #4 #8 #<D #@ #D #H$ Z#L  Z#P Z#T( #X7) #\ #` #d= #h Z#l Z#p Z#tb Z#x Z#x Z#x# Z#x Z#xT Z#x Z#xx #|VmVtA # # # Z# b Z#r # #( #Z Z# P #$ #(E Z#, #0 #p##{#u# s# #9#LA## #K # 5#+Z#Y *0  D # O # 2 # 9 #  Z#$+ Z#( Z#(  #,!b@  c ??elf);-8" WV ?lB  intmD  4Z$ ;lraXzcLZ7%O%'O%-a11O'2a5O%6a(  # 5# D# # # # # # # |#$ @c # 5# D# #   # !# "#( ##, $#0 |%#8 && R  k    Xo ]    9  z a    _   l   { Elf,Elfb #j # # #  # # 3# Z# # s #$% #( #, #0o #4 #8 #<D #@ #D #H$ Z#L  Z#P Z#T( #X7) #\ #` #d= #h Z#l Z#p Z#tb Z#x Z#x Z#x# Z#x Z#xT Z#x Z#xx #|VmVtA # # # Z# b Z#r # #( #Z Z# P #$ #(E Z#, #0 #p##{#u# s# #9#LA## #K # 5#+Z#Y *0  D # O # 2 # 9 #  Z#$+ Z#( Z#(  #,!b@  c  } U p      v   =  6   ^     $      G   h E   W ! " # $ % | & ' ( &) * a+ W, )- . / 0 7 1 2 3 :4 5 6 ^7 8 9 : Q ; < ~ = > ?   ) r     T q ,/ / elfscnsddstsrc9 3b/ ?lB  scnb5Gb/ Usdcelfdu @! ! ! "# H# # u$# % &<'- h( )m ;3]uV pBB  intmD  4Z$ ;lraXzcLZ7%O%'O%-a11O'2a5O%6a(  # 5# D# # # # # # # |#$ @c # 5# D# #   # !# "#( ##, $#0 |%#8 && R  k    Xo ]    9  z a    _   l   { Elf,Elfb #j # # #  # # 3# Z# # s #$% #( #, #0o #4 #8 #<D #@ #D #H$ Z#L  Z#P Z#T( #X7) #\ #` #d= #h Z#l Z#p Z#tb Z#x Z#x Z#x# Z#x Z#xT Z#x Z#xx #|VmVtA # # # Z# b Z#r # #( #Z Z# P #$ #(E Z#, #0 #p##{#u# s# #9#LA## #K # 5#+Z#Y *0  D # O # 2 # 9 #  Z#$+ Z#( Z#(  #,!b@  c pBB6elf!ptr6Wtmp\L<-[<K V CC  intmD  4Z$ ;lraXzcLZ7%O%'O%-a11O'2a5O%6a(  # 5# D# # # # # # # |#$ @c # 5# D# #   # !# "#( ##, $#0 |%#8 && R  k    Xo ]    9  z a    _   l   { Elf,Elfb #j # # #  # # 3# Z# # s #$% #( #, #0o #4 #8 #<D #@ #D #H$ Z#L  Z#P Z#T( #X7) #\ #` #d= #h Z#l Z#p Z#tb Z#x Z#x Z#x# Z#x Z#xT Z#x Z#xx #|VmVtA # # # Z# b Z#r # #( #Z Z# P #$ #(E Z#, #0 #p##{#u# s# #9#LA## #K # 5#+Z#Y *0  D # O # 2 # 9 #  Z#$+ Z#( Z#(  #,!b@  c  } U p      v   =  6   ^     $      G   h E   W ! " # $ % | & ' ( &) * a+ W, )- . / 0 7 1 2 3 :4 5 6 ^7 8 9 : Q ; < ~ = > ?   ) r     T q ,'CC elf)scn, :-; 2 m ;3V CC intmD r]CCi.5,]#tmp]A  A n k9 -m :>V CC intmD  4Z$ ;lraXzcLZ7%O%'O%-a11O'2a5O%6a(  # 5# D# # # # # # # |#$ @c # 5# D# #   # !# "#( ##, $#0 |%#8 && R  k    Xo ]    9  z a    _   l   { Elf,Elfb #j # # #  # # 3# Z# # s #$% #( #, #0o #4 #8 #<D #@ #D #H$ Z#L  Z#P Z#T( #X7) #\ #` #d= #h Z#l Z#p Z#tb Z#x Z#x Z#x# Z#x Z#xT Z#x Z#xx #|VmVtA # # # Z# b Z#r # #( #Z Z# P #$ #(E Z#, #0 #p##{#u# s# #9#LA## #K # 5#+Z#Y *0  D # O # 2 # 9 #  Z#$+ Z#( Z#(  #,!b@  c CCTelf)8-8:VF DD intmD  4Z$ ;lraXzcLZ7%O%'O%-a11O'2a5O%6a(  # 5# D# # # # # # # |#$ @c # 5# D# #   # !# "#( ##, $#0 |%#8 && R  k    Xo ]    9  z a    _   l   { Elf,Elfb #j # # #  # # 3# Z# # s #$% #( #, #0o #4 #8 #<D #@ #D #H$ Z#L  Z#P Z#T( #X7) #\ #` #d= #h Z#l Z#p Z#tb Z#x Z#x Z#x# Z#x Z#xT Z#x Z#xx #|VmVtA # # # Z# b Z#r # #( #Z Z# P #$ #(E Z#, #0 #p##{#u# s# #9#LA## #K # 5#+Z#Y *0  D # O # 2 # 9 #  Z#$+ Z#( Z#(  #,!b@  c ;DDscn):-8^ Vj DE intmD  4Z$ ;lraXzcLZ7%O%'O%-a11O'2a5O%6a(  # 5# D# # # # # # # |#$ @c # 5# D# #   # !# "#( ##, $#0 |%#8 && R  k    Xo ]    9  z a    _   l   { Elf,Elfb #j # # #  # # 3# Z# # s #$% #( #, #0o #4 #8 #<D #@ #D #H$ Z#L  Z#P Z#T( #X7) #\ #` #d= #h Z#l Z#p Z#tb Z#x Z#x Z#x# Z#x Z#xT Z#x Z#xx #|VmVtA # # # Z# b Z#r # #( #Z Z# P #$ #(E Z#, #0 #p##{#u# s# #9#LA## #K # 5#+Z#Y *0  D # O # 2 # 9 #  Z#$+ Z#( Z#(  #,!b@  c  } U p      v   =  6   ^     $      G   h E   W ! " # $ % | & ' ( &) * a+ W, )- . / 0 7 1 2 3 :4 5 6 ^7 8 9 : Q ; < ~ = > ?   ) r     T q ,^ DE scnsd <-- t M :Zm ;3O g\ u V: EH intm2SD  4e$ ;wraXcLe !HT'"H7%Z%'Z%-l11Z'2l5Z%6l4F KG# H# I# J# K # ^L"# CM"# N#$ O#( P#* Q#, fR#. |S#0 #T#2 A @X KY# Z# [# \# ]# ^^-# C_-#( `#0 a#4 b#6 c#8 fd#: |e#< #f#> (  # 5# D#  # "# # # # # |#$ @. # 5# D# #  -# !# "#( ##, $#0 |%#8&&Rak  X:]  9 za   _   l{lElfElf-  # j #  a#  # #  #  3#  e#  # s #$ % #( #,  #0 o #4  #8 #< D #@  #D  #H $ e#L  e#P e#T ( #X 7) #\  #`  #d = #h  e#l  e#p  e#tb e#x e#x e#x# e#x e#xT e#x e#x x #|V8Vt   # #  #  e# b e# r #  # ( # Z e# P #$  #(E e#,  #0  #pw # # {# u# ~# # 9#L  # # # K # 5# +e#Y 0 D # O  # 2  # 9 #  e#$+ e#( e#(  #,w-@  .  } Up    v  =  6  ^$ GhE W !"#$%| &'(&)*a+W,)-. /07 123:456^789 :Q ;<~ =>?)rTq,A  elfA AscnB !i  elfi scnj r3EEcQ elf ~ !scn %+V EFC elfV o!scnW " E^# # $% S} FH3 elf} !scn~ 1" F # $8% " GPq# # $% C ;&-R '3 (m ;3( fs '-V HLHX intmD  4Z$ ;lraXzcLZ7%O%'O%-a11O'2a5O%6a(  # 5# D# # # # # # # |#$ @c # 5# D# #   # !# "#( ##, $#0 |%#8 && 7 V   -       Ao R  k    X ]`    9  z a    _   l   { ElfvElf #j # # #  # # 3# Z# # s #$% #( #, #0o #4 #8 #<D #@ #D #H$ Z#L  Z#P Z#T( #X7) #\ #` #d= #h Z#l Z#p Z#tb Z#x Z#x Z#x# Z#x Z#xT Z#x Z#xx #|VVt # # # Z# b Z#r 0# 0#( 0#Z Z# P #$ #(E Z#, #0 #p##{#u# s# #9#L^#`# #K # 5#+Z#Y t0  D ^# O 0# 2  # 9 #  Z#$+ Z#( Z#(  #,k@ 0 c i HLHOcelf{s8-c< $V PHHK intmD  4Z$ ;lraXzcLZ7%O%'O%-a11O'2a5O%6a(  # 5# D# # # # # # # |#$ @c # 5# D# #   # !# "#( ##, $#0 |%#8 && R  k    Xo ]    9  z a    _   l   { Elf,Elfb #j # # #  # # 3# Z# # s #$% #( #, #0o #4 #8 #<D #@ #D #H$ Z#L  Z#P Z#T( #X7) #\ #` #d= #h Z#l Z#p Z#tb Z#x Z#x Z#x# Z#x Z#xT Z#x Z#xx #|VmVtA # # # Z# b Z#r # #( #Z Z# P #$ #(E Z#, #0 #p##{#u# s# #9#LA## #K # 5#+Z#Y *0  D # O # 2 # 9 #  Z#$+ Z#( Z#(  #,!b@  c  } U p      v   =  6   ^     $      G   h E   W ! " # $ % | & ' ( &) * a+ W, )- . / 0 7 1 2 3 :4 5 6 ^7 8 9 : Q ; < ~ = > ?   ) r     T q ,PHH elfscn6 ;-,  m ;3< V IXIV intmD  4Z$ ;lraXzcLZ7%O%'O%-a11O'2a5O%6a(  # 5# D# # # # # # # |#$ @c # 5# D# #   # !# "#( ##, $#0 |%#8 && R  k    Xo ]    9  z a    _   l   { Elf,Elfb #j # # #  # # 3# Z# # s #$% #( #, #0o #4 #8 #<D #@ #D #H$ Z#L  Z#P Z#T( #X7) #\ #` #d= #h Z#l Z#p Z#tb Z#x Z#x Z#x# Z#x Z#xT Z#x Z#xx #|VmVtA # # # Z# b Z#r # #( #Z Z# P #$ #(E Z#, #0 #p##{#u# s# #9#LA## #K # 5#+Z#Y *0  D # O # 2 # 9 #  Z#$+ Z#( Z#(  #,!b@  c  } U p      v   =  6   ^     $      G   h E   W ! " # $ % | & ' ( &) * a+ W, )- . / 0 7 1 2 3 :4 5 6 ^7 8 9 : Q ; < ~ = > ?   ) r     T q ,JIXI elf3% 8-, S m ;3 C V `IIKS intmD  4Z$ ;lraXzcLZ7%O%'O%-a11O'2a5O%6a (  # 5# D# # # # # # # |#$  @j # 5# D# #  # !# "#( ##, $#0 |%#8 &&  R  k     Xv  ]    9  z a    _   l    {Elf 3Elf i #j # # #  # # 3# Z# # s #$% #( #, #0o #4 #8 #<D #@ #D #H$ Z#L  Z#P Z#T( #X7) #\ #` #d= #h Z#l Z#p Z#tb Z#x Z#x Z#x# Z#x Z#xT Z#x Z#xx #|V tVt H # # # Z# b Z#r # #( #Z Z# P #$ #(E Z#, #0 #p  # #{ #u #  s# #9 #L H  # # #K # 5 #+ Z#Y  10  D # O # 2 # 9 #  Z#$+ Z#( Z#(  #,(i@  j & } U p      v   =  6   ^     $      G   h E   W ! " # $ % | & ' ( &) * a+ W, )- . / 0 7 1 2 3 :4 5 6 ^7 8 9 : Q ; < ~ = > ?   ) r     T q , 1 i 11 1f `IIKf scnGf sdelf)| < - !l "M :Z"m ;3"O g !&]"V. PKK intmD  4Z$ ;lraXzcLZ7%O%'O%-a11O'2a5O%6a(  # 5# D# # # # # # # |#$ @c # 5# D# #   # !# "#( ##, $#0 |%#8 && R  k    Xo ]    9  z a    _   l   { Elf,Elfb #j # # #  # # 3# Z# # s #$% #( #, #0o #4 #8 #<D #@ #D #H$ Z#L  Z#P Z#T( #X7) #\ #` #d= #h Z#l Z#p Z#tb Z#x Z#x Z#x# Z#x Z#xT Z#x Z#xx #|VmVtA # # # Z# b Z#r # #( #Z Z# P #$ #(E Z#, #0 #p##{#u# s# #9#LA## #K # 5#+Z#Y *0  D # O # 2 # 9 #  Z#$+ Z#( Z#(  #,!b@  c PKKR6elf~ptr6tmp\L;-[< #V8 KM intmD  4Z$ ;lraXzcLZ7%O%'O%-a11O'2a5O%6a(  # 5# D# # # # # # # |#$ @c # 5# D# #   # !# "#( ##, $#0 |%#8 && R  k    Xo ]    9  z a    _   l   { Elf,Elfb #j # # #  # # 3# Z# # s #$% #( #, #0o #4 #8 #<D #@ #D #H$ Z#L  Z#P Z#T( #X7) #\ #` #d= #h Z#l Z#p Z#tb Z#x Z#x Z#x# Z#x Z#xT Z#x Z#xx #|VmVtA # # # Z# b Z#r # #( #Z Z# P #$ #(E Z#, #0 #p##{#u# s# #9#LA## #K # 5#+Z#Y *0  D # O # 2 # 9 #  Z#$+ Z#( Z#(  #,!b@  c  } U p      v   =  6   ^     $      G   h E   W ! " # $ % | & ' ( &) * a+ W, )- . / 0 7 1 2 3 :4 5 6 ^7 8 9 : Q ; < ~ = > ?   ) r     T q ,KMO elf:3GO Escnudnse ; -t A!U "m ;3"} =3}\%VV Mi intm2SD  4e$ ;wraXcLe S !HT'"H7%Z%'Z%-l11Z'2l5Z%6l 4F KG# H# I# J# K# ^L.# CM.# N#$ O#( P#* Q#, fR#. |S#0 #T#2 A! oUD @X KY# Z# [# \# ]## ^^9# C_9#( `#0 a#4 b#6 c#8 fd#: |e#< #f#>&g,( #5#D## .##### |#$@P#5#D ### 9#! # "#(##,$ #0|% #8&& 7V-    A\ Rk   X ]M  9 za   _   l {Elf cElf   # j #  #  # #  #  3#  e#  # s #$ % #( #,  #0 o #4  #8 #< D #@  #D  #H $ e#L  e#P e#T ( #X 7) #\  #`  #d = #h  e#l  e#p  e#tb e#x e#x e#x# e#x e#xT e#x e#x x #|V Vt x  # #  #  e# b e# r  #   # (  # Z e# P #$  #(E e#,  #0  #p    #  # { # u #  ~# # 9 #L x  K  #  M# # K # 5 # + e#Y  a 0 D K #O  #2  #9 #  e#$+ e#( e#( #,X@   P V  } Up    v  =  6  ^$ GhE W !"#$%| &'(&)*a+W,)-. /07 123:456^789 :Q ;<~ =>?)rTq,mF elfmF +me],menML XzN i N-N3 N 1 i 11 1 -McO !scn- !v-e9"-eL#- "9 - $elf. u\%G/ 03&p1uP'len2'sd3 %04-eK (x3pOOl )fdx3*x)lenx+_y7,nz(@PCR`x)elf )fd3)len* -bufd-err./ //x|elf| 9 | }32~3(0off+eee~e0scn 1T0scn ."1."p0lenô2 LQ2,scn* 3."+!4F5elfF 69 F 3G332H33(I,offJ3+Ke3Le3M3N3Oe3~Pe,scnQ 1,scn~ 3."13."3p,len23 3L3Q2,scn 3."P7PR@a)elf $ )cmdD +9 e| -len 8 S99:@;uH<=!=";uD;u= 1"="=""=-#<>=*$<><=HK={%<=e%? `P`9 9/ 9$ @`P`=: %AHU`99:;uH<=0&=d&;+uD;7u=C&=O&=[,'=g'<>`=(<>x$a=)<=*B n``9 9/ 9$ @n``=: 6*(3@a;cj*J)elf **&*)len*-scn +-sd S++G++ ,:CoffVu`-lenVR,(@cf{,)elf ,*&,Dlen+(,3."-scn --sd P-CsrcK HCdstK Eeu@$eMe-tmpH-(zfi-)elfz -*&z1.Dlenz+({Q.3."|-scn} d.-sd~ .CsrcK HCdstK Eeu@\hh-tmp.  ;F-  & Z)GM :eGm ;3G <3 m   Gd h{ K)V iZj  intmD r{n}eUp    v  =  6  ^$ GhE W !"#$%| &'(&)*a+W,)-. /07 123:456^789 :Q ;<~ =>?)rTq, NOiZj!/ verOM/ su/ tmpO/ n k;-M:Om;3}=3 )V* `jld  intmD  4Z$ ;lraXzcLZ7%O%'O%-a11O'2a5O%6a(  # 5# D# # # # # # # |#$ @c # 5# D# #   # !# "#( ##, $#0 |%#8 && R  k    Xo ]    9  z a    _   l   { Elf,Elfb #j # # #  # # 3# Z# # s #$% #( #, #0o #4 #8 #<D #@ #D #H$ Z#L  Z#P Z#T( #X7) #\ #` #d= #h Z#l Z#p Z#tb Z#x Z#x Z#x# Z#x Z#xT Z#x Z#xx #|VmVtA # # # Z# b Z#r # #( #Z Z# P #$ #(E Z#, #0 #p##{#u# s# #9#LA## #K # 5#+Z#Y *0  D # O # 2 # 9 #  Z#$+ Z#( Z#(  #,!b@  c  } U p      v   =  6   ^     $      G   h E   W ! " # $ % | & ' ( &) * a+ W, )- . / 0 7 1 2 3 :4 5 6 ^7 8 9 : Q ; < ~ = > ?   ) r     T q ,5+3 scn+cls+Z ."- ."= cBSV ptrSV lenSoTAj]`jk/ elf]0o^60G_ ud scn`u`! j@h " " #*kPk $ %kk$ &# k%kr"? "4 %k%k'J _0(kFl}0S elf0([Pll1 elf.1(Lll1 elf1) *<+- t, -m ;3I&,V lm! intmD  4Z$ ;lraXzcLZ7%O%'O%-a11O'2a5O%6a(  # 5# D# # # # # # # |#$ @c # 5# D# #   # !# "#( ##, $#0 |%#8 && R  k    Xo ]    9  z a    _   l   { Elf,Elfb #j # # #  # # 3# Z# # s #$% #( #, #0o #4 #8 #<D #@ #D #H$ Z#L  Z#P Z#T( #X7) #\ #` #d= #h Z#l Z#p Z#tb Z#x Z#x Z#x# Z#x Z#xT Z#x Z#xx #|VmVtA # # # Z# b Z#r # #( #Z Z# P #$ #(E Z#, #0 #p##{#u# s# #9#LA## #K # 5#+Z#Y *0  D # O # 2 # 9 #  Z#$+ Z#( Z#(  #,!b@  c lm 2(elf82refz28<-G(V -V m8o" intmD  4Z$ ;lraXzcLZ7%O%'O%-a11O'2a5O%6a(  # 5# D# # # # # # # |#$ @c # 5# D# #   # !# "#( ##, $#0 |%#8 && R  k    Xo ]    9  z a    _   l   { Elf,Elfb #j # # #  # # 3# Z# # s #$% #( #, #0o #4 #8 #<D #@ #D #H$ Z#L  Z#P Z#T( #X7) #\ #` #d= #h Z#l Z#p Z#tb Z#x Z#x Z#x# Z#x Z#xT Z#x Z#xx #|VmVtA # # # Z# b Z#r # #( #Z Z# P #$ #(E Z#, #0 #p##{#u# s# #9#LA## #K # 5#+Z#Y *0  D # O # 2 # 9 #  Z#$+ Z#( Z#(  #,!b@  c  } U p      v   =  6   ^     $      G   h E   W ! " # $ % | & ' ( &) * a+ W, )- . / 0 7 1 2 3 :4 5 6 ^7 8 9 : Q ; < ~ = > ?   ) r     T q ,6R clsRZRverRZnS*b mvm2 b2 bverbZ3 1m`c !" &3immD3 ip3 iveriZ3 mj !" 3nmn3 elfn4n^4 nvernZ4# 8nnt $8nn" 4n8o4 elf 5L5 verZ5%n5& '=(- A) *m ;3&B ''''+dT )) /V @op"$ intm2SD  4e$ ;wraXcLe !HT'"H7%Z%'Z%-l11Z'2l5Z%6l4F KG# H# I# J# K # ^L"# CM"# N#$ O#( P#* Q#, fR#. |S#0 #T#2 A oU8@X KY# Z# [# \# ]# ^^-# C_-#( `#0 a#4 b#6 c#8 fd#: |e#< #f#>&g  (  # 5# D#  # "# # # # # |#$ @D # 5# D# #  -# !# "#( ##, $#0 |%#8&&Rwk  XP]  9 za   _   l{Elf ElfC  # j #  w#  # #  #  3#  e#  # s #$ % #( #,  #0 o #4  #8 #< D #@  #D  #H $ e#L  e#P e#T ( #X 7) #\  #`  #d = #h  e#l  e#p  e#tb e#x e#x e#x# e#x e#xT e#x e#x x #|VNVt"  # #  #  e# b e# r #  # ( # Z e# P #$  #(E e#,  #0  #p # # {# u# ~# # 9#L" # # # K # 5# +e#Y 0 D # O  # 2  # 9 #  e#$+ e#( e#(  #,C@  D   } Up    v  =  6  ^$ GhE W !"#$%| &'(&)*a+W,)-. /07 123:456^789 :Q ;<~ =>?)rTq,@oo5 elf 5clse.64 oo6 elf4 -L op6L elf-  b >-q R m ;3 t1V1 p q0% intmD  4Z$ ;lraXzcLZ7%O%'O%-a11O'2a5O%6a(  # 5# D# # # # # # # |#$ @c # 5# D# #   # !# "#( ##, $#0 |%#8 &&  G# ># # N# (#  # V!# "# #o8& G'# V(# >) # *# N+# (,# -#( .#0 >%/ R  k    X ]2    9  z a    _   l   { ElfHElf~ #j # # #  # # 3# Z# # s #$% #( #, #0o #4 #8 #<D #@ #D #H$ Z#L  Z#P Z#T( #X7) #\ #` #d= #h Z#l Z#p Z#tb Z#x Z#x Z#x# Z#x Z#xT Z#x Z#xx #|VVt] # # # Z# b Z#r  #  #(  #Z Z# P #$ #(E Z#, #0 #p##{#u# s# #9#L]0#2# #K # 5#+Z#Y F0  D 0# O  # 2 # 9 #  Z#$+ Z#( Z#(  #,=~@   c ; } U p      v   =  6   ^     $      G   h E   W ! " # $ % | & ' ( &) * a+ W, )- . / 0 7 1 2 3 :4 5 6 ^7 8 9 : Q ; < ~ = > ?   ) r     T q ,  pp6) elf 7clsZ{74U pp7U elf4- p q8 elf- ?- ^ m ;3f  3V qqE& intmD  4Z$ ;lraXzcLZ7%O%'O%-a11O'2a5O%6a(  # 5# D# # # # # # # |#$ @c # 5# D# #   # !# "#( ##, $#0 |%#8 && R  k    Xo ]    9  z a    _   l   { Elf,Elfb #j # # #  # # 3# Z# # s #$% #( #, #0o #4 #8 #<D #@ #D #H$ Z#L  Z#P Z#T( #X7) #\ #` #d= #h Z#l Z#p Z#tb Z#x Z#x Z#x# Z#x Z#xT Z#x Z#xx #|VmVtA # # # Z# b Z#r # #( #Z Z# P #$ #(E Z#, #0 #p##{#u# s# #9#LA## #K # 5#+Z#Y *0  D # O # 2 # 9 #  Z#$+ Z#( Z#(  #,!b@  c  } U p      v   =  6   ^     $      G   h E   W ! " # $ % | & ' ( &) * a+ W, )- . / 0 7 1 2 3 :4 5 6 ^7 8 9 : Q ; < ~ = > ?   ) r     T q , qHq-8 scnY8,1 Pqqx81 scn,8cG ?-V 7 m ;3C 4V q$sH' intm2SD  4e$ ;wraXcLe !HT'"H7%Z%'Z%-l11Z'2l5Z%6l4F KG# H# I# J# K # ^L"# CM"# N#$ O#( P#* Q#, fR#. |S#0 #T#2 A oU8@X KY# Z# [# \# ]# ^^-# C_-#( `#0 a#4 b#6 c#8 fd#: |e#< #f#>&g  (  # 5# D#  # "# # # # # |#$ @D # 5# D# #  -# !# "#( ##, $#0 |%#8&& Rwk   XP ]  9 za   _   l {Elf Elf C  # j #  w#  # #  #  3#  e#  # s #$ % #( #,  #0 o #4  #8 #< D #@  #D  #H $ e#L  e#P e#T ( #X 7) #\  #`  #d = #h  e#l  e#p  e#tb e#x e#x e#x# e#x e#xT e#x e#x x #|V NVt "  # #  #  e# b e# r #  # ( # Z e# P #$  #(E e#,  #0  #p   #  # { # u #  ~# # 9 #L "   #  # # K # 5 # + e#Y  0 D # O  # 2  # 9 #  e#$+ e#( e#(  #,C@  D   } Up    v  =  6  ^$ GhE W !"#$%| &'(&)*a+W,)-. /07 123:456^789 :Q ;<~ =>?)rTq,zN i N-N3 Nqmr81 elf 8clsee9 9H~prr9m elfH 9clsH3%:kC rsP: elfC y< s$s|: elf<  ? - +! "M :e"m ;3 3   "d hA ! t6V 0su( intm2SD  4e$ ;wraXcLe !HT'"H7%Z%'Z%-l11Z'2l5Z%6l4F KG# H# I# J# K # ^L"# CM"# N#$ O#( P#* Q#, fR#. |S#0 #T#2 A @X KY# Z# [# \# ]# ^^-# C_-#( `#0 a#4 b#6 c#8 fd#: |e#< #f#> (  # 5# D#  # "# # # # # |#$ @. # 5# D# #  -# !# "#( ##, $#0 |%#8&&  G# >"#  # N # (#  # V!# "##: 8&J G'# V(# >)-# *# N+# (,# -#( .#0>%/ R}k   XV ]  9 za   _   l {Elf Elf I  # j #  }#  # #  #  3#  e#  # s #$ % #( #,  #0 o #4  #8 #< D #@  #D  #H $ e#L  e#P e#T ( #X 7) #\  #`  #d = #h  e#l  e#p  e#tb e#x e#x e#x# e#x e#xT e#x e#x x #|V TVt (  # #  #  e# b e# r #  # ( # Z e# P #$  #(E e#,  #0  #p  #  # { # u #  ~# # 9 #L (   #  # # K # 5 # + e#Y   0 D  # O  # 2  # 9 #  e#$+ e#( e#(  #, I@  .   } Up    v  =  6  ^$ GhE W !"#$%| &'(&)*a+W,)-. /07 123:456^789 :Q ;<~ =>?)rTq,zN i N-N3 N0s4u:q elf : :clseG;u`scn ud 9); ;!n~@uu"< elfn N<n<!,i uu< "elfi # iJ!b'uu<'"elfb # b = ?$-L%-&M :e&m ;3    &d h%m%8V u' *  '>intm2^D  4prXp !S7%e&311e5er9S 4F KG# H# I# J# K# ^L# CM# N#$ O#( P#* Q#, fR#. |S#0 #T#2 L oU ( #5#D## ##### |#$ z{##|#'}#P~L# IL# ^# .R## qR###: G#>##N# (# #V!# "##}t-u< v qU,r#w #x-]  9 za   _   l{a > # # # K # 5# +p#Y }.Up    v  =  6  ^$ GhE W !"#$%| &'(&)*a+W,)-. /07 123:456^789 :Q ;<~ =>?)rTq,+ 9 LI  !T Ld   "9 #91 $9 4 9R K :#  ;I#  .# ^ ?d# C @d#  Az#$  BI#(  CI#*  DI#, f EI#. | FI#0 # GI#2i H ( `  az# 5 bz# D cz#  d.#  ed# fz#  gz#  hz#  iz# | jz#$ k]  Z  z# # .# ' z# P L# I L# ^ I#   R .#  z# e R .#  z#  o# L G z# > d#  .# N .# ( z#  z# V z#  z#  v  z< .  ܛ , o#  W # v x     L L=   88 i 88 8zNm i N-N> N dst src u:v= dst ?=src k=n= v6v! "to #iQ9@vv= dst =src >n8>$! "to #iR .vvX> dst >src >n> vv! "to #iQw_w> dst &?src R?n}?$! "to #iR`ww? dst ?src ?n@$! "to %i=@TgwwP@ndst |@src @n@$(!n"toy#iRtIxFx@dst )Asrc TAnsA$@! "to %iAPxxA]dst Asrc Bn3B$X!n"toy#iRxx]Bdst Bsrc BnB xx!"to#iQ9y_yBIdst +Csrc WCnC$p!I"toT#iROde`yyCdst Csrc Cn%D yy!"to#iQXyzDD:dst pDsrc DnD$!I"toT#iR" zzzDdst Esrc ?EnjE @zvz!"to#iQ9zzE&dst Esrc En F$!&"to1#iR,oz:{,Fdst XFsrc FnF {6{!"to#iQu@{{Fdst Fsrc &GnQG$!&"to1#iR#{{qGdst Gsrc GnG {{!"to#iQ9|_|Hdst ?Hsrc kHnH$!"to#iR z`||Hdst Hsrc In9I ||!"to#iQv|}XIdst Isrc InI$!"to#iRz }}Iddst 'Jsrc SJnJ$&dR"too#iQj U}M~Jdst Jsrc JnK$!%to5K%iHKU iP~~[Kldst Ksrc KnK$0'dK"too#iQ[~vLdst >Lsrc iLnL$H!%toL%iL:ҀLVdst Lsrc %MnQM$`'VqM#toaR%iM\L uMdst Msrc MnN$x';N%toNN%iaNL ҃tNfdst Nsrc NnN$'VO#toaR%i*Oo=Odst iOsrc OnO$'O%toO%iPipPTdst FPsrc qPnP$'TP#to_Q%iPZ qZ Pdst Qsrc 9QneQ$'Q#toR%iQq Qbdst Qsrc Rn.R$'TNR#to_Q%iaRtRdst Rsrc RnR$ 'S%to)S%i#iut9Z % Zdst 6Zsrc bZnZ$ !#toup#iutZ P0Z6 dst Zsrc Zn[$ !3"to>#iutB /7[ dst c[src [n[$0 !#toup#iut(P0[0!)srcP0![)dvPpj\*Pp\)tofP>\+Q<],svRp-opS Z]6!>.Rt!X]!)dstt!])srct0!^*tp8^)toft>|^/uud,dvv>,svw>+lx^-tmpy_0opz u`>(A!`3_>"1dst!1src0!2p(2!__"1dst!1src0!2p_"dst _src _nʮ `3m 8`#4z d`4 w`5 5 K`#dst `src `n a ;'#-a%to#@a%iSa#R<qa $dst asrc ana ˚' $b%to$2b%iEb$R cb$dst bsrc bnb K'#c%to#c%i,c'Jc%dst vcsrc cnc ۝ ' $c%to$ d%id &% @6-5%% V%   /^:% A ~%~%  7A%h%8m ;>9|;V. 0`n, intm2SD  4e$ ;wraXcLe !HT'"H7%Z%'Z%-l11Z'2l5Z%6l4F KG# H# I# J# K # ^L"# CM"# N#$ O#( P#* Q#, fR#. |S#0 #T#2 A @X KY# Z# [# \# ]# ^^-# C_-#( `#0 a#4 b#6 c#8 fd#: |e#< #f#> (  # 5# D#  # "# # # # # |#$ @. # 5# D# #  -# !# "#( ##, $#0 |%#8&&Rak  X:]  9 za   _   l{lElfElf-  # j #  a#  # #  #  3#  e#  # s #$ % #( #,  #0 o #4  #8 #< D #@  #D  #H $ e#L  e#P e#T ( #X 7) #\  #`  #d = #h  e#l  e#p  e#tb e#x e#x e#x# e#x e#xT e#x e#x x #|V8Vt   # #  #  e# b e# r #  # ( # Z e# P #$  #(E e#,  #0  #pw # # {# u# ~# # 9#L  # # # K # 5# +e#Y 0 D # O  # 2  # 9 #  e#$+ e#( e#(  #,w-@  .  } Up    v  =  6  ^$ GhE W !"#$%| &'(&)*a+W,)-. /07 123:456^789 :Q ;<~ =>?)rTq,b~3 elf~ numoff?scn  iepT0V ``c/ intmD rnk8-qu MO\C m3`C 3dC }$30B >V `1/ intmD  4Z$ ;lra3XzncLZ7%O%'O%-a11O'2a5O%6a(  # 5# D# # # # # # # |#$ -@y # 5# D#  #  "# !# "#( ##, $#0 |%#8 &&  R  k     X  ],    9  z a    _   l    { Elf BElf x #j # # #  # # 3# Z# # s #$% #( #, #0o #4 #8 #<D #@ #D #H$ Z#L  Z#P Z#T( #X7) #\ #` #d= #h Z#l Z#p Z#tb Z#x Z#x Z#x# Z#x Z#xT Z#x Z#xx #|V Vt W # # # Z# b Z#r # #( #Z Z# P #$ #(E Z#, #0 #p  # #{ #u #  s# #9 #L W * # ,# #K # 5 #+ Z#Y  @0  D *# O # 2 # 9 #  Z#$+ Z#( Z#(  #,7x@  y 5 } U p      v   =  6   ^     $      G   h E   W ! " # $ % | & ' ( &) * a+ W, )- . / 0 7 1 2 3 :4 5 6 ^7 8 9 : Q ; < ~ = > ?   ) r     T q ,# #3 ##W`֩)iX elfWUitmpYi!3 fd!3!len!_"n#81iX elf8j 8~joff8jlen8j!tmp9ud"X x I#~ #s #i $ % #k& ' &# # # (h ):*-w +X ,m ;37AV @0 intmD %8:zr dO 1 - +3# 5 # # #  # # w # # B # #$ #( G #, "#0 $#4 &3#8 *3#< .,o#@ 0H#D 1%#F  2#G 6#H 2?#L N H#T U I#X \ J#\ c K#` j L#d N3#h , P#l    +# # 3#  '`3 `q `:@Wk~OG   :-T~   ]BV! ~1 intm2SD  4e$ ;wraXcLe 7%Z%'Z%-l11Z'2l5Z%6lr9H*!:H (  # 5# D# # # # # # # |#$ J @ # 5# D# #  )# !# "#( ##, $#0 |%#8 && z {# #|# '}# P~A# IA# ^4# j # PA# IA# ^?# ## '#  7V-     Rk   X  ]P  9 za   _   l {Elf fElf  #j # # #  # # 3# e# # s #$% #( #, #0o #4 #8 #<D #@ #D #H$ e#L  e#P e#T( #X7) #\ #` #d= #h e#l e#p e#tb e#x e#x e#x# e#x e#xT e#x e#xx #|V Vt { # # # e# b e#r # #( #Z e# P #$ #(E e#,  #0 #p  # #{ #u #  ~# #9 #L { N # P# #K # 5 #+ e#Y  d0  D N# O  # 2 # 9 #  e#$+ e#( e#(  #,[@   YD!  V! #! #! ,#[ !S# n! "# ! ## 5, / i.0#5,1~#+2e#J!6 elf6 6!6!66off7!KK elfKnpKK  KK& w!*3|  !*!*3?!_3k elf_k nl_K l!!` x" a-l"bwl!!c ux!!d ux"f!el#]!f"i.gl#h #5,i~$ije`m$npkK m%  & & & & & ' ( An)Ү #!#!!* ( &? &4 &* & +e ,N -D!3~jn .|!n nlK n"x3o"8!e7o/elfud$fd3`o0Q &o &d + ,:1- ! 2M :e+ ,,,,2d h  EV " 3 intm2SD  4e$ ;wraXcLe !HT'"H7%Z%'Z%-l11Z'2l5Z%6l4F KG# H# I# J# K # ^L"# CM"# N#$ O#( P#* Q#, fR#. |S#0 #T#2 A @X KY# Z# [# \# ]# ^^-# C_-#( `#0 a#4 b#6 c#8 fd#: |e#< #f#> (  # 5# D#  # "# # # # # |#$ @. # 5# D# #  -# !# "#( ##, $#0 |%#8&&Rak  X:]  9 za   _   l{lElfElf-  # j #  a#  # #  #  3#  e#  # s #$ % #( #,  #0 o #4  #8 #< D #@  #D  #H $ e#L  e#P e#T ( #X 7) #\  #`  #d = #h  e#l  e#p  e#tb e#x e#x e#x# e#x e#xT e#x e#x x #|V8Vt   # #  #  e# b e# r #  # ( # Z e# P #$  #(E e#,  #0  #pw # # {# u# ~# # 9#L  # # # K # 5# +e#Y 0 D # O  # 2  # 9 #  e#$+ e#( e#(  #,w-@  .  } Up    v  =  6  ^$ GhE W !"#$%| &'(&)*a+W,)-. /07 123:456^789 :Q ;<~ =>?)rTq," old "  elf  ."! scn" 3"F> elfF F."G> scnH .F"lo elfl o scnl p!Q"m p"sdn p"tmpo 1q!pOq# 7²0 $ $ %7²& ' q( @ * ) q$ * X ;$ ) r+ ޲l$ $ %޲l&' '2 *r( =p P ) Hr$ * K a$ ) fr ?,- V"- .m ;3w kGV" f5 intmD  4Z$ ;lraXzcLZ7%O%'O%-a11O'2a5O%6a(  # 5# D# # # # # # # |#$ @c # 5# D# #   # !# "#( ##, $#0 |%#8 && R  k    Xo ]    9  z a    _   l   { Elf,Elfb #j # # #  # # 3# Z# # s #$% #( #, #0o #4 #8 #<D #@ #D #H$ Z#L  Z#P Z#T( #X7) #\ #` #d= #h Z#l Z#p Z#tb Z#x Z#x Z#x# Z#x Z#xT Z#x Z#xx #|VmVtA # # # Z# b Z#r # #( #Z Z# P #$ #(E Z#, #0 #p##{#u# s# #9#LA## #K # 5#+Z#Y *0  D # O # 2 # 9 #  Z#$+ Z#( Z#(  #,!b@  c  } U p      v   =  6   ^     $      G   h E   W ! " # $ % | & ' ( &) * a+ W, )- . / 0 7 1 2 3 :4 5 6 ^7 8 9 : Q ; < ~ = > ?   ) r     T q ,"frH elfrscnsQ"ssd:ttmpnttX =-g "H m ;3v IV" pöS6 intmD  4Z$ ;lraXzcLZ7%O%'O%-a11O'2a5O%6a(  # 5# D# # # # # # # |#$ @c # 5# D# #   # !# "#( ##, $#0 |%#8 && R  k    Xo ]    9  z a    _   l   { Elf,Elfb #j # # #  # # 3# Z# # s #$% #( #, #0o #4 #8 #<D #@ #D #H$ Z#L  Z#P Z#T( #X7) #\ #` #d= #h Z#l Z#p Z#tb Z#x Z#x Z#x# Z#x Z#xT Z#x Z#xx #|VmVtA # # # Z# b Z#r # #( #Z Z# P #$ #(E Z#, #0 #p##{#u# s# #9#LA## #K # 5#+Z#Y *0  D # O # 2 # 9 #  Z#$+ Z#( Z#(  #,!b@  c  } U p      v   =  6   ^     $      G   h E   W ! " # $ % | & ' ( &) * a+ W, )- . / 0 7 1 2 3 :4 5 6 ^7 8 9 : Q ; < ~ = > ?   ) r     T q ,9#pötG elftscnguE#u"ultmpvoff3upW =-f " G !m ;3 JVX# ж7 intm2SD  4e$ ;wraXcLe !HT'"H7%Z%'Z%-l11Z'2l5Z%6l4F KG# H# I# J# K # ^L"# CM"# N#$ O#( P#* Q#, fR#. |S#0 #T#2 A @X KY# Z# [# \# ]# ^^-# C_-#( `#0 a#4 b#6 c#8 fd#: |e#< #f#> (  # 5# D#  # "# # # # # |#$ @. # 5# D# #  -# !# "#( ##, $#0 |%#8&&Rak  X:]  9 za   _   l{lElfElf-  # j #  a#  # #  #  3#  e#  # s #$ % #( #,  #0 o #4  #8 #< D #@  #D  #H $ e#L  e#P e#T ( #X 7) #\  #`  #d = #h  e#l  e#p  e#tb e#x e#x e#x# e#x e#xT e#x e#x x #|V8Vt   # #  #  e# b e# r #  # ( # Z e# P #$  #(E e#,  #0  #pw # # {# u# ~# # 9#L  # # # K # 5# +e#Y 0 D # O  # 2  # 9 #  e#$+ e#( e#(  #,w-@  .  } Up    v  =  6  ^$ GhE W !"#$%| &'(&)*a+W,)-. /07 123:456^789 :Q ;<~ =>?)rTq,$G3ж wv elfG v#G vnumHw#I\scnJ 8wc#3BawD elf # #.3PӸw elf. w#. wnum/%xscn0 CxK#3Vx elf # #3 x elf x# xs#3ҹyN elf # #3Fy elf ry!y #yscn z <!- #" #m ;31LV$ 39  '>int% ,Pm2iD  4{$ ;raXcL{T'"^7%p%'p$%(3%-%.E11p'25p%6*!:^ W{  @XH KYk# Z# [# \# ]?# ^^U# C_U#( `#0 a#4 b#6 c#8 fd#: |e#< #f#>&g{ ( #5#D#4# J##### |#$S @#5#D#?# U#!# "#(##,$#0|%#8&& #PW#IW#^`##?#'#& CR?##$ R?# # )#' O 8&G'#V(#>)U#*?#N+?#(,# -#( .#0>%/~B< ? {j,|)# #k&B Rk   Xv ]  9 za   _   l {Elf 3Elf i  # j #  #  # #  #  >#  {#  # s #$ % #( #,  #0 o #4  #8 #< D #@  #D  #H $ {#L  {#P {#T ( #X 7) #\  #`  #d = #h  {#l  {#p  {#tb {#x {#x {#x# {#x {#xT {#x {#x x #|V tVt H  # #  #  {# b {# r #  # ( # Z {# P #$  #(E {#,  #0  #p   #  # { # u #  # # 9 #L H    #  # # K # 5 # + {#Y  1 0 D  #O  #2  #9 #  {#$+ {#( {#( #,( i@   &  } Up    v  =  6  ^$ GhE W !"#$%| &'(&)*a+W,)-. /07 123:456^789 :Q ;<~ =>?)rTq, W  W  W {' * N' + % , % - % . % / % 0 @ K" K Lk#  M #  N # O4 #  P # ^ Q # C R #(  S4 #0  T #4  U #6  V #8 f W #: | X #< # Y #>& ZU @ n  o4 # 5 p4 # D qJ #  r #  s # tJ #  u4 #(  v4 #,  wJ #0 | xJ #8& y-  *  4 # P W# I W# ^  # #  # ' J #&   Z R  #  J #$ 5   R  #  J #  ? #' e 8  G 4 # V 4 # >  #   # N  # ( J #  J #(  J #08% ֣ F J <   k , ? #  '#e& FxWW= v  8  i 8 8 8zN? i N -N> N!y"dst "src #I& 6;z$dst gz$src z$n z% & 'to (i z #;& @zq$dst {$src F{$n q{% & q'to |)i Rw #& ֻ{$dst {$src {$n |% & 'to (i ;|#% +N|n$dst z|$src |$n |% & q'to |)i R#X% 0|$dst '}$src S}$n ~}*P& 'to )i Q #I% }h$dst }$src }$n  ~% & h'to s)i Rn) #' J@~$dst l~$src ~$n ~*F& 'to )i Q#' P~g$dst $src :$n e% & h'to s)i R#Y%  $dst $src $n *н& 'to )i Q #J% o'a$dst S$src $n %0 & a'to l)i Rg4 #' pʾʀ$dst $src "$n M*ƾ& 'to )i Q#' о/l`$dst $src ā$n %H & a'to l)i R+&l0$srcl;$dvl{,l{˂$tofl>$-m}'svn{(opov #4'Xă$dst$srcE,{y$tof>.ud'dv>'sv>-l(tmpV)opvu` +&`t/dst/src0{+&B/dst/src0{+m'R̅$elf $dstQ$src,{+u&`$elf B$dst$src,{*#F$ `{$dst$src$n%` &{(to(iJ #'($dstT$src$n%x &(toՉ)iud *#u%$dst*$src`$n% -(to(iҊ#'"$dst$srcH$ns% &"(to-(i(CZ#X(ċ$dst$src&$nR*-r(to(i#& VB$dst $src  $n 8% & B(to MX(i kHU #<(`~$dst$src֍$n% &(to!(i?jk# 'VRZ$dst~$src$nԎ% &Z(toe(i`? #V$`$dstF$srcr$n%8-'to(iя #'k$dst$srcF$nq%P.ku`'tov)iudq*#% $dst$src$n%h-4(to G(iZ #&'x $dst/src$nБ%- 'to (i ZC#g(!$dstB$srcn$n*.!ud'to !(i!#& K̒!$dst $src $$n P%- !p'to !(i  U#J(P'"$dst“/src$n%-'"'to2"(i!-"kj#W&+4"$dst`$src$n%-"ؔ'to"(i ?#E$ 0:#$dst *$src U$n %& :#(to E#(i @#)? #&]ƕ#$dst$src$nI%&#(to#i(i|##U$ `R$$dst Ɩ$src $n % - R$>'to X$(i Q )#!&[d$$dst/src$n%8-$ܗ'to$(i$#$`d%$dst.$srcY$n%P&{(to(i#@'ʘ%$dst$src!$nW%h&(tow)iud#'C]&$dst̙$src$n.%-N(toa(it#g%P&$dst$src$n%&"(to-5(iS#(!f['$dst$srcț$n*-(to'(i:#e$ 0X'$dst $src $n ڜ%& B(to M(i  #.(, Q($dstL$srcx$n%&(toÝ(i#(0($dst $srcK$nv%&Z(toe(i#$G)$dst$src$n@%(-`'to(is#_')$dst$src$n%@.ku`'tov)iud#'$J3?*$dst_$src$n%X-֠(to (i#&P*$dstF/src$nr%p- 'to (i#%%7+$dst$src$n;*.!ud'to !(i[#r$ 0n+$dst $src Ƣ$n %- !'to !(i %#' 8,,$dstd/src$n%-'"'to2"(iã# (k֣,$dst$src.$nZ%-"z'to"(i#$ p"-$dst ̤$src $n "%& :#(to E#B(i U#%h-$dst$src$n%&#(to# (i#$ <.$dst h$src $n %- R$'to X$(i #%.$dst2/src$n^%(-$~'to$(i1.2dstЧ2src2n&3? Q /4L}4b5m5W#6$v/$dstϨ$src$n&%@-/F(to/Y(il/"H#'0$dst$src$n%X-0.(to&0A(iT!0H"#$Vr0$dst$srcɪ$n%p-/(to/((i;#$`Y*1$dst$src$nݫ%-0(to&0(i# :1 @6-I1$*1 vj1   .0&"N1@B 11 &0%]1|17m ;> OV( ,< intm2SD  4e$ ;wraXcLe !HT'"H7%Z%'Z%-l11Z'2l5Z%6l 4F  KG # H# I# J# K# ^L)# CM)# N#$ O#( P#* Q#, fR#. |S#0 #T#2 A oU? @X KY # Z# [# \# ]# ^^4# C_4#( `#0 a#4 b#6 c#8 fd#: |e#< #f#>&g' ( #5#D## )##### |#$ @K#5#D## 4#!# "#(##,$#0|%#8&& R~k   XW ]  9 za   _   l {Elf Elf J  # j #  ~#  # #  #  3#  e#  # s #$ % #( #,  #0 o #4  #8 #< D #@  #D  #H $ e#L  e#P e#T ( #X 7) #\  #`  #d = #h  e#l  e#p  e#tb e#x e#x e#x# e#x e#xT e#x e#x x #|V UVt )  # #  #  e# b e# r #  # ( # Z e# P #$  #(E e#,  #0  #p    #  # { # u #  ~# # 9 #L )    #  # # K # 5 # + e#Y v( ?  0 D #O  #2  #9 #  e#$+ e#( e#( #, J@  K   } Up    v  =  6  ^$ GhE W !"#$%| &'(&)*a+W,)-. /07 123:456^789 :Q ;<~ =>?)rTq, 1 i 11 1(`3uAY elf` msrc`Y Ƭtmpau dsto_  ('Y F elf' rdst'Y !buf( tmp)ޭ src:_ <"- (# $m ;3 QV>) = intmD  4Z$ ;lraXzcLZ7%O%'O%-a11O'2a5O%6a(  # 5# D# # # # # # # |#$ @c # 5# D# #   # !# "#( ##, $#0 |%#8 &&  G# ># # N# (#  # V!# "# #o8& G'# V(# >) # *# N+# (,# -#( .#0 >%/ R  k    X ]2    9  z a    _   l   { ElfHElf~ #j # # #  # # 3# Z# # s #$% #( #, #0o #4 #8 #<D #@ #D #H$ Z#L  Z#P Z#T( #X7) #\ #` #d= #h Z#l Z#p Z#tb Z#x Z#x Z#x# Z#x Z#xT Z#x Z#xx #|VVt] # # # Z# b Z#r # #( #Z Z# P #$ #(E Z#, #0 #p##{#u# s# #9#L]0#2# #K # 5#+Z#Y#) @ Q0  D 0# O  # 2 # 9 #  Z#$+ Z#( Z#(  #,=~@  c F } U p      v   =  6   ^     $      G   h E   W ! " # $ % | & ' ( &) * a+ W, )- . / 0 7 1 2 3 :4 5 6 ^7 8 9 : Q ; < ~ = > ?   ) r     T q ,-)d3t elfdIndxd3srcdt ®tmpenfBdst}z v;I)'t  elf'ndx'3dst't 9buf(;tmp)on*İsrcDz  <-. (  !M :Z!m ;3q !d h  O  ?   ) r     T q ,V)Y3 n) scnYBsrcY) adstd/ )') pE scn'dst') mbuf(src7/  =- g) !m ;3TV) PS@  '>int% ,Pm2iD  4{$ ;raXcL{7%p&3%'p%-%.E11p'25p%6r9^*!:^(  # 5# D# "# 8# # # # # |#$ d@ # 5# D # -#  C# ! # "#( ##, $ #0 |% #8 &&z  {# #|"# '}# P~W# IW# ^N#  # PW# IW# ^Y# #-# ' # &, R"# #  R-#  # $ ; R"# # # ~ R-#   #  # ' G t u < v"q ,r# w# x ~   < -{* ,|# # k& R]k  X6 ]  9 za   _   l{hElfElf) #j # ]# #  # # ># {# # s #$% #( #, #0o #4 #8 #<D #@ #D #H$ {#L  {#P {#T( #X7) #\ #` #d= #h {#l {#p {#tb {#x {#x {#x# {#x {#xT {#x {#xx #|V4Vt  # # # {# b {#r # #( #Z {# P #$ #(E {#, #0 #ps ##{#u# # #9#L  ## #K # 5#+{#Y~ ) B*** C* D~ * E  0 D  # O  # 2  # 9 #  {#$+ {#( {#(  #,s )@     } Up    v  =  6  ^$ GhE W !"#$%| &'(&)*a+W,)-. /07 123:456^789 :Q ;<~ =>?)rTq,*<P^L GR<tcls elf? n@R  { *>`HB dst nndx>src !cls{uttmp"dst     r*>P;_dst gndx>src_!cls{ut!tmpٽR"dste #)> $dst C$ndx>c$src%cls{ut&tmpܶ"'dst# ;#)]> u$dst] <$ndx]>\$src]u|%cls^{ut%tmp_R" 'dsti{ #)7uշ$src7 $ndx7>9$dst7uq%buf8 \&cls9{&tmp:Ҹ(Hv'srcG{ *3src 2ndx>jdst!buf Dcls{عtmp(S'src *_@,7.src cndx>dst_Ӻ!buf \cls{tmp4(srce *l 0Shsrcl ndxl>̻dstl !bufm Tclsn{Etmpoe(|src| )*>+-3*,m ;>)****,d h'UWV)+ `JC intmD r*V`A+$Vż$**:I*2+0:P00 *6Id to6d v6VuA *=^ to=d v=Vƽ *D` toDd vDV  +K< toKd vKVh n k:-%A+{ XV+ C intm2SD  4ere !H7%Z+#|+#-#W.#`-#^.# n.#+!BSe.C#+D#.F+Sh-T#+U#,V#:,X#+Y# .[_q1,r#+s#,t##.u#-v# 2.x } U p      v   =  6   ^     $      G   h E   W ! " # $ % | & ' ( &) * a+ W, )- . / 0 7 1 2 3 :4 5 6 ^7 8 9 : Q ; < ~ = > ?   ) r     T q , A !! A1 1$ +#|+#-#W.#`-1#^.1# n.1#+< e.1#+1#.7h-#+#,1#:,1#+1# .1, 1#+ #, ##. 1#- 1# ,.Cs-S.- E-!#,$,% ,&+'7r,@.AS-B+C,B-CU,D.E-dstsrcence-1dst1src1enc1e-dstsrc encec,+Cdst+Csrc+Ienc+eO. vdstvsrc|nence8offu\@svdddvdvd,P,߿hU+,&vdaTwla7,!AA+,Odstvsrc|n-0L{5 dstvsrc|n,PkV dstvsrc|nenceRoffuPsvnV ~dvna vn,uhP,5 ,g .r -vnaº P\ >Im (3@.pa dstvsrc|n- dstvsrc|n  A -# , 8 ; A,G -( \ < -k v.L !m;3w YV/ L NF intm2SD  4ere !H7%Z+#|+#-#W.#`-#^.# n.#+!BSe.C#+D#.F+Sh-T#+U#,V#:,X#+Y# .[_q1,r#+s#,t##.u#-v# 2.x } U p      v   =  6   ^     $      G   h E   W ! " # $ % | & ' ( &) * a+ W, )- . / 0 7 1 2 3 :4 5 6 ^7 8 9 : Q ; < ~ = > ?   ) r     T q , A !! A1 1$ +#|+#-#W.#`-1#^.1# n.1#+< e.1#+1#.7h-#+#,1#:,1#+1# .1, 1#+ #, ##. 1#- 1# ,.Cs-S.- E-!#,$,% ,&+'7r,q.rS-s+t,u-vU,w.x/\dst\src\enc\eW/PdstPsrcPencPef/ddstdsrcd encde1/RCdstRCsrcRIencReO. tdsttsrczn7enceooffuXpsvddvdvd,upP,S+,ulvdaTwlaAA/ , 7dsttsrczn/0 L c3 dsttsrczn,P  R dsttsrczn enceEoffuPsvnR dvn] vn,udP,up01 ,c .n ulvnaº X7,! X >Ii (3/ ,  dsttsrczn@/0 L  dsttsrczn  A - u/ 4 ; A,C -$ X < -g v.H !m;3 [Vg0 P H intm2SD  4ereT'"H%'Z$+%#|+&#-'#W.(#`-)#^.*# n.+#/-ISe.J#+K#E0M+^h-_#+`#,a#:,c#+d# Y0f_{1,|#+}#,~##.#-# 10 } U p      v   =  6   ^     $      G   h E   W ! " # $ % | & ' ( &) * a+ W, )- . / 0 7 1 2 3 :4 5 6 ^7 8 9 : Q ; < ~ = > ?   ) r     T q , A  A& N'+%.+&#|+&#-&#W.&#`-1#^.1# n.1#/<e.1#+1#?0!Dh-"&#+#&#,$1#:,%1#+&1# S0')1,*1#++&#,,&##.-1#-.1# +0/Ps-S.- E-!#,$,% ,&+'Dr,@.AS-B+C,B-CU,D.E -dstsrcence -1dst1src1enc1e -dstsrcence c,+Pdst+Psrc+Venc+e\.P ;<dsthsrcnenceoffu\svddvd<vd,pP,b+,vdaayn! D9.AA* /@\dstsrcn0`|*B dstsrcn,Vc dstsrcnenceoffuP0svnc -dvnn Vvn,uhP,XB ,t . vnaxi KVz 5@0 dstsrcn0< dstsrcn ! A-0 w0 E ;A,T -5 i <-x v.Y m;3 "]Vk1 |)K intm2SD  4ereT'"H%'Z$+%#|+&#-'#W.(#`-)#^.*# n.+#/-ISe.J#+K#E0M+^h-_#+`#,a#:,c#+d# Y0f_{1,|#+}#,~##.#-# 10 } U p      v   =  6   ^     $      G   h E   W ! " # $ % | & ' ( &) * a+ W, )- . / 0 7 1 2 3 :4 5 6 ^7 8 9 : Q ; < ~ = > ?   ) r     T q , A  A& N'+%.+&#|+&#-&#W.&#`-1#^.1# n.1#/<e.1#+1#?0!Dh-"&#+#&#,$1#:,%1#+&1# S0')1,*1#++&#,,&##.-1#-.1# +0/Ps-S.- E-!#,$,% ,&+'Dr,q.rS-s+t,u-vU,w.x /\dst\src\enc\e W/PdstPsrcPencPe f/ddstdsrcdencde 1/RPdstRPsrcRVencRe\.>hdstsrcnenceoffuXsvdndvdvd,upP,`+,ulvdaHa!HynAA* (1@\dstsrcn>1`|@ dstsrcn,6>_ dstjsrcnenceoffuP`svn_ Ddvnj bvn,udP,up> ,p u.{ ulvna!D9.e KVv 5@T1@\ dstsrcn{1`| dstsrcn  A-, 0 A ;A,P -1 e <-t v.U m;3% $ > $ > : ; I$ >   II !I/ & &I  : ;  : ; I8  : ; : ;I8 : ;I : ; ( : ; I : ;  : ; I 8  : ;  : ;I 8  : ;  : ; I : ;.: ; ' : ; I4: ; I4: ; I.? : ; ' I 4  : ; I!.: ; ' I@": ; I#: ; I $: ; I%4: ; I&.? : ;' I@': ;I(.: ; ' @)1RUX Y *1+ U,41 -41.: ;I/4: ;I0.: ; ' I 1.? : ; ' I@24: ; I 34: ; I41RUX Y54164: ;I 74: ;I84: ; I94: ;I? < % $ > $ > : ; I$ >   I : ; : ;I8 : ;I  : ;  ( : ; I : ;  : ; I8  : ; I 8  : ;  : ;  : ;I 8  : ;  : ; I : ;.? : ; ' I@: ; I4: ; I4: ; II!I/ 4: ; I&I4: ;I? < % $ > $ > : ; I$ >   I : ; : ;I8 : ;I  : ;  ( : ; I : ;  : ; I8  : ; I 8  : ;  : ;  : ;I 8  : ;  : ; I.: ; ' @: ; I.: ; ' : ; I4: ; I4: ; I.? : ; ' I@4: ; I1RUX Y 1 U!41"41#41 $I%!I/ &4: ; I'&I% $ > $ > $ >   I&I : ; ( : ; I .? : ; ' I@ : ; I I!I/ 4: ; I4: ; I 4: ;I? < % $ > $ > $ > .? : ; ' I@4: ; II!I/ 4: ; I &I 4: ;I? < % $ > $ > $ > .? : ; ' @: ; I I!I/ 4: ; I &I 4: ;I? < % $ > $ > : ; I$ >   I : ; : ;I8 : ;I  : ;  ( : ; I : ;  : ; I8  : ; I 8  : ;  : ;  : ;I 8  : ;  : ; I : ;.: ; ' I : ; I: ; I.? : ; ' I@: ; I: ; I4: ; I1RUX Y 1 I!!I/ "4: ; I#&I$4: ;I? < % $ > $ > : ; I$ >   I : ; : ;I8 : ;I  : ;  ( : ; I : ;  : ; I8  : ; I 8  : ;  : ;  : ;I 8  : ;  : ; I : ;.? : ; ' I@: ; II!I/ 4: ; I&I4: ;I? < % $ > $ > : ; I$ >   I : ; : ;I8 : ;I  : ;  ( : ; I : ;  : ; I8  : ; I 8  : ;  : ;  : ;I 8  : ;  : ; I : ;.? : ; ' I@: ; I4: ; I4: ; I 4: ; I 4: ; II!I/ 4: ; I &I!4: ;I? < % $ > $ > : ; I$ >   I : ; : ;I8 : ;I  : ;  ( : ; I : ;  : ; I8  : ; I 8  : ;  : ;  : ;I 8  : ;  : ; I.? : ; ' I@: ; II!I/ 4: ; I&I% $ > $ > : ; I$ >   I : ; : ;I8 : ;I  : ;  ( : ; I : ;  : ; I8  : ; I 8  : ;  : ;  : ;I 8  : ;  : ; I : ;.: ; ' I : ; I4: ; I4: ; I.? : ; ' I@: ; I: ; I4: ; I4: ; I 1RUX Y !1" U#41 $41%I&!I/ '4: ; I(&I)4: ;I? < % $ > $ > : ; I$ >   I : ; : ;I8 : ;I  : ;  ( : ; I : ;  : ; I8  : ; I 8  : ;  : ;  : ;I 8  : ;  : ; I.? : ; ' I@: ; I4: ; I I!I/ 4: ; I&I% $ > $ > : ; I$ >   I : ; : ;I8 : ;I  : ;  ( : ; I : ;  : ; I8  : ; I 8  : ;  : ;  : ;I 8  : ;  : ; I : ;.? : ; ' I@: ; I: ; I4: ; II!I/ 4: ; I&I4: ;I? < % $ > $ > $ > .? : ; ' I@: ; I4: ; I4: ; I  I &I I !I/ 4: ; I% $ > $ > : ; I$ >   I : ; : ;I8 : ;I  : ;  ( : ; I : ;  : ; I8  : ; I 8  : ;  : ;  : ;I 8  : ;  : ; I.? : ; ' I@: ; II!I/ 4: ; I&I% $ > $ > : ; I$ >   I : ; : ;I8 : ;I  : ;  ( : ; I : ;  : ; I8  : ; I 8  : ;  : ;  : ;I 8  : ;  : ; I.? : ; ' I@: ; II!I/ 4: ; I&I% $ > $ > : ; I$ >   I : ; : ;I8 : ;I  : ;  ( : ; I : ;  : ; I8  : ; I 8  : ;  : ;  : ;I 8  : ;  : ; I : ;.? : ; ' I@: ; I4: ; II!I/ 4: ; I&I4: ;I? < % $ > $ > : ; I$ >   I : ;  : ; I8 I !I/  : ; : ;I8 : ;I : ; ( : ; I : ;  : ; I 8  : ;  : ;I 8  : ;  : ; I : ;.: ; ' I : ; I: ; I4: ; I.? : ; ' I@: ; I: ; I 4: ; I!4: ; I"1RUX Y #1$ U%41&4: ; I'&I(4: ;I? < % $ > $ > : ; I$ >   I : ; : ;I8 : ;I  : ;  ( : ; I : ;  : ; I8  : ; I 8  : ;  : ;  : ;I 8  : ;  : ; I.? : ; ' I@: ; II!I/ 4: ; I&I% $ > $ > : ; I$ >   I : ; : ;I8 : ;I  : ;  ( : ; I : ;  : ; I8  : ; I 8  : ;  : ;  : ;I 8  : ;  : ; I : ;.? : ; ' I@: ; II!I/ 4: ; I&I4: ;I? < % $ > $ > : ; I$ >   I : ; : ;I8 : ;I  : ;  ( : ; I : ;  : ; I8  : ; I 8  : ;  : ;  : ;I 8  : ;  : ; I : ;.? : ; ' I@: ; I: ; II!I/ 4: ; I&I4: ;I? < % $ > $ > : ; I$ >   I&  : ; : ;I8 : ;I  : ;  ( : ; I : ;  : ; I8  : ; I 8  : ;  : ;  : ;I 8  : ;  : ; I : ;.? : ; ' I 4 : ; I.? : ; ' I@: ; I: ; I4: ; II!I/ 4: ; I!&I"4: ;I? < % $ > $ > : ; I$ >   I : ; : ;I8 : ;I  : ;  ( : ; I : ;  : ; I8  : ; I 8  : ;  : ;  : ;I 8  : ;  : ; I.? : ; ' I@: ; I4: ; I I!I/ 4: ; I&I% $ > $ > : ; I$ >   I : ; : ;I8 : ;I  : ;  ( : ; I : ;  : ; I8  : ; I 8  : ;  : ;  : ;I 8  : ;  : ; I : ;.? : ; ' I@: ; I: ; I4: ; I4: ; I 4: ; I4: ; II!I/ 4: ; I!&I"4: ;I? < % $ > $ > : ; I$ >   I& &I  : ;  : ; I8 I !I/  : ; : ;I8 : ;I : ; ( : ; I : ;  : ; I 8  : ;  : ;I 8  : ;  : ; I : ;.: ; ' I : ; I: ; I4: ; I.? : ; ' I 4  .: ; ' I@!: ; I": ; I#: ; I $4: ; I %4: ; I&4: ; I '4: ; I(.: ;' I@): ;I*: ;I+4: ;I,4: ;I-4: ;I.' I/I04: ; I1 2 34: ;I4.: ;' I 5: ;I6: ;I7.? : ;' I@81RUX Y91: U;41 <41=41> U?1X Y @ A1RUX YB1X YC4: ;I D: ;I E4: ;I F4: ; IG4: ;I? < % $ > $ > $ >  I&I : ;( .? : ; ' I@ : ; I 4: ; I I !I/ 4: ; I4: ;I? < % $ > $ > : ; I$ >   I : ; : ;I8 : ;I  : ;  ( : ; I : ;  : ; I8  : ; I 8  : ;  : ;  : ;I 8  : ;  : ; I : ;.: ; ' I : ; I 4: ; I .: ; ' I@: ; I4: ; I4: ; I 4: ; I !1RUX Y "1# $41% &1X Y '41(.? : ; ' I@)I*!I/ +4: ; I,&I-4: ;I? < % $ > $ > : ; I$ >   I : ; : ;I8 : ;I  : ;  ( : ; I : ;  : ; I8  : ; I 8  : ;  : ;  : ;I 8  : ;  : ; I.? : ; ' I@: ; I4: ; II!I/ 4: ; I&I% $ > $ > : ; I$ >   I : ; : ;I8 : ;I  : ;  ( : ; I : ;  : ; I8  : ; I 8  : ;  : ;  : ;I 8  : ;  : ; I : ;.: ; ' I : ; I: ; I4: ; I.? : ; ' I@: ; I: ; I : ; I1RUX Y 1! U"41#1X Y $ %4: ; I&I'!I/ (4: ; I)&I*4: ;I? < +4: ; I?  % $ > $ > : ; I$ >   I : ;  : ; I8 I !I/  : ; : ;I8 : ;I : ; ( : ; I : ;  : ; I 8  : ;  : ;I 8  : ;  : ; I : ;.? : ; ' I@: ; I: ; I 4: ; I&I4: ;I? < % $ > $ > : ; I$ >   I : ; : ;I8 : ;I  : ;  ( : ; I : ;  : ; I8  : ; I 8  : ;  : ;  : ;I 8  : ;  : ; I : ;.? : ; ' I@: ; I: ; I I!I/ 4: ; I&I4: ;I? < % $ > $ > : ; I$ >   I : ; : ;I8 : ;I  : ;  ( : ; I : ;  : ; I8  : ; I 8  : ;  : ;  : ;I 8  : ;  : ; I : ;.? : ; ' I@: ; II!I/ 4: ; I&I4: ;I? < % $ > $ > : ; I$ >   I : ;  : ; I8 I !I/  : ; : ;I8 : ;I : ; ( : ; I : ;  : ; I 8  : ;  : ;I 8  : ;  : ; I : ;.? : ; ' I 4 : ; I.: ; ' I@: ; I4: ; I.? : ; ' I@: ; I 4: ; I!&I"4: ;I? < % $ > $ > : ; I$ >   I : ;  : ; I8 I !I/  : ; : ;I8 : ;I : ; ( : ; I : ;  : ; I 8  : ;  : ;I 8  : ;  : ; I : ;.? : ; ' I 4 : ; I.: ; ' I@: ; I: ; I4: ; I 4: ; I 4: ; I!.? : ; ' I@": ; I #: ; I $4: ; I%&I&4: ;I? < % $ > : ; I$ > $ >   I&  : ;  : ; I8 I !I/  : ; : ;I8 : ;I : ; : ;I : ; (  : ; : ;  : ; I' II&I.? : ; ' I 4 : ; I.: ; ' : ; I.: ; ' I@: ; I !4: ; I"4: ; I#4: ; I $ U%4: ; I&4: ; I '4: ; I(.? : ;' I@): ;I*: ;I+4: ;I,4: ;I-4: ;I..: ;' I@/4: ;I 04: ;I 1: ;I 2: ;I 3.1@415164: ; I74: ;I84: ;I? < % $ > $ > : ; I$ >   I : ;  : ; I8 I !I/  : ; : ;I8 : ;I : ; ( : ; I : ;  : ; I 8  : ;  : ;I 8  : ;  : ; I : ;.: ; ' I : ; I4: ; I4: ; I .? : ; ' I@: ; I &I!.: ; ' I@": ; I#4: ; I $.: ;' I %: ;I& : ; I8 ' ( : ;) : ;I*4: ;I+4: ;I,.? : ;' I@-: ;I.1X Y/101RUX Y1 U241341441 5 61RUX Y74: ; I84: ;I? < 94: ; I?  % $ > $ > $ > I!I/ 4: ; I&I 4: ; I?  % $ > $ > : ; I$ >   I : ; : ;I8 : ;I  : ;  ( : ; I : ;  : ; I8  : ; I 8  : ;  : ;  : ;I 8  : ;  : ; I : ;.? : ; ' I 4 : ; I.? : ; ' I@: ; I4: ; I.: ; ' I : ; I4: ; I4: ; I : ; I!4: ; I "1RUX Y #1$ U%41&41'1X Y (I)!I/ *4: ; I+&I,4: ;I? < % $ > $ > : ; I$ >   I&I  : ;  : ;I8 : ; : ; I8 I!I/ .? : ; ' I 4 : ; I.? : ; ' @: ; I 1RUX Y 14: ; I4: ; I? < % $ > $ > : ; I$ >   I& &I  : ; : ;I8 : ;I  : ; ( : ; I : ;  : ; I8  : ; I 8  : ;  : ;  : ;I 8  : ;  : ; I.: ; ' I : ; I: ; I4: ; I.: ; ' .? : ; ' I 4 .: ; ' I@ : ; I!4: ; I "4: ; I#4: ; I$4: ; I%1RUX Y &1' U(41) *1RUX Y +I,!I/ -.? : ; ' I@.: ; I/4: ; I 01X Y 14: ; I24: ;I? < % $ > $ > : ; I$ >   I : ;  : ; I8 I !I/  : ; : ;I8 : ;I : ; ( : ; I : ;  : ; I 8  : ;  : ;I 8  : ;  : ; I : ;.: ; ' I : ; I: ; I.: ; ' 4: ; I4: ; I.? : ; ' I@ : ; I!4: ; I"4: ; I#1X Y $1% &41'41(1RUX Y )1*1RUX Y +1X Y ,4: ; I-&I.4: ;I? < % $ > $ > : ; I$ >   I : ; : ;I8 : ;I  : ;  ( : ; I : ;  : ; I8  : ; I 8  : ;  : ;  : ;I 8  : ;  : ; I : ;.? : ; ' I@: ; I4: ; I4: ; II!I/ 4: ; I&I4: ;I? < % $ > $ > : ; I$ >   I : ; : ;I8 : ;I  : ;  ( : ; I : ;  : ; I8  : ; I 8  : ;  : ;  : ;I 8  : ;  : ; I : ;.? : ; ' I@: ; I: ; I4: ; I 4: ; I4: ; I I!I/ 4: ; I &I!4: ;I? < % $ > $ > : ; I$ >   I : ;  : ; I8 I !I/  : ; : ;I8 : ;I : ; ( : ; I : ;  : ; I 8  : ;  : ;I 8  : ;  : ; I : ;.? : ; ' I@: ; I: ; I4: ; I4: ; I : ; I : ; I 4: ; I!4: ; I"&I#4: ;I? < % $ > : ; I$ > $ >   I& I !I/  : ;  : ; I8  : ; : ;I8 : ;I : ; : ;I : ; ( : ; I : ;  : ; I 8  : ;  : ;I 8  : ;  : ; I : ;' II&I.? : ; ' I 4  : ; I!.: ; ' ": ; I#.: ;' I@$: ;I% U&4: ;I'4: ;I(4: ;I)4: ;I * +.? : ;' I@,: ;I-4: ;I.4: ;I /: ;I 0: ;I 1.: ; ' I@2: ; I3.1@415164: ; I74: ;I? < % $ > $ > : ; I$ >   I&  : ;  : ; I8 I !I/  : ; : ;I8 : ;I : ; ( : ; I : ;  : ; I 8  : ;  : ;I 8  : ;  : ; I : ;.? : ; ' I 4 : ; I.? : ; ' I@: ; I4: ; I  4: ; I!4: ; I "4: ; I#&I$4: ;I? < % $ > $ > : ; I$ >   I : ; : ;I8 : ;I  : ;  ( : ; I : ;  : ; I8  : ; I 8  : ;  : ;  : ;I 8  : ;  : ; I : ;.? : ; ' I@: ; I4: ; I U4: ; I  I!I/ 4: ; I &I!4: ;I? < % $ > $ > : ; I$ >   I : ; : ;I8 : ;I  : ;  ( : ; I : ;  : ; I8  : ; I 8  : ;  : ;  : ;I 8  : ;  : ; I : ;.? : ; ' I@: ; I U4: ; I4: ; I  I!I/ 4: ; I &I!4: ;I? < % $ > : ; I$ > $ >   I : ; : ;I8 : ;I  : ; : ;I  : ; ( : ; I : ;  : ; I8  : ; I 8  : ;  : ;  : ;I 8  : ;  : ; I : ;.: ; ' I@: ; I: ; I : ; I4: ; I4: ; I&I .? : ; ' I@!4: ; I " U#.? : ;' I@$: ;I%4: ;I &4: ;I'4: ;I( )I*!I/ +4: ; I,4: ;I? < % $ > $ > $ > .? : ; ' I@: ; I  I&I .? : ; ' @ : ; I : ; I I !I/ 4: ; I% $ > $ > : ; I$ >  : ; : ;I8 : ;I  : ; ( I !I/  : ;  : ; I8 .: ; ' : ; I I&I.: ; ' I@: ; I4: ; I  U4: ; I4: ; I4: ; I U1RUX Y 1.? : ; ' I@: ; I 4: ; I 4: ; I!4: ;I? < % $ > $ > : ; I$ >  : ; : ;I8 : ;I  : ; ( I !I/  : ;  : ; I8 .: ; ' : ; I I&I.: ; ' I@: ; I4: ; I  U4: ; I4: ; I4: ; I 4: ; I U1RUX Y 1.? : ; ' I@: ; I 4: ; I!4: ;I? < % $ > $ > : ; I$ >  : ; : ;I8 : ;I  : ; ( I !I/ .: ; ' : ; I I&I.: ; ' I@: ; I4: ; I  U4: ; I4: ; I4: ; I U1RUX Y 1.? : ; ' I@: ; I 4: ; I 4: ; I4: ;I? < % $ > $ > : ; I$ >  : ; : ;I8 : ;I  : ; ( I !I/ .: ; ' : ; I I&I.: ; ' I@: ; I4: ; I  U4: ; I4: ; I4: ; I 4: ; I U1RUX Y 1.? : ; ' I@: ; I 4: ; I4: ;I? <  /usr/include/bits/usr/include/usr/include/sys/usr/lib/gcc/i486-linux-gnu/4.4.3/include.begin.cstring3.hstdint.htypes.htypes.htime.hstddef.har.helf.hlibelf.hprivate.h`+#+M; v1;/I=I{[y;<=1b~>:==~JBz;=0glg fw< fL t't=;;g>I;@ft_t/uRX<8'<"I~X=uW/jynX/X-}X/tTtz+t/Xztstjt /usr/include/usr/include/bits/usr/include/sys/usr/lib/gcc/i486-linux-gnu/4.4.3/include.cntl.cstdint.htypes.htypes.htime.hstddef.helf.hlibelf.hprivate.h5jlw ] fh.;Ycf.yB /usr/include/usr/include/bits/usr/include/sys/usr/lib/gcc/i486-linux-gnu/4.4.3/include.end.cstdint.htypes.htypes.htime.hstddef.helf.hlibelf.hprivate.h6!K( #+9?KaQ f.<yJI=KKx JNh%Z˭MJ?`uuI ./usr/includeerrmsg.cprivate.hnl_types.h84P\YsXzg-/f!E- .errno.cprivate.h9ׄhC, .fill.cprivate.h9׭ /usr/include/usr/include/bits/usr/include/sys/usr/lib/gcc/i486-linux-gnu/4.4.3/include.flag.cstdint.htypes.htypes.htime.hstddef.helf.hlibelf.hprivate.h:&#+irJ[[ nq!-giJ[[eh!-g`J[[\$_!!-gWJ[[(S-V*!-gNJ[[1J6M3!-gEJ[[:A?D<  /usr/include/usr/include/bits/usr/include/sys/usr/lib/gcc/i486-linux-gnu/4.4.3/include.getarhdr.cstdint.htypes.htypes.htime.hstddef.helf.hlibelf.hprivate.h=!-Ny,R /usr/include/usr/include/bits/usr/include/sys/usr/lib/gcc/i486-linux-gnu/4.4.3/include.getarsym.cstdint.htypes.htypes.htime.hstddef.helf.hlibelf.hprivate.h@=xgv4O.k m)z.. /usr/include/usr/include/bits/usr/include/sys/usr/lib/gcc/i486-linux-gnu/4.4.3/include.getident.cstdint.htypes.htypes.htime.hstddef.helf.hlibelf.hprivate.hpB?MOgYDz uYr   /usr/include/usr/include/bits/usr/include/sys/usr/lib/gcc/i486-linux-gnu/4.4.3/include.getscn.cstdint.htypes.htypes.htime.hstddef.helf.hlibelf.hprivate.hCf?Niu1_Ž91st s< .uX  919 hash.cCu;{ /usr/include/usr/include/bits/usr/include/sys/usr/lib/gcc/i486-linux-gnu/4.4.3/include.kind.cstdint.htypes.htypes.htime.hstddef.helf.hlibelf.hprivate.hC!-.=N= /usr/include/usr/include/bits/usr/include/sys/usr/lib/gcc/i486-linux-gnu/4.4.3/include.ndxscn.cstdint.htypes.htypes.htime.hstddef.helf.hlibelf.hprivate.hD!-.=N= /usr/include/usr/include/bits/usr/include/sys/usr/lib/gcc/i486-linux-gnu/4.4.3/include.newdata.cstdint.htypes.htypes.htime.hstddef.helf.hlibelf.hprivate.h D#+M@hs;79@e=YuA@kk<.ztt| /usr/include/usr/include/bits/usr/include/sys/usr/lib/gcc/i486-linux-gnu/4.4.3/include.newscn.cstdint.htypes.htypes.htime.hstddef.helf.hlibelf.hprivate.hE .w. wfP?j^kulz.B02R|I=uv4Z<&<Z.N%z ktvX3fjZx.KJp<Xp.z Xl=%,;/gyJX=!<\$ny.=-/ .utY"jXuX 8 f˴UKJz<^y <u< #:>z\< .._<$9_< <<+?g>:>,>guK kYh<.h<<r!!!pX X:7{,> f9[z<r<= >wY#:>z\< .._<$9_f <<+?gu" lYh<.h<<r#pX X:7{,> fytuzXu#yX~.x<CgZNw=IY/>vXgt~<|X|$J$~{X~>X~. fs< fh L{X..gC{S0z< <z=q=u>u;gxvfȯ=-1x>G>1[ ;YN2N<2XgX=;=y8KKKK*@i:KKYIwhggvf f;/X>-s>g=:g~' 0z< <z=q=u>;>gxvfȯ=-1x>G>1[ ;YN2N<2XgX=;=y8KKKK*@i:KKYIwhggvf f;/X>-s>g=:g&S/ .version.cprivate.hi.@!Yܷh/g /usr/include/usr/include/bits/usr/include/sys/usr/lib/gcc/i486-linux-gnu/4.4.3/include.checksum.cstdint.htypes.htypes.htime.hstddef.helf.hlibelf.hprivate.h`j7A;g;g=D<X.qgJMX%ut5`d91%X=Kg xfg=Kg xfgpet=Kg xfgp /usr/include/usr/include/bits/usr/include/sys/usr/lib/gcc/i486-linux-gnu/4.4.3/include.getaroff.cstdint.htypes.htypes.htime.hstddef.helf.hlibelf.hprivate.hl~>;; <yfC/W=9?U?lulBve%[<%.dt p+g v<L^Ju-=~..K= =ga)kh..K;vprv}tvHuA8x~rvfakD.u= ft.d tut= < f@]ur."~f~ffdJ.c*==~tJ~f;uKev-gl>d>unf ;==:h=jn< t< ft. <=s< uq~f~fKXoyt"J& /sg/;~XPYKsK/t~.~YgKJ~uggKjXM9KL,KgZ;=u;=g%*<@/.1RMg^-/jsift .uurt ;>;>;>;=hץ_ /usr/include/usr/include/bits/usr/include/sys/usr/lib/gcc/i486-linux-gnu/4.4.3/include.gelfshdr.cstdint.htypes.htypes.htime.hstddef.helf.hlibelf.hprivate.hgelf.h  =fXdkJYg xfut=ggJ?P ^f_uffYgggntp<.z< /usr/include/usr/include/bits/usr/include/sys/usr/lib/gcc/i486-linux-gnu/4.4.3/include.gelftrans.cstdint.htypes.htypes.htime.hstddef.helf.hlibelf.hprivate.hgelf.hP;&z.4z.l5i(NjuZgl.w.1 .)52J.@i Xu;/-/Y v;=uuv '(.@i_xKy<5x/zX Xs< X*.@iXqq/]s"').@i Xr֓ u< .rf/OuXm<X ]M\;/su/ tj t b-/2\;1:/u>V>l ti (l.-/2( ]M[ tk t c-/2][KuLuq=gl tg ( _-/2({ swap64.c`t=t=X@X@.=L>:ZV>.=Z>:ZV>.=L>:ZV>.=Z>:ZV>  /usr/include/usr/lib/gcc/i486-linux-gnu/4.4.3/include.verdef.hverneed.hstdint.hstddef.helf.hext_types.hverdef_32_tof.cprivate.h  <v. fiuIuk~JJ fu=-uI=%(- <~-=;YJ~.fdf h<=;=~<J~Xg-=;K<~. Ȱf hgIkyfu=-uI=";=;=5.c.G/;t=;g=;g <v. fiYIk~J f>:K="(- <~J=;=W=J~.fdf h:K="(- <~J=;=W=J~.fdf hu>zVzuVuV u 8 V8 n un V . uP. u Puu>u>SSXuXoo. uRR]6R6>REXRzRRRR'PPP=PWP/;PVW.V/lVpWPWV8 n V V . Vud>udzudud ud8 n ud . udWWzWWtt(uWuWu(W%%u (u [VVVxVVtt$uP$P01t15t5!u0QQuV!uRRVWV W VV Vttu!!HVHbubjVjquqV t tuP t tutt}u''}R''}Q''FVFJuJ_V_cucyVy}uttuRQVuVuVutt}u''}R''}Q''FVFJuJ_V_cucyVy}uttuRQVuVuVutt}u''}R''}Q''FVFJuJ_V_cucyVy}uttuRQVuVuVutt.u&R&.uttAu""RuR9u9CRCVuVlRlouoR u Ru.R.Au""Au P6VluVV PP!WoxWWWttuRttuuFRFNu NfRfu Ru 2FPNVPfmPvP.6Pttu$$<V<CuCV$$?W?Cu CWttuIWIKuKdWdfuf|W|~u~WuHVHKu KcVcfu f{V{~u ~Vu .FPKVPabPyzPPtt8u  8RP8P 6Vttu  Rttu  Rttu  VuVuVttu//NPNhuhxPx~u~Pu//RdWhW-`VhVttuuRZWZ_R_WttuRuRu%WWtt,u  P!u!*P*,uttu##4V48u8LVLPuPV#P#.R.1P1FRFLPP`R`~PPRPRu PttXuXR$P$,u ,,P.;P;Au ANPNVu VVPttu!!)V)0u0V__u bdP!,W30WIWttu$$9W9=u=W$$6V6=u =Vttu!!#W#0u0W)u)tWtuWu##0u 0FFu WuVV)V)MM_u_Vu#0QQPQPQnQprPtQQ#)VVVVttu0P@PPRss#u#--u#u#EEWuWRPP#(P8>WsW =V@V8@QsQ3Q>QQtt$uPPPRR RWuW u $WVV $V01t13t3su0\P0\R\SVVpVssV0TWTVuVqWqsussW0u .._u _sP#4RAIRsRLVQcsQPQ Q#.QT_QhsQttpupubu buupu uduud( ud 9 udO ud+ud%ud;ud)pudP,.PDEPppPP P : P P&+PPchPP6;P$)PW V P P P& - P ;P)KP0WWhpPgwPP N VR g V4;VP)KV VPhpVW 9 W 6W )WWGUWWsW W H W ;WnW W)KWW0DWThW WCWW7?WhpWVrV V V $V/4VnVDVThVVCVV7?V - P Pu`uu` u` H u` ;u`nu` u`)Ku`Du`Thu`u` u`Cu`u`7?u`hpu`P!RP P PDPPPQ!1R R& ) R R/;R RRQDRQRQQQThQQSPVvVVw Q]cVPP\  V + VgnV`cRV;CVRU]V WO W;iWVW%W]hWWbsW W WH W;nW+WKVWWDW W;CWW)7W?GWU]WVE#V7rV V4 9 V VH \ V $V/4V;gVnV+V V%VCV)GVMUVchV R;CRu`buu` u` u`H u`;nu`+u`KVu`u`D u`;Cu`u`)7u`?Gu`U]u`  P PH s P P P;HPbnPPPP P),PWWQ`nQDkQPpqtqstskupPPpRRpVuVBuBkVVV&V)?VaWaPWPW'W)@WRRXhRRRR RBPR&(PUhRRRR)RQ;GQQpqtqstsup!u!9Q9upu PW}WWW<R"VVVV$P3?P?HVPs}PPttu;;YuYqQqu;;u !POWWWWtR_VVV;V;\PkwPwV%PPPttu((iVikukVuV&@PHOPO\PdgPkPPttu+Pv~P'PhqPP}RRttuPuPuPutt>uPu,P,6u6>P>>u@AtACtCu@XXdPdnun|P|uPutt*u  Pu"P"*u R*RttVuP'u'7P7VuVu7APKTP`atactcu`ww}P}uPu`wwuPPttduRu7R7duQu @Q@du  duJTP^bPpqtqutuupRuRupQu Qu p uPPttyu##@V@GuGyV118P8VV^P^hu hpPpyu ttuttuttu<V<@u@TVTXuXlVlpupVu,,/P/@u @XX^P^|u |ttuttutt8u8R@AtAEtExu@WWxRttu"P"(V(4P4<VCTPTXVX^P^hVhnPnVTRXqRvRRQQttRu P uRPRRuRRRRu `atahthtuttuttu&P&VV&R&[QQQfQQGGuu((8u8RRuWW (W08WJRWnpPwWWRpWttju99?P?RuRjPjju99jRjju pqtqstsuttuttZuOuOZVPVZu XW`atactcu`zzu`ssPu `gguttuuPu W !t!#t#u ::uuu 33xPxu ''uttuWuQPPPttuuPu WW !t!#t#fu 88bWbfu 88fQ 33>PZ]P>]PpqtqstsupupPu pWWttuuPu W !t!#t#u ::uuu 33xPxu ''uttuuPu Wtt?u5u5?8P8?u ?u@AtACtCu@YYu@RRPu @NNWttuuPu uttZuOuOZVPVZu XW`atactcu`zzu`ssPu `gguttuuPu W !t!#t#u ::uuu 33xPxu ''uttuuPu Wtt?u5u5?8P8?u ?u@AtACtCu@WWu@\\u @GGuttmuQmumRmuQcPpqtqstsupupu pwwuP  t  t u   2 Q2 u   R   u" 2 Q P t t u  R u  u   u P V  t  t u " " u  * * u   u% P;  R' @ Q t t u  R u  u   u P Vttu""u**u   u%P;]R'@Qtt:u%Q%:u*u *::u6P1V@AtACtCu@cc{QQ@xxu @ccunPpW !t!#t#u ??Qu HHu  ??uFPHVttu QQu uPkRVttuVuQuP !t!#t#u 99RQRu 99R //uBRQ?Ptt>u8V8>u>Q>u7P@AtACtCu@YYrQru@YYR@OOubrQ_PttuQu|u |uPRVttuQQu uPWttLuQLu<u <LLuHP?RCVPQtQStS8uPssQ(8QP(u (8Pss8u~2PRV@AtACtC)u@]]#V#)u@]])R@OO)u01t13t3Eu0UU8u8E0JJER0??EuPQtQStS9uPmm3V39uPmm9RP__9u@AtACtCO u@eeB uB O @ZZO R@OOO uP Q tQ S tS !uP | | P u P u P u !P !!uP | | !u P | | Q u Q u Q !uP |  | R u R u R !uz V !V R R!!R !!!t!!#!t#!x"u !D!PD!L!VL!c!Pc!"V!"h"Vh"n"Pn"x"V !!R!"R "H"RX"x"R !o!o! "u "!"!"h"uh"x" !!! "u "H"H"X"u X"x"!!P!!P!!W!!P!"WH"N"PN"X"W!!P""P""t""t""u""t""t""u""t""t"#u""""P"#u""""R"#u """#V##u##t##t#,#u#*#P#*#R0#1#t1#8#t8#$u0#S#S#$W$$u0#`#`#$u $$0#S#S#$u^#$Vd#$W`#g#Qd$$Q$$t$$t$7&u$$$%W,&5&W5&7&u$$$,&u ,&7&$$$7&u$4&V%5&W$%Q#&7&Q@&A&tA&H&tH&'u@&c&c&'W''u@&p&p&'u ''@&c&c&'un&'Vt&'Wp&w&Qt''Q''t''t'G)u'''(W<)E)WE)G)u'((<)u <)G)'''G)u'D)V(E)W((Q3)G)QttuRtt uRu R  uQu Q  u VuVu Vttu!PR;RANRkkuu77u tt0 uVuVu<V<BuBVYuY( V( W V  u 0 VW/3Wh{WW <WBoWWWYW W 0 W -PQh{QQ1<QBkQQtQQQYlQsQ Q% 0 Q8;PPWWW& W WQQyQQQ( : Q: V QPP Pttvu!P!/u/6P6>u>KPKvu),P6;PrvPttuVuVuVrurVuV  ru ru u WuWuWVVrVVttNuttu%P%2V5;P;VP8eVePPMRGOR%3WFVWVPW8GP\eW%5QOQRR8;Q@GQ\eR%5Q<]Q*2VP(0PekPVP%4PBvVVV%5QQPR;@Q\eQRRBNRRR*3WsWQBTQxzQzWQW(0PP@BPttuppu..TVTWu WVu V(kRRRR*,PWWWnPQQPttu((;P;u P uPu((OVOdu dVQOVOu VB^V;APIRW^W W PW2P2DWPWV^WdgQ0OQOWVdVOVILP[PPP9OPZ^PPHP^PPIVRBR Q9BQIVQQ,QIVRgRQQIVQQQttu((@P@uP u Pu((SWScu cWPWP[W[u WHWQ]PPP QP&Q&(P(;Q;[PjnPPPPQWZVcfQC[Q[VWcW[WBPVZV V>PVVttSu'';P;PuPRPRTuTePeouoxPxSu''CRCPu PRu Ru 8R8@u @SR''SQCLWxPWPWPW"-P-5W@FPtt:u((rVryuy:V((uWuyu y:WlyRRRlyRR:R@AtACtCruttuVuVWu WRRPttBuPQtQStSuPttVuVPttWu Wttuttu88\V\cucV88_W_cu cW:RRRPPPPttFuBWBFuFQP:=P=PPQtQStSuPlluPeePu P``xWWttuWuQPPPtt;u  /u/;2P2;u W/7W@AtACtCu@YYu@RRPu @NNWttuuPu uttZuOuOZVPVZu XW`atactcu`zzu`ssPu `gguttuuPu W !t!#t#u ::uuu 33xPxu ''uttuuPu Wtt?u5u5?8P8?u ?u@AtACtCu@llrPruPuPuPu@llu @ll}Q}uQuQu@l l}R}uRuRujVV}RR Rtthu4P4<V<SPS VXVX^P^hVRR8RHhR__uXuXhu 88Hu HhPPWP W8>P>HWPPpqtqstsuttuttbuRuHRHJuJ`R`buQu HQHJu J`Q`bu VubV WubWpqtqutu"upRuR u  R "upQu Q u  Q "u pVu"Vp Wu"W01t13t3u0UUpWpu0UUsQsu 0@@umW[Vtt uW uV W u  uE PL X Pi P t t  u  P  P  u   u      u V W # Q  Q ! t! # t# u I I u  B B \ R\ u 0 0 uY h P PM W t t u  W W u  u   u V W C Q Q  t  t f u % % @ W@ f u % % C QC f u   f u= a W+ ` Vp q tq s ts up  u p  R u p  u P P Wttfu%%@W@fu%%CQCfu fu=aW+`Vpqtqstsupupu p}}uWVttubQbuQWu uttuWu u uV(WEQQ !t!#t#u FFu --uS[WH`QttuuWu uQtt[u&&MuM[++Mu M[  [u)VW+UV`atactcu`u`mmuWQtt;u-u-;  -u -;;u 6W 5V@AtACtCu@eeWu@eeQu @PPu}WkVttmu\u\mVmu mu+VPWhPpqtqstsupupu p}}uWVttkuZuZkku !WQpqtqstsupWupQu puWVttu!W!u#V#Wu u6PPPttSuPEHPHSuEu ESSuMVWcQ<SQ`atactcu`u`Ru `ppuPPWtt1u>W%/W/1u11%u %11u*.V>W,Q1Q@AtACtCu@eeWu@eeQu @PPu}WkVtt<u.u.<R<u <uP<P7W@AtACtCu@eeWu@eeQu @PPu}WkVtt uu u   uWVttuBBQuQBBWu BButtZu66CWCZuCCLu LZ  ZuATVhUWCQ:ZQ`atactcu`u`mmuWQtt5!u  )!u)!5!  3!W3!5!u   5!u + Q@!A!tA!C!tC!!u@!f!f!!u!!@!k!k!!u !!@!M!M!!ui!!Wk!!V!!t!!t!"u!!! "u ""!!!"u!!W!!Q "!"t!"#"t#"{"u "F"F"m"um"{" "K"K"m"u m"{" "-"-"{"uI"v"WK"u"V""t""t""u""""W""u""""Q""u """"u""W""V""t""t"#u"&#&##u##"##6#V6##u "###u6#k#V*#9#P##P##t##t# $u####u# $####u # $### $u#$W#$V$$t$$t$$u$?$?$$u$$$8$8$$uK$a$WA$U$Q$$t$$t$$u$$$$P$$u$$$$R$$u $$$$V$$u%%t%%t%%u%%P%%R %!%t!%#%t#%&u %F%F%l&Wl&&u %S%S%x&u x&& %0%0%&uQ%&V\%&WS%_%Qo&&Q&&t&&t&'u&&&'u''&&&'u ''&&&'u&'V&'W&&Q''Q((t((t(f)u(&(&(L)WL)f)u(3(3(X)u X)f)(((f)u1(`)V<(a)W3(?(QO)f)Qp)q)tq)s)ts)*up)))*u**p)))*u **p)})})*u)*V)*W))Q**Qttu$$&W&3u3.W.AuAKWKu$$,V,3u 3V$&PMnPxPP4PAPttuWuWVu VP>PHP+6PCPttu$$&V&3u3pVpuVuVVu $$/W/3u3W$&PMPPPP yP&3QQQ QP~PttIuW%u%hWhu+W+IuFFIu V%u%IVP9PPPPP+8P%QwQQ+8QPPttNuNRCPCNu NPu Pu Pu =P=Nu PQtQStS%uPllRuRuR%uPllPu Pu P"u "Pu P%PttuPPPPPPPJJuuuu &6QQrQQQQttuEEuEEu EEgVgiuiVuVuCXP`ePiPPttu77u77u 77RVRYuYuVuuVuVuttuuu +V+-u-NVNPuPVuP$)P-?PPPttuuu 'V')u)LVLNuNVuttugugppugu gppu 4V46u6eVgVgutput P6KPPVP\cPttuuuu u QVQXuXVudud PIKPXwP|PPttu++uu++u u _V_auaVV.utut)TPa{PPPtt uu uu  u nVnpupV V"ut utcPpPPPttGuPQtQStSuttutt9u@AtACtCu@VVQuttuQutt^u^Qu`atactcu`vvQuttu7PPPBRR44uuu PPP{-PFZPQ[PPnzW WWQQQQQVvPP[Ptt utt,u01t13t3Ku0gPP P0zRR0dduKu0u KQPP6<P$P=QPPQP PNrQ0@Q#Q 6Q3TVrPP9P PPQtQStSlupqtqstsutt^u>PknP%.PNRk|R%FR44%u%55^uKKku kvv%u %FF^u >PvPCP;V,sVvVdQQ`atactc|uttuttVuPP&PRR>Ru--Vuu u >>Vu gPPPSP=P`atactc|uttuttu7PPPBRR44uuu PPP{-PFZPQ[PPnzW WWQQQQQVvPP[Ptt utt,u01t13t3Ku0gPP P0zRR0dduKu0u KQPP6<P$P=QPPQP PNrQ0@Q#Q 6Q3TVrPP9P PPQtQStSlupqtqstsutt^u>PknP%.PNRk|R%FR44%u%55^uKKku kvv%u %FF^u >PvPCP;V,sVvVdQQ`atactc|uttuttVuPP&PRR>Ru--Vuu u >>Vu gPPPSP=P`atactc|uttu0~8P0~8PU . /U . //BB'?hrPX'?hrPX'?hrPXrr77zz EV;B582 EV;B582Phhp7?C DKn/, /    * Phhp7?C DKn/, /    *  & ?j7?CDn 7h!Dx ?h)7;C%D K+;b H @ z x ?h)7;C%D K+;b H @ z ;C%  ?U)7D +   h )7X8=)5$\v'J%PT(I%PT(Iqq@x{~@]ce@x{~8;>@x{~8;>Wcil " "-39k C=7:=] ?EK{+/5p%(cfADk;/58svK N {E Wh 0 R{Wh 0 R{ 0 BR; 0 lh{ Rh{ R CC I 4B( 4B(z 9B"(, =CEp28:@x{~8;>Y      P V b Y ` ) [ a d )[adU&PVY069iek_ ]ci03;69HNQi7:1i ^>OUXf!!!!!"""F"p"v"y"""""0#3###B##6#@##$$ $M$$$$N%{&&&&'''.([)a)d))***~Np`0GP0EPHJ4ixWXx@K>nrFd6K+N+xX@DT=4=F^x(Hk@FXk0Ih(-&Ax(]>V hxP}]P_wm 4ixWXx@K>nrFd6K+N+xX@DT=4=F^x(Hk@FXk0Ih(-&Ax(]>V hxP}]P_wm .symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rel.dyn.rel.plt.init.text.fini.rodata.eh_frame.ctors.dtors.jcr.data.rel.ro.dynamic.got.got.plt.data.bss.comment.debug_aranges.debug_pubnames.debug_info.debug_abbrev.debug_line.debug_frame.debug_str.debug_loc.debug_ranges$2.o8 X X @XX=Ho@UoPd ((m $$ v&&0q&&|**8x x+x+=-=-=-=-0 >.?/,?/A1P PCP30P3#s3: Fgݮ^ M*[x"70}1B&M}[L% ̴X X($ & & *  x+====>??APC !" ==(=5* KPCZTCh + t=x+= `+ @, 6$ XC=0 S)!(3>HR]fmt}M pO PC Z)f7 @c? @a +5@`j JU`mzq 0s uZ @v_ vZ w_ `wF wK xF +PxK 9xZ Fy_ S`yZ `y_ m zZ |z_ zZ @{_ {Z |_ `|Z |_  } } P~ ~ R ( 7R F Up d  s  ~  ~    p   0    !0 /  = AHX TH ^ c rw   w @   F %@K 3F AK O0Z ^_ mZ |P_ Z _ pZ о_ @BX  f  s  A #f 0` >f L`[ [ iJ xz U [ Pz [ 0f  `[  `f  s (P 6A E0f R `0f n[ } J Pz U 0[ z [ pf  [   TH   # f 2 g A f P `g _ j u   P    P  ^ P   P    ^  ? A" =/ 9 F  ] W+ t >}   ` @=A :} ` 5( 0    @ # 3 PH ? mV K  b `I n Pq8 |    3 `G 2  I  @ , ? ` N 9 X j PR u  { -     0  \C 0 K ` ! 6 )  7 q8 E s T ^ d t +0 ;} C ,' . ;}  mV  p 9  2 !PI 0lN ?@oy L XdCb mpS y2 @  PlN P m *t ж: u +0 9`CDp+ ReC nFq yl* `^ P Q prr 0# ` pB <} p+ IX E @N $u 2^ Bs P:} ]  t       PCp ` 3? ? EaC8 j H, s@uZ `v  D <} kV Y D n hCo+ )i r ^ 00 ?0BRcu@ 8 =.  N G PK  PC D } E $6"R? ^q` &  p 0 o+ crtstuff.c__CTOR_LIST____DTOR_LIST____JCR_LIST____do_global_dtors_auxcompleted.7021dtor_idx.7023frame_dummy__CTOR_END____FRAME_END____JCR_END____do_global_ctors_auxbegin.cgetnum_elf_check_typefmagcntl.cend.c_elf_freeerrmsg.c_libelf_cat_messagesdomainerrno.cfill.cflag.cgetarhdr.cgetarsym.cgetbase.cgetdata.cgetident.cgetscn.chash.ckind.cndxscn.cnewdata.cnewscn.cnext.cnextscn.crand.crawdata.crawfile.cstrptr.cupdate.cscn_data_layoutxwrite_elf_output__encoding_elf32_write_elf64_write_elf_update_pointersversion.cchecksum.c_elf_csumgetaroff.c32.fsize.c32.getehdr.c32.getphdr.c32.getshdr.c32.newehdr.c_elf_newehdr32.newphdr.c_elf_newphdr32.xlatetof.caddr_32L__tomaddr_32L__tofaddr_32M__tomaddr_32M__tofhalf_32L__tomhalf_32L__tofhalf_32M__tomhalf_32M__tofoff_32L__tomoff_32L__tofoff_32M__tomoff_32M__tofsword_32L__tomsword_32L__tofsword_32M__tomsword_32M__tofword_32L__tomword_32L__tofword_32M__tomword_32M__tofdyn_32L11_tomdyn_32L11_tofdyn_32M11_tomdyn_32M11_tofphdr_32L11_tomphdr_32L11_tofphdr_32M11_tomphdr_32M11_tofrela_32L11_tomrela_32L11_tofrela_32M11_tomrela_32M11_tofrel_32L11_tomrel_32L11_tofrel_32M11_tomrel_32M11_tofshdr_32L11_tomshdr_32L11_tofshdr_32M11_tomshdr_32M11_tofsym_32L11_tomsym_32L11_tofsym_32M11_tomsym_32M11_tofxlate32_11elf32_xlatebyte_copyT.32ehdr_32L11_tomehdr_32L11_tofehdr_32M11_tomehdr_32M11_tofcook.c_elf_itemdata.cinput.cassert.cnlist.c_elf_nlistopt.delscn.cx.remscn.cx.movscn.cx.elfext.c64.xlatetof.chalf_64L__tomhalf_64L__tofhalf_64M__tomhalf_64M__tofsword_64L__tomsword_64L__tofsword_64M__tomsword_64M__tofword_64L__tomword_64L__tofword_64M__tomword_64M__tofxlate64_11elf64_xlatexword_64M__tofsym_64M11_tofshdr_64M11_tofrel_64M11_tofphdr_64M11_tofoff_64M__tofdyn_64M11_tofaddr_64M__tofxword_64M__tomsym_64M11_tomshdr_64M11_tomrel_64M11_tomphdr_64M11_tomoff_64M__tomdyn_64M11_tomaddr_64M__tomsxword_64M__tofrela_64M11_tofsxword_64M__tomrela_64M11_tomxword_64L__tofsym_64L11_tofshdr_64L11_tofrel_64L11_tofphdr_64L11_tofoff_64L__tofdyn_64L11_tofaddr_64L__tofxword_64L__tomsym_64L11_tomshdr_64L11_tomrel_64L11_tomphdr_64L11_tomoff_64L__tomdyn_64L11_tomaddr_64L__tomsxword_64L__tofrela_64L11_tofsxword_64L__tomrela_64L11_tomT.40ehdr_64L11_tomehdr_64L11_tofehdr_64M11_tomehdr_64M11_tofgelfehdr.cgelfphdr.cgelfshdr.cgelftrans.cget_addr_and_classswap64.cverdef_32_tof.cxlt_verdefxlt_verneedverdef_32_tom.cverdef_64_tof.cverdef_64_tom.c_GLOBAL_OFFSET_TABLE___dso_handle__DTOR_END____i686.get_pc_thunk.cx__stack_chk_fail_local__i686.get_pc_thunk.bx_DYNAMICabort@@GLIBC_2.0__errno_location@@GLIBC_2.0_elf_verdef_64M11_tofelf_getarsymelf_flagehdrgelf_xlatetomelf_cntl_elf_verdef_32M11_tomopen@@GLIBC_2.0gelf_getdynmmap@@GLIBC_2.0elf_nextscnelf64_fsize_elf_verneed_64L11_tofelf_rawdataelf64_getshdrelf64_xlatetofelfx_update_shstrndx__fprintf_chk@@GLIBC_2.3.4gelf_getrela_elf_load_u64L__gmon_start___Jv_RegisterClasseself_getphnum_elf_load_i64L_elf_verdef_64L11_tomrealloc@@GLIBC_2.0elf32_xlatetomelf_errnogetenv@@GLIBC_2.0elf_update_finielf_memorywrite@@GLIBC_2.0gelf_getrelgelf_update_phdrmemset@@GLIBC_2.0_elf_verneed_32M11_tom_elf_version_elf_verdef_32M11_tofelf_strptr_elf_verdef_64M11_tomelf_endgelf_xlatetofelf32_getshdrelf_getphdrnum_elf_store_i64Mread@@GLIBC_2.0_elf_data_initelf_flagelfelf_getscngelf_getclasself_beginelf_flagphdrstrtol@@GLIBC_2.0elf32_fsizefree@@GLIBC_2.0_elf_getphdrelf_fillgelf_update_ehdrelf_getshnum_elf_load_i64Melf32_checksum_elf_getehdrelfx_remscn_elf_fillelf_delscnelfx_movscnelf_getshstrndx_elf_verneed_64L11_tomelf32_xlatetofelf64_checksumgelf_update_dyngelf_fsize_elf_scn_initstderr@@GLIBC_2.0memcpy@@GLIBC_2.0elf_getshdrstrndxelf64_newphdr_elf_scn_type_elf_errnoelf32_getphdrcatgets@@GLIBC_2.0elf_kindelf_newscnelf_getaroff_elf_store_i64Lelf_getshdrnum_elf_readgelf_newehdrgelf_getsymgelf_update_symelf_getidentelf_flagscnelf64_getphdrelf_rand_elf_first_scn__elf_assertelf32_newphdr_elf_store_u64Lelf32_newehdrelf_flagdata_elf_verneed_32L11_tomftruncate@@GLIBC_2.0_elf_verdef_32L11_tofclose@@GLIBC_2.0gelf_update_rela_elf_verdef_32L11_tomgelf_update_rel__bss_startmalloc@@GLIBC_2.0_elf_verneed_32L11_tof_elf_verneed_64M11_tomelf_getbasenlist__stack_chk_fail@@GLIBC_2.4elf_hashelf_nextgelf_newphdr_elf_mmapelf_newdataelf_flagshdrgelf_checksumgelf_getphdrmemmove@@GLIBC_2.0elf_ndxscngelf_msize_endelf32_getehdr_elf_fmsizeelf_versionelf64_newehdr_elf_store_u64M_elf32_xltsize_elf_sanity_checkslseek@@GLIBC_2.0munmap@@GLIBC_2.0_elf_verdef_64L11_tofelf_errmsgelf_getarhdrgelf_update_shdr_elf_load_u64Melf_rawfile_elf_verneed_64M11_tof_edata_elf_cookgelf_getehdr_elf_xlatetom_elf_update_shnumstrcmp@@GLIBC_2.0__cxa_finalize@@GLIBC_2.1.3elf_getdatacatopen@@GLIBC_2.0elf64_xlatetom_init_elf_verneed_32M11_tofgelf_getshdr_elf64_xltsizeelf64_getehdrpyelftools-0.26/test/testfiles_for_readelf/lineprogram.elf000066400000000000000000000016301357220457300241710ustar00rootroot00000000000000ELFX4 (.shstrtab.data.debug_info.debug_abbrev.text.debug_str.debug_lineHello, World! r nVn|nxnt%.: ; 'I?@ : ; I 4: ; I $> UHH }}EEE;EA}}E}E}E}lj}EEEH ]clang version 3.3 (tags/RELEASE_33/rc2)dwarf4_simple.c/home/eliben/eli/eliben-code/elffoointvxi( acpar EPQ 04H |vR+Rs1g<,,pyelftools-0.26/test/testfiles_for_readelf/obj_simple32.o.elf000066400000000000000000000012331357220457300243760ustar00rootroot00000000000000ELF4( UE]GCC: (Ubuntu 4.4.3-4ubuntu5) 4.4.3.symtab.strtab.shstrtab.text.data.bss.comment.note.GNU-stack4!<'<,0<$5``E  zz.cmainpyelftools-0.26/test/testfiles_for_readelf/penalty_32_gcc.o.elf000066400000000000000000002016341357220457300247110ustar00rootroot00000000000000ELF4(US4ED$T$$E$¡T$D$$E$EE~ED$E$}u&+U9Aڸ+E9,}u-+U9ڸ+E9~u(E}sE}WtvEbEED$E$E}ut E!E;Eu EE}ut_ED$ <D$T$$E$¡T$D$($E$ED$ CD$T$$E$¡T$D$($E$EÍE$؉$ÍE$؉$ÍE$؉$]U)]U8EEEWE;UEiҜiCuEPEE9EuE}u9~EUE-EhUEiҜiCX;E~DUEiҜiCu$UEiҜiCXEEEE9EuEiМEiC@PEiȜEiT$$UEiҜiCXMUiɜiҴʁUEiҜiCEEEEE;EE}UVS@E iМEiЍE\$ D$,T$$E$¡T$D$($E$U EiҜikd}}iɜCD iɜiCLk@$ED$4T$$E$\$$E$EPE D$CL$T$ D$<D$<$$ E}}}iҜCDiҜiC@pEt$ D$[T$$E$\$$E$}}iҜCDiҜiC@pEt$ D$`T$$E$\$$E$\ÍE$؉$ÍE$؉$ÍE$؉$ÍE$؉$e[^]PENALTYSHOOTOUT %s WONPENALTYSHOOTOUT %sPENALTYGOAL ... %s %d-%d %s...SAVEOFFTARGET3. T 0 D""M sog+ 0L*B4*MintGA+O8a2},oZ09')6~1 08 eZ# eD# 8# ,# .# # 9 # -7# t-# ##$ BD#( ( #, <"#0 -$#4 &Z#8 G*Z#< F,z#@ %B0>#D M1L#F 2#G 6#H ,?#L ;<H#T I#X B<J#\ I<K#` P<L%#d .NZ#h P#l >A T} W $0Y0 ]UZ#>^#0;3_ 7/z#J#0.(E 2  #'#<Z#VV0O0'`o/std&>  ^ _ a>  bX  co  d  e  f  g  h  i  m0  nW  py  q  r  t  u  v  w  |-  }D  ~`  t      f  gR  k  l  m n- oD qp t v y z { }0 ~S a u      Ά  w Ԓ & C ؜ Z { ۿ >  ?  @ B C D E F G  H0 IG J^*1 B      # @ ] {      1 ^ {      5 \ ~      . J f      5 Q t  ³    0 R t ɖ ʸ    + K l   [( 0+ Z.$7e8 9 ;J  # h#J  T!Z!B5J M_9T9W9]9^9_9`:a7:bW:,Ae!t&* 0G K=#}HN=#AO=#P=# GR>!GV>>aIq>J/;  G KdJ#}HNyJ#AOyJ#PyJ# GRc j =K!GVw =KCKaIK?m:$8+ G K4Z#}HNIZ#AOIZ#PIZ# GR   [!GV  [[aIZ0kN1"'3R R #"Zo R $5Z R $67Z R #&MZ R $ Z R $2Z R  $0 p ZR $C R 0 $^ %W %%R $ R y R $B:Z R Z$<Z R   $ R $2Z R % HZ$2x "G- #0ZD #$ Z` "st R "I R $(@MZ R Z%&HR #5ο $'Z ZR c@ dZ#'remeZ#@f k R l#'remm##n) w xa#'remya#z] Z)<BL(TB  )Z    *$Z   +# =#<Z-#AD$:p  %% ,div ZZ$D7$f=R $[\Z%$-g%%,$]A_Z0%">S%% %E|Z"(~u0#y3#3Z#"EZ$*Z$$j%%$4 cZ;-$ &  & C Z { Ŝ ƿ.abs ,aa.div 'I aa   *+l<T*-*LuI2#$3 Caa#<:aZ#a{Z#KhZ#3A# 3/tm,Z#(Z#9Z#<Z# 0Z#>Z#u,Z#:.Z#Z# C#$#(& #8  #G #0  #@$w>%%+ #<G%#9 ^%#/A%%-W809(Oa0-j$_Z$D$WEZ$#$ Z@$IZ]Z$PZ{1$yZ1$ %;$;v%%$Bk%%$)gZ&&,$0)%XX%$,{$$+ZZ%1$&Z1$I$pbZ:$Z5:$,oZ\%:$0Z~:$D2jZ:$Z:$>p%##(Z#2FZ.#,J#.%f$ U%%$%#C%#Z%#u%$&.%//%#}%Q$6 nn$= n$D n$K nZ$jEnZ#%%$cZ0$>BZR%$LBGt%$L%$xP%$(WZ1$2Z12   300+2pGpGK3W W l3898%$7n$(anZ$-hnZ4FZ5r1.eqP.lt o3xGT4Z3"3 3W) f.30F#3Y+I3 #e32JC 30"6eof&} 7*@ 8848 96i9g);F< E:A GR^ :Lo|Z:!O :!R2:W0 ;a.0:e9"/6;>AkK\;v q}<_Tp<_Tp8884\T#i_Kc+<d kT m#TZ Os4ATZ=&6=&68`886 :!:#f%;#A#G# MH#Z3I#J#J)K#@L# M#$d N#(n#O#)(Q#*+4S#+H:: >j0; >L?O!>@ =Z=Z8`!4k 9it?WN 9@}6#%sKv+<wzLH|j;}~A "<q!#Dq!# #A(7 $!#>4 9> 79>DC9B 1BN9:M?""T9:N""T9;qCA"" 9;>ƹC"" 9;Gb"# 90:r%H#&# 9:݇?#P# 9Z!Z!3# 9v#00Z!;A## 9Z!Ct ### 9Z!:## 9D?q$# 9Z!0E/$#$9E/#+9>$J$9E .'x 9e$l$9E- !$$9E<1dA!$$9F *5)$$9E<Gq!$$90FD?%'%900E1!L q!B%S%900ELT n%z%9Gb]%0Gf7%0G"o%0GM,&GM<6)&GMIL&GMBo&H<z#Z&00FD&&9000FM&&9I &9JE''9KE'&'9Z! E7'C'9,9 ET'j'9,900 E{''9,900Z! E''90Z! E''9Z! E'(90Z!Jt(%(9ZLD79?(K(9,9L%679e(q(9L0 79((9LMX8!((9LMc*!((9Mendk%!((9Mendv>$!))9L&!5)<)9L& !V)])9Ln$!!w)~)9Lni>!))9L:Gq!))9Lq!))9L9q!)*9C.M*)*90C.-6?*K*90LG+q!e*l*9C3**90C**9L8A#**9L#2!**90L#C-! ++90MatXB!1+=+90Mat!V+b+90L75z79|++9,9L75 79++9L75779++9Lp0F=9++9,9Lp0WN=9,*,9,900Lp0+2=9D,U,90Lp079o,{,9Lp0=9,,90C6?,,9: =9,,9,9LB79--9,900L)=97-H-90L^K79b-n-9Ln:)79--90C!7--90L!7O79--90,9L!7HA79 .%.90,900L!7iG3=9?.U.900L!779o..90L!7( 79..900L!7+*0!..9L=C3D79./900L=S! /,/9L=M !F/W/9Lp z79q//900,9Lp ^79//900,900Lp M2=9//9000Lp C790&0900Lp G79@0[09000Lp 79u009,9Lp O790090Lp  H79009Lp  rD79 1%190Lp D79?1Z19Lp N"79t119Lp Y@79119Lp c79119E,%=92/29000EHJI=9J2e29000H "20Z!Nl3o920Z!L0i q!22900Ci23979L%<3%39L>!A?3F39L !`3g39L Hq!33900L  q!339,90L !zq!3390L q!4490L* ?Hq!24C49,90L*  )q!]4s4900L* [5+q!4490L*  Kq!4490LOyEq!449,90LO14q!5$5900LOq!>5O590LO$q!i5z590LI)q!559,90LI@&q!55900LIZq!5690LI2#q!6+690L)=q!E6V69,90L)U+q!p66900L)q!6690L)aq!6690L.Iq!679,90Lly8q!!777900LKq!Q7b790Lq!|7790Lk e!77900LxG} Z779,9LxG2Z78900,9LxGuAZ(8H8900,900LxGrZb8n89LxG]Z88900LxG[HZ889000=J=>=&6=J=>=&6q!9e!e!"8"829e!8e!8e!0N9O8"Z9"2$OM$O 9 Z%#mZ9$e"9Z$3\9##%9%2+F+F:Z3:4(:47:2W:Z33C3x:00 2h;'a#a#Aa#0@a# 'ageZ#'stZ#'tkZ#'psZ#'shZ# 'agZ#$)"Z#(/Z#, Z#0c!Z#4l"Z#8+ $Z#<-%Z#@N:&Z#D('Z#HG (Z#LA)Z#P *Z#T'dp+Z#XF-Z#\B.Z#`/Z#d;4l96=i9g);=F<= EB<I<= GZ<f<== :Lw<<=Z:!O-M<<<==:!R7&<<<==:W!<<<=0 ;a ====0:eJ<7=>==;>Ak S=d====;vzy====<_Tp:<_Tp::=:8:8=<8=<=<9r\><#g)a=Fb=Kc=+<d= k#>*>> m;>G>>> OsX>e>>ZW<h>i==:=&6:=&6:=8>=8>4x Ge@B #%\=:I_Be@>?k@:IcN>? ?q@: gm(>9?@?q@ BjQ?X?k@ Bmi?u?k@|@ Bp??k@0 Bx??k@0|@ ' @@k@=0??>? ?<_Tp:=&6=<_Tp:=&6=8>w@>8@>9l G>#) :g)=F=K=+<>LHj; iɘ%= &A-AGK?AKAGGP^AtAG0GGJAAGGJ]AAGZ: ^?GAAGGCK$AAG0GLM@BBGLMP@8B?BGMendK@YB`BGMendG@zBBGL&6@BBGL& @BBGLn8@BBGLn>@BCGL::F@C&CGL?@@CGCGC.uD]CnCG0:L*@CCGL8ACCG;3 B)ECCG0L#L@CCG0L#@DDG0F\N:4D@DG0Mat @YDeDG0MatmM@~DDG0L@DDGL@DDGL@, |!@DDGL@,J@EEGL>#@(E/EGL>+6@IEPEGC6:H!fErEGGC%Y<EEG:!7 l @EEGGC!7LEEG0G:= ^7@E FG:= ,@#F4FGCaJFVFGGClFsFGF>b1 FFG0GQ 'FFG0GF vKFFG0GF/ )&GGG=E)@2GCGG0F CZGfGG=<_Tp:=&6=<_Tp:=&6=@8G A8G@8G@8@8G@G8@0! 0" 0# 0$96Ii9g);IF<1J E)H0HHJ GAHMHHJNJ :L^HkHHJZ:!O9HHHYJAk:IKIHJIBJ;v!?`IlIHJI<_TpI<_TpIIIR"I1JSe#TL"%Z#U"w0aIIIIZaUF"3I JJIV B"!I#JIZ7JI8I87JG8TJG_JG9 \,KG#g)aIFb1JKcV:LLLI0eLLZKKK<_TpI=&6dJ<_TpI=&6dJ8 NK MNK8MhK9 TNK#) Ig)yJFJKJ+<ÚJLH j;ǖ Ȝ iɘ%dJ MMTKMMT$TPMNT0/T$TJN%NT:TJ]7NDNTZ: )GET]NiNTKTCNNT0/TLMfMNNTLMk=qMNNVTMendt%fMNNTMend)NqM OOVTL&z M.O5OTL&|MOOVOVTLnz4MpOwOTLnn"|MOOVTL::,MOOVTL?MOOVTC.u(OPT0IL?MP"PVTL8A/QTL1XQ_QVTL@, @PMyQQTL@,#1[MQQVTL>#; :MQQTL>+EMQQVTC6:MQRT/TC%Y!R"RT:!7 l$fM;RLRT/TC!7.bRxRT0/T:= fMRRT:= {+fMRRTC6RRT\TCRSTF>bD'S.ST0/TQ ōLDSUST0/TF v lSST0/TF/ )3SSTBJEMSSVT0F SSTI<_TpI=&6dJ<_TpI=&6dJM8*TM85T/M8@TM8M8QTMQT8MW,$ "UTL$;Z#T$?M#TK$CU#:$/xaTTUZa;$6TTUQ$GTUUIX$KE,UUURi,# "UUSue#TL#+Z#U##%a"UoUUUZaY(8#$E"UUUUZ#&"UUUUZ['#)rZUUa"UbT\)GX'+GX#'pos.WX#hM1#0@3GX#'st4Z#'tk5Z#'ps6Z#'sh7Z#'ag8Z#)"9Z#F:Z#B;Z#*>#^0?#!:@#EC#D#\)E#1F#1"G#HZ#C JZ#MZ#G NZ#AOZ#-PZ#N:QZ#(RZ# SZ##TZ#bUZ#8VZ#3CZZ#}$[Z#\Z#/^Z#_Z#c`Z#laZ#WX0gX096Yi9g);YF<Z EXXZ GXXZZ :LXXZZ:!O<9~XY Y)Z Z:!RR1X%Y1Y)ZZ:W-~XJY[YZ0 ;a pYYZY0:ejKsXYY)Z;>Ak"(YYZYZ;v0YYZY<_TpU<_TpUUZU8U8ZgX8$ZgX/ZgX9 \ZgX#g)aYFbZKc Z+<dZ kZZZ mZZZ[ OsZZZZ.:hZi4Z=U=&6U=&6U4Z8[4Z 8[ 4 G\B  #%\4Z:I_>\\[c[\:Ic[|[[\: g^E8[[[\ Bj[[\ Bm[[\\ Bp[[\0 Bx\\\0\ WOo\\\Y05\Z\*[c[[<_TpU=&64Z<_TpU=&64Z8 [\[8\8[9+ c[#) Ug)IZFTZK_Z+<jZLHj;1 7 iɘ%4Z ]]cK]]ccP]]c0ccJ]]c dJ]^^cZ: J#d-^9^cdCO^`^c0cLMz6]z^^cLMsA]^^&dMendb26]^^cMend3A]^^&dL&,W]^_cL&BL]_&_&dLnW]@_G_cLnE>L]a_h_&dL:::@b]__&dL?4b]__&dC.uF__c0ULb]__&dL8AD ``&d;3 B(`4`c0L#8 ]N`Z`c0L#+]t``&d0F\N?``&d0Mat}> ]``c0MatqB+]``&d0L:7 ]aacL +](a/a&dL@, < ]IaPacL@,K+]jaqa&dL>#4O ]aacL>+B.]aa&dC6:5aaccC%Yaac:!7 l*6] bbccC!7:F2bHbc0c:= b6]abmbc:= R 6]bbcCXbbc,dC5bbcF>b$bbc0cQ c%cc0cF v/Hp#$.q#,r#4'tGX#< <uGX#}vSe#C|Z# ~Z#Dce#$C;#8\#ce0Use00% )Ze1ejze]g2e^F6_`Zd`XGZha$` ?Zlb@e5Z8]<opfa`qZ\`0qZ``qZdcmaxrZh` rZl]o) fdZdXGZ_crndZl`'2fl0eqHZ`hI$fp2dg0e ge, R UAg00 f -+gf$f>g!Axh!%% : ; I$ > $ > I!I/   I  : ; : ;I8  : ; @  : ;  : ; I : ; I8  I: ;  : ; &I9: ; : ; 9: ; : ;< <  : ;2 I8 2 .? : ;< dI4 I<  : ; .? : ; < d!.? : ; < d".? : ;< #.? : ; I< $.? : ;I< %.? : ;I< &.? : ; I< ' : ; I8 (: ;I)I*&+,.? : ;I< -9: ; ..? : ; @I< / : ; 0:: ; 12.? : ; @I< 3.? : ;@I< 4G : ; 5.? : ; @< 6.? : ;@I< 7.? : ;@I< 8 I9G : ; :.? : ; @I< d;.? : ; @< d : ; I? < ? : ;I? < @ : ;I8 2 A : ; 2 B.? : ; @I< C.? : ;@< dD.? : ;@I< dE.? : ;@I2 < dF.? : ;@2 < dG.? : ;@2 < H.? : ;@I2 < I.? : ;@I2 < J.? : ;< dK.? : ; < c dL.? : ;@I< dM.? : ;@I< dN.? : ; @I2 < O!P.? : ;< c dQ.? : ; @2 < dR : ; S I8 4 T : ; I8 2 U.? : ; @IL M < dV.? : ; L < dW : ; X.? : ; @2 < dY.? : ; @L M < dZ.? : ; L < d[.? : ; @I2 < d\ : ; ].? : ; @@^ : ; _ U`4: ; I a b.? : ; @I@c4: ; I d: ; I e4: ; I? < f4: ; I?  g4G@ h4G@ttutttutttutttut|$  /usr/lib/gcc/i686-linux-gnu/4.6.1/include/usr/include/i386-linux-gnu/bits/usr/include/usr/include/c++/4.6/usr/include/c++/4.6/i686-linux-gnu/./bits/usr/include/c++/4.6/bits/usr/include/c++/4.6/ext/usr/include/c++/4.6/debugpenalty.cppstddef.htypes.hstdio.hlibio.hwchar.h_G_config.hstdarg.hcstdiocstdlibctimecwcharc++config.hclocalebasic_string.hcstringstringfwd.hstl_vector.hstdlib.htime.hnew_allocator.hdebug.hchar_traits.hallocator.hlocale.hatomic_word.hnumeric_traits.hbasic_string.tccstring.hgame.hrosterplayer.hvector.tccteamsheet_reader.hcond_condition.hcond_action.hcond.hcomment.hwG_(fWhVUtXvJJJ y0JؔwɒlJOWOfhK]=6h>cJJ tX漼aJ F7oJrJ4eg>h 9xXCu5VCu5ll fiL_ZNKSt6vectorI12RosterPlayerSaIS0_EE8max_sizeEvwcspbrklconv_ZNSt12_Vector_baseIP4condSaIS1_EE19_M_get_Tp_allocatorEv_ZN4cond6createEiSs_unused2_ZNSs12_M_leak_hardEv_M_move_fileno_ZNSt6vectorIP14cond_conditionSaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEnot_eofreverse_iterator__normal_iterator, std::allocator > >tm_secallocatefwideteamnew_allocator_ZNSt6vectorIP14cond_conditionSaIS1_EE6assignEjRKS1_int_p_sep_by_spacechar_typegetwc7lldiv_t_ZN9__gnu_cxx13new_allocatorIP14cond_conditionE9constructEPS2_RKS2_fpos_tRunPenaltyShootout_ZN9__gnu_cxx13new_allocatorI12RosterPlayerE7destroyEPS1_minutes_ZNSt6vectorI12RosterPlayerSaIS0_EE5clearEvps_contrib_ZNSs5clearEvtk_abcreate_Value_shortbuf_Tp1__gnu_cxx_ZN9__gnu_cxx13new_allocatorIcE10deallocateEPcj_ZNSs7replaceEjjRKSsjj_vptr.cond_action_ZNSs4_Rep7_M_grabERKSaIcES2__M_refcopywcsncmpcapacity_ZNSt6vectorI12RosterPlayerSaIS0_EE5frontEvfeof_ZNSt6vectorIP14cond_conditionSaIS1_EE15_M_erase_at_endEPS1_st_ab_Z8GoalDiffvtime_t_ZNSs13_S_copy_charsEPcS_S__flagsrebind_ZN4cond16test_and_executeEvteam_shootinglength_M_refcount_ZN9__gnu_cxx13new_allocatorI12RosterPlayerE10deallocateEPS1_j__off_t_Z11TakePenaltyii_ZNSt6vectorI12RosterPlayerSaIS0_EE4dataEvconst_pointer__numeric_traits_integer_ZNSt11char_traitsIcE6assignERcRKcsubstr_ZNKSt6vectorIP4condSaIS1_EEixEj_M_check_lengthdeallocatetm_isdstgrouping_lockallocator_ZN9__gnu_cxx13new_allocatorIcE8allocateEjPKvwcstoll_ZN9__gnu_cxx13new_allocatorIP4condE7destroyEPS2__ZNSt6vectorIP4condSaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EE_ZNSs4_Rep9_S_createEjjRKSaIcE_ZNKSs4findEcj_M_end_of_storagemax_sizeinjured_ZNSs6rbeginEvatof_ZN4cond13add_conditionEP14cond_conditionatoiatol_ZNSt11char_traitsIcE4copyEPcPKcj_M_pstrcollwcsncpywcsspn__builtin_va_listnew_allocatorvector_ZNSt6vectorIP14cond_conditionSaIS1_EE5clearEvstrrchr__pos_ZNSt6vectorIP14cond_conditionSaIS1_EE7reserveEj__debugRosterPlayervector >setlocaleadd_condition_ZNSs6insertEjPKc_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_RKSs_ZNKSs7_M_dataEvvwscanf_ZNSt11char_traitsIcE4findEPKcjRS1__M_erase_at_endgames_ZNSt6vectorI12RosterPlayerSaIS0_EE18_M_fill_initializeEjRKS0_replace_ZNKSs6_M_repEv_ZNSt6vectorI12RosterPlayerSaIS0_EE6insertEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0_assists_Rep_base_ZNKSs6substrEjj_ZNSsaSEc_ZNKSs4findERKSsj6ldiv_t_ZNSs6insertEjjc_IO_write_endshots_ZNSs5eraseEN9__gnu_cxx17__normal_iteratorIPcSsEES2__ZN9__gnu_cxx13new_allocatorI12RosterPlayerE9constructEPS1_RKS1__ZNSt6vectorIP14cond_conditionSaIS1_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEjRKS1_value_typewctomb_ZNSt6vectorIP14cond_conditionSaIS1_EE4dataEv_ZNKSs4copyEPcjj_ZNSt6vectorIP14cond_conditionSaIS1_EE6rbeginEvindex_S_empty_rep_ZNSspLEPKc_ZNSt12_Vector_baseIP4condSaIS1_EE11_M_allocateEj_ZNSt6vectorI12RosterPlayerSaIS0_EE2atEjrenameGNU C++ 4.6.1localtimeactive_Alloc_hiderwcsstrfreadint_frac_digits_M_destroy_ZN9__gnu_cxx13new_allocatorIcE7destroyEPcfinalfouls_ZNKSs8_M_limitEjjfgetc_ZNKSt6vectorIP4condSaIS1_EE5frontEv_ZN9__gnu_cxx13new_allocatorIP4condE10deallocateEPS2_jrfindfgetswcstodwcstofwcstokwcstol_ZNSt6vectorIP4condSaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EES7_current_gkfreopen_S_construct_aux_2_ZNSt6vectorIP14cond_conditionSaIS1_EE2atEj_ZNKSs9_M_ibeginEv_ZNKSt6vectorIP4condSaIS1_EE8capacityEvsaveslldiv__clock_t_ZNSs7replaceEjjPKc__gnu_debugps_ab_ZNSs4swapERSswmemsetoperator=_vptr.cond_condition_ZNSt6vectorIP4condSaIS1_EE7reserveEjbtowcnTeam_ZNSs9_M_assignEPcjc_ZNSs12_S_empty_repEvplayerstruct_ZNSs6assignERKSsputwchar_ZNSs4_Rep8_M_cloneERKSaIcEjnationalitycurrency_symbol_ZNKSs7compareEjjPKc_ZN11cond_action19worst_player_on_posESs_ZNSs6appendEPKc_ZNSt6vectorIP14cond_conditionSaIS1_EE5beginEv_M_allocateto_char_type_ZNSt6vectorIP4condSaIS1_EE6assignEjRKS1___gnuc_va_list_chainint_n_cs_precedesis_true_ZNKSs4_Rep12_M_is_sharedEvwcstoul_M_refdata11__mbstate_tunsigned char_ZNKSt12_Vector_baseIP4condSaIS1_EE19_M_get_Tp_allocatorEvwcsxfrm_ZNKSt6vectorIP14cond_conditionSaIS1_EE4dataEv_IO_lock_twcslen_ZNKSs13find_first_ofEPKcjredcardsfloat_M_set_length_and_sharable_ZNSs4_Rep26_M_set_length_and_sharableEj_ZNKSt6vectorI12RosterPlayerSaIS0_EE5frontEv_ZNSt11char_traitsIcE2eqERKcS2__M_check_ZNSt12_Vector_baseI12RosterPlayerSaIS0_EE11_M_allocateEjassign_ZNSs18_S_construct_aux_2EjcRKSaIcEint_type_ZNSs6insertEjRKSsyellowcardsrend_ZNKSt6vectorIP4condSaIS1_EE5beginEv_ZNSs4_Rep10_M_refcopyEvsetbuf_ZNSt6vectorI12RosterPlayerSaIS0_EE5beginEv_ZNKSt6vectorIP14cond_conditionSaIS1_EE8max_sizeEv_ZNSs7_M_copyEPcPKcj_ZNSs13_S_copy_charsEPcN9__gnu_cxx17__normal_iteratorIS_SsEES2_sh_ab_ZNKSs7compareEPKc_ZNKSs16find_last_not_ofEcjtm_zoneconditions_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_S1_S1_fwscanftest_and_executewcsftimeswap_ZNKSs5emptyEvworst_player_on_posmbrlen_ZNKSs2atEj_ZNSs6appendERKSsjjaggressionreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_NS0_IPKcSsEES5__M_iend_ZNKSt6vectorIP4condSaIS1_EE5emptyEvsize_typerewind_ZNSspLERKSs_S_createinjuries_ZNSs6assignERKSsjjiteratorstrtold_ZNSs7reserveEjstrtollconcededpenalty.cppatexit_IO_write_ptrnegative_sign_ZNSs6appendEjc_ZNKSt6vectorIP14cond_conditionSaIS1_EE12_M_check_lenEjPKc_ZNKSs12find_last_ofEPKcj~basic_stringwcscatother~vector_ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEEjcftell~cond_action_ZNSs7replaceEjjRKSsint_curr_symbolnPlayer_ZNKSs7compareERKSs_ZNK9__gnu_cxx13new_allocatorIcE7addressERc_ZNSt6vectorI12RosterPlayerSaIS0_EE6insertEN9__gnu_cxx17__normal_iteratorIPS0_S2_EEjRKS0___normal_iterator > >/home/eliben/eli/esms/src_ZNSt6vectorIP4condSaIS1_EE14_M_fill_assignEjRKS1_size_M_clone_M_replace_safe_ZNSt6vectorIP4condSaIS1_EE4swapERS3_FILE_ZNKSs17find_first_not_ofEcj_ZNSs6appendERKSsnew_allocator_ZNSt6vectorIP4condSaIS1_EE4rendEv_M_ibeginclock_Z19AssignPenaltyTakersvclear_ZNSt11char_traitsIcE2ltERKcS2_asctimetmpfile_ZNKSt6vectorI12RosterPlayerSaIS0_EE5beginEvtactic_ZNSs9_M_mutateEjjjsize_t__countquotdestroyfront_ZNSt12_Vector_baseIP14cond_conditionSaIS1_EE11_M_allocateEj_ZNKSs17find_first_not_ofEPKcjcond_condition_ZNSs14_M_replace_auxEjjjc_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_S2_S2__ZNSt11char_traitsIcE3eofEvperror_ZNSs5eraseEN9__gnu_cxx17__normal_iteratorIPcSsEE_ZNKSt6vectorI12RosterPlayerSaIS0_EE5emptyEv_M_grab_M_is_shared_M_fill_insert_IO_save_base_ZNKSt6vectorIP14cond_conditionSaIS1_EE5frontEv_ZNSt6vectorI12RosterPlayerSaIS0_EE4swapERS2__ZNKSt6vectorIP14cond_conditionSaIS1_EEixEj_S_empty_rep_storage_ZNKSt6vectorIP14cond_conditionSaIS1_EE6rbeginEvwctobmon_thousands_sepfwprintf_M_assign_ZNSt6vectorI12RosterPlayerSaIS0_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS0_S2_EES6__ZN9__gnu_cxx13new_allocatorIcE9constructEPcRKc_S_max_size_M_fill_assign__wchbfitnessfind_last_not_oflldiv_t_M_check_lenvfwscanf_Vector_base >_ZNKSs5rfindEcjmblen_Tp_alloc_typevfwprintf_ZNSt6vectorIP4condSaIS1_EE5beginEv_ZNKSs13get_allocatorEv__digits_ZNSt6vectorIP4condSaIS1_EE8pop_backEv_ZNKSs6lengthEv_ZNKSt6vectorI12RosterPlayerSaIS0_EEixEj__pad2rbeginwcstoull_ZNKSt6vectorI12RosterPlayerSaIS0_EE4dataEv_M_copy__vtbl_ptr_type_ZNKSs4findEPKcj_ZNKSs16find_last_not_ofEPKcjwmemmovefputwc_ZNSt11char_traitsIcE11eq_int_typeERKiS2__ZNSs4_Rep10_M_disposeERKSaIcE_ZNKSs5c_strEv_ZNKSsixEjfputws_ZNSs4_Rep10_M_destroyERKSaIcE_Vector_base_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKcj__normal_iterator, std::allocator > >set_action_ZNSs2atEj_ZNKSs11_M_disjunctEPKc_ZNKSs6rbeginEvallocator_M_implreverse_iterator<__gnu_cxx::__normal_iterator, std::allocator > > >wcschrGameDecidedfind_nextget_allocator_ZNKSt6vectorI12RosterPlayerSaIS0_EE6rbeginEv_ZNSs4rendEv_M_limitdecimal_point_ZNSt6vectorI12RosterPlayerSaIS0_EE9push_backERKS0__ZNSt6vectorI12RosterPlayerSaIS0_EE4backEvaddress_Atomic_word_ZN9__gnu_cxx13new_allocatorI12RosterPlayerE8allocateEjPKv_ZNSt6vectorIP14cond_conditionSaIS1_EE8pop_backEvstaminafatigue_ZNK9__gnu_cxx13new_allocatorIcE8max_sizeEvstrerror_ZNKSt6vectorIP14cond_conditionSaIS1_EE4rendEv_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKcS4_fclosestrtoul_ZNSt11char_traitsIcE6lengthEPKc_ZNSt11char_traitsIcE12to_char_typeERKi_ZNKSs12find_last_ofEcj_ZNSt6vectorIP4condSaIS1_EEaSERKS3_frac_digits_ZNSs10_S_compareEjjldiv_toperator[]fouls__normal_iterator > >strxfrm_ZNSt6vectorIP4condSaIS1_EE15_M_erase_at_endEPS1_allocator_ZNKSs3endEv_ZNSt6vectorI12RosterPlayerSaIS0_EE6assignEjRKS0_shots_offKickTakerswcstombs_ZNKSs13find_first_ofEcjallocator_ZNSt6vectorIP4condSaIS1_EE18_M_fill_initializeEjRKS1__ZNSt6vectorIP14cond_conditionSaIS1_EE6insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_substitutionsthousands_sep_ZNSt6vectorIP14cond_conditionSaIS1_EE3endEvallocator_type_ZNSs3endEvpop_back_ZN9__gnu_cxx24__numeric_traits_integerIiE5__maxE_ZN11cond_action6createEiSs_ZNSt6vectorI12RosterPlayerSaIS0_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0_vector >swscanf_ZNKSs12find_last_ofEPKcjj_ZN9__gnu_cxx13new_allocatorIP14cond_conditionE8allocateEjPKv_ZNSt6vectorI12RosterPlayerSaIS0_EE14_M_fill_assignEjRKS0__ZNSt6vectorIP14cond_conditionSaIS1_EE18_M_fill_initializeEjRKS1_clearerr_ZNSt12_Vector_baseI12RosterPlayerSaIS0_EE13_M_deallocateEPS0_jnamen_sep_by_space_sbufungetcNUM_COLUMNS_IN_ROSTER_IO_save_endwprintftm_min_ZN9__gnu_cxx13new_allocatorIP4condE9constructEPS2_RKS2_char_traits_ZNKSt12_Vector_baseI12RosterPlayerSaIS0_EE13get_allocatorEvsrandp_cs_precedeskeypasseswcscmp_ZNSt6vectorIP14cond_conditionSaIS1_EE6resizeEjS1__ZNSs6assignEPKcj_ZNKSs5rfindEPKcjj__time_tmbsrtowcs_ZNSs6assignEjcmon_groupingmovesh_contribpointerTakePenaltyshot_prob_ZNKSs12find_last_ofERKSsj_ZNKSt6vectorI12RosterPlayerSaIS0_EE12_M_check_lenEjPKcclock_tmbsinitfind_first_not_of_ZNSs7_M_leakEv_M_leaklikes_left__normal_iterator > >_ZNKSt6vectorI12RosterPlayerSaIS0_EE8capacityEvsystem_ZNKSs5beginEvshort unsigned intsigned char_ZNSt6vectorIP4condSaIS1_EE6insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1__ZNKSs5rfindEPKcj_ZNKSs8capacityEv_ZNSt11char_traitsIcE6assignEPcjc_ZNSt6vectorIP14cond_conditionSaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EES7__ZNKSs17find_first_not_ofEPKcjjptrdiff_tswprintf_M_replace_auxcomm_ZNSt6vectorIP4condSaIS1_EE6rbeginEvback_ZN4cond10set_actionEP11cond_actioncond_actiontm_wday__off64_twcscpywchar_tvswprintfputwccond_IO_read_base_offset_ZNKSt6vectorIP14cond_conditionSaIS1_EE4sizeEvstring_ZN9__gnu_cxx3absExPenaltyTaker__normal_iterator > >_IO_buf_end_ZNSt6vectorIP14cond_conditionSaIS1_EE5frontEv_ZN9__gnu_cxx13new_allocatorIP4condE8allocateEjPKvmbstowcs_ZNSsixEjmbstate_tn_sign_posn_M_repteam_passingresizewcsrtombs_G_fpos_ttm_yday_ZNKSt6vectorIP4condSaIS1_EE4dataEv_ZNSt11char_traitsIcE4moveEPcPKcjwcscspn_mode_ZNSt6vectorIP14cond_conditionSaIS1_EE6insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEjRKS1__IO_write_base_M_insert_auxreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNSt6vectorIP4condSaIS1_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEjRKS1__M_data_ZNKSt6vectorIP14cond_conditionSaIS1_EE5emptyEvnTaker__wch_ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEEclikes_right__maxappend_ZN14cond_condition6createEiSsvector >vswscanfremovetm_moncopyeq_int_typetime_Vector_base >_ZNKSt6vectorIP14cond_conditionSaIS1_EE4backEv_ZNK9__gnu_cxx13new_allocatorIP4condE7addressERKS2_reverse_iterator<__gnu_cxx::__normal_iterator > > >nominal_fatigue_per_minutelong intfgetpos_ZNK9__gnu_cxx13new_allocatorIcE7addressERKcvwprintf_ZNSs7replaceEjjPKcj_ZNSt6vectorIP4condSaIS1_EE3endEvto_int_type_IO_markerint_p_sign_posnnew_allocator_ZNKSs7compareEjjRKSsgetcwscanfgets_Z18RunPenaltyShootoutv_ZNSs6appendEPKcjstrstr_ZNKSt6vectorIP4condSaIS1_EE3endEv__mbstate_t_ZNSs6insertEjPKcjmon_decimal_point_S_constructstrtodstrtofstrtokstrtollong doublereserve_ZN14cond_condition7is_trueEv_ZNSt6vectorIP14cond_conditionSaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_p_sep_by_spacestrpbrklong unsigned int_ZNSt11char_traitsIcE7compareEPKcS2_j_ZNSt6vectorIP14cond_conditionSaIS1_EE4rendEv_ZNKSs13find_first_ofEPKcjj_ZNKSt6vectorIP4condSaIS1_EE8max_sizeEvbool_ZNKSt12_Vector_baseIP14cond_conditionSaIS1_EE19_M_get_Tp_allocatorEvoperator+=reverse_iterator<__gnu_cxx::__normal_iterator, std::allocator > > >tmpnam_ZNSt6vectorIP4condSaIS1_EE5clearEv_ZNSt6vectorIP4condSaIS1_EE9push_backERKS1_ferror_Alloc_ZNSs6resizeEj_ZNSs13_S_copy_charsEPcN9__gnu_cxx17__normal_iteratorIPKcSsEES4__M_dataplus_ZNSt6vectorI12RosterPlayerSaIS0_EE6rbeginEv_ZNSsaSEPKcchar_ZNSt6vectorIP14cond_conditionSaIS1_EE4swapERS3_push_backwcstold_S_terminal9_G_fpos_tinsert_Rep_IO_buf_base_ZNSt6vectorIP4condSaIS1_EE5frontEv_ZNSt6vectorI12RosterPlayerSaIS0_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS0_S2_EEscore_ZNSspLEc_ZNSs7_M_moveEPcPKcj_ZNK9__gnu_cxx13new_allocatorI12RosterPlayerE7addressERKS1_difftime_IO_read_endexecute_IO_FILE_ZNKSt12_Vector_baseIP14cond_conditionSaIS1_EE13get_allocatorEv_ZNKSs16find_last_not_ofEPKcjjwmemchr_ZNSt6vectorIP4condSaIS1_EEixEj_ZNSt6vectorI12RosterPlayerSaIS0_EE4rendEvconds_ZNSs5beginEv_Vector_base >_ZNSs7_M_dataEPc_ZNK9__gnu_cxx13new_allocatorIP4condE7addressERS2__ZNSs12_S_constructEjcRKSaIcE_ZNKSs8max_sizeEvtm_hour_ZNK9__gnu_cxx13new_allocatorIP14cond_conditionE8max_sizeEv_ZNK9__gnu_cxx13new_allocatorIP14cond_conditionE7addressERS2_likes_centerrebindatollfseek__mintackles_ZNSt12_Vector_baseIP14cond_conditionSaIS1_EE13_M_deallocateEPS1_jbsearch~new_allocator_ZNKSt6vectorI12RosterPlayerSaIS0_EE14_M_range_checkEjreverse_iterator<__gnu_cxx::__normal_iterator > > >const_reverse_iteratorallocatorbasic_string, std::allocator >getwcharRosterPlayerArrayint_n_sign_posnfullnametm_mday_S_comparec_strconst_reference__pad1__pad3__pad4__pad5rebindnew_allocatorgmtimeAssignPenaltyTakersfsetpos_markers_pos_M_length_ZNSt6vectorIP4condSaIS1_EE4backEv_ZNSt6vectorI12RosterPlayerSaIS0_EE8pop_backEv_ZNSt6vectorIP4condSaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_ldiv_ZNKSt6vectorIP14cond_conditionSaIS1_EE5beginEverasedouble_ZN9__gnu_cxx13new_allocatorIP14cond_conditionE10deallocateEPS2_j_ZNKSs17find_first_not_ofERKSsj__FILEtm_year_ZNKSt6vectorI12RosterPlayerSaIS0_EE4rendEv_ZNKSt6vectorIP4condSaIS1_EE4rendEv_ZNKSs4rendEvctime_ZNSt6vectorIP4condSaIS1_EE2atEj_M_fill_initializeqsort_M_set_sharable_M_deallocatedatawmemcmpwcrtomb__valuePenScore_Traits_ZNKSs15_M_check_lengthEjjPKc_ZN9__gnu_cxx13new_allocatorIP14cond_conditionE7destroyEPS2__ZNSt6vectorI12RosterPlayerSaIS0_EEaSERKS2__ZNSs9push_backEc_ZNKSt6vectorIP14cond_conditionSaIS1_EE8capacityEv_ZNKSs4_Rep12_M_is_leakedEv_ZNKSt6vectorIP4condSaIS1_EE14_M_range_checkEjpositive_signsetvbufpref_side_ZNKSt6vectorIP4condSaIS1_EE4sizeEv_ZNKSt6vectorIP4condSaIS1_EE12_M_check_lenEjPKc5div_tdiv_t_ZNSt6vectorIP14cond_conditionSaIS1_EE4backEv_ZNSt11char_traitsIcE7not_eofERKiGoalDiff_ZNKSt6vectorIP14cond_conditionSaIS1_EE2atEj_ZNKSs4dataEvstrftimeemptyconstruct_ZNSs6insertEjRKSsjjmbtowc_ZNKSs7_M_iendEv_ZNKSs7compareEjjRKSsjj_M_dispose_ZN9__gnu_cxx24__numeric_traits_integerIiE5__minE_M_finishgoals_ZNSs4_Rep13_M_set_leakedEvlong long unsigned int~cond_conditionmbrtowc_cur_column_ZNSs4_Rep12_S_empty_repEvwmemcpy__compar_fn_tfinalshots_off_ZNKSt6vectorIP4condSaIS1_EE2atEj_ZNSs13_S_copy_charsEPcPKcS1_suspension_ZNSt12_Vector_baseI12RosterPlayerSaIS0_EE19_M_get_Tp_allocatorEv_ZNKSt6vectorIP4condSaIS1_EE6rbeginEvroster_playersshots_on~_Vector_base_ZNSt11char_traitsIcE11to_int_typeERKc_M_set_leaked_ZNSt6vectorI12RosterPlayerSaIS0_EE15_M_erase_at_endEPS0__ZNSs4_Rep15_M_set_sharableEvwcsncatfopenteamstm_gmtoffpenalty_taker_ZNSt6vectorI12RosterPlayerSaIS0_EE6resizeEjS0__ZNSs5eraseEjj_IO_backup_baseint_n_sep_by_space_IO_read_ptr_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_jc_M_mutateplayer_ZNSsaSERKSsgetenvfgetwc_M_capacity_ZNSt6vectorIP14cond_conditionSaIS1_EEixEj_ZN11cond_action7executeEv_ZNSt6vectorI12RosterPlayerSaIS0_EE7reserveEjfgetws_ZNKSt12_Vector_baseIP4condSaIS1_EE13get_allocatorEvrandbasic_stringtk_contribfinalshots_on_ZNKSs13find_first_ofERKSsj_ZNSt12_Vector_baseIP14cond_conditionSaIS1_EE19_M_get_Tp_allocatorEv_old_offsetstrchrwcscoll_ZNSt6vectorIP4condSaIS1_EE6insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEjRKS1_injury_ZNSt6vectorIP4condSaIS1_EE6resizeEjS1__ZNKSt6vectorIP14cond_conditionSaIS1_EE14_M_range_checkEjstopPKs_ZNKSt6vectorI12RosterPlayerSaIS0_EE4sizeEv_ZNSt6vectorIP14cond_conditionSaIS1_EEaSERKS3_nPenaltyNump_sign_posnwcsrchrcomparelong long int_ZNSs7replaceEjjjc_ZNKSs4sizeEv_ZNKSt6vectorI12RosterPlayerSaIS0_EE3endEv_flags2_Vector_implmktime_ZNKSs8_M_checkEjPKcgetchar_ZNKSs4findEPKcjj_ZNSs4_Rep10_M_refdataEvteam_tacklingconst_iterator_ZNKSs7compareEjjPKcjnum_players_M_start_ZNK9__gnu_cxx13new_allocatorIP14cond_conditionE7addressERKS2__ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKc_ZNKSs5rfindERKSsjungetwcfind_last_of_ZN9__gnu_cxx3divExxn_cs_precedes_ZNSs15_M_replace_safeEjjPKcjCHAR_BUF_LEN__normal_iterator > >_M_get_Tp_allocator_ZNKSs16find_last_not_ofERKSsjreverse_iterator<__gnu_cxx::__normal_iterator > > >__state_ZNK9__gnu_cxx13new_allocatorI12RosterPlayerE8max_sizeEv_CharT_ZNKSt6vectorI12RosterPlayerSaIS0_EE4backEv_ZNSt6vectorI12RosterPlayerSaIS0_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS0_S2_EEjRKS0__ZNK9__gnu_cxx13new_allocatorIP4condE8max_sizeEvlocaleconvreferenceaction_ZNKSt6vectorIP4condSaIS1_EE4backEv_ZNSs6assignEPKcstrtoull_ZNSt6vectorI12RosterPlayerSaIS0_EE3endEv__normal_iterator > >team_num_ZNSt6vectorIP14cond_conditionSaIS1_EE14_M_fill_assignEjRKS1__M_disjunct__is_signedunsigned int_ZNSt6vectorI12RosterPlayerSaIS0_EEixEj_S_copy_charsfflush_ZNK9__gnu_cxx13new_allocatorI12RosterPlayerE7addressERS1_side_ZNKSt6vectorI12RosterPlayerSaIS0_EE2atEjshort intbeginint_p_cs_precedes_vtable_offset_M_is_leaked_ZNSs6resizeEjc_M_leak_hard_ZNSt6vectorIP14cond_conditionSaIS1_EE9push_backERKS1__ZNKSt6vectorIP14cond_conditionSaIS1_EE3endEvnpos_M_range_checkreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNKSt12_Vector_baseI12RosterPlayerSaIS0_EE19_M_get_Tp_allocatorEv~allocatormemchr__quad_t_ZNSt6vectorIP4condSaIS1_EE4dataEv_ZNSt12_Vector_baseIP4condSaIS1_EE13_M_deallocateEPS1_jwint_tfind_first_ofGCC: (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1zPLR| $$AB D zR| AB R </AB + ,!7AB _AA .symtab.strtab.shstrtab.rel.text.data.bss.rel.rodata.gcc_except_table.rel.debug_info.debug_abbrev.debug_loc.rel.debug_aranges.debug_ranges.rel.debug_line.debug_str.comment.note.GNU-stack.rel.eh_frame4 %H+`x9 4`x0 <RW gN h(^pplZw{:x w L Zx8x \0C}O0+ d8 H l(p:t   kh9xh9p9 //!ANSbnu penalty.cpp_ZL21NUM_COLUMNS_IN_ROSTER_ZL12CHAR_BUF_LEN_ZZL18__gthread_active_pvE20__gthread_active_ptrPenaltyTakerKickTakersPenScore_Z18RunPenaltyShootoutv__gxx_personality_v0_Z14the_commentaryv_ZN10commentary12rand_commentEPKcz_ZNKSs5c_strEvcommfprintf_ZNSsD1Ev_Z19AssignPenaltyTakersv_Z11TakePenaltyii_Z8GoalDiffvteam_Unwind_Resumenum_playersstrcpy_Z7randompifputs_Z9my_randomipthread_cancel!/6BJUZ !!!!!D X!v!"")7>JR]lv###"#09$X]fmrw|""" $2"NZ%s""&2@GS[f""& '#-:@FKS"c"ks(""'&F"`"hy'####t) !&3:AHOVdkp{!0?N]l{ />M\kz !0;GPWcqbmsy    ) 7 E T l              , 2 8 @ Z q       2 Y {       / F b v        - 6 S a j       /F 2Ucw < (E\} &4BP^lz2I`%B_}3`}7^0Lh 7Sv2Tv -3MTnu 8Wqx%,KRgn +C`~8>^d%BKfr  ( 6 D R ` n |         !!#!0!=!F!r!}!!!!!!!!!!!"" "6"C"P"^"d"o"u"""""""""##(#.#R#Y#x#~#######$ $%$,$L$S$n$u$$$$$$$$%)%0%U%\%|%%%%%%%%&&+&2&N&U&q&x&&&&&&&& '('E'l''''('(.(M(T(s(z(((((())$)>)E)_)f)))))))))* *+*2*M*T*n*u********* +E+d+k++++++++,,,3,W,^,},,,,,,,,-&-J-Q-p-w-------'...W.^.......//./5/Y/`///////(0/0]0d0000000'1.1\1c11111121282g2n22222223 3'3.3H3O3i3p33333334!4E4L4u4|4444444&5-5Q5X5|5555556 6-646X6_6666666 7797@7d7k777777788J8Q8p8w888888889a9g9999999::9:?:Y:`::::::;(;6;D;R;`;n;|;;;;;;;;;<<'<3<K<h<<<<<<<<= =&=@=F=f=l====>>,>I>f>r>}>>>>>>>??"?(?B?Z?w???????J@\@@@@@@@@@@A AA/AMAvAAAAAAAB B'BHBiBBBBBBBBBCC(C/CICPCpCwCCCCCCCCDD&DHDmDDDDDDDDDEE1E8EREYEtE{EEEEEEE FF6F=FXF_FuF|FFFFFFFG GEGLGpGGGHHH2HOHmHsHHHHHHHI I'I-IMISIIIIIIIIJzJJJJJJJJKKK#K[KiKuK{KKKKKKK L'LILgLmLLLLL0M;MFMQM\MgMrM}MMMMMMM N'NFNLNkNrNNNNNNNOO7O>OXO_OyOOOOOOOOP P$P+PEPKPfPmPPPPPPQQ&Q@QGQaQhQQQQQQQQQRR$R*RNRURzRRRRRRRRSS0S6SWS^SSSSSSSTTcToT~TTTTTTTTU U#U3U@UPUVUUUUUUUV!V0VVVVVVVVVV WW*W9WHWWWfWuWWWWWWWWWW XX)X8XtXXXXXXXXYY3Y9Y]YcYYYYYYYJZUZ`ZkZwZZZZZZZZ+[9[E[K[e[k[[[[[[[\7\=\\\b\\\] ]]!],]7]B]M]X]c]n]z]]]]]^^;^B^b^i^^^^^^^__(_/_I_P_j_q_________``6`=`\`c```````aa1a8aRaYasazaaaaaaaaab%bJbPbobubbbbbbbcc'c.cTc[c|cccccc3d@dNd\djdxddddddddddee$e3eCeeeeeee eeeeeeeeeef ff fff#f'f 0f4f9fGfUfqffffff ffffffffggBgOgTgagfgsg|gg (1hpyelftools-0.26/test/testfiles_for_readelf/penalty_64_clang.o.elf000066400000000000000000000313701357220457300252440ustar00rootroot00000000000000ELF>@@UHHH=H}H}0ɺH}HƈH}HE0H}HUEH}@E}E}}u=}1 +M9Z )+E9>}Y +M9 )+E9(CHEщMEH}KEE4EE$ =E}4E}}u*EE = E6EE %9 E EEan =H=H}H}0ɺH}HuHHEMHEH}HE0H}HU|H}HEщMEH}H=HpH}0ɺHhH`HH`_H_HhHP0HpHPLH}#HEщMEH} H]H}щHUHH0EE%%E}EE;%cH%HcMHcUHi DHHPHiHЁTHcE  EEEEi%;%%E %EE%%E}EEHcM;EE;%H%HcMHcUHi DHHPHiHЋ;uuH%HcMHcUHi DHHPHiHЁT:H%HcMHcUHi DHHPHiHЋuuuEE1H%H %HcUHcuHiHHiҠHHcuHc}Hi DHHPHiHHHEHMHcMHcUHi DHuHHPHiɠHDHcMHcUHiH}HHiɠHDHcMHcUHi DHHPHiɠHǁTEEHEЋEEEEH0]f.UHH }uH=H}Hc}HiHcMHiɠHH}0AH}HƈULŠEH}HE0H}HUEH%H %H}HEHMHcEHcMHiH}HHiHid@}@@@@Hi DHMHHcH}@@@DMi DIIPHiLDidD)ʉ=FH=H}H}0ɺHxHƈHxHp0H}HplH4%H%HH@H DH@H}H`HXHPHcEH<% %D%HXHPL`L&HEщMEH} HEщMEH} Eԁ}H=H@MHi DHcHiLE0H7LH8HH87HŠ7L(H(H 0H@H H}HEщMEH}H=HMHi DHcHiLE0H7LHHHHŠLHH0HHH}#HEщMEH} H ]H}щfffff.%+%zclang version 3.0 (trunk 136555)penalty.cpp/home/eliben/eli/esms/srcchar}aiaiintbooldoubleplayerstruct) namel+# pos}.# sidea1# pref_sidel3# st4# tk5# ps6# sh7# ag8# stamina9# injury:# suspension;# likes_left># likes_right?# likes_center@# tk_contribC# ps_contribD# sh_contribE# nominal_fatigue_per_minuteF# fatigueG# injuredH# activeJ# minutesM# shotsN# goalsO# savesP# tacklesQ# keypassesR# assistsS# foulsT# yellowcardsU# redcardsV# shots_onZ# shots_off[# conceded\# st_ab^# tk_ab_# ps_ab`# sh_aba# playerstruct) ii PenaltyTaker 2i KickTakers"  PenScore"  _Z18RunPenaltyShootoutvRunPenaltyShootoutVnTeam|nPenaltyNumxGameDecided?\_Z8GoalDiffvGoalDifffW _Z19AssignPenaltyTakersvAssignPenaltyTakerspVnTeamq|nTakerqxnPlayerqtmaxrpindexrl_Z11TakePenaltyiiTakePenaltyVnTeam|nPenaltyNumxrndT%R$>  $ > I!I/!I/ I  : ; I: ; 8 2 .: ; ' < 4 ? 2 I4 4I? : ;  .@: ; ' ? @  4: ; I .@: ; ' I? @  .@: ; ' ? @ : ; I b /home/eliben/eli/esms/src/home/eliben/eli/esms/src/.penalty.cppgame.h  MY _>> K)KgX #, y >" u[wu [tt L" Z>3,q!  >> u,0a OU-/o ! t tu3u# (ttj H$~CAssignPenaltyTakersTakePenaltyPenaltyTakerjRunPenaltyShootout2KickTakersGoalDiffOPenScore~playerstruct44&$Z4 =-j&) Y2fM)v )``&]/m,22}d) 2`G)p y) %s PENALTYSHOOTOUT %sWONPENALTYSHOOTOUTPENALTY%sGOAL ... %s %d-%d %s...SAVEOFFTARGETzPLRx $AC zRx &AC xAC X.debug_abbrev.rela.text.bss.rela.debug_pubtypes.rela.debug_pubnames.debug_aranges.debug_ranges.debug_str.debug_macinfo.rela.debug_info.note.GNU-stack.rela.debug_line.rela.eh_frame.gcc_except_table.debug_loc.shstrtab.strtab.symtab.data.rodata.str1.1@ %8   9 ~/(^Imqmm2 0904 2 $#82fX2hjP2 P @$e>    9'99 & *0>axP%ppenalty.cpp_Z18RunPenaltyShootoutvcomm_Z14the_commentaryv_ZN10commentary12rand_commentEPKcz_ZNKSs5c_strEvfprintf_ZNSsD1Ev_Z19AssignPenaltyTakersv_Z11TakePenaltyii_Z8GoalDiffvKickTakersteam_Unwind_Resume_ZSt9terminatevGCC_except_table0num_playersPenaltyTakerstrcpy_Z7randompiPenScore_Z9my_randomiGCC_except_table2__gxx_personality_v0%" 0 9!I V&g"9" 0%9D I )@f o! &""%  )`D #!6 I&]"{"#   '  )I V }        ' )< )w ) ) (% ' ,< E!U b&r )z ".@%IT 7e q! 4& < )"   %  . &R "u "  %  )H )P [   !- 4@ &T "r " %  )H )P `  ! 4# &7 "U "q ~ #   C Gbw0 8 y KS \ d^ o   $(1 `|  pyelftools-0.26/test/testfiles_for_readelf/penalty_64_gcc.o.elf000066400000000000000000002450201357220457300247130ustar00rootroot00000000000000ELF>8@@UHATSH@HHEкHHǸHEHHHHǸHEHEIHEHLHcHE{UE։}u&+U9Aڸ+E9,}u-+U9ڸ+E9~u(E}vE}ZttE`EUE։E}ut E"E;Eu EE}uAHHELHHǸHEHHHHǸHEHIHEHLHcHAHHELHHǸHEHHHHǸHEHIHEHLHcHH@[A\UH)UHSH(EEEwEZEUHcHcHHHHHHHHi DHH@uEHcЋHE9EuE}z9~E>EEEUHcHcHHHHHHHHi DHH;E~}EUHcHcHHHHHHHHi DHH@u@EUHcHcHHHHHHHHi DHHEEE܃E9E/MEHcHHHHHHHHcHi DHHPH]EHcHHHHHHHHcHiHHHH]uEUHcHcHHHHHHHHi DHHHcHcHHHHHHHHiHHEUHcHcHHHHHHHHi DHH@EE܉EEEH;EE}H([UHATSHP}uMEHcHHHHHHHHcHiHLHHELHHǸHEHHHHǸHEHEUHcHcHHHHHHHHiHHkd}؃}HHi DHcHcHHHHHHHHi DHH@k@u$IHEHLHcHHHHEкHHǸHEHHHHEHEHcЋH HIAؾHǸIHEHLHcH E}H}ȃ}HHi DHcHHHHHHHHcHi DHHPLHHELHǸHEHHHHEHIHEHLHcHH}ȃ}HHi DHcHHHHHHHHcHi DHHPLHHELHǸHEHHHHEHIHEHLHcHHP[A\% $ > : ; I9: ; : ; 9: ; : ;< <   : ; I8 2 : ;I8 .? : ; < I4 I<  : ; I8 .? : ; < $ > $ > I!I/   I : ; : ;  : ;  : ; I: ; &I.? : ;<  .? : ; I< !.? : ;I< ".? : ;I< #.? : ; I< $9: ; %.? : ; @I< &' : ; I8 (: ;I)I*&+,.? : ;I< - : ; .:: ; /.? : ; @I< 0.? : ;@I< 1 I2G : ; 3.? : ; @< 4.? : ; @< 5G : ; 64: ;@I? < 7 : ;I8 2 8.? : ;@I2 < 9.? : ;@2 < :.? : ;@I2 < ;.? : ;@I< <.? : ;@< =.? : ; @I2 < >.? : ;@I< ?4: ; @I? < @.? : ; @I< A.? : ; @2 < B.? : ;@2 < C : ; D I8 4 E : ; I8 2 F.? : ; @IL M < G.? : ; L < H : ; I.? : ; @2 < J.? : ; @L M < K.? : ; L < L.? : ; @I2 < M : ; N IO.? : ; @@P : ; Q R4: ; I S.? : ; @I@T4: ; I U: ; I V4: ; I? < W4: ; I?  X4: ; @I? <  Y4: ; @I? < Z4: ; @I? < d[ ?std34_`, b7 cQ dh e f g h i j n( oO qp r s u v w x }$ ~; W k     #Khfgklmnoqt6vNykz{}~ @aY t -ԆDeש>r?u@BxCDEFGH I7JN1C3Pn$Qn(Oq!=Y(Dg #Egljȫ>_789.   K# #  QL4S4V4\4]5^05_P5`q5a5 8W i  K 8# Lx8# Mx8# Nx8# PR9  T9 9   K VB# LA# MA# NA# PB  TBB s  K )O# LN# MN# NN# P\O  TOOint - - - -1 # # # # # #( #0 #8 #@ #H #P  #X " #` $ #h &#p *#t ,#x 0# 1# 2 # 6 # ?# H# I# J# K# L4# N# P #AT3 W Y]3 U#^#C l ## ####  # ##   ! ' [C K K  ֯h K !! K !# K ۯ K ! K ! K  , !\ K K ( ! ! !4O 44K K p ! ! K ! K -! K   , !- K ! K "!d 3$ ! ; ! W ! ! k K 5 K !9 K 4#K   ! K $#Kh-De†é%abs,t ,%div ,,'(!k#4! &!EK ! El !h! E!o4! E!! ! Ecd#'reme#kl-#'remm-#w,x,#'remy,#<L(ag){{{*!+ !  ! -! !{{44U,div 6!6N! !k--!V! 4!a4! 4!Y! 444U"|~ :! : -a! : ?! :!! !d44!]/!,,!-,, ,D! ,e! : N! : ! : ! :-tm8r#### ##### -#(! #0#8 CC C CC !C 7 N 4t4! $8.9( `j!_!!!! 3!IP!Pn&!y&!"!v4! 4!k4! 4!g!4KK4! !n!!Z4&!&!!bE!(E!oO4E!qE!jE!E!p4   ! = 4Y!U44!4 4 4 4!4""4 4D!aa!a!a!-a!?a 4 4!c#!BE4!Gg4!L4!P4!W&!&/0/>0_094!a!,a!Na11' 2 44B4D84:IR4/LsE/O! E/T4?{3^4?/b4E3h44s41@@56 - #etg mK1K`7:#;#A#G#H# I#(J#0K#8L#@M#HN#PO#QQ#RS#SU#TW#U^#V_#Wb#Xd#Yf#Zh#[o#\p#] }.! #; [5Q 4X26 X27 [#8 ]28 h28 n2]28   ]28 " , ]29 &F h28 -4n ]2?! 9 5 ]2??! 8 =4 ]2??8 E ]2! 9 N!! ?9 W(!! ?9 `K!?9 sn!  9 w!  9 {!9 !! ! 8 !??9""h2???9<"h2: t2 cd"h2}"h2"h2z2"h2z2??"h2z2??#h2! ?"#h2! E#h2? `#h20 2#h2z20 2#h2! 0 2#h20 % #h20 0 $]2;end 8 $h2;end C :$]20 LW$h20 Ut$]20 ^$h20 g$]20 o4$]20 u4$]20 z4%]2<i(%h2?< F%h2?0 4c%]2<%h2?< %h20 %]20 %]2?0 %h2?;at &]2?;at =&h2?0 2_&h2z20 2&h2! 0 (2&h20E2&h2z20V2&h2z2??0*2'h2! ?0 _2:'h2! 02a'h2?< 'h2/2'h2z20 2'h2z2??02'h2! ?0 2(h2! 0 2<(h2?< d(h2 ?0 *2(h2?z20 @2(h2?z2??0h2(h2?! ?0 i2)h2?! 0 2;)h2??0  b)h2 0 2)h2??0  )h2 0  )h2  0 2)h2??z20 24*h2??z2??02e*h2??! ?0 )2*h2??! 0 @2*h2???0 R2*h2  z20 d2+h2  ! ?0 y2K+h2  ! 0 2|+h2  ?0 2+h2  0 2+h2  ! ! 0 2,h2    0 2@,h2    82r,h2???82,h2??! ?=,?04,]2??<-h220 O! 1-]20 Y! N-]20 `Kk-]204-]2! ??0 |4-]2z2?0 4-]2! ?04 .]2?0 43.]2z2?04_.]2! ??0 4.]2! ?04.]2?0 4.]2z2?04/]2! ??0 4'/]2! ?0 4N/]2?0 4u/]2z2?0(4/]2! ??0 ;4/]2! ?0 N4/]2?0 \40]2z2?0=4B0]2! ??0 y4i0]2! ?0I40]2?0 40]2z2?0T40]2! ??0 4 1]2! ?0i411]2?0 WX1]2??0 z1]2z20}1]2??z201]2??z2??01]2! 0*2]2??! >]2??! ?4c2WW11c21W5 2 4# 4# A#5 ~4 2#?3X2?8' ?D~4@ t2/ 234/ N343 f3n23 ~3n23 3n2?/ 3n2/ 3n20 n24??3  4n2<>4n2/ Z4n2>Yn2?4442/L{4{4 4! ! !4!Z5! 405! 4/! P5! 0&! q5! ! /! 5! 0A! 5! ! .F-. Fx87####'age# 'st#$'tk#('ps#,'sh#0'ag#4#8#< #@!#D"#H$#L%#P&#T'#X(#\)#`*#d'dp+#h-#l.#p/#t42 4x8Bc78D|788I78/Lx8788/O~8788/Tx878?{3^ 88x8?/b4<883h^88x884s8x85851518C718C782W9 C7#e89g89 9 m981985 FV: #/ ]V:R9\:/ a 9n9b:/ e89b: h9\: k9\: 9 n9\:? 9 9\:/ x8:\:?3 2:\:x8? 9 : (9 R9 n9189h:92 @ 9# :@ :@ 9 :@?8 9 :@@ 8;@/%@';@@< vJ;@?80  g;@0  ;+@;end  ;@;end  ;+@0 o;@0 i;+@0 o<@0 i2<+@0 4O<+@0 4l<+@< (<@?50 54<+@0 ><+@3@<@?0 b8=@?0 q8*=+@?9 wI=+@?;at 8j=@?;at 8=+@?0 8=@0 8=+@0 8=@0 8=+@0 x8>@0 ~89>+@< W>@8< p>@/j >@ 8< R>@ ?8/ >@ / ?@  < #?@%@< sFI3@FI?0 b3BFI?0 q9BFI?9 wFI?;at 3BGI?;at 9B5GI?0 3BRGI0 9BoGI0 3BGI0 9BGI0 AGI0 (BGI< HI9B< HI/j @HI 9B< RhHI ?9B/ HI / HI  < HII< HI9  II?9BA-II?9B9tVII ?9B9'zII 9B8 n4II?! B |IAD1ID1DIH("!JE";#E"?D#E"CCK# /"/:JIK3"6RJIKA"GpJIKAI"KIKCKC!!JCKDX#E!+#F!#JJCKJ!$JKCKK!&J$KCKL!)CKJIM*M+M#'pos.M#1#3M#'st4#'tk5#'ps6#'sh7#'ag8#9#:#;#>#?#@#C#D#E#F#G#H#J#M#N#O#P#Q#R#S#T#U#V#Z#[#\#^#_#`#a#MM2 4NBMODMOOINO/LN4N#OO/ONUN#O O/TN{NO?{3^NON?/b4N#O3hNON O4sONIKOIK1IK1OM1OMO2WO M#eROOgkOOO mO)O1O)O 5 FP #/ ]POP/ aOOP/ e)OPP hPP k4PPO nRPP?O lPP/ NPP?3 PPN? lP P O O O1)OOPO2s V O# QV ,QVO OQV? OO hQVV 8QV/VQVV< vQV? O0  QV0  RV;end  RV;end  ;RV0 XRV0 yuRV0 RV0 yRV0 4RV0 4RV< ( SV?IK0 54)SV0 >FSV3@cSV?0 bOSV?0 q OSV?9 wSV?;at OSV?;at  OTV?0 O%TV0  OBTV0 O_TV0  O|TV0 NTV0 NTV< TV O< TV/j UV  O< R;UV ? O/ \UV / UV  < UVV< UV9 UV? OAVV? O9t)VV ? O9'MVV  O8 n4uVV?! B |VNP1VP1PVM DhWi#j#j#j# k#l#m#n# p#(q#0r#8tM#@uM#vW#|#~#W#87#P#WOKW.# F)X&XNWOXP6QR\RXQR?TSeOo4YQRq\RqXRqTTmaxrPRrLOYUUQTrnd\R2Y VR$Y VYV YV K OKZ WY W W X$83xY$93?$=L?$>36 X2?3X2?8' ?D~46 X2?3X2?8?$85Z$95?$=L?$>3 /usr/include/c++/4.4/usr/lib/gcc/x86_64-linux-gnu/4.4.3/include/usr/include/c++/4.4/bits/usr/include/bits/usr/include/usr/include/c++/4.4/ext/usr/include/c++/4.4/debug/usr/include/c++/4.4/x86_64-linux-gnu/bitspenalty.cppcstddefcstdiocstdlibctimecwcharclocalecstringstddef.hstringfwd.hbasic_string.hstl_vector.htypes.hstdio.hlibio.hwchar.h_G_config.hnew_allocator.hstdlib.htime.hdebug.hallocator.hlocale.hatomic_word.hbasic_string.tccstring.hgame.hrosterplayer.hvector.tccteamsheet_reader.hcond_condition.hcond_action.hcond.hcomment.hnumeric_traits.h U_w vh,J y0ؔwגlJ!K!6Z=: .0y:a t|n<o.zK?ɠ PENALTYSHOOTOUT %s WONPENALTYSHOOTOUT %sPENALTYGOAL ... %s %d-%d %s...SAVEOFFTARGET2 !3!q[!/!FG$r!-Swwvwwvww;v;<w<?w? vh[XRunPenaltyShootoutXGoalDiffXAssignPenaltyTakers4YTakePenaltyZPenaltyTaker)ZKickTakers?ZPenScore, _ZNKSt6vectorI12RosterPlayerSaIS0_EE8max_sizeEvwcspbrklconv_ZNSt12_Vector_baseIP4condSaIS1_EE19_M_get_Tp_allocatorEv_ZN4cond6createEiSs_unused2_ZNSs12_M_leak_hardEv_M_move_fileno__normal_iterator, std::allocator > >tm_sec_ZNSt6vectorI12RosterPlayerSaIS0_EE18_M_fill_initializeEmRKS0_*strchrallocate_ZN9__gnu_cxx13new_allocatorIP4condE8allocateEmPKvfwideteamnew_allocatorint_p_sep_by_spacegetwc_ZNKSs8capacityEv_ZN9__gnu_cxx13new_allocatorIP14cond_conditionE9constructEPS2_RKS2_fpos_t_ZNSs6resizeEmcminutes_ZNSt6vectorI12RosterPlayerSaIS0_EE5clearEvps_contrib_ZNSs5clearEvtk_abcreate_shortbuf_ZNSt6vectorIP14cond_conditionSaIS1_EE6insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEmRKS1___gnu_cxx_ZN14cond_condition7is_trueEv_ZN9__gnu_cxx13new_allocatorIcE10deallocateEPcm_ZNSs4nposE_vptr.cond_action_ZNSs4_Rep7_M_grabERKSaIcES2__M_refcopywcsncmpcapacity_ZNSt6vectorI12RosterPlayerSaIS0_EE5frontEvfeof_ZNSt6vectorIP14cond_conditionSaIS1_EE15_M_erase_at_endEPS1_st_ab_Z8GoalDiffvoverflow_arg_areatime_t_ZNSs13_S_copy_charsEPcS_S__flags_ZN4cond16test_and_executeEvteam_shootinglength_M_refcountreg_save_area__off_t_Z11TakePenaltyii_ZNSt6vectorI12RosterPlayerSaIS0_EE4dataEvsubstr_ZNKSt6vectorIP4condSaIS1_EEixEm_M_check_lengthdeallocatetm_isdstgrouping_lockallocatorwcstoll_ZN9__gnu_cxx13new_allocatorIP4condE7destroyEPS2__ZNSt6vectorIP4condSaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EE_M_end_of_storagemax_size_ZNKSs4findEcminjured_ZNSs6rbeginEvatof_ZN4cond13add_conditionEP14cond_conditionatoiatol_M_pstrcollwcsncpywcsspnnew_allocatorvector_ZNSt6vectorIP14cond_conditionSaIS1_EE5clearEvstrrchr__pos_ZNSt6vectorIP14cond_conditionSaIS1_EE7reserveEm__debug*memchrRosterPlayervector >setlocaleadd_condition_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_RKSs_ZNKSs7_M_dataEvvwscanf_M_erase_at_endgames_ZNSt6vectorI12RosterPlayerSaIS0_EE2atEmreplace_ZNKSs6_M_repEvassists_Rep_base_ZNSsaSEc_ZNKSs4findERKSsm_IO_write_endshots_ZNSs5eraseEN9__gnu_cxx17__normal_iteratorIPcSsEES2__ZN9__gnu_cxx13new_allocatorI12RosterPlayerE9constructEPS1_RKS1__ZNSs14_M_replace_auxEmmmcwctomb_ZNK9__gnu_cxx13new_allocatorI12RosterPlayerE7addressERKS1__ZNSt6vectorIP14cond_conditionSaIS1_EE6rbeginEvindex_ZNSt6vectorIP4condSaIS1_EE6insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEmRKS1__S_empty_rep_ZNSspLEPKcrename_ZNSt12_Vector_baseIP4condSaIS1_EE11_M_allocateEmlocaltimeactive_Alloc_hiderwcsstrfreadint_frac_digits_M_destroy_ZN9__gnu_cxx13new_allocatorIcE7destroyEPcfinalfoulsfgetc*wmemchr_ZNKSt6vectorIP4condSaIS1_EE5frontEvrfind_ZNKSs15_M_check_lengthEmmPKcfgetswcstodwcstofwcstokwcstol_ZNKSs6substrEmm_ZNSt6vectorIP4condSaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EES7_current_gkfreopen_ZNSt6vectorIP14cond_conditionSaIS1_EE2atEmsnprintf_ZNKSt6vectorIP4condSaIS1_EE8capacityEvsaveslldiv__clock_t_ZNKSs4copyEPcmm_ZNSs6insertEmRKSs__gnu_debugps_abvsnprintf_ZNSs4swapERSswmemsetoperator=_vptr.cond_condition_ZNSt6vectorIP4condSaIS1_EE7reserveEmbtowcnTeamstrpbrk_ZNSs12_S_empty_repEvplayerstruct_ZNSs6assignERKSsputwcharnationality_ZNSs4_Rep8_M_cloneERKSaIcEmcurrency_symbol__max_ZN11cond_action19worst_player_on_posESs_ZNSs6appendEPKc_ZNSt6vectorIP14cond_conditionSaIS1_EE5beginEv_M_allocate_ZNKSs8_M_limitEmm_chainint_n_cs_precedes_ZN9__gnu_cxx24__numeric_traits_integerIlE5__maxEis_true_ZNKSs4_Rep12_M_is_sharedEvwcstoul_M_refdataworst_player_on_posunsigned char_ZNKSt12_Vector_baseIP4condSaIS1_EE19_M_get_Tp_allocatorEvwcsxfrm_ZNKSt6vectorIP14cond_conditionSaIS1_EE4dataEv_IO_lock_twcslen_ZNKSs13find_first_ofEPKcmredcards_Exit_ZNKSs7compareEmmPKcm_M_set_length_and_sharable_ZNSs4_Rep26_M_set_length_and_sharableEm_ZNKSt6vectorI12RosterPlayerSaIS0_EE5frontEv_M_checkassign_ZNSt12_Vector_baseI12RosterPlayerSaIS0_EE11_M_allocateEm_ZNKSt6vectorIP4condSaIS1_EE12_M_check_lenEmPKc_ZNSs9_M_assignEPcmcyellowcardsrend_ZNKSt6vectorIP4condSaIS1_EE5beginEv_ZNSs4_Rep10_M_refcopyEvsetbuf_ZNSt6vectorI12RosterPlayerSaIS0_EE5beginEv_ZNKSt6vectorIP14cond_conditionSaIS1_EE8max_sizeEv_ZNSs7_M_copyEPcPKcm_ZNSs13_S_copy_charsEPcN9__gnu_cxx17__normal_iteratorIS_SsEES2_sh_ab_ZNKSs7compareEPKctm_zone_ZNKSs16find_last_not_ofEcm_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_S1_S1_fwscanftest_and_executewcsftimeswap_ZNKSs5emptyEvmbrlen_ZNKSs2atEm_ZNSt6vectorI12RosterPlayerSaIS0_EE6insertEN9__gnu_cxx17__normal_iteratorIPS0_S2_EEmRKS0_aggressionreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_NS0_IPKcSsEES5__ZNSt6vectorIP14cond_conditionSaIS1_EE18_M_fill_initializeEmRKS1__M_iend_ZNKSt6vectorIP4condSaIS1_EE5emptyEvrewind_ZNSspLERKSs_S_create*wcsstrinjuriesstrtoldstrtollpenalty.cppatexit_IO_write_ptr_ZNKSt6vectorI12RosterPlayerSaIS0_EE14_M_range_checkEm_ZNSt6vectorI12RosterPlayerSaIS0_EE6resizeEmS0_negative_signvsscanf_ZN9__gnu_cxx24__numeric_traits_integerIiE11__is_signedE~basic_stringwcscat_ZNSt6vectorIP4condSaIS1_EE14_M_fill_assignEmRKS1__ZNKSs9_M_ibeginEvftell~cond_actionint_curr_symbolnPlayer_ZNKSs7compareERKSs_ZNSt6vectorI12RosterPlayerSaIS0_EE7reserveEm_ZNK9__gnu_cxx13new_allocatorIcE7addressERc__normal_iterator > >/home/eliben/eli/esms/srcsize_M_clone_M_replace_safe_ZNSt6vectorIP4condSaIS1_EE4swapERS3__ZNSs6appendERKSsmmFILE_ZNSbIwSt11char_traitsIwESaIwEE4_Rep11_S_max_sizeE_ZNSs6appendERKSsnew_allocator_M_ibegin_ZNSt6vectorIP4condSaIS1_EE6resizeEmS1_clock_Z19AssignPenaltyTakersvclearasctimetmpfile_ZNKSt6vectorI12RosterPlayerSaIS0_EE5beginEvtactic_ZNSs6assignERKSsmmsize_t__countquot_ZNSt6vectorIP14cond_conditionSaIS1_EE14_M_fill_assignEmRKS1__ZNKSs8_M_checkEmPKcdestroyfrontcond_condition_ZNKSs17find_first_not_ofEPKcmconceded_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_S2_S2_perror_ZNSs5eraseEN9__gnu_cxx17__normal_iteratorIPcSsEE_ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEEmc_ZNKSt6vectorI12RosterPlayerSaIS0_EE5emptyEv_M_grab_M_is_shared_M_fill_insert_IO_save_base_ZNKSt6vectorIP14cond_conditionSaIS1_EE5frontEv_ZNSt6vectorI12RosterPlayerSaIS0_EE4swapERS2__ZNKSt6vectorIP14cond_conditionSaIS1_EEixEm_S_empty_rep_storage_ZNKSt6vectorIP14cond_conditionSaIS1_EE6rbeginEvwctobmon_thousands_septk_contribfwprintf_M_assign_ZNSt6vectorI12RosterPlayerSaIS0_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS0_S2_EES6__ZN9__gnu_cxx13new_allocatorIcE9constructEPcRKc_S_max_size_M_fill_assign__wchbfitnessfind_last_not_of_M_check_lenvfwscanf_Vector_base >_ZNKSs12find_last_ofEPKcmmblen_ZNKSs5rfindEcmvfwprintf_ZNSt6vectorIP4condSaIS1_EE5beginEv_ZNKSs13get_allocatorEv__digits_ZNSt6vectorIP4condSaIS1_EE8pop_backEv_ZNKSs6lengthEv__pad2rbeginwcstoull_ZNKSt6vectorI12RosterPlayerSaIS0_EE4dataEv_M_copy__vtbl_ptr_type_ZNKSs4findEPKcm_ZNKSs16find_last_not_ofEPKcmwmemmovefputwc_ZNSs4_Rep10_M_disposeERKSaIcE_ZNSs6appendEmc_ZNKSs5c_strEv_ZNKSsixEmfputws_ZNSs4_Rep10_M_destroyERKSaIcE_Vector_base__normal_iterator, std::allocator > >set_action_ZNSs2atEm_ZNKSs11_M_disjunctEPKc_ZNKSs6rbeginEvallocator_M_implreverse_iterator<__gnu_cxx::__normal_iterator, std::allocator > > >wcschrGameDecidedfind_nextget_allocator_ZNKSt6vectorI12RosterPlayerSaIS0_EE6rbeginEv_ZNSs4rendEv_M_limitdecimal_point_ZNSt6vectorI12RosterPlayerSaIS0_EE9push_backERKS0__ZNSt6vectorI12RosterPlayerSaIS0_EE4backEvaddress_Atomic_wordstaminafatigue_ZNK9__gnu_cxx13new_allocatorIcE8max_sizeEv_ZN9__gnu_cxx24__numeric_traits_integerIlE11__is_signedE_ZNKSt6vectorIP14cond_conditionSaIS1_EE4rendEv_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKcS4_fclosestrtoul_ZNSt6vectorI12RosterPlayerSaIS0_EE14_M_fill_assignEmRKS0__ZNSt6vectorIP4condSaIS1_EEaSERKS3__ZNKSs12find_last_ofEcmfrac_digitsstrerror_ZNKSs5beginEvoperator[]fouls__normal_iterator > >strxfrm_ZNSt6vectorIP4condSaIS1_EE15_M_erase_at_endEPS1_allocator_ZNKSs3endEv_ZNSt6vectorIP14cond_conditionSaIS1_EE4dataEvshots_offKickTakerswcstombsallocator_ZNKSs13find_first_ofEcm_ZNSt6vectorIP14cond_conditionSaIS1_EE6insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_substitutionsthousands_sep_ZNSt6vectorIP14cond_conditionSaIS1_EE3endEv_ZNSs3endEvpop_back_ZNSs6insertEmmc_ZN9__gnu_cxx24__numeric_traits_integerIiE5__maxE_ZN11cond_action6createEiSs_ZNSs4_Rep20_S_empty_rep_storageE_ZNSt6vectorI12RosterPlayerSaIS0_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0__ZNSs7replaceEmmRKSsmmvector >swscanfclearerr_ZNSt12_Vector_baseI12RosterPlayerSaIS0_EE13_M_deallocateEPS0_mnamen_sep_by_space_sbufungetcNUM_COLUMNS_IN_ROSTER_IO_save_endwprintftm_min_ZN9__gnu_cxx13new_allocatorIP4condE9constructEPS2_RKS2__ZNKSt12_Vector_baseI12RosterPlayerSaIS0_EE13get_allocatorEvsrandp_cs_precedeskeypasseswcscmp_ZN9__gnu_cxx13new_allocatorI12RosterPlayerE10deallocateEPS1_m_ZNSs6assignEPKcmfp_offset__time_tmbsrtowcs_ZNSt6vectorI12RosterPlayerSaIS0_EE3endEvmon_groupinggp_offset_ZNSs7replaceEmmmcsh_contribTakePenalty_ZNSs6insertEmRKSsmmshot_probclock_tmbsinitfind_first_not_of_ZNSs7_M_leakEv_M_leaklikes_left__normal_iterator > >_ZNKSt6vectorI12RosterPlayerSaIS0_EE8capacityEvsystemtypedef __va_list_tag __va_list_tagshort unsigned int_ZN9__gnu_cxx13new_allocatorIcE8allocateEmPKvsigned char_ZNSt6vectorIP4condSaIS1_EE6insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1__ZNKSs12find_last_ofEPKcmm_ZNSt6vectorIP14cond_conditionSaIS1_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEmRKS1__ZNKSs5rfindEPKcm_ZNSt6vectorIP14cond_conditionSaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EES7_swprintf_M_replace_auxcomm_ZNSt6vectorIP4condSaIS1_EE6rbeginEv*wcschrback_ZNKSt6vectorIP4condSaIS1_EE14_M_range_checkEmRunPenaltyShootoutcond_actiontm_wday__off64_twcscpywchar_tvswprintfputwccond_IO_read_base_ZNSs6assignEmc_offset_ZNKSt6vectorIP14cond_conditionSaIS1_EE4sizeEvstring_ZN9__gnu_cxx3absExPenaltyTaker__normal_iterator > >_IO_buf_end_ZNSt6vectorIP14cond_conditionSaIS1_EE5frontEv_ZNSs6insertEmPKcmbstowcsmbstate_tn_sign_posn_M_repteam_passingresizewcsrtombstm_yday*strrchr_ZNKSt6vectorIP4condSaIS1_EE4dataEv_ZNKSs4dataEvwcscspn_ZNSs7replaceEmmPKc_mode_IO_write_base_M_insert_auxreverse_iterator<__gnu_cxx::__normal_iterator > > >_M_data_ZNKSt6vectorIP14cond_conditionSaIS1_EE5emptyEvnTaker__wch_ZN11cond_action7executeEv_ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEEclikes_right~vector_ZNSt6vectorIP4condSaIS1_EE4rendEv_ZNKSs17find_first_not_ofEPKcmmappend_ZN14cond_condition6createEiSsvector >vswscanfremove_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKcmtm_moncopytime_ZNSs4_Rep9_S_createEmmRKSaIcE_Vector_base >_ZNKSs7compareEmmPKc_ZNKSt6vectorIP14cond_conditionSaIS1_EE4backEv_ZNK9__gnu_cxx13new_allocatorIP4condE7addressERKS2_reverse_iterator<__gnu_cxx::__normal_iterator > > >nominal_fatigue_per_minutelong intfgetpos_ZNK9__gnu_cxx13new_allocatorIcE7addressERKcvwprintf_ZNSt6vectorIP4condSaIS1_EE3endEv_IO_markerint_p_sign_posnnew_allocator_ZNSt6vectorIP4condSaIS1_EE6assignEmRKS1_getcwscanfgets_Z18RunPenaltyShootoutv_ZNSs6appendEPKcmstrstr_ZNKSt6vectorIP4condSaIS1_EE3endEvmon_decimal_pointvscanf_S_construct_ZNSt6vectorIP14cond_conditionSaIS1_EE6assignEmRKS1_strtodstrtofstrtokstrtollong doublereserve_ZNSs7replaceEmmRKSs_ZNSt6vectorIP14cond_conditionSaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_p_sep_by_spacelong unsigned int_ZNSt6vectorIP14cond_conditionSaIS1_EE4rendEv_ZNKSt6vectorI12RosterPlayerSaIS0_EEixEm_ZNKSt6vectorIP4condSaIS1_EE8max_sizeEvbool_ZNKSt12_Vector_baseIP14cond_conditionSaIS1_EE19_M_get_Tp_allocatorEvoperator+=reverse_iterator<__gnu_cxx::__normal_iterator, std::allocator > > >tmpnam_ZNSt6vectorIP4condSaIS1_EE5clearEv_ZNSt6vectorIP4condSaIS1_EE9push_backERKS1_ferror_ZNSs6resizeEm_ZNSs13_S_copy_charsEPcN9__gnu_cxx17__normal_iteratorIPKcSsEES4__M_dataplus_ZNSt6vectorI12RosterPlayerSaIS0_EE6rbeginEv_ZNSsaSEPKcchar_ZNSt6vectorIP14cond_conditionSaIS1_EE4swapERS3_push_backwcstold_S_terminal*strpbrkinsert_Rep_IO_buf_base_ZNSs9_M_mutateEmmm_ZNSt6vectorIP4condSaIS1_EE5frontEv_ZN9__gnu_cxx24__numeric_traits_integerIlE8__digitsE_ZNSt6vectorI12RosterPlayerSaIS0_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS0_S2_EEscore_ZNSspLEc_ZN9__gnu_cxx13new_allocatorIP4condE10deallocateEPS2_m_ZNSs7_M_moveEPcPKcmdifftime_IO_read_endexecute_IO_FILE_ZNKSt12_Vector_baseIP14cond_conditionSaIS1_EE13get_allocatorEvwmemchr_ZNSt6vectorI12RosterPlayerSaIS0_EE4rendEv_ZNSt6vectorIP4condSaIS1_EEixEmconds_ZNSbIwSt11char_traitsIwESaIwEE4_Rep11_S_terminalE_ZNKSs13find_first_ofEPKcmm_ZNSs5beginEv_Vector_base >_ZNSs7_M_dataEPc_ZNK9__gnu_cxx13new_allocatorIP4condE7addressERS2__ZNKSs8max_sizeEvtm_hour_ZNKSs12find_last_ofERKSsm_ZNK9__gnu_cxx13new_allocatorIP14cond_conditionE8max_sizeEv_ZNKSs4findEPKcmm_ZNK9__gnu_cxx13new_allocatorIP14cond_conditionE7addressERS2_likes_centeratollfseek_ZNSs12_S_constructEmcRKSaIcE__mintacklesbsearch~new_allocatorreverse_iterator<__gnu_cxx::__normal_iterator > > >allocatorbasic_string, std::allocator >getwcharRosterPlayerArrayint_n_sign_posn_ZNSs4_Rep11_S_terminalEfullname_ZNSt6vectorI12RosterPlayerSaIS0_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS0_S2_EEmRKS0_tm_mday_S_compare_ZNSs6insertEmPKcmc_str__pad1__pad3__pad4__pad5_ZNKSs5rfindEPKcmmnew_allocatorgmtimeAssignPenaltyTakersfsetposvfscanf_ZNKSs17find_first_not_ofEcm_markers_pos_M_length_ZNKSs16find_last_not_ofEPKcmm_ZNKSt6vectorIP14cond_conditionSaIS1_EE12_M_check_lenEmPKc_ZNSt6vectorIP4condSaIS1_EE4backEv*strstr_ZNSt6vectorI12RosterPlayerSaIS0_EE8pop_backEv_ZNSt6vectorIP4condSaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1___is_signedldiv_ZNKSt6vectorIP14cond_conditionSaIS1_EE5beginEverasedouble_ZN9__gnu_cxx13new_allocatorIP14cond_conditionE10deallocateEPS2_mpref_side_ZNKSs17find_first_not_ofERKSsm__FILEtm_year_ZNKSt6vectorI12RosterPlayerSaIS0_EE4rendEv_ZNKSt6vectorIP4condSaIS1_EE4rendEv_ZNKSs4rendEvctime_ZNSt6vectorIP4condSaIS1_EE2atEm_M_fill_initializeqsort_M_set_sharable_ZNSs15_M_replace_safeEmmPKcmdatawmemcmpwcrtombllabs__valuePenScore_ZN9__gnu_cxx13new_allocatorIP14cond_conditionE7destroyEPS2__ZNSt6vectorI12RosterPlayerSaIS0_EEaSERKS2__ZNSs9push_backEc_ZN9__gnu_cxx24__numeric_traits_integerIiE8__digitsE_ZNKSt6vectorIP14cond_conditionSaIS1_EE8capacityEv*wcsrchr_ZNKSs4_Rep12_M_is_leakedEvpositive_sign_ZNSt12_Vector_baseIP14cond_conditionSaIS1_EE11_M_allocateEmsetvbuf_ZN4cond10set_actionEP11cond_action_ZNSt6vectorI12RosterPlayerSaIS0_EE6insertEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0__ZNSt6vectorIP14cond_conditionSaIS1_EE4backEvconditionsGoalDiff_ZNKSt6vectorIP14cond_conditionSaIS1_EE2atEmstrftimeemptyconstruct_ZNKSs7compareEmmRKSsmmmbtowc_ZNKSs7_M_iendEv_M_dispose_ZN9__gnu_cxx24__numeric_traits_integerIiE5__minE_M_finishgoals_ZNSs4_Rep13_M_set_leakedEvlong long unsigned int~cond_conditionmbrtowc_cur_column_ZNSs4_Rep12_S_empty_repEvwmemcpy__compar_fn_tfinalshots_off_ZN9__gnu_cxx24__numeric_traits_integerIlE5__minE_ZNSs13_S_copy_charsEPcPKcS1__ZNKSt6vectorIP4condSaIS1_EE2atEmsuspension_ZNSt12_Vector_baseI12RosterPlayerSaIS0_EE19_M_get_Tp_allocatorEv_ZNKSt6vectorIP4condSaIS1_EE6rbeginEvroster_playersfloatshots_on~_Vector_base_M_set_leaked_ZNSt6vectorI12RosterPlayerSaIS0_EE15_M_erase_at_endEPS0__ZNSs4_Rep15_M_set_sharableEv_ZNSs4_Rep11_S_max_sizeEwcsncatfopen_ZNSt6vectorI12RosterPlayerSaIS0_EE6assignEmRKS0_teamstm_gmtoffpenalty_takeraction_IO_backup_base_ZNSt6vectorIP4condSaIS1_EE18_M_fill_initializeEmRKS1_int_n_sep_by_space_IO_read_ptr_ZNSt12_Vector_baseIP14cond_conditionSaIS1_EE13_M_deallocateEPS1_m_M_deallocate_M_mutateplayer_ZNSsaSERKSsgetenvfgetwc_M_capacity_ZNSt6vectorIP14cond_conditionSaIS1_EEixEmfgetws_ZNKSt12_Vector_baseIP4condSaIS1_EE13get_allocatorEvrandbasic_string_ZN9__gnu_cxx13new_allocatorI12RosterPlayerE8allocateEmPKvfinalshots_on_ZNSt12_Vector_baseIP14cond_conditionSaIS1_EE19_M_get_Tp_allocatorEv_ZNKSs13find_first_ofERKSsm_ZNSt6vectorIP4condSaIS1_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEmRKS1__old_offsetstrchrwcscollinjurystopPKs_ZNKSt6vectorIP14cond_conditionSaIS1_EE14_M_range_checkEm_ZNKSt6vectorI12RosterPlayerSaIS0_EE4sizeEv_ZNSt6vectorIP14cond_conditionSaIS1_EEaSERKS3_nPenaltyNump_sign_posn_ZNSs10_S_compareEmmwcsrchrcomparelong long int_ZNKSt6vectorIP4condSaIS1_EE4sizeEv_ZNKSs4sizeEv_ZNKSt6vectorI12RosterPlayerSaIS0_EE3endEv_flags2_Vector_implmktime*wcspbrkgetchar_ZNSs5eraseEmm_ZNSs4_Rep10_M_refdataEvteam_tackling_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_mc_ZNSt6vectorIP14cond_conditionSaIS1_EE8pop_backEvnum_players_M_start_ZNK9__gnu_cxx13new_allocatorIP14cond_conditionE7addressERKS2__ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKc_ZNSt6vectorIP14cond_conditionSaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EE_ZNKSs5rfindERKSsmungetwcfind_last_of_ZN9__gnu_cxx3divExxn_cs_precedesCHAR_BUF_LEN__normal_iterator > >_M_get_Tp_allocator_ZNKSs16find_last_not_ofERKSsmreverse_iterator<__gnu_cxx::__normal_iterator > > >__state_ZNK9__gnu_cxx13new_allocatorI12RosterPlayerE8max_sizeEv_ZNKSt6vectorI12RosterPlayerSaIS0_EE4backEv_ZN9__gnu_cxx13new_allocatorIP14cond_conditionE8allocateEmPKv_ZNK9__gnu_cxx13new_allocatorIP4condE8max_sizeEvlocaleconv_ZNKSt6vectorIP4condSaIS1_EE4backEv_ZNSs6assignEPKcstrtoull_ZNSs7replaceEmmPKcm__normal_iterator > >_ZNKSs7compareEmmRKSs_ZNSt6vectorIP14cond_conditionSaIS1_EE6resizeEmS1_team_num_M_disjunct_ZNSt6vectorIP4condSaIS1_EE4dataEvunsigned int_ZNSt6vectorI12RosterPlayerSaIS0_EEixEm_S_copy_chars_ZNSs7reserveEmfflushGNU C++ 4.4.3_ZNSbIwSt11char_traitsIwESaIwEE4nposE_ZNK9__gnu_cxx13new_allocatorI12RosterPlayerE7addressERS1_side_ZNKSt6vectorI12RosterPlayerSaIS0_EE2atEmshort intbeginint_p_cs_precedes_vtable_offset_M_is_leaked_M_leak_hard_ZNSt6vectorIP14cond_conditionSaIS1_EE9push_backERKS1__ZNKSt6vectorIP14cond_conditionSaIS1_EE3endEvnpos_ZNKSt6vectorI12RosterPlayerSaIS0_EE12_M_check_lenEmPKc_M_range_checkreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNSsixEm_ZN9__gnu_cxx13new_allocatorI12RosterPlayerE7destroyEPS1__ZNKSt12_Vector_baseI12RosterPlayerSaIS0_EE19_M_get_Tp_allocatorEv~allocatormemchr_ZNSt12_Vector_baseIP4condSaIS1_EE13_M_deallocateEPS1_mwint_tfind_first_ofGCC: (Ubuntu 4.4.3-4ubuntu5) 4.4.3zPLRx  $AC GzPRx  AC <LAC r$AC C.symtab.strtab.shstrtab.rela.text.data.bss.debug_abbrev.rela.debug_info.rela.debug_line.rela.rodata.gcc_except_table.debug_loc.rela.debug_pubnames.rela.debug_aranges.debug_str.comment.note.GNU-stack.rela.eh_frame @ P &T ,` 9 1` }Dh[? nUEkPHfnaH nPoo0qIq0 I00qN0f$PIP    p( t: x k9x99%L>;P]bnu penalty.cpp_ZL21NUM_COLUMNS_IN_ROSTER_ZL12CHAR_BUF_LEN_ZZL18__gthread_active_pvE20__gthread_active_ptrPenaltyTakerKickTakersPenScore_Unwind_Resume_Z18RunPenaltyShootoutv__gxx_personality_v0_Z14the_commentaryv_ZN10commentary12rand_commentEPKcz_ZNKSs5c_strEvcommfprintf_ZNSsD1Ev_Z19AssignPenaltyTakersv_Z11TakePenaltyii_Z8GoalDiffvteamnum_playersstrcpy_Z7randompifputs_Z9my_randomipthread_cancel  (4>C P\a ~!"""":"d!x"" #@   ('=KQ #`DVe u (_ #t  $0 #`l # #`$ #= H% #`  # ~  , (  3 #Hb #Pw& 4'    #`D #@%0 @=Sak( #H # _  ' 2 @ G j #H #  d   '     K  ! ) 0 .5 iB 1 7 ]!R Q8\ : m o} :  1  ) #  - &F F# ?1 @ &FT &Fj Hp k+v 68|  &F F ?  &F &F < S 7 ! &6 &F F- ?; J &F^ &Ft  -z ZM \. O "' fK c' ^L  Q)   % w3 T '5 s, B; 5J )Y N+h w g 3 X*  IB q$ 9    F  D @, L< L `\ )l o9|  v9 }9 9 H+  ; , ! $,  p% <D ,P ^ FIm &y % y% >   E/ ` N$ :- 59 #S  j  2 K  .   A* N Q  r j7 9  / CF / R& 8-=  Y m p 3>  2 T$  a )| G 9    ) e&  J (H `/     % 9M 0j :  f , x , x , x/ E9  &D PQ ?V 7@  6 f; e j 78 CP +;m V * b) X? < C  %  _0B t0c "  & !    <  / d7F g bJ f0 HA  {0 # $ 6 C9 z- ;, I): *H NV *Bd Dz   5 3F -  F<" 99 ) P '?u (  N *   &C dC  5 R p   8  @ (&& %S t)p   ( # G l * j)Q /-s /  <  !% D# [)? ,+[   A  | ** F  i       (   % <G /@i | S  ~$ / H ( 0 :F  E& =@ G G a p5h   3 p  1  ! : 7T %Z ou %{ . q 5' C 5  J 6? { " o b fv f LN 8  l" W    0 $ %2 =@ XN T \  j  %x 1  H ?$ E * nL    B P/ 8 v0 "JB -d Mk ev 23 A 3 +  + R6 * )   d _?. R&5 B&H O p 3w    7K  5 ! ! 4*! 1!  M! KT! p! Kw! 2! K! W! K! @! K9! E! C" 3$" L+" >"  E"  Q" Cf" C" C" C" C" C# C$# CG# b# [ i# C# [ # k3# [ # K# hL# 6# hL#  $ "&$ m!<$ C$ 'Y$ `$ v$ -}$ $ -$ 8<$ $ E$ $ $ $ 6% *% <*% *1% 2H% O% e% 0l% K%  % % 0?% %  % %  % M& $& u?& 1F& a& 1h&  & 1& 4& ,& & ,& @& ,& /' ,!' Z <' ,C' c' 3j' I=' '  ' ' U' ' g%' ' QJ( ( )>( 3E( f( 3m(  ( 3( &( 3( V9( 3( *) 3) "=) 3D) E,d) `;k) KF) `;) Y) `;) {) !) 0* !* #6* !=* kJg* !n* 4+* !* %* !* * !* ?-!+ !(+ @GM+ !T+ F~+ !+ h+ !+ + !+ , !, B, (I, t,  {, <, 0, p7, -,  , , D - i9- 3- <:- +P- fW- m- [t- 7- [- U- [- M- [- .  . G5.  <. 9a.  h. A(.  . \. N. @D. N. 5/ N / )/ N0/ !P/ GW/ 6w/ G~/ '/ G/ </ G/  / 0&/ ;0 0&0 ,D0 0&K0 k0 0&r0 90 0 H0 0 :0 0 ^ 1 1 L31  :1  Z1 Ea1 -|1 E1 J1 E1 @?1 E1 12 E2 -,2 E32  2 :2 -C2 2 2 A2 32 82 2 #3  3 @3 L3 =43 :3  P3 eAV3 ?h3 <n3 A3 !3 <3 03 ZF3 3 3 3 -4 p? 4 "4 d )4 @4 F4 W\4 c4  4 WN4 '4 t4  4 m05 #!25 D85 iR5  Y5 3s5 y5 *5 /5 :5 /5 :$5 5  5 ;Y6 :g6 +u6 6 4 6 +6 6  6 76 %6 u6 ?6 97 D7 @*7 97 8Q7 e7 ~7 77 %7 K7 %7  7 q7 C8 C8 (%"8 (8 NI>8 6?D8 `8 f8 M8 f8 f8 LN)9 89 H>9 @T9 HZ9  Np9 fv9 $9 9 9 9 WA9  9 : B: #: : : : : ,; [ ; =); 0; AL; hLS; wi; hLp; !; %; E; ; >3; ; t; -< x5< -< ;4< ;< EQ< X< n< *u< (< < &< 0?< < 0< A<  < sK =  = W1,= KM3= Q= r= 4L= = = = e= (= = (= I> <> > <%>  ;> 3B> Y> "`> :r> 3x> _>> 3> > `;> Z4> `;> %? ? O%?  ,? T>? m<E? *b? h? * ? ? 8? ]+? =#? ? M? @ sA[@ o@ @ 7@ %@ 7@ %@ G@ q@ I A CA m;,A 2A 6HA 6?NA jA pA <A A e A .KA A ,A A B ?mB fB fB LNB B HB CB HC 1C f C 056C JC cC C WAC  C =C BC B.D BD [D ~D D ,D [ D GED D *0D hLD k E hLE 0;7E z"TE LjE qE O E E E -E )1E -E E E )E F F *F J;F BF =XF 0?_F +uF 0{F F  F 9CF  F }F KMF DF  G >7G >G d*TG [G qG (xG >G (G -G <G z!G <G G 3G LH " H FH 3"H "BH 3IH jH `;pH zGH `;H S(H H |3H  H H m<H " I I }/I 6I 'XI ]+_I 0|I I 1:I I I z)I .KI >J BBJ J xJ =)J qJ .KJ J "J 5J *,K &K ;,K 1 PK  ]K :$zK /LK ;K :K DK @ L Z&L y,)L W78L GL VL %eL .tL BL L 3 L LL uL ?L  L 7L %L 9 M  M !(M 7M NAFM !UM  dM +sM M 4 M +M M M 7N %N c66N %O HO ]O fO kC P P 6P TP WAnP  tP  P BP ^NQ Q .Q QQ jQ ,Q [ Q e Q Q u/Q hLQ vQ hLQ 2 R #/'R /=R DR (ZR aR AwR -~R ,R -R <R R ER R 1R *R S S  +S 0?2S lHS 0NS z eS  lS 5S  S S KMS (S L<S @ T T 4'T .T  DT (KT l:aT (hT -J~T <T CKT <T *T 3T 2T "T T 3T o'U 3U  =U `;CU ^U `;dU 0 U U U  U 2U m<U YBU U V  V \D+V ]+2V :OV VV wV ~V +!V $BV 4V CV E@V  V ^"W W HW &,W sF:W *HW VW :$dW 8sW NW 4BW ~ W  CW 9AW 5 X =X *)X /X%X-X 6X DX 1XXX LX 9X XX;X XX4X  X , Y %%Y  6Y % $ >  : ;  : ; I8  : ; I8  : ; I 8 .? : ; I@B  4: ; I 4: ; I?  &I}} { 6 hello.c"LK/long long intshort unsigned intunsigned intGNU C 4.7.3lintlong long unsigned intbit1bit2bit3bit4charunsigned charmainlong intlong unsigned intGLOBAL_CONSThiLosigned char/home/frederik/src/git/pyelftools/test/testfiles_for_readelffloathello.cshort inttryGlobalsizetypeGCC: (Ubuntu/Linaro 4.7.3-12ubuntu1) 4.7.3A)aeabi5T  |  BB .symtab.strtab.shstrtab.rel.text.data.bss.rodata.rel.debug_info.debug_abbrev.debug_loc.rel.debug_aranges.rel.debug_line.debug_str.comment.note.GNU-stack.ARM.attributes.rel.debug_frame4  %T+T0T <`l8 HVw,e a  x:t  0#0 ,LpL*x,     5       &+ 0hello.c$d$aGLOBAL_CONSTtryGlobalhiLomainputs  ! (/6=DKY`gnu  1>HUZg +pyelftools-0.26/test/testfiles_for_readelf/reloc_armhf_gcc.o.elf000066400000000000000000000060501357220457300252050ustar00rootroot00000000000000ELF(t4(@#FHello Worldh.!oint?jdefijkO#cr#:V#mno# VO#`O#[O#eO#}"O0 abc$O B O O  y% $ > $ >  : ;  : ; I8  : ; I8  : ; I 8 .? : ; I@B  4: ; I 4: ; I?  &I}}w6 hello.c"0g!long long intshort unsigned intunsigned intGNU C 4.7.3lintlong long unsigned intbit1bit2bit3bit4charunsigned charmainlong intlong unsigned intGLOBAL_CONSThiLosigned char/home/frederik/src/git/pyelftools/test/testfiles_for_readelffloathello.cshort inttryGlobalsizetypeGCC: (Ubuntu/Linaro 4.7.3-11ubuntu1) 4.7.3A4aeabi*7-A A  " | AA .symtab.strtab.shstrtab.rel.text.data.bss.rodata.rel.debug_info.debug_abbrev.debug_loc.rel.debug_aranges.rel.debug_line.debug_str.comment.note.GNU-stack.ARM.attributes.rel.debug_frame4 %L+L0L <Xl8 HVo,e a  x:t   0#0,DpD5|,     :      !+05hello.c$d.LC0$tGLOBAL_CONSTtryGlobalhiLomainputs/0  ! (/6=DKY`gnu  1>HUZg +pyelftools-0.26/test/testfiles_for_readelf/reloc_armsf_gcc.o.elf000077500000000000000000000006141357220457300252230ustar00rootroot00000000000000ELF(4(A(aeabiCortex-A9 A  *D_start.symtab.strtab.shstrtab.ARM.attributesp4)`0 +pyelftools-0.26/test/testfiles_for_readelf/simple_aarch64_gcc.o.elf000066400000000000000000000015611357220457300255270ustar00rootroot00000000000000ELF@@CRC_GCC: (GNU) 4.8.0.symtab.strtab.shstrtab.text.data.bss.comment@!X'X,0Xj5 `  empty.c$xmainpyelftools-0.26/test/testfiles_for_readelf/simple_arm_gcc.o.elf000066400000000000000000001040131357220457300250520ustar00rootroot00000000000000ELF(44 (  -L(Ko/0 R  /$@-0S 0S/@/- M  0Ћ/ -L(Ko/4GCC: (Sourcery G++ Lite 2010.09-51) 4.5.1A/aeabi%ARM7TDMI-S ,.symtab.strtab.shstrtab.init.text.fini.init_array.fini_array.jcr.data.bss.comment.ARM.attributes!x'-9EJPU0*^p0n  # І;   05D4k4`whh( ' $acrtstuff.c__JCR_LIST__$d__do_global_dtors_auxcompleted.4946__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entrymain.c__JCR_END___bss_end____bss_start____dso_handle_init__bss_end___start__bss_startmain__end___fini_edata_end_stack__data_start_Jv_RegisterClassespyelftools-0.26/test/testfiles_for_readelf/simple_armeb_gcc.o.elf000077500000000000000000001011101357220457300253570ustar00rootroot00000000000000ELF(4X4 (/FpG4VxAaeabi6  "%*-tmpdir/arm-be8.oarm$a$mthumb$tdata$d_start.symtab.strtab.shstrtab.text.ARM.attributes!p0  4$1pyelftools-0.26/test/testfiles_for_readelf/simple_armhf_gcc.o.elf000066400000000000000000000233261357220457300253770ustar00rootroot00000000000000ELF(44 (%"p```444  TTTll   <pppDDQtdRtd   /lib/ld-linux-armhf.so.3GNU GNUtq8^+VMpQ4H!{|}/N=( libc.so.6putsabort__libc_start_main__gmon_start__GLIBC_2.4ii 7 @-- Əʌ ƏʌƏʌƏʌO OjFMHKE0 0 R/ꬌHK+K+ИG(+HKsYJ*АG((L#x##p(HhKG@HT@t#F-CF NF MF~DV}Dv =$4U?8FAFJFGBѽpG@-Hello Worldу Ă H o0 A  o|oorЂЂЂЂGCC: (Ubuntu/Linaro 4.7.3-11ubuntu1) 4.7.3GCC: (Ubuntu/Linaro 4.8.2-16ubuntu3) 4.8.2A4aeabi*7-A A  "h!<]7_int2fdefijkO#cr#-V#mno# IO#SO#NO#XO#k"O0 abc$O pBD O O@ } y,% $ > $ >  : ;  : ; I8  : ; I8  : ; I 8 .? : ; I@B  4: ; I 4: ; I?  &I6 hello.c"0g! | AA long long intshort unsigned intGNU C 4.7.3lintlong long unsigned intbit1bit2bit3bit4unsigned charmainGLOBAL_CONSThiLo/home/frederik/src/git/pyelftools/test/testfiles_for_readelffloathello.cshort inttryGlobalsizetype}}w.symtab.strtab.shstrtab.interp.note.ABI-tag.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rel.dyn.rel.plt.init.text.fini.rodata.ARM.exidx.eh_frame.init_array.fini_array.jcr.dynamic.got.data.bss.comment.ARM.attributes.debug_aranges.debug_info.debug_abbrev.debug_line.debug_frame.debug_str.debug_locTT#pp 1$Do,N PV00A^orr ko|| z    Ă ЂD4HHPPp`` hh     (( 0(Vp~5  l%?3:?$,L0PW:,fb$\ #Tp0r|  Ă Ђ  HP`h  ( !^pa ^`^8 ^P^ dD D ^` Ă Ĥ L.9ah Fi ^ a [ ^ ^$a n ^̃ (^aЃ у ^ ^  ^(^Ta ^a ^< aD .^hh^$- @Ђ ^ VE f   (H(HH  $P$,)@ 9H> EHM(Y ^ r(~@ Ă D/usr/lib/gcc-cross/arm-linux-gnueabihf/4.7/../../../../arm-linux-gnueabihf/lib/../lib/crt1.o$d$t/usr/lib/gcc-cross/arm-linux-gnueabihf/4.7/../../../../arm-linux-gnueabihf/lib/../lib/crti.o$acall_weak_fn/usr/lib/gcc-cross/arm-linux-gnueabihf/4.7/../../../../arm-linux-gnueabihf/lib/../lib/crtn.ocrtstuff.c__JCR_LIST__deregister_tm_clonesregister_tm_clones__do_global_dtors_auxcompleted.9228__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entryhello.celf-init.oS__FRAME_END____JCR_END____init_array_end_DYNAMIC__init_array_start_GLOBAL_OFFSET_TABLE___libc_csu_fini_ITM_deregisterTMCloneTabledata_start__bss_start___bss_end___edata_fini__bss_end____data_startputs@@GLIBC_2.4__libc_start_main@@GLIBC_2.4__gmon_start____dso_handle_IO_stdin_usedhiLo__libc_csu_init_end_start__end____bss_startmain_Jv_RegisterClasses__TMC_END__tryGlobal_ITM_registerTMCloneTableabort@@GLIBC_2.4_initGLOBAL_CONSTpyelftools-0.26/test/testfiles_for_readelf/simple_mips_gcc.o.elf000066400000000000000000000053201357220457300252440ustar00rootroot00000000000000ELF4('Я,($ !00 $ @!0 @! "!b!$B0b*@!,($ '00 | <0  cMfoo __v _x_hi_lint% .?: ; 'I@B: ; I4: ; I$ > d /home/kvo/sources/pyelftools-gh/test/testfiles_for_readelfgcc48-simple.src.c HvK GNU C 4.8.3 -msoft-float -mllsc -mplt -mno-shared -g -O0 -fno-dwarf2-cfi-asm/home/kvo/sources/pyelftools-gh/test/testfiles_for_readelf/gcc48-simple.src.cGCC: (OpenWrt/Linaro GCC 4.8-2014.04 r42955) 4.8.3Agnu.symtab.strtab.shstrtab.rel.text.data.bss.reginfo.rel.pdr.mdebug.abi32.rel.debug_frame.rel.debug_info.debug_abbrev.rel.debug_aranges.rel.debug_line.debug_str.comment.note.GNU-stack.gnu.attributes@ H(%+0p=( 9 pBHTpHPP x epga 0 qpWpV  pv p0 04o@  [   OSW/home/kvo/sources/pyelftools-gh/test/testfiles_for_readelf/gcc48-simple.src.cfoobarbaz 0<L\   ,qpyelftools-0.26/test/testfiles_for_readelf/update32.o.elf000066400000000000000000000760701357220457300235500ustar00rootroot00000000000000ELF|a4(UWVSD$$MMuԃ,[^_]Í&,1[^_]ÍMMt t&'UWVS˃<$D$D$\$4$\$4$t>ST$D$4$UU9/D$t$D$ D$\$$tttGlu$\$D$UUT$<$\$UU\$U$<[^_]Ív<[^_]Í&$E\$D$E$\$E<$D$U9؉tE$널tD$D$4$t+7UىtC'UWVS\}} tVM  GXEV GLtkZvB\[^_]ÍvGx2 tԍ&\[^_]ÐGl]ЋOtUSt UR҉U Uȃ> ]ЉUS(9Ut UԃOpfS(w` ]̉M4ۉEQ = vEԋ \1҉5 )Ӊ]ԋUЋ]9ZtZOpEEԁ_d;sL CsLC_d MUB,9tOpfr,UB*;Et EăOpfB*U1ȉ}ĉvf{Tt KCTM̅cS@t KC@{Dt KCDKP4KCPK ȉE"E}ԋS C E҉EtK4 CE\[^_]ÍvGl]ЋOtUStt t&UR҉U>Uȃ2]ЉUS49Ut UԃOpfS4w` ]̉MۉE=vEԋ\1҉5)Ӊ]ԋUЋE3B B$t]ԃOpB$Z EEԁ_d;sLCsLC_d MUB89tOpfr8UB6;Et EăOpfB6U1ȉ}ĉSl ShtKChClM̅CSL SHtKCHCLST SPtKCPCTSd S`KC`CdK ȉErE}ԋS C E҉ETK4 CE yt&]U̅t]ЋCt COpE_dt&]]̅tUЋB$ B tOpB B$E_d[t&KK }ċE(ŰL = v TUԉ15 E)ЉEԋUЋE9B tB OpEԁGd;pDPpDP 1MUB09tOpfr0UB.9tOpfZ.]Ѐ;tOpEЀxEt@EOpUЀzLtBLOp]Ѐ{FtCFOpEЀxt@OpUB9Et ]ȈZOpEЀxt@OpUЃz]CWpWpEԃ} x mWM$Rt&}ĉEM̋=vUԡL1҉5)щMԋMЋE3A( A,tEԃOpA,A(Eԁ7WdBP1 BTBrPBTBU1 ‰UMA<9tOpfq\$U؉$T$MQ q19UEXdu]KHMSPT$$UUԅEET$<$D$;F ~ tXCtP t@(u;ftVM+Q U܉P st͋F tF(tMQL_S@USDcEU܉P 1<[^_]Ðt&M+Q U܉P 릉>pL$UB $EtMYQ <[^_]<[^_]É\$E؉D$U܉$E܋MAA 1\UWVS\EM xXWEMM}ЉUG4EU؍UЉEGE̋ET$ $D$}EP`Epdu6}F0EMEE UW:FUG(E UEGE̍EЉL$D$$FtF4tt^tD$4$^u>^EEUЍMT$ $D$[%EЋCEԋCE؋S U܋KMKMt΋MЅtgVHEGU }UEwMD$ D$D$ $tEbMU @t4t&\[^_]Ív\[^_]ËE@xuUMBXPQPQd@alapat҉ATt?Bb bt `$@uAxtB4B BPB(BHB$uNjUE\[^_]Ë@\ EEiMM0‰E؋E G EG6UЉEGE̋ET$ $D$UWVS\EM xXWEMM}ЉUG(EU؍UЉEGE̋ET$ $D$}EP`Epdu6}HF0EMEE UW.FG E UUEGE̍EЉL$D$$FtF4tt^tD$4$^u>^EEUЍMT$ $D$[%EЋCEԋCE؋S U܋KMKMt΋MЅtgV@EGU }UEwMD$ D$D$ $tEbMU @t4t&\[^_]Ív\[^_]ËE@xuUMBXPQPQd@alapat҉ATt?Bb bt `$@uAxtB4B BDB(B@B$uNjUE\[^_]Ë@\ EEiMM‰E؋E GEG*UЉEGE̋ET$ $D$% $ > $ > : ; I$ >   I& &I  : ;  : ; I8 I !I/  : ; : ;I8 : ;I : ; ( : ; I : ;  : ; I 8  : ;  : ;I 8  : ;  : ; I : ;.: ; ' I : ; I: ; I4: ; I.? : ; ' I 4  .: ; ' I@!: ; I": ; I#: ; I $4: ; I %4: ; I&4: ; I '4: ; I(.: ;' I@): ;I*: ;I+4: ;I,4: ;I-4: ;I.' I/I04: ; I1 2 34: ;I4.: ;' I 5: ;I6: ;I7.? : ;' I@81RUX Y91: U;41 <41=41> U?1X Y @ A1RUX YB1X YC4: ;I D: ;I E4: ;I F4: ; IG4: ;I? < he  int&k 2S - 4e ;wJ ~  qXL&e S !H"H%Z 'Z2-l>1Z]2la 5Z6l 4F G# H# XI# , J# K#  L.# M.#  N#$  O#( P#* Q#, R#. S#0 T#2 A!  UD @X Y# Z# X[# , \# ]##  ^9# _9#(  `#0  a#4 b#6 c#8 d#: e#< f#>z g,( #G#|#u# : .####w#  #$@P#G#| #u##:  9#! # "#(##,w$ #0 % #8Z & 7  Mhd~+ A\ RI  Vh X ]M!   G k/  w ! P  d Z t  {Elf cElf  x # #  # u # # T # c 3# R e#  # d #$  #( #,  #0  #4  #8 #< 4 #@ n #D 5 #H  e#L  e#P , e#T #X  #\  #`  #d O #h  e#l  e#p  e#tt e#x3 e#x< e#x e#x e#x e#x e#x # #|} }t x Y # # ` #  e#  e#   # D  # `  #  e#  #$ #( e#, #0 \ #p   | #  #  # #  ~# # q # x  K #  M# # < # C # e#  a 0  K #h  #j  #) #  e#$= e#(I e#([ #,X@  Z P> V  } =l   G    K +  q 1' {W   !" #V$$% &C'(4)h *+p,-.6 /0( 123456F7 89:B ;< =>? $ D 46 bmF elfmF  meS meDnML X N e NN3 N 1 e 1 1 1 - !scn- ,!v-eJ"D-e]#- "- {$elf. ud% / T03& 1uT'len2'sd3 %4$eK (-x3"c )fdx3*x)lenx+?y+,nz(o0'Tx)elf )fd3)len* 2-bufv-err./ //xG |elf| | T}3~3$0off e[e ee0scn 1T0scn * 1*  0lenô2 2,scn* 3* +!4 F5elfF 6F 3TG33H33$I,offJ3 Ke3[Le3M3N3 Oe3Pe,scnQ 1,scn~ 3* 13* 3 ,len23 332,scn 3* P7 0)elf )cmd1+ei-len899:;uL<==c;uH; = =="+=-<>=z <><=xL={` <= ? ,9 9/ 9$ @,=: A99:;uL<=_ = ;+uH;7=C5 =O =[ =gv <>=#<>'c=<=&B J9 9/ 9$ @J=: D(3xL)elf *)len-scn *-sd ^+ + : CoffVu`-lenVG( p)elf *Dlen+$3* -scn 2-sd fCsrcK HCdstK E eu@-tmpH( z)elfz *zGDlenz+${g3* |-scn} -sd~ CsrcK HCdstK E eu@-tmp/  ;F6   & G :eG ;3G <3 o   G> h} M /usr/include/bits/usr/include/usr/include/sys/usr/lib/gcc/i486-linux-gnu/4.4.3/include.update.cstring3.hstdint.htypes.htypes.htime.hstddef.helf.hlibelf.hprivate.h, w<=>:>BL2R"I=u>4Z<&<Z.N%zp ktvX5̲Zx.Ktp<Xp.z (=%,;//yX/X\$X\.$ny.t-/ .uP\< .t.$\. <g%! Au/vr!!!pX .:7{,> f9[z<:u< wYw#h:>P\< .t.$\. <g% Bu/vr #pX .:7{,> fytuJz<uy<~txmgZ$=IY/>Zvgt}yX$XJ$X~{<~~  s< fh L{X.gC{XSu;9>gx vf=-1x==:?G>=1[ .;YN2g=;=y8KKKK*@:KKYIwhggvf f;/X>es>g@7v:=g~& Cy>9>gx vf=-1x==:?G>=1[ .;YN2g=;=y8KKKK*@:KKYIwhggvf f;/X>es>g@7v:=g ttu"P2KPR;QcQu EEWu WPPP!P*0WiW .S2S*2QsQ+Q9QQtt"uPSS"SRVVR"VQQQWW"W01t13t3'u0OPO&W5=WQWW"W0ORO2V5NVQ'V0OQO1S5MSQ'S0uu'P R$+RQ`R&3W=OWPW"'W01t13t3u0DDWuWu$W$u=W= u W u C WC M uM H WH u W uwWwuWuWuW0JJu u ud^udj ud/ [ udo ud cudwudududPPPP P  P 2 P P PrwPPPPPWS&R&+WW W P  P * PF M P PH WPwW WWJWWWPRR R o S  Sx { PSS,JPSIV/ [ V V  VVVVV V C V V  VH VVVwV VVVJVVVVSS S S  SH SwS SSJSSS* M PPu`&u` u` C u`  u`H u`u`u`wu` u`u`u`Ju`u`u`u`PPPQ&=QRQ RF I R  R RRQRQRQx QwQ QPWWSS4BRB W S WC M W| Q WlWWJWWWRR_  SA H S,/R;cSSRSU6Vo V C V ;VVVV6 V VC V H V V V;cVVVJVVVVSSS SV [ S SC _ S  S A SH S SwSSSS RRu`u`B u` u`C u` H u` u` u`;cu`u`u`Ju`u`u`u`RPPPW]WQ,:Q#QXZPttuP_jP"R_gR"Q"wS;?S_rQrSSw?SC_SSSVP@VCXPX_VVV"@RcRRR/6R;CRRRAWC_WWWRR*/RttuKKIuIaQauKKu WWWPsW_VV V dRhSSS+S+LP[gPgoSPPPttuKKIuIaQauKKu WWWPsW_VV V dRhSSS+S+LP[gPgoSPPPelf_updateJwH + .   L JwH + .   L ' F JwH  Jw  < H `  Jw  < H ` 6J   X`0ERROR_EHDR_SHENTSIZEELF_C_READs_elfsize_txwriteERROR_ARSTRTABd_alignERROR_CMDMISMATCHElf64_Addrsd_linkERROR_TRUNC_PHDRe_entryERROR_IO_READERROR_FDDISABLEDERROR_VERDEF_VERSIONscn2time_tERROR_MEM_DYNERROR_DST2SMALLsh_sizefsizeERROR_TRUNC_SCNERROR_NOSUCHSCNERROR_MEM_EHDRERROR_MEM_SCNDATAERROR_MEM_SYMtypesd_free_dataELF_K_NUMs_rawdatasd_scnar_rawnamesh_flagsElf32_Word_elf_versions_typeELF_T_PHDRELF_T_XWORDentsizee_phdr_flagssh_linkERROR_UNKNOWN_ENCODINGlong intERROR_VERNEED_FORMATERROR_MEM_SHDR@(#) $Id: update.c,v 1.34 2009/05/22 17:08:09 michael Exp $e_machinescn_entsizee_strtabsh_addralignERROR_BADTYPEe_memorye_encodinge_phnums_scn_flagse_typeERROR_MEM_OUTBUFsigned chare_idents_freemeElf64_HalfElf32_ShdrERROR_UNKNOWN_TYPEERROR_MEM_RELunsigned charERROR_BADINDEXERROR_TRUNC_MEMBERERROR_TRUNC_ARHDRELF_C_FDREADsh_addrElf_ScnERROR_SCN2SMALLd_typechar__encodingERROR_NOEHDRERROR_BADSTROFFERROR_IO_TRUNCe_cookedERROR_NUMERROR_FDMISMATCHERROR_RDONLYERROR_MEM_RELA_elf_errnoe_magicElf_Cmde_writableElf32_AddrELF_K_NONEe_idlens_magicELF_T_SXWORDERROR_NOTELFELF_C_NUMalgnScn_Datae_parent_elf_update_pointersalign_addre_kindbuffere_phdrERROR_MEM_SCNe_shentsizee_baseERROR_SCN_OVERLAPsh_infoERROR_ELFSCNMISMATCHehdrsd_memdatae_symlenERROR_OKERROR_EHDR_PHENTSIZEencodinge_nextELF_T_OFFe_dataar_namee_elf_flagslong unsigned intERROR_EHDR_SHNUMar_modee_shoffELF_C_WRITEERROR_NULLSCNe_ehdr_flagsoutbufe_scn_1ELF_T_VNEEDsd_data_flagsElf_TypeERROR_NOSTRTABERROR_MEMBERWRITEsd_freemesh_typee_scn_nERROR_IO_GETSIZEGNU C 4.4.3e_readable__chlong long intar_uide_memberssh_nameERROR_SIZE_ARSYMTABallow_overlapELF_K_COFFERROR_UNKNOWN_CLASSe_free_symsERROR_ALIGN_SHDRElf32_HalfELF_T_WORDERROR_MEM_ARSYMTABElf64_Xwordu_shdr32ERROR_WRONLYlayoutsd_magicELF_C_RDWR_elf_outputERROR_IO_2BIGe_classend1end2ELF_T_EHDRElf64_Offunsigned intupdate.csd_dataElf_Arhdre_shstrndxELF_C_NULLERROR_TRUNC_EHDRs_data_1flagERROR_IO_WRITEar_dateERROR_ARFMAGERROR_NULLBUFdones_data_nELF_C_FDDONEu_shdr64e_fdElf_Kindoff_tELF_T_SHDRERROR_MEM_PHDRERROR_SCNDATAMISMATCHERROR_CLASSMISMATCHERROR_TRUNC_SHDRERROR_VERNEED_VERSIONs_offsetshnumElf_Datas_shdr_flagse_offar_gidsh_entsizee_flagsERROR_IO_SEEKe_strlen_elf_fmsizelong long unsigned intElf32_Offuint16_tELF_T_NUM__off_td_bufs_sizeERROR_BADOFFe_shnumscn_alignElf32_EhdrELF_T_ADDRe_unmap_data__time_tmemsetversione_dsizeelf_updatee_phentsizeERROR_MEM_TEMPORARYd_versionshdrELF_T_RELAsh_offsetERROR_BADVALUEstypes_links_indexERROR_ARSPECIALe_sizee_arhdrERROR_OUTSIDEscn_data_layouts_uhdre_ehdr__srcElf64_WordERROR_UNTERMphnum__len_elf32_writeELF_T_DYNshort intELF_C_SETuint64_tELF_C_CLR_elf64_writeERROR_VERDEF_FORMATd_offERROR_MEM_ELFELF_T_SYMELF_T_VDEF__destERROR_UNKNOWNElf64_EhdrERROR_MEM_ARHDRd_sizeERROR_INVALID_CMDe_symtabe_linke_rawdataencode_elf_fillmemcpyERROR_NOTARCHIVEERROR_UNIMPLEMENTED_elf_writee_phoffe_ehsizeELF_T_SWORDuint32_trcside_disabledELF_T_HALFe_countElf64_Shdr/home/eliben/test/libelf-0.8.13/libshort unsigned int_elf64_layoutERROR_VERSION_UNSETELF_K_ARERROR_ARHDRrawdataERROR_UNKNOWN_VERSIONERROR_INTERNALar_sizedataELF_T_RELELF_K_ELFELF_T_BYTEe_versionERROR_ALIGN_PHDR_elf32_layoutGCC: (Ubuntu 4.4.3-4ubuntu5) 4.4.3| AB IAB DC 0AB CCC0 AB IAB EAB OAB O.symtab.strtab.shstrtab.rel.text.data.bss.debug_abbrev.rel.debug_info.rel.debug_line.rodata.str1.1.rodata.debug_loc.rel.debug_pubnames.rel.debug_aranges.debug_ranges.debug_str.comment.note.GNU-stack.rel.debug_frame@ i%+0B> lRW4N {^23:m4:u6:XN! { N  {NP0RU 0t_$__ {p`e |hK  !0- 8ER   gs0  -<update.cscn_data_layoutxwrite_elf_output__encoding_elf32_write_elf64_write_elf_update_pointerself_getdata_elf64_xltsize_elf_errno_elf32_xltsizewrite__errno_locationftruncatelseekmmap_elf_fillmemsetmunmapmallocfreeelf_update_elf_fmsize_elf_scn_typereallocmemcpy_elf_versionelf64_xlatetofelf32_xlatetofGY K_ k  !"#'$A\%l"#& '(e(v(((3(q(((( # c  ( ( ( (5 [ (i (t ( (  e )((Q)(<*Y+*+n*+,(?-t(-,-x,(-,(?.t(.,.x,(. !(/=DIV[hmz$/:M[iw"5CQ_m{,;JYhw#2AQekqw} #)/5;AGNp~ &4BP^lz%6GXiz!/=K\j  ! / = L W b n }         - 3 9 ? E K Q W ] c i o u {                            # ) / 5 ; A G M S Y _ e k q w }                      % 0 ; S e p {                . 8 = H ` n s }             $3CHScs #IZe| ,8DP\ 2BGRbko(,9GQUkox( (6CP^hl"'FMY]auz*.2FKVjuz $2@p8<X\|pyelftools-0.26/test/testfiles_for_unittests/000077500000000000000000000000001357220457300216225ustar00rootroot00000000000000pyelftools-0.26/test/testfiles_for_unittests/aarch64_super_stripped.elf000077500000000000000000000100501357220457300266710ustar00rootroot00000000000000ELF@@@8@@@@@@@@@ A A8@AA@@ Rtd A Ae(/lib/ld-linux-aarch64.so.1GNU@# @libc.so.6abort__libc_start_main__gmon_start__GLIBC_2.172AAAA{,{_{G?    Ր@ ֐@" ֐ @B @#XXX`@d@@G@_!{!!?8hT{_ցX ?!!{!C!A!Aa{_֢X@? { `@95 R`9 @{¨_{G8XA ?{ _{Sc77˔C[*|4{s*`?s!TSA[BcC{Ĩ__{{_(@@ @ @ A A@@@h@ = AHH@0@ o@oo@A@@@pyelftools-0.26/test/testfiles_for_unittests/android_dyntags.elf000066400000000000000000001530301357220457300254650ustar00rootroot00000000000000ELF44 (444  TTT##@@hhh88PtdQtdRtd##@/system/bin/linkerAndroidGNUԌ:!d >0=O'?FYmY$?V   A      6 I    . R    1},Ruyz-A F&R`y" !` r P" n!/ @h  " @j 8! fs  " ]hp w." 8n %"0!{Ή< ֆ!" $ƌK @!e/" x Jh*  " I  tY w" b  E " < z " cx" \!ڃK !ҕ< x" #$ʘK $!th ĉ  2g " "\!K$ "!j " #" Tj" Mz" !8!ȃ" !" `8 " h  }:  ip !" ~:k  " 4: !Ǖ  Rg Zn> L$ "  " #%w " # " f؀  9% o ho0!r" >!" M"|!j " : ! Tp4 ": #Dj" ^$h `e" 2g " " P!) 1 j#2" &ւb" Oi" B" @j" 6h  n= w " /%:h   uY q!Dk H &w 4|" 1 4%aj " |!!" r <K x " p" v$* <#( " @v $8!e/" zir N Jx" "`0!X1 ^ BuQ Q#Ɨb" d!PK `8* u"@K {$(* 2w rz" uQ &‹b" $R __cxa_finalizeLIBClibc.solibsoundtrigger.so__cxa_atexit__register_atfork__stack_chk_fail_ZN7android11BnInterfaceINS_19ISoundTriggerClientEE10onAsBinderEv_ZN7android2spINS_22ISoundTriggerHwServiceEED2Ev_ZNK7android7RefBase9decStrongEPKv_ZN7android2spINS_22ISoundTriggerHwServiceEED1Ev_ZN7android7RefBaseD2Ev_ZdlPvpthread_mutex_lock__android_log_printpthread_mutex_unlock_ZN7android5MutexD2Evpthread_mutex_destroy_ZN7android5MutexD1Ev_ZN7android12SoundTriggerD1Ev_ZTVN7android12SoundTriggerE_ZTTN7android12SoundTriggerE_ZN7android7BBinderD2Ev_ZN7android19ISoundTriggerClientD2Evfree_ZTv0_n12_N7android12SoundTriggerD1Evcalloc_ZThn16_N7android12SoundTriggerD1Ev_ZThn4_N7android12SoundTriggerD1Ev_ZN7android12SoundTriggerD0Ev_ZTv0_n12_N7android12SoundTriggerD0Ev_ZThn16_N7android12SoundTriggerD0Ev_ZThn4_N7android12SoundTriggerD0Ev_ZN7android12SoundTrigger18onRecognitionEventERKNS_2spINS_7IMemoryEEE_ZNK7android7IMemory7pointerEv_ZN7android12SoundTrigger17onSoundModelEventERKNS_2spINS_7IMemoryEEE_ZN7android12SoundTrigger20onServiceStateChangeERKNS_2spINS_7IMemoryEEE_ZN7android11BnInterfaceINS_19ISoundTriggerClientEE19queryLocalInterfaceERKNS_8String16E_ZN7android19ISoundTriggerClient10descriptorEstrzcmp16_ZNK7android7RefBase9incStrongEPKv_ZThn4_N7android11BnInterfaceINS_19ISoundTriggerClientEE19queryLocalInterfaceERKNS_8String16E_ZNK7android11BnInterfaceINS_19ISoundTriggerClientEE22getInterfaceDescriptorEv_ZNK7android19ISoundTriggerClient22getInterfaceDescriptorEv_ZThn4_NK7android11BnInterfaceINS_19ISoundTriggerClientEE22getInterfaceDescriptorEv_ZN7android12SoundTrigger10binderDiedERKNS_2wpINS_7IBinderEEE_ZThn16_N7android12SoundTrigger10binderDiedERKNS_2wpINS_7IBinderEEE_ZN7android12SoundTrigger24getSoundTriggerHwServiceEv_ZN7android21defaultServiceManagerEvusleep_ZN7android8String16C1EPKc_ZN7android8String16D1Ev_ZN7android22ISoundTriggerHwService11asInterfaceERKNS_2spINS_7IBinderEEE_Znwj_ZN7android7RefBaseC2Ev_ZN7android12SoundTrigger11listModulesEP31sound_trigger_module_descriptorPj_ZN7android12SoundTrigger15setCaptureStateEb_ZN7android12SoundTriggerC2EiRKNS_2spINS_20SoundTriggerCallbackEEE_ZN7android19ISoundTriggerClientC2Ev_ZN7android7BBinderC2Evpthread_mutex_init_ZN7android12SoundTriggerC1EiRKNS_2spINS_20SoundTriggerCallbackEEE_ZN7android12SoundTrigger6attachEiRKNS_2spINS_20SoundTriggerCallbackEEE_ZN7android10IInterface8asBinderERKNS_2spIS0_EE_ZN7android12SoundTriggerD2Ev_ZN7android12SoundTrigger6detachEv_ZNK7android7RefBase10createWeakEPKv_ZN7android7RefBase12weakref_type7decWeakEPKv_ZN7android12SoundTrigger14loadSoundModelERKNS_2spINS_7IMemoryEEEPi_ZN7android12SoundTrigger16unloadSoundModelEi_ZN7android12SoundTrigger16startRecognitionEiRKNS_2spINS_7IMemoryEEE_ZN7android12SoundTrigger15stopRecognitionEi_ZN7android12SoundTrigger12stringToGuidEPKcP20sound_trigger_uuid_ssscanf_ZN7android12SoundTrigger12guidToStringEPK20sound_trigger_uuid_sPcjsnprintf_ZN7android7RefBase10onFirstRefEv_ZN7android7RefBase15onLastStrongRefEPKv_ZN7android7RefBase20onIncStrongAttemptedEjPKv_ZN7android7RefBase13onLastWeakRefEPKv__cxa_pure_virtual_ZN7android7IBinder19queryLocalInterfaceERKNS_8String16E_ZN7android7IBinder12shellCommandEiiiRNS_6VectorINS_8String16EEERKNS_2spINS_15IResultReceiverEEE_ZNK7android7IBinder13checkSubclassEPKv_ZN7android7IBinder11localBinderEv_ZN7android7IBinder12remoteBinderEv_ZNK7android7BBinder22getInterfaceDescriptorEv_ZNK7android7BBinder13isBinderAliveEv_ZN7android7BBinder10pingBinderEv_ZN7android7BBinder4dumpEiRKNS_6VectorINS_8String16EEE_ZN7android7BBinder8transactEjRKNS_6ParcelEPS1_j_ZN7android7BBinder11linkToDeathERKNS_2spINS_7IBinder14DeathRecipientEEEPvj_ZN7android7BBinder13unlinkToDeathERKNS_2wpINS_7IBinder14DeathRecipientEEEPvjPS4__ZN7android7BBinder12attachObjectEPKvPvS3_PFvS2_S3_S3_E_ZNK7android7BBinder10findObjectEPKv_ZN7android7BBinder12detachObjectEPKv_ZN7android7BBinder11localBinderEv_ZN7android7BBinder10onTransactEjRKNS_6ParcelEPS1_j_ZN7android20BnSoundTriggerClient10onTransactEjRKNS_6ParcelEPS1_j_ZThn4_N7android20BnSoundTriggerClient10onTransactEjRKNS_6ParcelEPS1_j_ZNK7android13ISoundTrigger22getInterfaceDescriptorEv_ZN7android13ISoundTrigger10descriptorE_ZN7android11BnInterfaceINS_13ISoundTriggerEE10onAsBinderEv_ZNK7android11BnInterfaceINS_13ISoundTriggerEE22getInterfaceDescriptorEv_ZThn4_NK7android11BnInterfaceINS_13ISoundTriggerEE22getInterfaceDescriptorEv_ZN7android11BpInterfaceINS_13ISoundTriggerEE10onAsBinderEv_ZN7android11BnInterfaceINS_13ISoundTriggerEE19queryLocalInterfaceERKNS_8String16E_ZThn4_N7android11BnInterfaceINS_13ISoundTriggerEE19queryLocalInterfaceERKNS_8String16E_ZN7android14BpSoundTrigger15stopRecognitionEi_ZN7android6ParcelC1Ev_ZN7android6Parcel19writeInterfaceTokenERKNS_8String16E_ZN7android6Parcel5writeEPKvj_ZNK7android6Parcel9readInt32Ev_ZN7android6ParcelD1Ev_ZN7android14BpSoundTrigger16unloadSoundModelEi_ZN7android14BpSoundTrigger6detachEv_ZN7android14BpSoundTrigger16startRecognitionEiRKNS_2spINS_7IMemoryEEE_ZNK7android7IMemory4sizeEv_ZN7android6Parcel10writeInt32Ei_ZN7android6Parcel17writeStrongBinderERKNS_2spINS_7IBinderEEE_ZN7android14BpSoundTrigger14loadSoundModelERKNS_2spINS_7IMemoryEEEPi_ZNK7android6Parcel4readEPvj_ZN7android14BnSoundTrigger10onTransactEjRKNS_6ParcelEPS1_j_ZNK7android6Parcel14checkInterfaceEPNS_7IBinderE_ZNK7android6Parcel16readStrongBinderEv_ZN7android7IMemory11asInterfaceERKNS_2spINS_7IBinderEEE_ZThn4_N7android14BnSoundTrigger10onTransactEjRKNS_6ParcelEPS1_j_ZN7android13ISoundTriggerC2Ev_ZN7android10IInterfaceC2Ev_ZN7android13ISoundTrigger11asInterfaceERKNS_2spINS_7IBinderEEE_ZTTN7android14BpSoundTriggerE_ZN7android9BpRefBaseC2ERKNS_2spINS_7IBinderEEE_ZTVN7android14BpSoundTriggerE_ZN7android13ISoundTriggerC1Ev_ZTTN7android13ISoundTriggerE_ZTVN7android13ISoundTriggerE_ZN7android13ISoundTriggerD2Ev_ZN7android10IInterfaceD2Ev_ZN7android14BpSoundTriggerD1Ev_ZN7android9BpRefBaseD2Ev_ZThn4_N7android14BpSoundTriggerD1Ev_ZTv0_n12_N7android14BpSoundTriggerD1Ev_ZN7android14BpSoundTriggerD0Ev_ZThn4_N7android14BpSoundTriggerD0Ev_ZTv0_n12_N7android14BpSoundTriggerD0Ev_ZN7android13ISoundTriggerD1Ev_ZTv0_n12_N7android13ISoundTriggerD1Ev_ZN7android13ISoundTriggerD0Ev_ZTv0_n12_N7android13ISoundTriggerD0Ev_ZN7android9BpRefBase10onFirstRefEv_ZN7android9BpRefBase15onLastStrongRefEPKv_ZN7android9BpRefBase20onIncStrongAttemptedEjPKv_ZTv0_n16_N7android9BpRefBase10onFirstRefEv_ZTv0_n20_N7android9BpRefBase15onLastStrongRefEPKv_ZTv0_n24_N7android9BpRefBase20onIncStrongAttemptedEjPKv_ZTTN7android14BnSoundTriggerE_ZTVN7android14BnSoundTriggerE_ZN7android11BpInterfaceINS_19ISoundTriggerClientEE10onAsBinderEv_ZN7android20BpSoundTriggerClient20onServiceStateChangeERKNS_2spINS_7IMemoryEEE_ZN7android20BpSoundTriggerClient17onSoundModelEventERKNS_2spINS_7IMemoryEEE_ZN7android20BpSoundTriggerClient18onRecognitionEventERKNS_2spINS_7IMemoryEEE_ZN7android19ISoundTriggerClient11asInterfaceERKNS_2spINS_7IBinderEEE_ZTTN7android20BpSoundTriggerClientE_ZTVN7android20BpSoundTriggerClientE_ZN7android19ISoundTriggerClientC1Ev_ZTTN7android19ISoundTriggerClientE_ZTVN7android19ISoundTriggerClientE_ZN7android20BpSoundTriggerClientD1Ev_ZThn4_N7android20BpSoundTriggerClientD1Ev_ZTv0_n12_N7android20BpSoundTriggerClientD1Ev_ZN7android20BpSoundTriggerClientD0Ev_ZThn4_N7android20BpSoundTriggerClientD0Ev_ZTv0_n12_N7android20BpSoundTriggerClientD0Ev_ZN7android19ISoundTriggerClientD1Ev_ZTv0_n12_N7android19ISoundTriggerClientD1Ev_ZN7android19ISoundTriggerClientD0Ev_ZTv0_n12_N7android19ISoundTriggerClientD0Ev_ZTTN7android20BnSoundTriggerClientE_ZTVN7android20BnSoundTriggerClientE_ZNK7android22ISoundTriggerHwService22getInterfaceDescriptorEv_ZN7android22ISoundTriggerHwService10descriptorE_ZN7android11BnInterfaceINS_22ISoundTriggerHwServiceEE10onAsBinderEv_ZNK7android11BnInterfaceINS_22ISoundTriggerHwServiceEE22getInterfaceDescriptorEv_ZThn4_NK7android11BnInterfaceINS_22ISoundTriggerHwServiceEE22getInterfaceDescriptorEv_ZN7android11BpInterfaceINS_22ISoundTriggerHwServiceEE10onAsBinderEv_ZN7android11BnInterfaceINS_22ISoundTriggerHwServiceEE19queryLocalInterfaceERKNS_8String16E_ZThn4_N7android11BnInterfaceINS_22ISoundTriggerHwServiceEE19queryLocalInterfaceERKNS_8String16E_ZN7android23BpSoundTriggerHwService15setCaptureStateEb_ZN7android23BpSoundTriggerHwService6attachEiRKNS_2spINS_19ISoundTriggerClientEEERNS1_INS_13ISoundTriggerEEE_ZN7android23BpSoundTriggerHwService11listModulesEP31sound_trigger_module_descriptorPj_ZN7android23BnSoundTriggerHwService10onTransactEjRKNS_6ParcelEPS1_j_ZThn4_N7android23BnSoundTriggerHwService10onTransactEjRKNS_6ParcelEPS1_j_ZN7android22ISoundTriggerHwServiceC2Ev_ZTTN7android23BpSoundTriggerHwServiceE_ZTVN7android23BpSoundTriggerHwServiceE_ZN7android22ISoundTriggerHwServiceC1Ev_ZTTN7android22ISoundTriggerHwServiceE_ZTVN7android22ISoundTriggerHwServiceE_ZN7android22ISoundTriggerHwServiceD2Ev_ZN7android23BpSoundTriggerHwServiceD1Ev_ZThn4_N7android23BpSoundTriggerHwServiceD1Ev_ZTv0_n12_N7android23BpSoundTriggerHwServiceD1Ev_ZN7android23BpSoundTriggerHwServiceD0Ev_ZThn4_N7android23BpSoundTriggerHwServiceD0Ev_ZTv0_n12_N7android23BpSoundTriggerHwServiceD0Ev_ZN7android22ISoundTriggerHwServiceD1Ev_ZTv0_n12_N7android22ISoundTriggerHwServiceD1Ev_ZN7android22ISoundTriggerHwServiceD0Ev_ZTv0_n12_N7android22ISoundTriggerHwServiceD0Ev_ZTTN7android23BnSoundTriggerHwServiceE_ZTVN7android23BnSoundTriggerHwServiceE__bss_start_end_edatalibcutils.solibutils.soliblog.solibbinder.solibhardware.solibc++.solibdl.solibm.soK @0@ /!`& H @@@ Y ?+@$ I@a $J L  P5$aȊY"4  X6Je  $KLOPRTVWXZ[\]^_`bcdefgikmnpruvxy{|~+ZL2>Nvd9morKSs#c_ ?a:Z E^S8w:wxW2'>E8.dzkÞnqfno@֎ U\qI%<Օ,̹n1[=k=|gnr3fv1 Ew#c /RMT帻Xs26=8st+ ;[@}n3qXx+ 3ħM! 2uUr{ %Q+ nquwfIqj|ՕMGQ%<7AA|r–;{Gr/ҿT:]|`9k$zYisb25XP@yßܿ'B'B0BCEK E EL F L    F    F    F    F    F    F    F    F    F   F   Q   Z   Z   Z   Z   Z  ^.o y O&Xxag5Eaw}S Z0P}!s  |F ^ .R_yn5biM]j#yf(F0Yzr^ufin|!d(/Qtu([0w  J.$qa ,NxTX\`dhlpt x |  _Z !"#$%&'() *+,-. /$0(1,203448<@DvHLPqT`XV\`dRhPlptx|p56789:;<=>?@AgBCDkEFGHIJixyK ~U|d $m(,048\<@DH[LPTXa\W`dMhlpt xl|n}QNwhfO hhhhh h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hdhhhplh`phPth@xh0|h hhhhhhhh h(h0h8ph@`hHPhP@hX0h` hhhphxhhhhhhhhph`hPh@h0h hhh hhhhh  h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hdhhhplh`phPth@xh0|h hhhhhhhh h(h0h8ph@`hHPhP@hX0h` hhhphxhhhhhhhhph`hPh@h0h hhh hhhhh  h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hdhhhplh`phPth@xh0|h WVS<íǃt$D$$D$<$t$|$$ǃt$D$x$[^_VS,D$4$D$t$$f[^VS]ΈLD$4$hD$t$$[^VSÄtD$4$D$t$$[^USd$7$d$[]Ud$}tEUSd$D$ED$w$^d$[]USd$PD$ ED$E D$E$0d$[]USd$à d$[]Ë$ÐD$S[T$ tT$B$[ÐS+T$ tT$B$[ÐSD$ $[ËD$AD$VSSĆt$ F$w4$[^ËD$AD$VSÄ4$Xt!T$B$ǃD$8D$$4$%[^ÐS D$ $[WVSzt$ P V$P@VFFt$RF tV T$$RVFtT$B$7F$V$,FGD$F$mG D$4$n$4$[^_ËD$AD$l$l$VSt$ 4$*4$[^ËD$AD$l$l$UWVS,1â|$@l$Dw4$qEt4$t( t!PT$E$D$<$T$҉4$N,[^_]UWVS,2|$@l$Dw4$Et4$bt( t!PT$E$CD$<$T$҉4$,[^_]UWVS,Qƒ|$@l$Dw4$Et6$t* t#P T$E$D$<$T$҉4$l,[^_]UWVSP|$0t$4(tlET$8 tQD$ l$T$ $ku#7t|$p4$`[^_][^_]땃l$]S>ïD$ $%[Ãl$WVSÃt$ ~<$VxD$8D$$FVFtT$B$FF t$R$<$[^_Ãl$vUWVSL4$t4$L[^_]ÍD$0D$,$JD$4ED$ |$8D$eVS}jt$ F$D$4$P LF[^ÐVS1âjT$ D$$ Ip 4 D$$[^WVSgjt$ P`V0FGD$F$yGD$4$z4$[^_Ãl$D$AD$WVSxit$ P`V0FGD$F$GD$4$F$a4$i[^_Ãl$D$AD$zVSdit$ P LFD$4$l4$[^ËD$AD$VSit$ 4$\4$[^ËD$AD$ $hËD$@UWVS6çht$84$|$l<$$$D$4$$D$0L$0L$,L$B$l$4D$,D$,$l$4$D$4tl$B$D$0tL$,L$B$$@D$|$ t$D$$R<$=4$5Ĭ[^_]ÍD$0D$,UUWVSÅgt$84$|$l<$$$D$4$$D$0L$0L$,L$B$l$4D$,D$,$bl$4$D$4tl$B$D$0tL$,L$B$}$@D$|$ t$D$$R<$4$Ĭ[^_]ÍD$0D$,UUWVScft$84$|$l<$$$D$4$$D$0L$0L$,L$B$tl$4D$,D$,$@l$4$D$4tl$B$xD$0tL$,L$B$[$@D$|$ t$D$$R<$4$Ĭ[^_]ÍD$0D$,UUWVSeVSbt$ F$D$4$P DF[^ÐVSEöaT$ D$$ Ip 4 D$$[^WVS {at$ PXV(FGD$F$GD$4$n4$[^_Ãl$D$AD$WVS`t$ PXV(FGD$F$GD$4$F$u4$}[^_Ãl$D$AD$zVSx`t$ P DFD$4$4$[^ËD$AD$VS`t$ 4$4$[^ËD$AD$_ËD$ST_D$ $k[Ãl$D$@UWVSÐ_|$0t$4(tlET$8 tQD$ l$T$ $u#7t|$p4$[^_][^_]땃l$]UWVSx^$t$(4$|$\<$ $$mD$4$l$4$@$@D$|$ t$D$$RŅu <$ʼn<$4$Ĝ[^_]ÐUWVS1^t$84$g|$l<$[$$D$4$PD$$D$4$E$D$0l$0tl$B$/D$4D$$l$$D$$D$4$HD$4tL$$L$B$+D$0tl$B$$@D$|$ t$D$$R<$D$(<$u<$4$D$(Ĭ[^_]É|$,$l$D$$$T$4t"$D$щT$,H $)T$,$t T$,$L$A$eVSUt$ F$D$4$P DF[^ÐVSAòUT$ D$$ Ip 4 D$$[^WVSwUt$ PXV(FGD$F$GD$4$J4$[^_Ãl$D$AD$WVSTt$ PXV(FGD$F$ GD$4$F$q4$y[^_Ãl$D$AD$zVStTt$ P DFD$4$|4$[^ËD$AD$VSTt$ 4$,4$[^ËD$AD$Sound trigger service died!SoundTriggermedia.sound_trigger_hwno SoundTriggerHwService!?SoundTrigger server binder Died SoundTriggerHwService not published, waiting...Error %d connecting to sound trigger service%08x-%04x-%04x-%04x-%02x%02x%02x%02x%02x%02xandroid.hardware.ISoundTriggerandroid.hardware.ISoundTriggerClientandroid.hardware.ISoundTriggerHwServicef‘Ґ'zR|  (AB E^A @AB P  `:AB EpA  >AB EtA  AB EUA  /AC iA/AC iA4#AC ]AT(h-AA C e AA(wAA C o AA^ AC ZA0^AA AC A AA(< P (d*AA C b AA  8pAA AAC@dAA AA8pAA AAC@dAA AA8D6rAA AAC@fAA AATlAA AAC0r AA AAC K AA AAC   AC ZA  0 AA AC vA AAT PhAA AAC`v AA AAA P\C`\C`\C` >AC q AA (=AA C n  AAA 0 AA AC A AA0@fAA AC A AA\t4AA AACP LCP AA AAC F AA AAC 0AA AC A AAD^AA AAC`\C` AA AAA 4PYAA AC H A AAA 4QAA AC @ A AAA 4YAA AC H A AAA 4QAA AC @ A AAA ,0AA Cp  AAA `ACP AA 0 AA AC A AA AC ZA T(AA AAC0r AA AAC K AA AAC ! <AA AAFAA AA<AA AAFAA AA< AA AAFwAA AAHT FAA AAFC AA AAA \ ~AA AAFC AA AAA K AA AAA :AA AAC`K AA AAA ` AA AAA P AA AAA \C`P\C` AA AAA }\C`P\C` < 0 2<AA AC rA AAD :1AA AAC@x(Thec&dpddfDfzfgff $$$ $ LLt,x<Lt@$  LL|,l< L  4L@D  LLttd4 D  4L8<  LLttd4 D  4L8< HT`K` o]  %oxD;%H%T%^%k%z%%%oo8IoJooJoYYYYZZ&Z6ZFZVZfZvZZZZZZZZZ[[&[6[F[V[f[v[[[[[[[[[\\&\6\F\V\f\v\\\\\\\\\]]&]6]F]V]f]v]]]]]]]]]^^&^6^F^V^f^v^^^^^^^^^__&_6_F_V_f_v_________``&`6`F`V`f`v`````````aa&a6aFaVafavaaaaaaaaabb&b6bFbVbfbvbbbbbbbbbcc&c6cFcVcfcvccGCC: (GNU) 4.9 20140827 (prerelease) GNUgold 1.11libsoundtrigger.so_.shstrtab.interp.note.android.ident.note.gnu.build-id.dynsym.dynstr.gnu.hash.gnu.version.gnu.version_d.gnu.version_r.rel.dyn.rel.plt.text.rodata.eh_frame.eh_frame_hdr.fini_array.init_array.data.rel.ro.dynamic.got.got.plt.data.bss.comment.note.gnu.gold-version.gnu_debuglink TThh' : @ B%JoxDx4To8I89aoJ:poJ: `K;  BTD YI cS5dd@@PHH0&,H`-pyelftools-0.26/test/testfiles_for_unittests/arm_reloc_relocated.elf000077500000000000000000001027401357220457300263060ustar00rootroot00000000000000ELF(44 (pQtdM 0   0Ѝ/M 0  @ 0Ѝ/M 0    0Ѝ/H- M 0   0    РH/H- M          РH/`clang version 5.0.0 (http://llvm.org/git/clang.git 1c7fd213d5fa86593c18a45fa00a67a53dd36b5b) (http://llvm.org/git/llvm.git d051d7f142d7104e838c365cc50d4ff7aadc8c78)A/aeabi%C2.09"& ,p'0+7`4;GLT[`gt00simple.c$a.0$dtriple__bss_start__add__bss_end__mul__bss_startmain__end___edata_end_stack__data_startsub.symtab.strtab.shstrtab.text.ARM.exidx.comment.ARM.attributes!p,05pM0XE` xpyelftools-0.26/test/testfiles_for_unittests/arm_reloc_source.c000066400000000000000000000015261357220457300253150ustar00rootroot00000000000000/* Generated by compiling with any LLVM version and ** with any GNU Arm Embedded Toolchain version. ** LLVM 3.8.0/5.0.0 and GNU Arm Embedded Toolchain 2.26 is fine. ** ** clang -O0 --target=arm-none-eabi -emit-llvm -c simple.c -o simple.bc ** llc -O0 -march=arm -filetype=obj simple.bc -o reloc_simple_arm_llvm.o ** arm-none-eabi-ld -e main reloc_simple_arm_llvm.o -o simple_arm_llvm.elf ** ** reloc_simple_arm_llvm.o is ELF file that needs call relocation. ** ** simple_arm_llvm.elf is a relocated ELF file. */ int add(int a, int b) { return a + b; } int sub(int a, int b) { return a - b; } int mul(int a, int b) { return a * b; } void triple(int a, int b) { add(a, b); sub(a, b); mul(a, b); } int main(void) { int a = 0xABCD, b = 0x1234; add(a, b); sub(a, b); mul(a, b); triple(a, b); return 0; } pyelftools-0.26/test/testfiles_for_unittests/arm_reloc_unrelocated.o000066400000000000000000000027201357220457300263330ustar00rootroot00000000000000ELF(@4( M 0   0Ѝ/M 0  @ 0Ѝ/M 0    0Ѝ/H- M 0   0    РH/H- M          РH/0`clang version 5.0.0 (http://llvm.org/git/clang.git 1c7fd213d5fa86593c18a45fa00a67a53dd36b5b) (http://llvm.org/git/llvm.git d051d7f142d7104e838c365cc50d4ff7aadc8c78)A1aeabi'C2.09"&WtS038`4`00LpD\t**** *.rel.ARM.exidx.rel.text.comment.ARM.attributesmainmul.note.GNU-stacktripleaddsimple.csub.strtab.symtab$a.0dy4 d8 p( ( 0<#p2lpyelftools-0.26/test/testfiles_for_unittests/arm_with_form_indirect.elf000066400000000000000000007113241357220457300270400ustar00rootroot00000000000000ELF(4l4 <(IH HggHyy y y@ @ y  y yy@"@"@y""@y""y"" y""@y"" yll 2 2ث$$ DD` `P P `$$`%%||%%dd@((>>    !!XXXX X X00P P[P[P  P``bb@ dcH H ` 8H|%|%L''h//>>XXP_P_lclcMU3 << ;; _@@8 ??LL<}?@ p    BZ+!4*4MS?? `?;t@< ;t!;t!% ̗3 _INFINEONAi  3wU3wU3wU mBI %Jh#@@@J`DBqDho`@O 1`@@Q@G?s@NU@@NX 0OPF@QO@OhrBOH ONPOpGD   @pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpGLFHG  LFIG F L$hOe,F`FXFL G@} @O=IJ Hh<DIh!FO FF oMp -AFHhHhBHhB!FhFFO`]O`O@lX!X-GFFFFHFFBFIFPFEFGEO0LM.+FBF9FPFF/"!(FnOcBF9FPFmF`(`.+FBF9FPFFF+FBF9FPFF?HBH0B,` F -AF FFFOc:F)F0F4FO HB !@FF?BLHB F-AFFFFOcBF9F0F F?! F(F-GFFFF%FOO  .(FkF,F  HO0-GFFFFO(zƲOcJF9F@FF O?4")FhF!(FF?Ʋ.ۦƲOhFFOEL HB!(FqOiF(F? FOB@ h)pGHIH"OI`|`@FHIH`@OIpG`@OJ`I IOaJpG B B`@JI`pGD xV4JAAJ`IJ`pGD @!CeOI`O!HI`pG޼xD HhIBpGD ޼xO Ic I` IO IOPh OQ`B,BTB@OI`H@l0OIHdOdOId0B"HhOIdH@IHlH@ H I HDDOI`OIH`TB"@ "HIhOIcpG@@B HjpOI`@HIHH",B F ~RHkXHhI`HhHaOI`BP! T!"I@@A JOOJ`O"OJQ`pG@"O`I`O!pG?OI`HIHh@nF FFJ"KF@pG@@HA! JOFpG@@H@@OJ`IAJI h)pGB@<pBOI`HjOI`pGB"pBHhHh pGHh(OTBTB<pBH@j"HhI`Hh`HpG@TpF F H貍HOhGp@ C$F FNHPHOFiFhGF0F!I𵇰F FF O HHOFGF8F< ^pF Fp(p,pF F U(p-AF FFF2F)F FF8F-GFFF)FhFF H`` O(OI`kFJFAF(FGF``PF i(0 @BFOU F WFO$R@ FI h)IpGpB@FO$ FO`@ HhpGd)! ;MkF@@@@@@@@A@@@ `@@|@@ @Ȥ@4@ @@@,`@ @@pGDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDqIHhOJ`O!JhKBDDH`IhBDDapGI `@pGI`@pGJo J Go1@(ӿ@pGFqb O!1!@ B$$a FpF FFq @c O" aFp@EZHJ{_pGG}JG _I" BDDpGpF F@![HBDDO#OQ ,OiOMF-\E1%hBN?v h``@B`h!!O0`OI,l0(" F#DD`DDpC]_IIpF FFJ4? !HBDDHAhJOQo`DC?j(DD F@hKC_ j(B* FH@hI@opADHBF?BC/O0pJQhKOQj* DDRhJj+FBҗHO0JQho`AЎJj* DD RhԋIIhJ@opBDBوHpGO0pGA/{JDFnO!OsHpGpI"? FjH!-AF FO#(!YlHOt"FBDD(!![KCbNO5'NpOoM?A8h %H!O0FO',, 4*h!PFG,!(hx(,, 4*h!PFG,(hx( 4*h!PFG,(hx)!pHFH0`XF@F7w@j3-OFFO B+p!ZIhBDDC UIO*4h l O5 @FXEKM2y*bй@#0'F OQB1!`!y!qOq!r ?ar1h6Hp$@F I1h0Hx$t$1h,HGF(HBи @FQ !ѵMm ``y@`qHF0y zXEDDz"CIIBй@" azA HFN I`H(F!I@a SQ=5-GFFFDKpF!(hrIFBDDC0h'O'FF4iHGF@MO?Mo|$AFcHGFD/0hHo4JFAF]HGFHo\H(`PF F-GF FFI_!!cPH&BDDEP`4O:@?ቈBFT&@ EO!(H_uࠉ!C ?(!(OhA$ CFB-o G@EPFBOF_ (!CFBHuO7N0F-GFFFFE O-!t1HBDD!CF!C!D>"M! @ C@ O("F49F"HGI8hIF8hC42F!HGFDoO9HE6DOC_ 0!CQ$< ^@s:'[͖2ދ{Oj6ȕ3a6# ؉]1 /g^@ /0FMo 0$!FHGFAT?0FMELOE O_42F!FHGFE(=FOEG_M(F-AF FFFK3_*!HBDD!C!%IK_O"F)F;hHGO(hIj2F!HGN-AF FFFMO+!HBDD!C! IO"F)F;hHGE(hj2F!HGO>_-_FFFL/!eH%BDD@O:OO'M?O.Il_HHGH F<CI_ H`/ F0I(O $XFGFNo F mEIVO.NE:_HGF F-ѕI HFpF FB$!HBDD Kh ` h!h "` `( O ohJ` x!hJ"` p@ h!@ `hQ`L? hahBDDhhBDD aBDDJp@-OFFFGJO'! FFOpFXH @BDDOA_G+%JuO F (N?FQCFgKe_dmdm-Ӹ yA? @jO F (L!FQCF`I_BF_F?Fdm -LP|L@'/TD F? CFI? 0DO)$$HGFJ/0F?DF_ 0HGK?0FM (D F!H! @qg^ {ސ]1 /Oj6*7#@3a6H )CCG1NM/ 0E0FE 0$OF!5HGFM0FKo 0?-HG@_ (0FF`O 0 @$QF$HGFAo0F FGhXFL5/I O0I ?BDD FI@ D@BDD J!@ A@BDD*7#g@-G FA|%(^N?O& (VMjoOh BLAOh/ED`BB>BB:MoB _ B1HOC$PFGC/FO9HEN&/!$CPFGDoHEN_BNl?aBDO%(F-O FIxL#`3!IMhBDDI@|  4|8(M/;IC8H?5 MC.&O)O;+OhF`F4 FHGF@"XEBw/q|$AFHGJ2?@_UFav|B9F F&FB/D=@F?4NF:F!FsHGFGOXEOl/@BI8FGGR_ M@/4"9I8FGKNhC BDDO0pFK2! #H!O@"BDDqOP@OAS/B*Mapq@@_,ȹ@@@1cY[$3G:@w&S,wH32I)DD-GFMO4!HOBDDqLܓ HF@ N? O8F8xLo@  0EF8F Bo@(DD դQ@HFa-AFF^/5! JHBDDLqMO Q8F1&@ I!c!c!a!a GjI_@(DD!"!!Op 1A3#FF%ob[+#G/!a[+!D?I)DD1u** (@Q8Fma-AFBo6!HBDDO% BDDHGFB$OFI'oDA]u@Q G/BCBDDdBv-OFE]7!HBDD |L FF yMF5!(FH/NO&o @A0F  @XF (F'FoDoD%_/C/ N@(NoDDI @(F @@0FAA (F@ N@(CoDD1 @(FpN6?lGOQF0FAFXFIF(F}O N-A FJJo!q NB0wxC@F_Q H]?@(DD!$9B'qqB0 @C@F@o4K/HhO`K_ a" 3G:@@@cY[$ @xV4w &S,`@\FOq@(DD! BѶ@F)CaQBDDpG IO xFDFiF0F(@F( ؝) lrr rPH8xFB4F _FP C HHhBHG?BѸ!FP@ 'DEP@ 1FAF  0F](N 0Fk8HOr1q@O @DD iF FL*@0F:aFNPo(DDqiF FLMN 0F"H0pDD iF FNJ@0FaBDDpG@@@@*I`@@`pG&IhBDDpG#Hh!A`h+A9DDpGHh+A9DDpGIh h@@ h"B `J2`pGIFh h@@ h#C `J3``BB `pGI h"B `h+C;DD` `pG*@0 ;bD;8;8;%:Q;:Qˠ\Q;@;$;H+$;H+pG : P :PPP_|$PPD@_|$Q;@;pG(1;H+( ;H+pGA\ `G((O"BDDpGpG-OF FBs_M !IBDDB@ hF@O'8XE|o|(SA?$E_hnF`FF4uHGFAo?KXoMH?pNI|$YFnHGF|dBؽ h IFҲBLWoh /I_&h ҲB Ah /JOphYH YOXL<`@#)FPFFIl?|`@ FhOI0F-OFFFL/!A% `FAHBDDG@O O(Exo/H?@ BDD2HGE FHO HFBDDQEDDK? FH $HGGp/ Fm?/BooA9?HGI"_ F-!NK*e@s:G }4/#*7-GF FF@cO3!HBDDqH @FHgHA@?L;IO@@OJ[F-DD H8@ IO IH@@FH6FawH32@@@IL `GImL `GF | `GHGl `GFCL `GIL `GI `GG, `GI < `Gy{}vztMx-rsy1mmwp 3o pe ~~g }S5-qsqGgr@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpG@pGpGJ(0!xBџH00pGIRɲ) pG-_ `NFpFFFFrh!8FGhG(8xD@-+ "&($rh!xG!1F_p_a_ %_`%_H`% m-h9TFG p_ 2iFXFG pFkH!kMpkIA`)hjHG(ahiHh xG *i!GD p\L x([H!Bh`hG pVHx(THhG  F(KH@hx!pAxapxpxpy pDL x( CM`h!h@G`hjhy@G pp;Hx(9HhG  F(40HAh F yIf -C.L*N*O uhO(,1x)%a!Ol h!hFG((x(hx( )yBЍh!hGHh!hGhH`!pG HpGIH` pGX+ ,0 @(I(J`( &H'I'K 0B$H<@1OgOPh`_HՄOCCB ;!J ) JP` H!  I `pGH( pG @0@-OF ``kOFF`FO OJzh!hFG(8m@ (, F#сVFCН0C zh!hFG(ѝԠ`m( (DŲ @ D0zh!G(ѝ(Ѡhm(D`` F( 8H8IhBhbhB ` -A.L!Dz Fv*H(#)I0-(нBD*Bx(y( hIE`-y1B0 `h`({(hBЇ hy Ѱh 灲 HBhH 0G(ѩh HG(ѭxAF hh*шB 8 `@hxt-  &I |) x)x ( I`a(Hh@GI |) x)x H`BIp HhHa0G |hFp(H|( |OPIhB |HL! hG(MhGHQ0xAp"j!GhG|F x OR #h<@ ,#F,3۲ BٻI pJhG -AxJ (( AI@ iG(ѭHh( GF(! N pL ) O`pH %i!$0G %Hi!Q0GEH|(EH@iG(E p" ! xOQ@@ph( h IhLr u4"I FHကx rS U`s x) pGcx( tHsH"0tIh!G Fx0(( hF(cH|( bNhGbOgMN)h@GhGoFhFG(ѪhG`H@hGSHxYMQѱ)""iF8FU*j!GhG(Ѡx(Q!pQ##CQ+j!FGFBHL(P( ( ((D  FG %FS G6H!Ġev0FOr/HG(G(8FG "H !WFL0G mEE%! ! FGX1I/K2L`0I h!Bѭ .J@xR**IhhFG>!I !H$IA`!FpLF F!`h*FDF! (D ahDpI KhDDFpGHh@hGHhhG IhhG HhiGIhIiGHhiGHhiGHhjG+ 3wU^$4 -AOF hGF` H?hhG -Hxpp Ք d-T, JӈpPp pGH!p!@ F( x( `x (  L x(( phF(|L FBF !!yMC\kTIBhF(Ѡ(Dc(ѽpJDnHhhh x@GV p|-GdLFF`x(. 4xDB  (DFG!D EF B xDB  ) G!D EF 0Bؠ@B5F*FAD8F/D(Dp6 o(н -_FFN2L7O`x(W F/M(D1F=L1DFDBظFDB ٸ ɲF)!F)JFhFI JhFGD ለBӌ(JFiFA{j2FXFGj1FXFG( T,d--->$MZoI IAIOPIO -IBMg?B0HiF?$}FO,HO  HO0 H HFiFhGN_>@@@@% !I";CI)FpG0FKxl@RK*0B;CI;ɲ)pG0"CK[l@"@Iɲ)C00RK0PH  $A9DJHOFhhFG?$ F0"CiF$=MA0@8HA9DO&#tFiFG7B 1IB #TFiFGB$ F|)IO(H$FhiFG?$ F|@ IHOhFiFG?  IOHFiFhG?  OPIhOrh@` HY< ^98 O   "DDDDDDDDDDDDDDDDDDDD@ *;;RpGҲ+IpG"FFFF F F0 KF x* Zh_P`P `y!p0 8ML!hhh`((( (Xh" HiFG((8x Ъ8 @ @Bl `GB! `GBk `GB `GB? `GB, `GB, `GB `GB `GB1 `G#p>E[NBP5==yk?y""""""""""""""""1!4 6g+f׶T %#-7?ISSSSSSSSSSSSSSB; LHO`HGJDKPGmKJ,;I) K"a)")" A1pG @ pG y2  R    9  C gq  " '+ ,//q0)17233856=54 " " '!@pGpGhB҇ pG[`JRhGt-*I`@@`pG&IhBDDpG#Hh!A`h+A9DDpGHh+A9DDpGIh h@@ h"B `J2`pGIFh h@@ h#C `J3``BB `pGI h"B `h+C;DD` `pGDFMFVF_F % 2 : `@i@r@{@BddF<FFFF%F8M8N9OCFDF<@ d,@Y1@a@ F<@ ,@J2@b@F<@ ,@S3@c@@FX@ FT@\@A@#AL@B@#AT@#A`@FFFFDdF ,@FIFRF[F&FFFFL \@D ɲa\@D Ҳ\@D ۲\@D+F6 .@FIFRF[FF`@i@r@{@, FFFFpG-DFMFVF_F %  'm %FEMFNFOCFDF<@ $,@[3@c@FAFK@"AX@"AH@AH@FFFFDdF ,@FIFRF[FF`@i@r@{@gF7&FFFF0L ۲\@D Ҳ\@D ɲa\@D \@D(F6 . -@FIFRF[F`@i@r@{@ FFFFpGF N%ܲ4]$`@ 4]$`@ 4]$`@4]`@mt]$`@A@J@S@ ,pG.杇t]@      ]]]]UUFL`1q-9dee"egiiijjjlmn,,, , ,,,,,,,!,$,',*,-,4,;,B,I,P,a%%%Mqaak3/aA}%QWWg=Y//////////>)}%O3Y{Y?# R j068@|9/4CDT{2#=L BN.f($v[Im%rdhԤ\]elpHP^FWث XE,?k:AOgst"57unGq)ʼnobV>Ky xZݨ31Y'_`QJ -zɜ;M*fHa5WiَU(ߌ BhA-T @6pGpG ;t!;t!` INFINEON  3wU3wU mBIbK_Yh`hh`hh`rFuoB/ F?@5DON_HpGh!hAeFpGDC"3J? HpGG?Hh`HhP`HHP pGXL[N[pFGa!0CL/AOM,? h hh hh h hhhRmB HxoHpO_H6OE_ h hr"0M!0GhCb pE?hhh{xh hhh@mB MO@ K_ AC?G/ Hh"h{ Hy@H/y!HoyoFO -A FG_6CA/;Bo8G?5(h(hh(hh(h)hhhh`mB @VO"Lz?B_NB(yrhy`pr qI@hD FJNyo{(LhH FA.ow!( (((b(i(u(p(o(nЫLO!HLm/OG/QH@M/ {u2F F[Au8F0aAO(h!xhpaC_ujF FCB  N_] hBk@(g7H@h6I @H`q `2H@h(YCi/HO4sBHDs@!Do/>-GsA!@V? FLd+CsB!p@no FFl/L~oAsyDH FM @skCuO FyFq 3DDH@-A FFo (hh(hhh(hhh~I/7M4Jo1J_.Hv_+@()hhh{B/(h:JBE(h@_F/(h3JBC\?(h@oOo,H{@(Ѐ(*'HH? x`xxx H>/x y`yy +8FFOj?xDCFyz {`{!F8F4DFBowu2 w ! FN/ CIXo(DDB? >IP0Lu FFD/iF F^Lo y>>FJ_uFCu1! FTCRo s-KjF)FuK/ q >FD_t0(Дt(((((GH?%FO% C?%FoE$/@%ujF FK2uhFLK!nE@Дt0( x@@@@1 ((("('(,DDB: pO_ FlL?Kf yN/ FLhOMO FGp_K$_ FMh_@ FLopF F@?u FFJu1DDEHh D H  ! FvCO skF1FLo q pFI_t0(Дt((1(1(1(1%N/%@%ujF FODOuhFGBo*F FDДt0((DDC/ LoDS@K ? 5MO FaI@-@ y &>FJDot0(C |@Dc/vDl >u1! FFd/ sKjFJ/ y >FBou0zXNo F\ FG[_u F M_vBC{?xN u F?8L? F4K\_ FOO^>FC_uFH\/! F}ML rsKjF)FK oM>uC  q>0F Dou FFM+/u FJHou@~O" F%BN^oTI hFpOI@ D_JH  ! FJO  (rkF)FaAO@$_ 0u FH_uzG(@ p C/(D/ xu2F F"OC3"@C3 y8FFriFkKz_I8 @t(( ( DDK_@BM@ (B jABGX/ joBQBMO 8 jD b`j@`bjDb wp 80NODK[iE$@#@D@+K[iE$@#@D@+H4O:KjE?1L_CsO*\F#o#+K;oBgLx K?+D?OrA+F3G- 0O@TG!oDdKM?DtD@@`CKfM_Hd0HòB FoBKo 0D 0@OGF/ I_ 0@N 0 00FFK?"VF?(( (  0@Hh p (p 0HM 0-A FFFOLo"!2Cs_0(?(@ M!h J?JR hhC  G `KS 0B @(bhBbh#DBDDI - H?L_  FJn "!@I( IgHh ` D(? A@"!K@B@?[H0O EUL@4@#`QO SLCc NOHJFdH_CsC@@`C@IfFvO F"!EoE?;J !`@#"!BEO4J`A#"!N?-AFJoh$D:h?hx@?h8@%OG$d,PhBPhDB, H@hI @H`q `H@h(DDOj@#"!0FqGM|AI:/ xB!J`@#" !\K/@@d@@@I@N;{@*Ѐ*DD@1"pO_\Rcp*L"p"@=?\Rcp*@"p"LL_\Rcp*"NyRcp *IhBDDpGFHhJh@@JhK"B`J2``AA`pGI hJ!A`h+B:DDI` `pGEFMSQKCK*A/KKR*JOFH/#B; )Ooo#;I)pG-AF@6hQ>9HoheA94є}D2eu'UBI?(h?IB(h>IB=H.h`O0FE_1hDqhDhDh5(h(CAEDDj(G*I+H``@hR>:KheB:DD}Oa)K%/aqCH/r hL#`Cb h*Ѱj(CP_rIJ`AbpDmMm&Lc1LKYAeep-L-QXOg~{N8oNOOo+KOC\LoC_~D/FGS 0yб!urZH_(CL} Lu@(Im3K!t(I(Du(A/ wt`(a(0(#(((-(2(7(ohhhzxh hhh@mB A_GyO @ F?Ma_FOHphhhH (є}O4oH!?H0(DDu F$FKl_)F F BK z pP-AhFB_0H (OsO{ C/)H&? D?%H0(Do"H!eeehdi!eeFD/ h`m6hmq@e@e(Ӽ |H8h`f{} FF_!0H FK/ CQ P-AFF@Hh>HjhQ>9E_heA9`4N}6M+?dt-H'@hD JO"1F FxN-/ hah8DDhDhD!i460h(D @*OI` h@DIIB OJa@ D@ I@@D(HChB(m(DBDD@l@0P[M/,F/CO)CMC&A_L/ `GKL `GL `GKL `GK%L `GJ< `GJL `GK< `G>DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD ;t!;t!` INFINEON  3wU3wU mBI aaaaaabb b bbbbbbbbbbbbbbbb DDE CG:$xxR$00Dh `pG#$%&:(xR(0H `pGpGF -J-JF)Mhh%H &I#H #IO"I`J0`!HOYOYHhBHhO HOFhhFGFIBc ?@0FF@@@@A@ X! TaOI`HGHGHHH H H HHHHHHIJKpGa}`  dc@ `lcH ``7FU(!@ pG Hh@ I` I x JxDJRhDJhI`@ E D \cpGpGpGuF(FiFSF F  @OOOO !F FpGF FHpGH DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDARM Linker, 5.03 [Build 76] ArmLink --strict --callgraph --map --symbols --xref --cpu=Cortex-M3 --fpu=SoftVFP --list=.\O0\lst\UserManualExample.map --output=.\O0\obj\UserManualExample.axf --scatter=.\UserManualExample.sct --predefine=-DNVM_START=0x10006000 --predefine=-DNVM_SIZE=0x000FA000 --predefine=-DRAM_START=0x20000040 --predefine=-DRAM_SIZE=0x00007FC0 --predefine=-DSLE97 --info=summarysizes,sizes,totals,unused,veneers C:\keil\ARM\ARMCC\bin\..\lib\armlib\c_w.lC:\keil\ARM\ARMCC\bin\..\lib\armlib\fz_ws.lC:\keil\ARM\ARMCC\bin\..\lib\armlib\h_w.lC:\keil\ARM\ARMCC\bin\..\lib\armlib\m_ws.lC:\keil\ARM\ARMCC\bin\..\lib\armlib\vfpsupport.lInput Comments:main.oARM Linker, 5.03 [Build 76] armlink --partial --no_add_relocs_to_undefined --no_generate_mapping_symbols --diag_suppress=6642 --cpu=Cortex-M3 --fpu=SoftVFP --output=.\o0\obj\main.o --vfemode=force Input Comments:p2d9c-3ARM Assembler, 5.03 [Build 76]armasm --debug --diag_suppress=1602,1073 --cpu=Cortex-M3 --fpu=SoftVFP --apcs=/interwork/interwork --divide C:\Users\tauche\AppData\Local\Temp\p2d9c-2main.oARM C/C++ Compiler, 5.03 [Build 76]ArmCC --list --debug -c --asm --interleave --asm_dir=.\O0\lst\ --list_dir=.\O0\lst\ --depend=.\o0\obj\main.d --cpu=Cortex-M3 --apcs=interwork -O0 -IC:\keil\ARM\RV31\INC -IC:\keil\ARM\CMSIS\Include -IC:\keil\ARM\Inc\Infineon\SLE90 -DJDB_SLE97_MULTI_INTERFACE_STARTUP -DDS_M9900_A22 -DSLE90 -DSLCx4 -DSLE97 -DSLE97CUINFX1M00PE --omf_browse=.\o0\obj\main.crfsystem_sle90.oARM Linker, 5.03 [Build 76] armlink --partial --no_add_relocs_to_undefined --no_generate_mapping_symbols --diag_suppress=6642 --cpu=Cortex-M3 --fpu=SoftVFP --output=.\o0\obj\system_sle90.o --vfemode=force Input Comments:pabc-3ARM Assembler, 5.03 [Build 76]armasm --debug --diag_suppress=1602,1073 --cpu=Cortex-M3 --fpu=SoftVFP --apcs=/interwork/interwork --divide C:\Users\tauche\AppData\Local\Temp\pabc-2system_sle90.oARM C/C++ Compiler, 5.03 [Build 76]ArmCC --list --debug -c --asm --interleave --asm_dir=.\O0\lst\ --list_dir=.\O0\lst\ --depend=.\o0\obj\system_sle90.d --cpu=Cortex-M3 --apcs=interwork -O0 -IC:\keil\ARM\RV31\INC -IC:\keil\ARM\CMSIS\Include -IC:\keil\ARM\Inc\Infineon\SLE90 -DJDB_SLE97_MULTI_INTERFACE_STARTUP -DDS_M9900_A22 -DSLE90 -DSLCx4 -DSLE97 -DSLE97CUINFX1M00PE --omf_browse=.\o0\obj\system_sle90.crfstartup_sle9x.oARM Assembler, 5.03 [Build 76]ArmAsm --16 --debug --xref --cpu=Cortex-M3 --apcs=interwork --depend=.\o0\obj\startup_sle9x.d -IC:\keil\ARM\RV31\INC -IC:\keil\ARM\CMSIS\Include -IC:\keil\ARM\Inc\Infineon\SLE90 --predefine="DS_M9900_A22 SETA 1" --predefine="SLE90argv_veneer.oARM Linker, 5.03 [Build 76] armlink --partial --no_add_relocs_to_undefined --no_execstack --no_generate_mapping_symbols --diag_suppress=6642 --cpu=7-M --fpu=None --no_unaligned_access --output=argv_veneer.o --vfemode=force --branchpatch=m3-ldrd Input Comments:!/!I$ > %%%% %C %C % % %%%C%C&I  ((      1 1 1 1 I8  I I8 4 ! I8 "I#7I$I%I&I 'I(I) * +,-./4  04 14 24 34 44 5.:;9? I6.:;9? 7.:;9G8.:;9? I 9.:;9? :.:;9G ;.:;9? I<.:;9? =.:;9G>.:;9? I@?.:;9? @@.:;9G@A.:;9? I@ B.:;9? @ C.:;9G@ D1E1F1XYWG1XYWH.1I.1@J.1@ K.1L.< 4 I? M.< 4 ? NIOPI:;9QI4 R S TUVW1X4I ,Y4I Z4I[4I,\4I]4I 4 ^4I ,4 _4I4 `4I,4 a4I4 b41 ,c41d41,e41f1g1hI iIjIkI 4 lI ,4 mI4 n1 o1p4I ? q4I? < r4I,s4It5Iu;v=w%x<%%.0armcc+|     0armcc+|     0armcc+|     0armcc+|     0armcc+|      bb, 4` 4` h``aAxaa a a a a a a b b b b b b b b b b |`bJX~HHc  Tc:C:\keil\ARM\Inc\Infineon\SLE90\FW_M9900_A22.hARM C/C++ Compiler, 5.03 [Build 76]signed charshortlongunsigned charunsigned shortunsigned longuvoidPINT8h=PINT16wBPINT32GPUINT8LPUINT16QPUINT32V"hPPINT8["wPPINT16`"PPINT320e"PPUINT8Bj"PPUINT16To"PPUINT32gt"PPVOIDzytagRmsStatusRMS_PASSRMS_E_FAILxRMS_E_INDATA_INVALIDxRMS_E_RAM_AREA_EXCCEEDxRMS_E_RAM_ALIGNMENTxRMS_E_NVM_FAILxRMS_E_NVM_VERIFYxRMS_E_NVM_PAGE_EXCEEDxRMS_E_RFU_1xRMS_E_NVM_AREA_EXCEEDxRMS_E_RFU_2xRMS_E_RFU_3xRMS_E_NVM_MAPRAM_INIT_FAILxRMS_E_NVM_VERIFY_AND_MAPRAM_FAILxRMS_E_NVM_NOT_MAPPEDxRMS_E_NO_TEARING_CONDITION_FOUNDxRMS_E_TEARING_CASE_NOT_SOLVEDxRMS_W_TEARING_EVENT_PRESENT|PRMS_STATUStagRmsTearingServiceModeRMS_TEARING_ANALYSE RMS_TEARING_REPAIR RMS_TEARING_ANALYSE_AND_REPAIR PRMS_TEARING_SERVICE_MODE)tagRmsGetVersionOutDataromVersion#patchVersion#PRMS_GETVERSION_OUTDATA"[PPRMS_GETVERSION_OUTDATAz!) tagRmsProgramNvmInDatapVirtDest~#pRedVirtDest~#pVirtSrc~#pRedVirtSrc~# size#redSize#PRMS_PROGRAMNVM_INDATA"PPRMS_PROGRAMNVM_INDATA; ) tagRmsEraseNvmPageInDatapVirtPageAddr~#PRMS_ERASENVMPAGE_INDATA^"PPRMS_ERASENVMPAGE_INDATA") tagRmsInitNvmMapRamInData physStartAddr#physEndAddr#serviceCallNr#PRMS_INITNVMMAPRAM_INDATA"2PPRMS_INITNVMMAPRAM_INDATAS#) tagRmsTearingServiceInfonvmLastPhysErrAddr#nvmErrorCnt#nvmUnrecErrorCnt#  analysisData#PRMS_TEARING_SERVICE_INFOy"PPRMS_TEARING_SERVICE_INFO#)tagRmsDoTearingServiceInDatapServiceInfo#mode#PRMS_DOTEARINGSERVICE_INDATA@"PPRMS_DOTEARINGSERVICE_INDATA&)tagRmsTestUmslcInDataumslcTestCfg_1#umslcTestCfg_0#invUmslcTestCfg_1#invUmslcTestCfg_0# PRMS_TESTUMSLC_INDATA"HPPRMS_TESTUMSLC_INDATAe)tagRmsEraseNvmSectorFastPersInDataphysSectorStartAddr#physSectorEndAddr#PRMS_ERASENVMSECTORFASTPERS_INDATA"PPRMS_ERASENVMSECTORFASTPERS_INDATA ,)tagRmsSetLinearSectorsFastPersInDataphysSectorStartAddr#PRMS_SETLINEARSECTORSFASTPERS_INDATA< " PPRMS_SETLINEARSECTORSFASTPERS_INDATA .)tagRmsSyncData callbackAddr#callbackAddrInv#criticalSectionInfo#callbackRequestPending# PRMS_SYNC_DATA "V PPRMS_SYNC_DATAl Nw%k%~%~%~" PpRMS_GetVersion Nw%k%?%~%p " PpRMS_ProgramNvm Nw%k%%~%p " PpRMS_EraseNvmPage Nw%k%W%~%p "" PpRMS_InitNvmMapRam9 Nw%k%%~%p "X PpRMS_DoTearingServiceo Nw%k%i%~%~" PpRMS_TestUmslc Nw%k% %~%~" PpRMS_EraseNvmSectorFastPers Nw%k% %~%~" PpRMS_SetLinearSectorsFastPers )tagAtrConfigurationatrBehavior#atrValue#atrDivFactor#PATR_CONFIGURATIONC " PPATR_CONFIGURATION )tagCurLimAdjustmentvalue_4mA#value_5mA#value_6mA#value_10mA#PCURLIM_ADJUST "* PPCURLIM_ADJUST@ )tagCommonMbxAreaPcurLimConfigAtStartup#rfu_100 #atrColdReset #rfu_110 # atrWarmReset #rfu_120 #startupMode#startupConfig#rfu_130%#userVectorTableAddr# +rfu_140X#$PCOMMON_MBX_AREA[ "qPPCOMMON_MBX_AREA)!tagCimDataLcimIdentifier#platformIdentifier#modeIdentifier#romCode#chipType#designStep+# batchNumberF# chipPositionXb#chipPositionY#trackingInfo#firmwareIdentifier#bosRomVersion## bosPatchVersion#'individualLength#+indLowerTempLimit#,indUpperTempLimit#-indOscFreq#.indFeatures#/indFeatures1#0!individualData#1PCIM_DATA"PPCIM_DATA)#tagBlockingConfigurationramUserStartAddr#ramUserEndAddr#nvmUserStartAddr#nvmUserEndAddr# cacheConfig#"moduleListr#PBLOCKING_CONFIGURATION"PPBLOCKING_CONFIGURATION$)$tagNvmConfiguration #rfu_00#nvmModules#$nvmSectorsNr#nvmPageSize#nvmSectorSize# PNVM_CONFIGURATION"XPPNVM_CONFIGURATIONr)%tagSwpSyncIdswpSync_Id1#swpSync_Id2#PSWP_SYNC_ID"PPSWP_SYNC_ID)&tagRndShieldPatternshieldDrv#shieldRcv1#shieldRcv2#PRND_SHIELD_PATTERN"DPPRND_SHIELD_PATTERN_ )+tagIfxMailboxPage0templateVersion#contentVersion#'rfu_000#nvmConfigurationX# blockSize#nvmMemoryFieldNr#(=rfu_010#linSecPhysAddrLow#XifxRmsConfig#\ifxMifConfig#`(rfu_020v#dcurLimVal* #l)rfu_030#tifxUmslcTestH#atrDefaultRst #)Orfu_040#regANA_CTRL2#regTRNG_CFG_01#regTRNG_CFG_02#regANA_TSCTRL#regANA_CTRL1#regNWS_ADJ#regNWS_CTRL#regNWS_SLEEP_ADJ#PIFX_MAILBOX_PAGE0"PPIFX_MAILBOX_PAGE0).tagIfxMailboxPage1flStartupConfigq#mifLock#Pvalid4ByteUids#Rvalid7ByteUids#S,,Muid4V#T,,kuid7t#t-rev_uid4#rev_uid7#-rfu_150#rndShieldInvPatternNumber#rndShieldPatternNumber#.DshieldPattern#.'rfu_160-#PIFX_MAILBOX_PAGE1"GPPIFX_MAILBOX_PAGE1a)1tagIfxMailboxPage2ifxProgCounter#/ rfu_200#cimData#/"rfu_220#]/rfu_230#blockingConfiguration#0originalChipType$#0rfu_240F#0bpuHash_#1/rfu_250x#mailboxUpdateDisable#bpuLock#trackingInfoUpdateEn#flashloaderIndicator#PIFX_MAILBOX_PAGE2PIFX_MAILBOX_SHADOW_PAGE2"PPIFX_MAILBOX_PAGE24PPIFX_MAILBOX_SHADOW_PAGE24)3tagIfxMailboxAreaifxMbxPage0#ifxMbxPage1G#ifxMbxPage2#ifxMbxShadowPage2#PIFX_MAILBOX_AREAu"PPIFX_MAILBOX_AREA)5tagUserMailboxPage0templateVersion#contentVersion#userOsStartFlag#5rfu_000v#PUSER_MAILBOX_PAGE0"PPUSER_MAILBOX_PAGE0 )6tagUserMailboxPage1startupConfigq#swpSyncId#PlinSecPhysStartAddr#X6rfu_150%#\PUSER_MAILBOX_PAGE1"?PPUSER_MAILBOX_PAGE1Z )9tagUserMailboxPage2userProgCounter#7 rfu_200#7chipType#7trackingInfo#8rfu_210# blockingConfiguration#(8rfu_220-#DbpuLock#trackingInfoUpdateEn#flashloaderIndicator#PUSER_MAILBOX_PAGE2z"PPUSER_MAILBOX_PAGE2 )9tagUserMailboxPage39rfu_300#PUSER_MAILBOX_PAGE3"PPUSER_MAILBOX_PAGE3 );tagUserMailboxAreauserMbxPage0#userMbxPage1?#userMbxPage2#userMbxPage3#PUSER_MAILBOX_AREA:"PPUSER_MAILBOX_AREA)=tagVolatileUserMailboxArea@version#mailboxStatus#mailboxUpdateInfo#<rfu_000;#interfaceActivationInfo#ifxMailboxPage2Addr8# rmsTearingServiceInfo#=rfu_010# tPVOLATILE_USER_MAILBOX_AREA"PPVOLATILE_USER_MAILBOX_AREA()@tagVolatileFlMailboxAreaversion#mailboxStatus#mailboxUpdateInfo#>rfu_000m#interfaceActivationInfo#ifxMailboxPage2Addr8# rmsTearingServiceInfo#?Krfu_010# flStartMode#l@secFLTMDownloadKey #pPVOLATILE_FL_MAILBOX_AREA"+ PPVOLATILE_FL_MAILBOX_AREAL &CMIF_STATUSMIF_PASSMIF_NVM_PROG_REQUESTMIF_NVM_ACCESS_REQUESTMIF_E_PRECOND_FAILxMIF_E_BLOCKEDxMIF_E_INVALID_NVM_SIZExMIF_E_INVALID_RAM_SIZExMIF_E_INVALID_MIFARE_CARDxMIF_E_AUTH_COPY_NOT_DONExMIF_E_PROG_NVM_ERRORxMIF_E_INVALID_UID_SPECIFIERxMIF_E_AUTH_ERRORxMIF_E_CRYPT_ERRORxMIF_STATUS_MAXxPMIF_STATUSr DMIF_CARD_TYPEMIF_CARD_1K MIF_CARD_4K MIF_CARD_TYPE_MAX PMIF_CARD_TYPE!"!PPMIF_CARD_TYPEW"EMIF_UID_TYPEMIF_UID_4 MIF_UID_7 MIF_UID_10 MIF_UID_TYPE_MAX PMIF_UID_TYPEr""r"PPMIF_UID_TYPE"SF Euid4"Fuid7#F uid10#)FMIF_UID uidType#uid"#PMIF_UID+#"+#PPMIF_UIDb# )GMIF_AUTH_UIDGuid##PMIF_AUTH_UIDw#"w#PPMIF_AUTH_UID#HMIF_READ0_TYPEMIF_READ0_PLAIN MIF_READ0_AUTH MIF_READ0_TYPE_MAX PMIF_READ0_TYPE#"#PPMIF_READ0_TYPE2$HPMIF_BLOCKN$)IMIF_OS_CONTEXTpRam~#pRedRam~#pNvm~#pRedNvm~# ramSize#nvmSize#PMIF_OS_CONTEXTi$"i$PPMIF_OS_CONTEXT$)JMIF_NVM_INFOJblockData%#pDestination~#pRedDestination~#PMIF_NVM_INFO%)LMIF_OS_STATISTICSmifareTraffic#lastReadBlock#lastChangedBlock#KsectorTrailerChanged%#K authenticationAttempt%#L authenticationSuccessful&#PMIF_OS_STATISTICSp%)MMIF_PROCESSSWPFRAME_INpMifHandle$#swpRxBufNum#swpTxBufNum#PMIF_PROCESSSWPFRAME_INW&"W&PPMIF_PROCESSSWPFRAME_IN&)NMIF_PROCESSSWPFRAME_OUTprogRequest[%#PMIF_PROCESSSWPFRAME_OUT&"&PPMIF_PROCESSSWPFRAME_OUT>'NN!%k%&%B'%~PMIF_PROCESSSWPFRAMEc')OMIF_PROCESSCOMPLETION_INpMifHandle$#swpTxBufNum#progStatus#PMIF_PROCESSCOMPLETION_IN'"'PPMIF_PROCESSCOMPLETION_IN (NP!%k%(%~%~PMIF_PROCESSCOMPLETION2()QMIF_AUTHCOPYCALLBACK_INpMifHandle$#PMIF_AUTHCOPYCALLBACK_INg("g(PPMIF_AUTHCOPYCALLBACK_IN(NQ!%k%(%~%~PMIF_AUTHCOPYCALLBACK()RMIF_GETSTATISTICS_INpMifHandle$#PMIF_GETSTATISTICS_IN)")PPMIF_GETSTATISTICS_INX))SMIF_GETSTATISTICS_OUTstatistics=&#PMIF_GETSTATISTICS_OUTz)"z)PPMIF_GETSTATISTICS_OUT)NS!%k%\)%)%~PMIF_GETSTATISTICS))TMIF_SELECTCARD_INpMifHandle$#TrandomA*#PMIF_SELECTCARD_IN*"*PPMIF_SELECTCARD_INs*)UMIF_SELECTCARD_OUT uidR##PMIF_SELECTCARD_OUT*"*PPMIF_SELECTCARD_OUT*NV!%k%w*%*%~PMIF_SELECTCARD*)WMIF_SELECTCARDWITHUID_IN pMifHandle$#VrandomM+#authUid##read0$#PMIF_SELECTCARDWITHUID_IN+"+PPMIF_SELECTCARDWITHUID_IN+)WMIF_SELECTCARDWITHUID_OUT uidR##PMIF_SELECTCARDWITHUID_OUT+"+PPMIF_SELECTCARDWITHUID_OUT,NX!%k%+%,%~PMIF_SELECTCARDWITHUID;,)YMIF_DESELECTCARD_INpMifHandle$#PMIF_DESELECTCARD_INp,"p,PPMIF_DESELECTCARD_IN,NY!%k%,%~%~PMIF_DESELECTCARD,)ZMIF_GETMIFAREOSINFO_OUT romVersion#patchVersion#ramSize1K#ramSize4K# PMIF_GETMIFAREOSINFO_OUT-"-PPMIF_GETMIFAREOSINFO_OUT-N[!%k%~%-%~PMIF_GETMIFAREOSINFO-)\MIF_CHANGEAUTHUIDFRAC_INpMifHandle$#uidFrac##PMIF_CHANGEAUTHUIDFRAC_IN-"-PPMIF_CHANGEAUTHUIDFRAC_INE.N]w%k%?%~%~PMIF_PROGRAMNVMCALLBACKk. )^MIF_MGMT_CONTEXTpProgramNvmCallback/#pRedProgramNvmCallback/#pNvm~#pRedNvm~# nvmSize#".PMIF_MGMT_CONTEXT. ".PPMIF_MGMT_CONTEXT7/ )_MIF_CREATECARD_INpMifHandle;/#cardType#uidType#uidSpecifier#PMIF_CREATECARD_INU/ "U/PPMIF_CREATECARD_IN/ )`MIF_CREATECARD_OUT uidR##PMIF_CREATECARD_OUT/ "/PPMIF_CREATECARD_OUT(0 )aMIF_CREATECARD2_INpMifHandle;/#uidR##cardType#PMIF_CREATECARD2_INH0 "0PPMIF_CREATECARD2_IN0 )aMIF_RELEASECARD_INpMifHandle;/#PMIF_RELEASECARD_IN0 "0PPMIF_RELEASECARD_IN 1 )cMIF_PERSONALIZESECTOR_INpMifHandle;/#pBuf~#pRedBuf~#bufSize# blockNum#PMIF_PERSONALIZESECTOR_IN-1 "-1PPMIF_PERSONALIZESECTOR_IN1 )dMIF_WRITEBLOCK_INpMifHandle;/#blockBufW$#blockNum#PMIF_WRITEBLOCK_IN1 "1PPMIF_WRITEBLOCK_INA2 )eMIF_READBLOCK_INpMifHandle;/#blockNum#PMIF_READBLOCK_IN`2 "`2PPMIF_READBLOCK_IN2 )eMIF_READBLOCK_OUTblockBufW$#PMIF_READBLOCK_OUT2 "2PPMIF_READBLOCK_OUT3 )fMIF_GETSERIALNUMBER_INpMifHandle;/#PMIF_GETSERIALNUMBER_IN/3 "/3PPMIF_GETSERIALNUMBER_IN|3 )gMIF_GETSERIALNUMBER_OUT uidR##PMIF_GETSERIALNUMBER_OUT3 "3PPMIF_GETSERIALNUMBER_OUT3 )hMIF_GETCARDMANAGEMENTINFO_OUTlibVersion#PMIF_GETCARDMANAGEMENTINFO_OUT 4 " 4PPMIF_GETCARDMANAGEMENTINFO_OUTh4 #)iMIF_RDR_CONTEXT pRam~#pRedRam~#ramSize#PMIF_RDR_CONTEXT4 "4PPMIF_RDR_CONTEXT4 )jMIF_READERMODESETUP_INpMifRdrHandle4#uidR##jrandomB5#PMIF_READERMODESETUP_IN5 "5PPMIF_READERMODESETUP_INy5 )kMIF_READERMODEAUTHREADER_INpMifRdrHandle4#kkey5#krb5# PMIF_READERMODEAUTHREADER_IN5 "5PPMIF_READERMODEAUTHREADER_IN6 !)mMIF_READERMODEAUTHREADER_OUT lra_rbPrimeh6#PMIF_READERMODEAUTHREADER_OUTG6 "G6PPMIF_READERMODEAUTHREADER_OUT6 ")nMIF_READERMODEAUTHCARD_IN pMifRdrHandle4#nrbDoublePrime7#PMIF_READERMODEAUTHCARD_IN6 "6PPMIF_READERMODEAUTHCARD_ING7 )oMIF_READERMODEENCRYPT_INpMifRdrHandle4#oinBuf7#inBufLen#PMIF_READERMODEENCRYPT_INn7 "n7PPMIF_READERMODEENCRYPT_IN7 )pMIF_READERMODEENCRYPT_OUTpoutBuf,8#outBufLen#PMIF_READERMODEENCRYPT_OUT8 "8PPMIF_READERMODEENCRYPT_OUTw8 )qMIF_READERMODEDECRYPT_INpMifRdrHandle4#qinBuf8#inBufLen#PMIF_READERMODEDECRYPT_IN8 "8PPMIF_READERMODEDECRYPT_IN9 )sMIF_READERMODEDECRYPT_OUTroutBuf\9#outBufLen#PMIF_READERMODEDECRYPT_OUT>9 ">9PPMIF_READERMODEDECRYPT_OUT9 )sMIF_READERMODEEND_INpMifRdrHandle4#PMIF_READERMODEEND_IN9 "9PPMIF_READERMODEEND_IN: )tMIF_READERMODEGETINFO_OUTlibVersion#ramSize#PMIF_READERMODEGETINFO_OUT<: "<:PPMIF_READERMODEGETINFO_OUT: T ..\..\..\..\..\..\src\c\system_m9900_usermailbox.hARM C/C++ Compiler, 5.03 [Build 76]C:\Users\tauche\git\verification\jdb\tests\SLE90\tools\fausi\python_elf_test\uvision+ C:\keil\ARM\ARMCC\bin\..\include\stdint.hARM C/C++ Compiler, 5.03 [Build 76]signed charshortintlong longunsigned charunsigned shortunsigned intunsigned long longPint8_td& Pint16_ts' Pint32_t|( Pint64_t) Puint8_t, Puint16_t- Puint32_t. Puint64_t/ Pint_least8_td5 Pint_least16_ts6 Pint_least32_t|7 Pint_least64_t8 Puint_least8_t; Puint_least16_t< Puint_least32_t= Puint_least64_t> Pint_fast8_t|C Pint_fast16_t|D Pint_fast32_t|E Pint_fast64_tF Puint_fast8_tI Puint_fast16_tJ Puint_fast32_tK Puint_fast64_tL Pintptr_t|O Puintptr_tP Pintmax_tS Puintmax_tT  ..\src\main.cARM C/C++ Compiler, 5.03 [Build 76]C:\Users\tauche\git\verification\jdb\tests\SLE90\tools\fausi\python_elf_test\uvision4intchartt*a#b#..\..\..\..\..\..\src\asm\startup_SLE9x.sARM Assembler, 5.03 [Build 76]C:\Users\tauche\git\verification\jdb\tests\SLE90\tools\fausi\python_elf_test\uvisiona$bReset_HandleraaNMI_HandleraaHardFault_HandleraaMemManage_HandleraaBusFault_HandleraaUsageFault_HandlerabSVC_HandlerbbDebugMon_HandlerbbPendSV_Handlerb bSysTick_Handler bbDefault_HandlerbbFAULT_TRAPbb__user_initial_stackheapb"b..\..\..\..\..\..\src\c\system_SLE90.cARM C/C++ Compiler, 5.03 [Build 76]C:\Users\tauche\git\verification\jdb\tests\SLE90\tools\fausi\python_elf_test\uvision`a<int?LSystemCoreClockUpdate``?_sys_exit_pass``p?_sys_exit_fail``\$return_code?_sys_exit`aHireturn_code?[SystemInitaa(ZstatuswYinData2dYfuncId`ZifxMbxPage28?passaa?failaain..\..\..\..\..\..\src\c\system_SLE90.cARM C/C++ Compiler, 5.03 [Build 76]C:\Users\tauche\git\verification\jdb\tests\SLE90\tools\fausi\python_elf_test\uvisionpSystemFrequencyP=p_SLE90_Fixup_UserNvmMailboxRegionStart; p_SLE90_Fixup_t16_UserMailbox_templateVersion; p_SLE90_Fixup_t16_UserMailbox_contentVersion; p_SLE90_Fixup_t8_UserMailbox_userOsStartFlag; pUSER_MBX_rfu_000; p_SLE90_Fixup_t8_UserMailbox_curLimConfigAtStartup;!pUSER_MBX_rfu_100;!p_SLE90_Fixup_t8_UserMailbox_atrColdRstBehavior;!p_SLE90_Fixup_t8_UserMailbox_atrColdRstValue; !p_SLE90_Fixup_t16_UserMailbox_atrColdRstDivFactor; !pUSER_MBX_rfu_110; !p_SLE90_Fixup_t8_UserMailbox_atrWarmRstBehavior;!p_SLE90_Fixup_t8_UserMailbox_atrWarmRstValue;!p_SLE90_Fixup_t16_UserMailbox_atrWarmRstDivFactor;!pUSER_MBX_rfu_120;!p_SLE90_Fixup_t8_UserMailbox_startupMode;!p_SLE90_Fixup_t8_UserMailbox_startupConfig;!pUSER_MBX_rfu_130;!p_SLE90_Fixup_t32_UserMailbox_userBootVectorAddr; !pUSER_MBX_rfu_140;$!p_SLE90_Fixup_t32_UserMailbox_swpSync_Id1;P!p_SLE90_Fixup_t32_UserMailbox_swpSync_Id2;T!p_SLE90_Fixup_t32_UserMailbox_linSecPhysStartAddr;X!pUSER_MBX_rfu_150;\!p_SLE90_Fixup_t32_UserMailbox_userProgCounter;"pUSER_MBX_rfu_200;"p_SLE90_Fixup_t8_UserMailbox_chipType;"p_SLE90_Fixup_t8_UserMailbox_trackingInfo;"pUSER_MBX_rfu_210; "p_SLE90_Fixup_t32_UserMailbox_ramUserStartAddr;("p_SLE90_Fixup_t32_UserMailbox_ramUserEndAddr;,"p_SLE90_Fixup_t32_UserMailbox_nvmUserStartAddr;0"p_SLE90_Fixup_t32_UserMailbox_nvmUserEndAddr;4"p_SLE90_Fixup_t32_UserMailbox_cacheConfig;8"p_SLE90_Fixup_t32_UserMailbox_moduleList<<"pUSER_MBX_rfu_220 <D"p_SLE90_Fixup_t32_UserMailbox_bpuLock;"p_SLE90_Fixup_t32_UserMailbox_trackingInfoUpdateEn;"p_SLE90_Fixup_t32_UserMailbox_flashloaderIndicator;"pUSER_MBX_rfu_300<#p_SLE90_Fixup_UserNvmMailboxRegionEnd;#pUSER_MBX_rfu_END;#..\src\main.cARM C/C++ Compiler, 5.03 [Build 76]C:\Users\tauche\git\verification\jdb\tests\SLE90\tools\fausi\python_elf_test\uvisionbbint>'procedurebbiv ^__resultPXcntQ>1mainbb]__resultP..\src\main.cARM C/C++ Compiler, 5.03 [Build 76]C:\Users\tauche\git\verification\jdb\tests\SLE90\tools\fausi\python_elf_test\uvisionintcharttpglobal_var@ pglobal_var3D pglobal_var4E pglobal_var2?\cA ..\..\..\..\..\..\src\asm\startup_SLE97.sa&% bTJ ..\..\..\..\..\..\src\c\system_m9900_usermailbox.hPE C:\keil\ARM\Inc\Infineon\SLE90\FW_M9900_A22.h> ..\..\..\..\..\..\src\c\system_SLE90.c` { a~"24  !')!>"2\S C:\keil\ARM\Inc\Infineon\SLE90\..\src\main.cIFX_SLE90.hLA C:\keil\ARM\ARMCC\bin\..\include\stdint.h\$ ..\src\main.cb ( ~$'c}}$&}&} $} }}}Q,T(U $Q<}}P_SYSTEM_M9900_USERMAILBOX_H_ SECTION(section_name) __attribute__((section(section_name)))ALIAS(old_name) __attribute__((alias(old_name)))+fw_m9900_a22_h 7NULL ((void *) 0)<_INT8_DEFINED_ A_INT16_DEFINED_ F_INT32_DEFINED_ K_UINT8_DEFINED_ P_UINT16_DEFINED_ U_UINT32_DEFINED_ Z_PINT8_DEFINED_ __PINT16_DEFINED_ d_PINT32_DEFINED_ i_PUINT8_DEFINED_ n_PUINT16_DEFINED_ s_PUINT32_DEFINED_ x_PVOID_DEFINED_ RMS_IF_START_ADDRESS 0x10001400RMS_IF ((RMS_STATUS *) RMS_IF_START_ADDRESS)RmsGetVersion_Idx 0RmsProgramNvm_Idx 1RmsEraseNvmPage_Idx 2RmsInitNvmMapRam_Idx 3RmsDoTearingService_Idx 4RmsTestUmslc_Idx 5RmsEraseNvmSectorFastPers_Idx 6RmsSetLinearSectorsFastPers_Idx 7RMS_GETVERSION_ID_IN 0x64E012F7RMS_PROGRAMNVM_ID_IN 0x5E0B8A3CRMS_ERASENVMPAGE_ID_IN 0x4FEF1ED6RMS_INITNVMMAPRAM_ID_IN 0x0D8FB891RMS_DOTEARINGSERVICE_ID_IN 0x49D4FF21RMS_ERASENVMSECTORFASTPERS_ID_IN 0x0538BA39RMS_SETLINEARSECTORSFASTPERS_ID_IN 0xC4B5A29ERMS_TESTUMSLC_ID_IN 0x711FC19ARMS_CALLBACK_ID_IN 0x38ACFE2CRMS_GETVERSION_ID_OUT 0x98413A45RMS_PROGRAMNVM_ID_OUT 0xEA1495C8RMS_ERASENVMPAGE_ID_OUT 0xF5A359FARMS_INITNVMMAPRAM_ID_OUT 0x61E154F7RMS_DOTEARINGSERVICE_ID_OUT 0x0407B198RMS_ERASENVMSECTORFASTPERS_ID_OUT 0xA49C244FRMS_SETLINEARSECTORSFASTPERS_ID_OUT 0x5A449B62RMS_TESTUMSLC_ID_OUT 0x11B9C82CRMS_CALLBACK_ID_OUT 0xC75301D3CSI_NVM_ERASE ((UINT16) (1<<0))CSI_NVM_WRITE ((UINT16) (1<<1))CSI_MAP_RAM_INIT ((UINT16) (1<<2))CSI_TEARING_SERVICE ((UINT16) (1<<3))CSI_NVM_READ_LEVEL ((UINT16) (1<<4))CSI_RAM_INIT ((UINT16) (1<<5))RMS_GetVersion(pFuncId,pInData,pOutData,pSyncData) (((pRMS_GetVersion)(RMS_IF[RmsGetVersion_Idx]))((pFuncId), (pInData), (pOutData), (pSyncData)))RMS_ProgramNvm(pFuncId,pInData,pOutData,pSyncData) (((pRMS_ProgramNvm)(RMS_IF[RmsProgramNvm_Idx]))((pFuncId), (pInData), (pOutData), (pSyncData)))RMS_EraseNvmPage(pFuncId,pInData,pOutData,pSyncData) (((pRMS_EraseNvmPage)(RMS_IF[RmsEraseNvmPage_Idx]))((pFuncId), (pInData), (pOutData), (pSyncData)))RMS_InitNvmMapRam(pFuncId,pInData,pOutData,pSyncData) (((pRMS_InitNvmMapRam)(RMS_IF[RmsInitNvmMapRam_Idx]))((pFuncId), (pInData), (pOutData), (pSyncData)))RMS_DoTearingService(pFuncId,pInData,pOutData,pSyncData) (((pRMS_DoTearingService)(RMS_IF[RmsDoTearingService_Idx]))((pFuncId), (pInData), (pOutData), (pSyncData)))RMS_TestUmslc(pFuncId,pInData,pOutData,pSyncData) (((pRMS_TestUmslc)(RMS_IF[RmsTestUmslc_Idx]))((pFuncId), (pInData), (pOutData), (pSyncData)))RMS_EraseNvmSectorFastPers(pFuncId,pInData,pOutData,pSyncData) (((pRMS_EraseNvmSectorFastPers)(RMS_IF[RmsEraseNvmSectorFastPers_Idx]))((pFuncId), (pInData), (pOutData), (pSyncData)))RMS_SetLinearSectorsFastPers(pFuncId,pInData,pOutData,pSyncData) (((pRMS_SetLinearSectorsFastPers)(RMS_IF[RmsSetLinearSectorsFastPers_Idx]))((pFuncId), (pInData), (pOutData), (pSyncData)))IFX_MAILBOX_AREA_ADDRESS 0x10001C00USER_MAILBOX_AREA_ADDRESS 0x10002000VOLATILE_USER_MAILBOX_AREA_ADDRESS 0x20000000VOLATILE_FL_MAILBOX_AREA_ADDRESS 0x20000000pIfxMailboxArea ((PIFX_MAILBOX_AREA) IFX_MAILBOX_AREA_ADDRESS)pUserMailboxArea ((PUSER_MAILBOX_AREA) USER_MAILBOX_AREA_ADDRESS)pVolatileUserMailboxArea ((PVOLATILE_USER_MAILBOX_AREA) VOLATILE_USER_MAILBOX_AREA_ADDRESS)pVolatileFlMailboxArea ((PVOLATILE_FL_MAILBOX_AREA) VOLATILE_FL_MAILBOX_AREA_ADDRESS)MBX_FL_CHANGE 0x0001MBX_BPU_BLOCK 0x0002MBX_BPU_HASH 0x0004MBX_TRACK_INFO 0x0008MBX_CHIP_DATA 0x0010MIFARE_SLE90_H MIF_NVM_1K_CARD 1024UMIF_NVM_4K_CARD 4096UMIF_OS_RAM_COMMON 128UMIF_OS_RAM_CACHE_1K 320UMIF_OS_RAM_CACHE_4K 896UMIF_OS_RAM_PATCHES 0UMIF_OS_RAM_1K_CARD (MIF_OS_RAM_COMMON + MIF_OS_RAM_CACHE_1K + MIF_OS_RAM_PATCHES)MIF_OS_RAM_4K_CARD (MIF_OS_RAM_COMMON + MIF_OS_RAM_CACHE_4K + MIF_OS_RAM_PATCHES)MIF_RDR_RAM 16UMIF_OS_ROM_BASE 0x0000a400ULMIF_OS_NVM_BASE 0x10005800ULMIF_ENTRY_POINT(base,idx) (((void (**)(void))(base))[(idx)])MIF_PROCESSSWPFRAME_ID_IN 0x8a09b4deULMIF_PROCESSSWPFRAME_ID_OUT 0x0b2c579eULMIF_ProcessSwpFrame ((MIF_PROCESSSWPFRAME *)MIF_ENTRY_POINT(MIF_OS_ROM_BASE, 0))MIF_PROCESSCOMPLETION_ID_IN 0x281a9d6eULMIF_PROCESSCOMPLETION_ID_OUT 0xc193dc48ULMIF_ProcessCompletion ((MIF_PROCESSCOMPLETION *)MIF_ENTRY_POINT(MIF_OS_ROM_BASE, 1))MIF_AUTHCOPYCALLBACK_ID_IN 0xed24ff3aULMIF_AUTHCOPYCALLBACK_ID_OUT 0xc5569f4eULMIF_AuthCopyCallback ((MIF_AUTHCOPYCALLBACK *)MIF_ENTRY_POINT(MIF_OS_NVM_BASE, 0))MIF_GETSTATISTICS_ID_IN 0x2ded1d16ULMIF_GETSTATISTICS_ID_OUT 0x67f3498aULMIF_GetStatistics ((MIF_GETSTATISTICS *)MIF_ENTRY_POINT(MIF_OS_NVM_BASE, 1))MIF_SELECTCARD_ID_IN 0xb05ffab3ULMIF_SELECTCARD_ID_OUT 0x9c9902b5ULMIF_SelectCard ((MIF_SELECTCARD *)MIF_ENTRY_POINT(MIF_OS_NVM_BASE, 2))MIF_SELECTCARDWITHUID_ID_IN 0xfdcf42e1ULMIF_SELECTCARDWITHUID_ID_OUT 0xe727398eULMIF_SelectCardWithUID ((MIF_SELECTCARDWITHUID *)MIF_ENTRY_POINT(MIF_OS_NVM_BASE, 3))MIF_DESELECTCARD_ID_IN 0x1f151178ULMIF_DESELECTCARD_ID_OUT 0x4b12b3deULMIF_DeselectCard ((MIF_DESELECTCARD *)MIF_ENTRY_POINT(MIF_OS_NVM_BASE, 4))MIF_GETMIFAREOSINFO_ID_IN 0x0b3130d4ULMIF_GETMIFAREOSINFO_ID_OUT 0x154b4b46ULMIF_GetMifareOSInfo ((MIF_GETMIFAREOSINFO *)MIF_ENTRY_POINT(MIF_OS_NVM_BASE, 5))MIF_CHANGEAUTHUIDFRAC_ID_IN 0xe8be07e3ULMIF_CHANGEAUTHUIDFRAC_ID_OUT 0x4dc7928eUL MIF_PROGRAMNVMCALLBACK_ID_IN 0x31060460UL MIF_PROGRAMNVMCALLBACK_ID_OUT 0x7386f7a9UL MIF_CREATECARD_ID_IN 0xddad3610UL MIF_CREATECARD_ID_OUT 0x0b786290UL MIF_CREATECARD2_ID_IN 0xd9c2daa5UL MIF_CREATECARD2_ID_OUT 0x1f3c423dUL MIF_RELEASECARD_ID_IN 0x8f3c06d2UL MIF_RELEASECARD_ID_OUT 0x9e568f9dUL MIF_PERSONALIZESECTOR_ID_IN 0x5951b775UL MIF_PERSONALIZESECTOR_ID_OUT 0x2635271bUL MIF_WRITEBLOCK_ID_IN 0x449358fbUL MIF_WRITEBLOCK_ID_OUT 0x4ca39003UL MIF_READBLOCK_ID_IN 0x688f1a33UL MIF_READBLOCK_ID_OUT 0x0935f969UL MIF_GETSERIALNUMBER_ID_IN 0x04f13892UL MIF_GETSERIALNUMBER_ID_OUT 0x19687669UL MIF_GETCARDMANAGEMENTINFO_ID_IN 0x78c29d0aUL MIF_GETCARDMANAGEMENTINFO_ID_OUT 0xaf4a9bb7UL MIF_READERMODESETUP_ID_IN 0x257cec3aUL MIF_READERMODESETUP_ID_OUT 0xf6eecb8eUL MIF_READERMODEAUTHREADER_ID_IN 0x9c4278f3UL MIF_READERMODEAUTHREADER_ID_OUT 0x8c85720aUL MIF_READERMODEAUTHCARD_ID_IN 0x2656f852UL MIF_READERMODEAUTHCARD_ID_OUT 0xa72ceeb4UL MIF_READERMODEENCRYPT_ID_IN 0x2cd31f55UL MIF_READERMODEENCRYPT_ID_OUT 0x63ac2e9bUL MIF_READERMODEDECRYPT_ID_IN 0xa321806cUL MIF_READERMODEDECRYPT_ID_OUT 0xdb4898a7UL MIF_READERMODEEND_ID_IN 0x951694d8UL MIF_READERMODEEND_ID_OUT 0xc6fb85a7UL MIF_READERMODEGETINFO_ID_IN 0x197a50baUL MIF_READERMODEGETINFO_ID_OUT 0x1f9ade20UL __stdint_h  __ARMCLIB_VERSION 5030076__STDINT_DECLS __CLIBNS__CLIBNS \INT8_MIN -128]INT16_MIN -32768^INT32_MIN (~0x7fffffff)_INT64_MIN __ESCAPE__(~0x7fffffffffffffffll)bINT8_MAX 127cINT16_MAX 32767dINT32_MAX 2147483647eINT64_MAX __ESCAPE__(9223372036854775807ll)hUINT8_MAX 255iUINT16_MAX 65535jUINT32_MAX 4294967295ukUINT64_MAX __ESCAPE__(18446744073709551615ull)pINT_LEAST8_MIN -128qINT_LEAST16_MIN -32768rINT_LEAST32_MIN (~0x7fffffff)sINT_LEAST64_MIN __ESCAPE__(~0x7fffffffffffffffll)vINT_LEAST8_MAX 127wINT_LEAST16_MAX 32767xINT_LEAST32_MAX 2147483647yINT_LEAST64_MAX __ESCAPE__(9223372036854775807ll)|UINT_LEAST8_MAX 255}UINT_LEAST16_MAX 65535~UINT_LEAST32_MAX 4294967295uUINT_LEAST64_MAX __ESCAPE__(18446744073709551615ull)INT_FAST8_MIN (~0x7fffffff)INT_FAST16_MIN (~0x7fffffff)INT_FAST32_MIN (~0x7fffffff)INT_FAST64_MIN __ESCAPE__(~0x7fffffffffffffffll)INT_FAST8_MAX 2147483647INT_FAST16_MAX 2147483647INT_FAST32_MAX 2147483647INT_FAST64_MAX __ESCAPE__(9223372036854775807ll)UINT_FAST8_MAX 4294967295uUINT_FAST16_MAX 4294967295uUINT_FAST32_MAX 4294967295uUINT_FAST64_MAX __ESCAPE__(18446744073709551615ull)INTPTR_MIN (~0x7fffffff)INTPTR_MAX 2147483647UINTPTR_MAX 4294967295uINTMAX_MIN __ESCAPE__(~0x7fffffffffffffffll)INTMAX_MAX __ESCAPE__(9223372036854775807ll)UINTMAX_MAX __ESCAPE__(18446744073709551615ull)PTRDIFF_MIN (~0x7fffffff)PTRDIFF_MAX 2147483647SIG_ATOMIC_MIN (~0x7fffffff)SIG_ATOMIC_MAX 2147483647SIZE_MAX 4294967295uWCHAR_MINWCHAR_MAXWCHAR_MIN 0WCHAR_MAX 65535WINT_MIN (~0x7fffffff)WINT_MAX 2147483647INT8_C(x) (x)INT16_C(x) (x)INT32_C(x) (x)INT64_C(x) __ESCAPE__(x##ll)UINT8_C(x) (x##u)UINT16_C(x) (x##u)UINT32_C(x) (x##u)UINT64_C(x) __ESCAPE__(x##ull)INTMAX_C(x) __ESCAPE__(x##ll)UINTMAX_C(x) __ESCAPE__(x##ull)}ASystemCoreClockUpdate_sys_exit_pass_sys_exit_failC_sys_exitvSystemInitpassfailCSystemFrequency_SLE90_Fixup_UserNvmMailboxRegionStart_SLE90_Fixup_t16_UserMailbox_templateVersion9_SLE90_Fixup_t16_UserMailbox_contentVersionr_SLE90_Fixup_t8_UserMailbox_userOsStartFlagUSER_MBX_rfu_000_SLE90_Fixup_t8_UserMailbox_curLimConfigAtStartupUSER_MBX_rfu_100&_SLE90_Fixup_t8_UserMailbox_atrColdRstBehaviorb_SLE90_Fixup_t8_UserMailbox_atrColdRstValue_SLE90_Fixup_t16_UserMailbox_atrColdRstDivFactorUSER_MBX_rfu_110_SLE90_Fixup_t8_UserMailbox_atrWarmRstBehavior3_SLE90_Fixup_t8_UserMailbox_atrWarmRstValuel_SLE90_Fixup_t16_UserMailbox_atrWarmRstDivFactorUSER_MBX_rfu_120_SLE90_Fixup_t8_UserMailbox_startupMode_SLE90_Fixup_t8_UserMailbox_startupConfig4USER_MBX_rfu_130R_SLE90_Fixup_t32_UserMailbox_userBootVectorAddrUSER_MBX_rfu_140_SLE90_Fixup_t32_UserMailbox_swpSync_Id1_SLE90_Fixup_t32_UserMailbox_swpSync_Id2_SLE90_Fixup_t32_UserMailbox_linSecPhysStartAddrWUSER_MBX_rfu_150u_SLE90_Fixup_t32_UserMailbox_userProgCounterUSER_MBX_rfu_200_SLE90_Fixup_t8_UserMailbox_chipType_SLE90_Fixup_t8_UserMailbox_trackingInfo5USER_MBX_rfu_210S_SLE90_Fixup_t32_UserMailbox_ramUserStartAddr_SLE90_Fixup_t32_UserMailbox_ramUserEndAddr_SLE90_Fixup_t32_UserMailbox_nvmUserStartAddr_SLE90_Fixup_t32_UserMailbox_nvmUserEndAddr;_SLE90_Fixup_t32_UserMailbox_cacheConfigq_SLE90_Fixup_t32_UserMailbox_moduleListUSER_MBX_rfu_220_SLE90_Fixup_t32_UserMailbox_bpuLock_SLE90_Fixup_t32_UserMailbox_trackingInfoUpdateEn5_SLE90_Fixup_t32_UserMailbox_flashloaderIndicatortUSER_MBX_rfu_300_SLE90_Fixup_UserNvmMailboxRegionEndUSER_MBX_rfu_END%L proceduremainMM global_varglobal_var3global_var4global_var2@ARM$d.realdata$d.realdatasrc\Cod_Const_SetConfigPage.csrc\Cod_Const_SetIfxConfigArea.cIFX_CFG_AREAsrc\Cod_Const_SetIfxMailboxArea.cIFX_MBX_AREABuildAttributes$$THM_ISAv4$P$D$K$B$S$PE$A:L22UL41UL21$X:L11$S22US41US21$IEEE1$IW$USESV6$~STKCKD$USESV7$~SHL$OSPACE$EBA8$STANDARDLIB$PRES8$EABIv2_SLE90_Fixup_IfxNvmConfigRegionStart_SLE90_Fixup_t32_IfxConfig_phasewordIFX_CFG_rfu_000_SLE90_Fixup_t16_IfxConfig_regBITRED1_Page0_SLE90_Fixup_t16_IfxConfig_regBITRED2_Page0_SLE90_Fixup_t16_IfxConfig_regBITRED3_Page0_SLE90_Fixup_t16_IfxConfig_regBITRED4_Page0_SLE90_Fixup_t16_IfxConfig_regBITRED5_Page0_SLE90_Fixup_t16_IfxConfig_regBITRED6_Page0_SLE90_Fixup_t16_IfxConfig_regBITRED7_Page0IFX_CFG_rfu_010_SLE90_Fixup_t32_IfxConfig_chipIndividualNvmKey_SLE90_Fixup_t16_IfxConfig_templateVersion_SLE90_Fixup_t16_IfxConfig_contentVersionIFX_CFG_rfu_020_SLE90_Fixup_t16_IfxConfig_regNWS_ADJ_SLE90_Fixup_t16_IfxConfig_redRegNWS_ADJ_SLE90_Fixup_t16_IfxConfig_regNWS_CTRL_SLE90_Fixup_t16_IfxConfig_redRegNWS_CTRL_SLE90_Fixup_t16_IfxConfig_regNWS_SLEEP_ADJ_SLE90_Fixup_t16_IfxConfig_redRegNWS_SLEEP_ADJIFX_CFG_rfu_030_SLE90_Fixup_t16_IfxConfig_regUSB_DCOCTRL_SLE90_Fixup_t16_IfxConfig_regANA_DCOCTRL_SLE90_Fixup_t16_IfxConfig_regANA_DCOCTRL2_SLE90_Fixup_t16_IfxConfig_regANA_BGCTRL_SLE90_Fixup_t16_IfxConfig_regANA_CTRL0_SLE90_Fixup_t16_IfxConfig_regANA_CTRL1_SLE90_Fixup_t16_IfxConfig_redRegANA_CTRL1_SLE90_Fixup_t16_IfxConfig_regANA_CTRL2_SLE90_Fixup_t16_IfxConfig_redRegANA_CTRL2_SLE90_Fixup_t16_IfxConfig_regANA_CTRL3_SLE90_Fixup_t16_IfxConfig_regPM_CTRL1_SLE90_Fixup_t16_IfxConfig_regPM_CTRL2_SLE90_Fixup_t16_IfxConfig_regPM_SH_FREQ_SLE90_Fixup_t16_IfxConfig_regCLKU_OPM_SLE90_Fixup_t16_IfxConfig_regCLKU_CTRL_SLE90_Fixup_t16_IfxConfig_regCLKU_CTRL2_SLE90_Fixup_t16_IfxConfig_regUMSLC_CFG_0_SLE90_Fixup_t16_IfxConfig_redRegUMSLC_CFG_0_SLE90_Fixup_t16_IfxConfig_regUMSLC_CFG_1_SLE90_Fixup_t16_IfxConfig_redRegUMSLC_CFG_1_SLE90_Fixup_t16_IfxConfig_regTRNG_CFG_01_SLE90_Fixup_t16_IfxConfig_redRegTRNG_CFG_01_SLE90_Fixup_t16_IfxConfig_regTRNG_CFG_02_SLE90_Fixup_t16_IfxConfig_redRegTRNG_CFG_02_SLE90_Fixup_t16_IfxConfig_regTRNG_CFG_01_UM_SLE90_Fixup_t16_IfxConfig_redRegTRNG_CFG_01_UM_SLE90_Fixup_t16_IfxConfig_regANA_TSCTRL_SLE90_Fixup_t16_IfxConfig_redRegANA_TSCTRL_SLE90_Fixup_t16_IfxConfig_regSWP_TEST_SLE90_Fixup_t16_IfxConfig_firstSyncIdTxDelay_SLE90_Fixup_t16_IfxConfig_furtherSyncIdTxDelayIFX_CFG_rfu_040_SLE90_Fixup_t32_IfxConfig_regUSB_XCR_CTRL_SLE90_Fixup_t32_IfxConfig_regUSB_XCR_STAT_SLE90_Fixup_t16_IfxConfig_curLimVal_4mA_SLE90_Fixup_t16_IfxConfig_curLimVal_5mA_SLE90_Fixup_t16_IfxConfig_curLimVal_6mA_SLE90_Fixup_t16_IfxConfig_curLimVal_10mAIFX_CFG_rfu_050_SLE90_Fixup_t8_IfxConfig_blockVoltageClass_SLE90_Fixup_t8_IfxConfig_ifxTestProgVersion_SLE90_Fixup_t8_IfxConfig_ifxTestProgFlag_SLE90_Fixup_t8_IfxConfig_testerInfoField_SLE90_Fixup_t32_IfxConfig_bosConfig_SLE90_Fixup_t16_IfxConfig_dcoAdjustParameterRptc1DcoAdjInit_SLE90_Fixup_t16_IfxConfig_dcoAdjustParameterRptc1DcoAdjInit2_SLE90_Fixup_t16_IfxConfig_dcoAdjustParameterRptc1Cycles_SLE90_Fixup_t16_IfxConfig_dcoAdjustParameterRptc1TargetSysFreq_SLE90_Fixup_t16_IfxConfig_dcoAdjustParameterRptc1EclkScal_SLE90_Fixup_t16_IfxConfig_dcoAdjustParameterRptc1FpitchIFX_CFG_rfu_100_SLE90_Fixup_t32_IfxConfig_shippingModeIndicator_SLE90_Fixup_t32_IfxConfig_bosUmslcTestCfg_1_SLE90_Fixup_t32_IfxConfig_bosUmslcTestCfg_0_SLE90_Fixup_t32_IfxConfig_bosInvUmslcTestCfg_1_SLE90_Fixup_t32_IfxConfig_bosInvUmslcTestCfg_0_SLE90_Fixup_t16_IfxConfig_regCREAD_0_SLE90_Fixup_t16_IfxConfig_regCREADHW_0_SLE90_Fixup_t16_IfxConfig_regCREADHE_0_SLE90_Fixup_t16_IfxConfig_regVPN1_0_SLE90_Fixup_t16_IfxConfig_regVPN2_0_SLE90_Fixup_t16_IfxConfig_regVPP1_0_SLE90_Fixup_t16_IfxConfig_regVPP2_0_SLE90_Fixup_t16_IfxConfig_regVPP3_0_SLE90_Fixup_t16_IfxConfig_regVDIRECT_0_SLE90_Fixup_t16_IfxConfig_regVBOOST_0_SLE90_Fixup_t16_IfxConfig_regVINHVDG_0_SLE90_Fixup_t16_IfxConfig_regGLOBAL1_0_SLE90_Fixup_t16_IfxConfig_regGLOBAL2_0_SLE90_Fixup_t16_IfxConfig_regCONFIG1_0_SLE90_Fixup_t16_IfxConfig_regCONFIG2_0_SLE90_Fixup_t16_IfxConfig_regNVMTEST1_0_SLE90_Fixup_t16_IfxConfig_regNVMTEST2_0_SLE90_Fixup_t16_IfxConfig_regSECRED_0IFX_CFG_rfu_200_0_SLE90_Fixup_t16_IfxConfig_regVPP4_0_SLE90_Fixup_t16_IfxConfig_regCREADPR_0_SLE90_Fixup_t16_IfxConfig_regCONFIG3_0_SLE90_Fixup_t16_IfxConfig_regGLOBAL3_0_SLE90_Fixup_t16_IfxConfig_regVPN3_0_SLE90_Fixup_t16_IfxConfig_regERASE2_0IFX_CFG_rfu_210_0_SLE90_Fixup_t16_IfxConfig_regBITRED0_0_SLE90_Fixup_t16_IfxConfig_regBITRED1_0_SLE90_Fixup_t16_IfxConfig_regBITRED2_0_SLE90_Fixup_t16_IfxConfig_regBITRED3_0_SLE90_Fixup_t16_IfxConfig_regBITRED4_0_SLE90_Fixup_t16_IfxConfig_regBITRED5_0_SLE90_Fixup_t16_IfxConfig_regBITRED6_0_SLE90_Fixup_t16_IfxConfig_regBITRED7_0_SLE90_Fixup_t16_IfxConfig_regBITREDM_0_SLE90_Fixup_t16_IfxConfig_regBITRED0S_0_SLE90_Fixup_t16_IfxConfig_regBITRED1S_0_SLE90_Fixup_t16_IfxConfig_regBITRED2S_0_SLE90_Fixup_t16_IfxConfig_regBITRED3S_0_SLE90_Fixup_t16_IfxConfig_regBITRED4S_0_SLE90_Fixup_t16_IfxConfig_regBITRED5S_0_SLE90_Fixup_t16_IfxConfig_regBITRED6S_0_SLE90_Fixup_t16_IfxConfig_regBITRED7S_0_SLE90_Fixup_t16_IfxConfig_regBITREDMS_0IFX_CFG_rfu_220_0IFX_CFG_nvmModule1IFX_CFG_nvmModule2IFX_CFG_nvmModule3IFX_CFG_rfu_END_SLE90_Fixup_IfxNvmConfigRegionEnd_SLE90_Fixup_IfxNvmMailboxRegionStart_SLE90_Fixup_t16_IfxMailbox_templateVersion_SLE90_Fixup_t16_IfxMailbox_contentVersionIFX_MBX_rfu_000IFX_MBX__nvmConfig_rfu_000_SLE90_Fixup_t8_IfxMailbox_nvmModules_SLE90_Fixup_t8_IfxMailbox_nvm0SectorsNr_SLE90_Fixup_t8_IfxMailbox_nvm1SectorsNr_SLE90_Fixup_t8_IfxMailbox_nvm2SectorsNr_SLE90_Fixup_t8_IfxMailbox_nvm3SectorsNr_SLE90_Fixup_t16_IfxMailbox_nvmPageSize_SLE90_Fixup_t16_IfxMailbox_nvmSectorSize_SLE90_Fixup_t8_IfxMailbox_blockSize_SLE90_Fixup_t8_IfxMailbox_nvmMemoryFieldNrIFX_MBX_rfu_010_SLE90_Fixup_t32_IfxMailbox_linSecPhysAddrLow_SLE90_Fixup_t32_IfxMailbox_ifxRmsConfig_SLE90_Fixup_t32_IfxMailbox_ifxMifConfigIFX_MBX_rfu_020_SLE90_Fixup_t16_IfxMailbox_curLimValue_4mA_SLE90_Fixup_t16_IfxMailbox_curLimValue_5mA_SLE90_Fixup_t16_IfxMailbox_curLimValue_6mA_SLE90_Fixup_t16_IfxMailbox_curLimValue_10mAIFX_MBX_rfu_030_SLE90_Fixup_t32_IfxMailbox_ifxUmslcTestCfg_1_SLE90_Fixup_t32_IfxMailbox_ifxUmslcTestCfg_0_SLE90_Fixup_t32_IfxMailbox_ifxInvUmslcTestCfg_1_SLE90_Fixup_t32_IfxMailbox_ifxInvUmslcTestCfg_0_SLE90_Fixup_t8_IfxMailbox_atrDefaultRstBehavior_SLE90_Fixup_t8_IfxMailbox_atrDefaultRstValue_SLE90_Fixup_t16_IfxMailbox_atrDefaultRstDivFactorIFX_MBX_rfu_040_SLE90_Fixup_t16_IfxMailbox_regANA_CTRL2_SLE90_Fixup_t16_IfxMailbox_regTRNG_CFG_01_SLE90_Fixup_t16_IfxMailbox_regTRNG_CFG_02_SLE90_Fixup_t16_IfxMailbox_regANA_TSCTRL_SLE90_Fixup_t16_IfxMailbox_regANA_CTRL1_SLE90_Fixup_t16_IfxMailbox_regNWS_ADJ_SLE90_Fixup_t16_IfxMailbox_regNWS_CTRL_SLE90_Fixup_t16_IfxMailbox_regNWS_SLEEP_ADJ_SLE90_Fixup_t8_IfxMailbox_curLimConfigAtStartupIFX_MBX_rfu_100_SLE90_Fixup_t8_IfxMailbox_atrColdRstBehavior_SLE90_Fixup_t8_IfxMailbox_atrColdRstValue_SLE90_Fixup_t16_IfxMailbox_atrColdRstDivFactorIFX_MBX_rfu_110_SLE90_Fixup_t8_IfxMailbox_atrWarmRstBehavior_SLE90_Fixup_t8_IfxMailbox_atrWarmRstValue_SLE90_Fixup_t16_IfxMailbox_atrWarmRstDivFactorIFX_MBX_rfu_120_SLE90_Fixup_t8_IfxMailbox_startupMode_SLE90_Fixup_t8_IfxMailbox_startupConfigIFX_MBX_rfu_130_SLE90_Fixup_t32_IfxMailbox_userVectorTableAddrIFX_MBX_rfu_140_SLE90_Fixup_t16_IfxMailbox_mifLock_SLE90_Fixup_t8_IfxMailbox_valid4ByteUids_SLE90_Fixup_t8_IfxMailbox_valid7ByteUids_SLE90_Fixup_t8_IfxMailbox_uid4_1_SLE90_Fixup_t8_IfxMailbox_uid4_2_SLE90_Fixup_t8_IfxMailbox_uid4_3_SLE90_Fixup_t8_IfxMailbox_uid4_4_SLE90_Fixup_t8_IfxMailbox_uid4_5_SLE90_Fixup_t8_IfxMailbox_uid4_6_SLE90_Fixup_t8_IfxMailbox_uid4_7_SLE90_Fixup_t8_IfxMailbox_uid4_8_SLE90_Fixup_t8_IfxMailbox_uid7_1_SLE90_Fixup_t8_IfxMailbox_uid7_2_SLE90_Fixup_t8_IfxMailbox_uid7_3_SLE90_Fixup_t8_IfxMailbox_uid7_4_SLE90_Fixup_t8_IfxMailbox_rev_uid4_SLE90_Fixup_t8_IfxMailbox_rev_uid7IFX_MBX_rfu_150_SLE90_Fixup_t8_IfxMailbox_rndShieldInvPatternNumber_SLE90_Fixup_t8_IfxMailbox_rndShieldPatternNumber_SLE90_Fixup_t16_IfxMailbox_rndShieldDrv_1_SLE90_Fixup_t16_IfxMailbox_rndShieldRcv1_1_SLE90_Fixup_t16_IfxMailbox_rndShieldRcv2_1_SLE90_Fixup_t16_IfxMailbox_rndShieldDrv_2_SLE90_Fixup_t16_IfxMailbox_rndShieldRcv1_2_SLE90_Fixup_t16_IfxMailbox_rndShieldRcv2_2_SLE90_Fixup_t16_IfxMailbox_rndShieldDrv_3_SLE90_Fixup_t16_IfxMailbox_rndShieldRcv1_3_SLE90_Fixup_t16_IfxMailbox_rndShieldRcv2_3_SLE90_Fixup_t16_IfxMailbox_rndShieldDrv_4_SLE90_Fixup_t16_IfxMailbox_rndShieldRcv1_4_SLE90_Fixup_t16_IfxMailbox_rndShieldRcv2_4_SLE90_Fixup_t16_IfxMailbox_rndShieldDrv_5_SLE90_Fixup_t16_IfxMailbox_rndShieldRcv1_5_SLE90_Fixup_t16_IfxMailbox_rndShieldRcv2_5_SLE90_Fixup_t16_IfxMailbox_rndShieldDrv_6_SLE90_Fixup_t16_IfxMailbox_rndShieldRcv1_6_SLE90_Fixup_t16_IfxMailbox_rndShieldRcv2_6IFX_MBX_rfu_160_SLE90_Fixup_t32_IfxMailbox_ifxProgCounterIFX_MBX_rfu_200_SLE90_Fixup_t8_IfxMailbox_cimIdentifier_SLE90_Fixup_t8_IfxMailbox_platformIdentifier_SLE90_Fixup_t8_IfxMailbox_modeIdentifier_SLE90_Fixup_t8_IfxMailbox_romCode_SLE90_Fixup_t8_IfxMailbox_chipType_SLE90_Fixup_t8_IfxMailbox_designStep_SLE90_Fixup_t8_IfxMailbox_batchNumber_SLE90_Fixup_t8_IfxMailbox_chipPositionX_SLE90_Fixup_t8_IfxMailbox_chipPositionY_SLE90_Fixup_t8_IfxMailbox_trackingInfo_SLE90_Fixup_t8_IfxMailbox_firmwareIdentifier_SLE90_Fixup_t8_IfxMailbox_bosRomVersion_SLE90_Fixup_t8_IfxMailbox_bosPatchVersion_SLE90_Fixup_t8_IfxMailbox_individualLength_SLE90_Fixup_t8_IfxMailbox_indLowerTempLimit_SLE90_Fixup_t8_IfxMailbox_indUpperTempLimit_SLE90_Fixup_t8_IfxMailbox_indOscFreq_SLE90_Fixup_t8_IfxMailbox_indFeatures_SLE90_Fixup_t8_IfxMailbox_indFeatures1_SLE90_Fixup_t8_IfxMailbox_individualDataIFX_MBX_rfu_220IFX_MBX_rfu_230_SLE90_Fixup_t32_IfxMailbox_ramUserStartAddr_SLE90_Fixup_t32_IfxMailbox_ramUserEndAddr_SLE90_Fixup_t32_IfxMailbox_nvmUserStartAddr_SLE90_Fixup_t32_IfxMailbox_nvmUserEndAddr_SLE90_Fixup_t32_IfxMailbox_cacheConfig_SLE90_Fixup_t32_IfxMailbox_moduleList_SLE90_Fixup_t8_IfxMailbox_originalChipTypeIFX_MBX_rfu_240_SLE90_Fixup_t8_IfxMailbox_bpuHashIFX_MBX_rfu_250_SLE90_Fixup_t32_IfxMailbox_mailboxUpdateDisable_SLE90_Fixup_t32_IfxMailbox_bpuLock_SLE90_Fixup_t32_IfxMailbox_trackingInfoUpdateEn_SLE90_Fixup_t32_IfxMailbox_flashloaderIndicatorIFX_MBX_rfu_300IFX_MBX_rfu_END_SLE90_Fixup_IfxNvmMailboxRegionEnd$d.realdata$t$d.realdata$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d.realdata$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$d.realdata$t$d.realdata$d.realdata$d.realdata$d.realdata$d.realdata$d.realdata$d.realdata$d.realdata$d.realdata$d.realdata$d.realdata$d.realdata$d.realdatasrc\\__Cod_Init_Cim.asm.textsrc\\__Cod_Init_Usermode.asm.textsrc\Cod_Const_DummyBosVersion.c.constdatasrc\\Cod_Init_ChangeRamKey.asm.textsrc\\Cod_Init_Cim.c.emb_textsrc\Cod_Init_Cim.c.textsrc\\Cod_Init_PerformUsermodeEntry.asmCOD_INIT_PERFORMUSERMODEENTRYUMEntrySequenceStartLabelUMEntrySequenceEndLabelsrc\\Cod_Init_PrepareUsermodeEntry.asm.textsrc\\Cod_Init_ResetHandler.asm.textsrc\\Cod_Init_StartupMain.c.emb_textsrc\Cod_Init_StartupMain.c.textsrc\\Cod_Init_Usermode.c.emb_textsrc\Cod_Init_Usermode.c.textsrc\\Cod_Init_UsermodePart2.c.emb_textsrc\Cod_Init_UsermodePart2.c.textsrc\\Cod_Init_UsermodeWrapperForDltFunctionPool.c.emb_textsrc\Cod_Init_UsermodeWrapperForDltFunctionPool.c.text..\\Shared\\src\\Ana\\Sub_Ana_AdaptCurrLimSetting.c.emb_text..\Shared\src\Ana\Sub_Ana_AdaptCurrLimSetting.c.text..\\Shared\\src\\Ana\\Sub_Ana_GetCurrLimSettingBasedOnVoltageClass.c.emb_text..\Shared\src\Ana\Sub_Ana_GetCurrLimSettingBasedOnVoltageClass.c.text.constdata..\\Shared\\src\\Ana\\Sub_Ana_IsCurrentVoltageClassBlocked.c.emb_text..\Shared\src\Ana\Sub_Ana_IsCurrentVoltageClassBlocked.c.text.constdata..\\Shared\\src\\Ana\\Sub_Ana_LoadCurrLimSetting.c.emb_text..\Shared\src\Ana\Sub_Ana_LoadCurrLimSetting.c.text..\\Shared\\src\\Ana\\Sub_Ana_LoadUserCurrLimAdjustment.c.emb_text..\Shared\src\Ana\Sub_Ana_LoadUserCurrLimAdjustment.c.text..\\Shared\\src\\Ana\\Sub_Ana_RestoreUserCurrLimSetting.c.emb_text..\Shared\src\Ana\Sub_Ana_RestoreUserCurrLimSetting.c.text..\\Shared\\src\\Ana\\Sub_Ana_PerformVoltageClassBlocking.c.emb_text..\Shared\src\Ana\Sub_Ana_PerformVoltageClassBlocking.c.text..\\Shared\\src\\Comm\\Sub_Comm_ClearCommBuffer.c.emb_text..\Shared\src\Comm\Sub_Comm_ClearCommBuffer.c.text..\\Shared\\src\\Comm\\Sub_Comm_Fail.c.emb_text..\Shared\src\Comm\Sub_Comm_Fail.c.text..\\Shared\\src\\Comm\\Sub_Comm_FlushCommBuffer.c.emb_text..\Shared\src\Comm\Sub_Comm_FlushCommBuffer.c.text..\\Shared\\src\\Comm\\Sub_Comm_Pass.c.emb_text..\Shared\src\Comm\Sub_Comm_Pass.cXCIM_TM_CODE_AREA..\\Shared\\src\\Comm\\Sub_Comm_ReceiveBuffer.c.emb_text..\Shared\src\Comm\Sub_Comm_ReceiveBuffer.cTM_ONLY_CODE_AREA..\\Shared\\src\\Comm\\Sub_Comm_ReceiveByte.c.emb_text..\Shared\src\Comm\Sub_Comm_ReceiveByte.c.text..\\Shared\\src\\Comm\\Sub_Comm_ReceiveHalfWord.c.emb_text..\Shared\src\Comm\Sub_Comm_ReceiveHalfWord.cXCIM_TM_CODE_AREA..\\Shared\\src\\Comm\\Sub_Comm_ReceiveWord.c.emb_text..\Shared\src\Comm\Sub_Comm_ReceiveWord.c.text..\\Shared\\src\\Comm\\Sub_Comm_SendBuffer.c.emb_text..\Shared\src\Comm\Sub_Comm_SendBuffer.cTM_ONLY_CODE_AREA..\\Shared\\src\\Comm\\Sub_Comm_SendByte.c.emb_text..\Shared\src\Comm\Sub_Comm_SendByte.cXCIM_TM_CODE_AREA..\\Shared\\src\\Comm\\Sub_Comm_SendHalfWord.c.emb_text..\Shared\src\Comm\Sub_Comm_SendHalfWord.cXCIM_TM_CODE_AREA..\\Shared\\src\\Comm\\Sub_Comm_SendWord.c.emb_text..\Shared\src\Comm\Sub_Comm_SendWord.cXCIM_TM_CODE_AREA..\\Shared\\src\\Const\\Sub_Const_DltFunctionPool.c.emb_text..\Shared\src\Const\Sub_Const_DltFunctionPool.c.textDummyFunction.ARM.__AT_0x00000FEC..\\Shared\\src\\Const\\Sub_Const_FixupSymbols.c.emb_text..\Shared\src\Const\Sub_Const_FixupSymbols.c.ARM.__AT_0x00006BFF.ARM.__AT_0x10000400.ARM.__AT_0x100013FF.constdata..\\Shared\\src\\Const\\Sub_Const_IfxRomConfigArea.c.emb_text..\Shared\src\Const\Sub_Const_IfxRomConfigArea.cIFX_ROM_CFG_AREA..\\Shared\\src\\Gen\\Sub_Gen_GenWait.c.emb_text..\Shared\src\Gen\Sub_Gen_GenWait.c.text..\\Shared\\src\\Gen\\Sub_Gen_GetBiggerValue.c.emb_text..\Shared\src\Gen\Sub_Gen_GetBiggerValue.c.text..\\Shared\\src\\Gen\\Sub_Gen_GetSmallerValue.c.emb_text..\Shared\src\Gen\Sub_Gen_GetSmallerValue.c.text..\\Shared\\src\\Gen\\Sub_Gen_MemCompare.c.emb_text..\Shared\src\Gen\Sub_Gen_MemCompare.c.text..\\Shared\\src\\Gen\\Sub_Gen_ByteMemCopy.c.emb_text..\Shared\src\Gen\Sub_Gen_ByteMemCopy.c.text..\\Shared\\src\\Gen\\Sub_Gen_MemCopy.c.emb_text..\Shared\src\Gen\Sub_Gen_MemCopy.c.text..\\Shared\\src\\Gen\\Sub_Gen_MemSet.c.emb_text..\Shared\src\Gen\Sub_Gen_MemSet.c.text..\\Shared\\src\\Gen\\Sub_Gen_RestoreMsfrs.c.emb_text..\Shared\src\Gen\Sub_Gen_RestoreMsfrs.c.text..\\Shared\\src\\Gen\\Sub_Gen_SetMsfrs.c.emb_text..\Shared\src\Gen\Sub_Gen_SetMsfrs.c.text..\\Shared\\src\\Imm\\Sub_Imm_CheckImmForCim.c.emb_text..\Shared\src\Imm\Sub_Imm_CheckImmForCim.c.text..\\Shared\\src\\Imm\\Sub_Imm_DeactivateIso7816.c.emb_text..\Shared\src\Imm\Sub_Imm_DeactivateIso7816.c.text..\\Shared\\src\\Imm\\Sub_Imm_PerformTimer1InterruptCleanup.c.emb_text..\Shared\src\Imm\Sub_Imm_PerformTimer1InterruptCleanup.c.text..\\Shared\\src\\Imm\\Sub_Imm_FinishInterfaceActivationChecks.c.emb_text..\Shared\src\Imm\Sub_Imm_FinishInterfaceActivationChecks.c.text..\\Shared\\src\\Imm\\Sub_Imm_PerformInterfaceActivationInterruptsCleanup.c.emb_text..\Shared\src\Imm\Sub_Imm_PerformInterfaceActivationInterruptsCleanup.c.text..\\Shared\\src\\Imm\\Sub_Imm_PerformSoftwareReset.c.emb_text..\Shared\src\Imm\Sub_Imm_PerformSoftwareReset.c.text..\\Shared\\src\\Imm\\Sub_Imm_InitInterfaceConfig.c.emb_text..\Shared\src\Imm\Sub_Imm_InitInterfaceConfig.c.text..\\Shared\\src\\Imm\\Sub_Imm_PrepareDummyAtrTransmission.c.emb_text..\Shared\src\Imm\Sub_Imm_PrepareDummyAtrTransmission.c.text..\\Shared\\src\\Imm\\Sub_Imm_SendAtr.c.emb_text..\Shared\src\Imm\Sub_Imm_SendAtr.c.text..\\Shared\\src\\Imm\\Sub_Imm_UpdateInterfaceConfig.c.emb_text..\Shared\src\Imm\Sub_Imm_UpdateInterfaceConfig.c.text..\\Shared\\src\\Imm\\Sub_Imm_UpdateInterfaceConfigISO7816Related.c.emb_text..\Shared\src\Imm\Sub_Imm_UpdateInterfaceConfigISO7816Related.c.text..\\Shared\\src\\Imm\\Sub_Imm_HandleIso7816ActivationDeactivation.c.emb_text..\Shared\src\Imm\Sub_Imm_HandleIso7816ActivationDeactivation.c.text..\\Shared\\src\\Imm\\Sub_Imm_EnableCbResetChangeInterrupt.c.emb_text..\Shared\src\Imm\Sub_Imm_EnableCbResetChangeInterrupt.c.text..\\Shared\\src\\Imm\\Sub_Imm_EnableSwpStatusChangeInterrupt.c.emb_text..\Shared\src\Imm\Sub_Imm_EnableSwpStatusChangeInterrupt.c.text..\\Shared\\src\\Init\\Sub_Init_BlockManager.c.emb_text..\Shared\src\Init\Sub_Init_BlockManager.c.text..\\Shared\\src\\Init\\Sub_Init_BlockPeripheral.c.emb_text..\Shared\src\Init\Sub_Init_BlockPeripheral.c.text.constdata..\\Shared\\src\\Init\\Sub_Init_CheckStartupConfiguration.c.emb_text..\Shared\src\Init\Sub_Init_CheckStartupConfiguration.c.text..\\Shared\\src\\Init\\Sub_Init_ClearBosBits.c.emb_text..\Shared\src\Init\Sub_Init_ClearBosBits.c.text..\\Shared\\src\\Init\\Sub_Init_GetBosRomVersion.c.emb_text..\Shared\src\Init\Sub_Init_GetBosRomVersion.cXCIM_TM_CODE_AREA..\\Shared\\src\\Init\\Sub_Init_GetResetVectorAndUpdateFlBit.asm.text..\\Shared\\src\\Init\\Sub_Init_GlobalVars.c.emb_text..\Shared\src\Init\Sub_Init_GlobalVars.c.ARM.__AT_0x22000040.ARM.__AT_0x22000080.ARM.__AT_0x22000100.ARM.__AT_0x22000400.ARM.__AT_0x22000680.ARM.__AT_0x22000780.bssINTERFACE_CONFIG_AREAMBX_UPDATE_RAM_BUFF_AREARANDOM_DATA_BUFFER_AREAVOLATILE_MBX_AREA..\\Shared\\src\\Init\\Sub_Init_InitBootSegmentSector.c.emb_text..\Shared\src\Init\Sub_Init_InitBootSegmentSector.c.text..\\Shared\\src\\Init\\Sub_Init_InitGlobalVars.c.emb_text..\Shared\src\Init\Sub_Init_InitGlobalVars.c.text..\\Shared\\src\\Init\\Sub_Init_InvalidateSecurityRelevantData.c.emb_text..\Shared\src\Init\Sub_Init_InvalidateSecurityRelevantData.c.text..\\Shared\\src\\Init\\Sub_Init_IsoResetAndRptcHandling.c.emb_text..\Shared\src\Init\Sub_Init_IsoResetAndRptcHandling.c.text..\\Shared\\src\\Init\\Sub_Init_ReadStartupConfigurationAndUpdateFlBit.asm.text..\\Shared\\src\\Init\\Sub_Init_RestoreNvmSfrs.c.emb_text..\Shared\src\Init\Sub_Init_RestoreNvmSfrs.c.text..\\Shared\\src\\Init\\Sub_Init_RestoreSfrs.c.emb_text..\Shared\src\Init\Sub_Init_RestoreSfrs.c.text..\\Shared\\src\\Init\\Sub_Init_ServePendingCimRequest.c.emb_text..\Shared\src\Init\Sub_Init_ServePendingCimRequest.c.text..\\Shared\\src\\Init\\Sub_Init_SetRamKey.asm.text..\\Shared\\src\\Init\\Sub_Init_ShippingModeApplicationEntry.asmSHIPPING_MODE_APPLICATION_ENTRY_AREA..\\Shared\\src\\Mailbox\\Sub_Mailbox_EraseIfxMailboxPage.c.emb_text..\Shared\src\Mailbox\Sub_Mailbox_EraseIfxMailboxPage.c.text..\\Shared\\src\\Mailbox\\Sub_Mailbox_GetFlashloaderIndicatorFromIfxMbx.c.emb_text..\Shared\src\Mailbox\Sub_Mailbox_GetFlashloaderIndicatorFromIfxMbx.c.text..\\Shared\\src\\Mailbox\\Sub_Mailbox_GetFlashloaderIndicatorFromUserMbx.c.emb_text..\Shared\src\Mailbox\Sub_Mailbox_GetFlashloaderIndicatorFromUserMbx.c.text..\\Shared\\src\\Mailbox\\Sub_Mailbox_GetValidIfxMbxPage2.c.emb_text..\Shared\src\Mailbox\Sub_Mailbox_GetValidIfxMbxPage2.c.text..\\Shared\\src\\Mailbox\\Sub_Mailbox_InitIfxMailbox.c.emb_text..\Shared\src\Mailbox\Sub_Mailbox_InitIfxMailbox.c.text..\\Shared\\src\\Mailbox\\Sub_Mailbox_InitIfxMailboxTearingAnalysis.c.emb_text..\Shared\src\Mailbox\Sub_Mailbox_InitIfxMailboxTearingAnalysis.c.text..\\Shared\\src\\Mailbox\\Sub_Mailbox_InitUserMailbox.c.emb_text..\Shared\src\Mailbox\Sub_Mailbox_InitUserMailbox.c.text..\\Shared\\src\\Mailbox\\Sub_Mailbox_UpdateIfxMailbox.c.emb_text..\Shared\src\Mailbox\Sub_Mailbox_UpdateIfxMailbox.c.text..\\Shared\\src\\Mailbox\\Sub_Mailbox_IsFlashloaderPermanentBlocked.c.emb_text..\Shared\src\Mailbox\Sub_Mailbox_IsFlashloaderPermanentBlocked.c.text..\\Shared\\src\\Mailbox\\Sub_Mailbox_IsFlashloaderPermanentBlockedInIfxMbx.c.emb_text..\Shared\src\Mailbox\Sub_Mailbox_IsFlashloaderPermanentBlockedInIfxMbx.c.text..\\Shared\\src\\Mailbox\\Sub_Mailbox_IsFlashloaderPermanentBlockedInUserMbx.c.emb_text..\Shared\src\Mailbox\Sub_Mailbox_IsFlashloaderPermanentBlockedInUserMbx.c.text..\\Shared\\src\\Mailbox\\Sub_Mailbox_IsIfxMailboxUpdatePending.c.emb_text..\Shared\src\Mailbox\Sub_Mailbox_IsIfxMailboxUpdatePending.c.text..\\Shared\\src\\Mailbox\\Sub_Mailbox_UpdateIfxMailboxBpuLock.c.emb_text..\Shared\src\Mailbox\Sub_Mailbox_UpdateIfxMailboxBpuLock.c.text..\\Shared\\src\\Mailbox\\Sub_Mailbox_UpdateIfxMailboxFlashloaderActive.c.emb_text..\Shared\src\Mailbox\Sub_Mailbox_UpdateIfxMailboxFlashloaderActive.c.text..\\Shared\\src\\Mailbox\\Sub_Mailbox_UpdateIfxMailboxFlashloaderIndicator.c.emb_text..\Shared\src\Mailbox\Sub_Mailbox_UpdateIfxMailboxFlashloaderIndicator.c.text..\\Shared\\src\\Mailbox\\Sub_Mailbox_UpdateIfxMailboxModuleListMemoryConfig.c.emb_text..\Shared\src\Mailbox\Sub_Mailbox_UpdateIfxMailboxModuleListMemoryConfig.c.text..\\Shared\\src\\Mailbox\\Sub_Mailbox_UpdateIfxMailboxPerformProgramming.c.emb_text..\Shared\src\Mailbox\Sub_Mailbox_UpdateIfxMailboxPerformProgramming.c.text..\\Shared\\src\\Mailbox\\Sub_Mailbox_UpdateIfxMailboxTrackingInfo.c.emb_text..\Shared\src\Mailbox\Sub_Mailbox_UpdateIfxMailboxTrackingInfo.c.text..\\Shared\\src\\Mailbox\\Sub_Mailbox_UpdateVolatileMailbox.c.emb_text..\Shared\src\Mailbox\Sub_Mailbox_UpdateVolatileMailbox.c.text..\\Shared\\src\\Memory\\Sub_Memory_CacheBlockClean.c.emb_text..\Shared\src\Memory\Sub_Memory_CacheBlockClean.c.text..\\Shared\\src\\Memory\\Sub_Memory_CacheClean.c.emb_text..\Shared\src\Memory\Sub_Memory_CacheClean.c.text..\\Shared\\src\\Memory\\Sub_Memory_DisableFlashloaderMedKey.c.emb_text..\Shared\src\Memory\Sub_Memory_DisableFlashloaderMedKey.c.text..\\Shared\\src\\Memory\\Sub_Memory_HandleCache.c.emb_text..\Shared\src\Memory\Sub_Memory_HandleCache.c.text..\\Shared\\src\\Memory\\Sub_Memory_PerformCacheOperationOnMemoryRange.c.emb_text..\Shared\src\Memory\Sub_Memory_PerformCacheOperationOnMemoryRange.c.text..\\Shared\\src\\Nvic\\Sub_Nvic_ImmHandler.c.emb_text..\Shared\src\Nvic\Sub_Nvic_ImmHandler.c.text..\\Shared\\src\\Nvic\\Sub_Nvic_SleIfxStartup.asmSTACK__initial_spRESET.text..\\Shared\\src\\Nvic\\Sub_Nvic_SwpHandler.c.emb_text..\Shared\src\Nvic\Sub_Nvic_SwpHandler.c.text..\\Shared\\src\\Nvic\\Sub_Nvic_Tim0Handler.c.emb_text..\Shared\src\Nvic\Sub_Nvic_Tim0Handler.c.text..\\Shared\\src\\Nvic\\Sub_Nvic_Tim1Handler.c.emb_text..\Shared\src\Nvic\Sub_Nvic_Tim1Handler.c.text..\\Shared\\src\\Nvic\\Sub_Nvic_TrngHandler.c.emb_text..\Shared\src\Nvic\Sub_Nvic_TrngHandler.c.text..\\Shared\\src\\Nvm\\Sub_Nvm_ApplySectorNumberLimit.c.emb_text..\Shared\src\Nvm\Sub_Nvm_ApplySectorNumberLimit.c.text..\\Shared\\src\\Nvm\\Sub_Nvm_EnableSector0WriteProtection.c.emb_text..\Shared\src\Nvm\Sub_Nvm_EnableSector0WriteProtection.c.text..\\Shared\\src\\Nvm\\Sub_Nvm_GetPhysicalNvmAddress.c.emb_text..\Shared\src\Nvm\Sub_Nvm_GetPhysicalNvmAddress.c.text..\\Shared\\src\\Nvm\\Sub_Nvm_GetSectorAndModuleNumber.c.emb_text..\Shared\src\Nvm\Sub_Nvm_GetSectorAndModuleNumber.c.text..\\Shared\\src\\Nvm\\Sub_Nvm_GetSfrAddress.c.emb_text..\Shared\src\Nvm\Sub_Nvm_GetSfrAddress.c.text..\\Shared\\src\\Nvm\\Sub_Nvm_IsMapBlockErased.c.emb_text..\Shared\src\Nvm\Sub_Nvm_IsMapBlockErased.c.text..\\Shared\\src\\Nvm\\Sub_Nvm_LinSecInit.c.emb_text..\Shared\src\Nvm\Sub_Nvm_LinSecInit.c.text..\\Shared\\src\\Nvm\\Sub_Nvm_MapRamInit.c.emb_text..\Shared\src\Nvm\Sub_Nvm_MapRamInit.c.text..\\Shared\\src\\Nvm\\Sub_Nvm_MapRamInitAnalyzeAndRepair.c.emb_text..\Shared\src\Nvm\Sub_Nvm_MapRamInitAnalyzeAndRepair.c.text..\\Shared\\src\\Nvm\\Sub_Nvm_MapRamInitAnalyzeNoRepair.c.emb_text..\Shared\src\Nvm\Sub_Nvm_MapRamInitAnalyzeNoRepair.c.text..\\Shared\\src\\Nvm\\Sub_Nvm_MapRamInitSectorRange.c.emb_text..\Shared\src\Nvm\Sub_Nvm_MapRamInitSectorRange.c.text..\\Shared\\src\\Nvm\\Sub_Nvm_MapRamInitUsermodePath.c.emb_text..\Shared\src\Nvm\Sub_Nvm_MapRamInitUsermodePath.c.text..\\Shared\\src\\Nvm\\Sub_Nvm_WaitForNvmReady.c.emb_text..\Shared\src\Nvm\Sub_Nvm_WaitForNvmReady.c.text..\\Shared\\src\\Nvm\\Sub_Nvm_ProgramNvmCallRms.c.emb_text..\Shared\src\Nvm\Sub_Nvm_ProgramNvmCallRms.cTM_ONLY_CODE_AREA..\\Shared\\src\\Nvm\\Sub_Nvm_TestmodeProgramNvm.c.emb_text..\Shared\src\Nvm\Sub_Nvm_TestmodeProgramNvm.cTM_ONLY_CODE_AREA..\\Shared\\src\\Rng\\Sub_Rng_InitTrng.c.emb_text..\Shared\src\Rng\Sub_Rng_InitTrng.c.text..\\Shared\\src\\Rng\\Sub_Rng_LoadTrngUsermodeSetting.c.emb_text..\Shared\src\Rng\Sub_Rng_LoadTrngUsermodeSetting.c.text..\\Shared\\src\\Rng\\Sub_Rng_StartTrng.c.emb_text..\Shared\src\Rng\Sub_Rng_StartTrng.c.text..\\Shared\\src\\Rng\\Sub_Rng_StopTrng.c.emb_text..\Shared\src\Rng\Sub_Rng_StopTrng.c.text..\\Shared\\src\\Rng\\Sub_Rng_TrngInterruptHandlerFirstCall.c.emb_text..\Shared\src\Rng\Sub_Rng_TrngInterruptHandlerFirstCall.c.text..\\Shared\\src\\Rng\\Sub_Rng_TrngInterruptHandlerSecondCall.c.emb_text..\Shared\src\Rng\Sub_Rng_TrngInterruptHandlerSecondCall.c.text..\\Shared\\src\\Rng\\Sub_Rng_TrngInterruptHandlerThirdCall.c.emb_text..\Shared\src\Rng\Sub_Rng_TrngInterruptHandlerThirdCall.c.text..\\Shared\\src\\Rng\\Sub_Rng_WaitForRandomData.c.emb_text..\Shared\src\Rng\Sub_Rng_WaitForRandomData.c.text..\\Shared\\src\\Swp\\Sub_Swp_AbortSwpActivationSequence.c.emb_text..\Shared\src\Swp\Sub_Swp_AbortSwpActivationSequence.c.text..\\Shared\\src\\Swp\\Sub_Swp_DeactivateSwp.c.emb_text..\Shared\src\Swp\Sub_Swp_DeactivateSwp.c.text..\\Shared\\src\\Swp\\Sub_Swp_HandleSwpActivationDeactivation.c.emb_text..\Shared\src\Swp\Sub_Swp_HandleSwpActivationDeactivation.c.text..\\Shared\\src\\Swp\\Sub_Swp_InitSwpModuleSfrs.c.emb_text..\Shared\src\Swp\Sub_Swp_InitSwpModuleSfrs.c.text..\\Shared\\src\\Swp\\Sub_Swp_PrepareSwpActivation.c.emb_text..\Shared\src\Swp\Sub_Swp_PrepareSwpActivation.c.text..\\Shared\\src\\Swp\\Sub_Swp_UpdateInterfaceConfigSwpRelated.c.emb_text..\Shared\src\Swp\Sub_Swp_UpdateInterfaceConfigSwpRelated.c.text..\\Shared\\src\\Swp\\Sub_Swp_PerformTimer0InterruptCleanup.c.emb_text..\Shared\src\Swp\Sub_Swp_PerformTimer0InterruptCleanup.c.text..\\Shared\\src\\Swp\\Sub_Swp_PerformSwpInterruptCleanup.c.emb_text..\Shared\src\Swp\Sub_Swp_PerformSwpInterruptCleanup.c.textsrc\\Sub_TimingEmu_PerformTimingEmulationCleanup.c.emb_textsrc\Sub_TimingEmu_PerformTimingEmulationCleanup.c.textsrc\\Sub_TimingEmu_TimingEmulationTimerResume.c.emb_textsrc\Sub_TimingEmu_TimingEmulationTimerResume.c.textsrc\\Sub_TimingEmu_TimingEmulationTimerStart.c.emb_textsrc\Sub_TimingEmu_TimingEmulationTimerStart.c.textsrc\\Sub_TimingEmu_TimingEmulationTimerStop.c.emb_textsrc\Sub_TimingEmu_TimingEmulationTimerStop.c.textsrc\\Sub_TimingEmu_TimingEmulationTimerWaitForOverflow.c.emb_textsrc\Sub_TimingEmu_TimingEmulationTimerWaitForOverflow.c.text..\\Shared\\src\\Uart\\Sub_Uart_EnableUart.c.emb_text..\Shared\src\Uart\Sub_Uart_EnableUart.c.text..\\Shared\\src\\Uart\\Sub_Uart_EnableUartUsermodePath.c.emb_text..\Shared\src\Uart\Sub_Uart_EnableUartUsermodePath.c.text..\\Shared\\src\\Uart\\Sub_Uart_PollUpdateBit.c.emb_text..\Shared\src\Uart\Sub_Uart_PollUpdateBit.c.text..\\Shared\\src\\Usb\\Sub_Usb_InitUsbModule.c.emb_text..\Shared\src\Usb\Sub_Usb_InitUsbModule.c.text..\\Shared\\src\\Usb\\Sub_Usb_InitUsbModuleSfrs.c.emb_text..\Shared\src\Usb\Sub_Usb_InitUsbModuleSfrs.c.text..\\Shared\\src\\Wrapper\\Sub_Wrapper_RMS_AnalyseNvmPage.c.emb_text..\Shared\src\Wrapper\Sub_Wrapper_RMS_AnalyseNvmPage.c.text..\\Shared\\src\\Wrapper\\Sub_Wrapper_RMS_DoTearingService.c.emb_text..\Shared\src\Wrapper\Sub_Wrapper_RMS_DoTearingService.c.text..\\Shared\\src\\Wrapper\\Sub_Wrapper_RMS_ProgramNvm.c.emb_text..\Shared\src\Wrapper\Sub_Wrapper_RMS_ProgramNvm.c.textBuildAttributes$$THM_ISAv4$P$D$K$B$S$PE$A:L22UL41UL21$X:L11$S22US41US21$IEEE1$IW$USESV6$~STKCKD$USESV7$~SHL$OSPACE$EBA8$STANDARDLIB$REQ8$PRES8$EABIv2_SLE90_Fixup_BosRomRegionStart__VectorsCod_Init_PerformUsermodeEntry_SLE90_Fixup_IfxRomConfigRegionStart_SLE90_Fixup_t16_IfxRomConfig_templateVersion_SLE90_Fixup_t16_IfxRomConfig_contentVersion_SLE90_Fixup_t32_IfxRomConfig_ramPAStartAddr_SLE90_Fixup_t32_IfxRomConfig_ramPAEndAddr_SLE90_Fixup_t32_IfxRomConfig_romPAStartAddr_SLE90_Fixup_t32_IfxRomConfig_romPAEndAddr_SLE90_Fixup_t32_IfxRomConfig_nvmPAStartAddr_SLE90_Fixup_t32_IfxRomConfig_nvmPAEndAddrIFX_ROM_rfu_00IFX_ROM_nvmConfig_rfu_00_SLE90_Fixup_t8_IfxRomConfig_nvmModules_SLE90_Fixup_t8_IfxRomConfig_nvm0SectorsNr_SLE90_Fixup_t8_IfxRomConfig_nvm1SectorsNr_SLE90_Fixup_t8_IfxRomConfig_nvm2SectorsNr_SLE90_Fixup_t8_IfxRomConfig_nvm3SectorsNr_SLE90_Fixup_t16_IfxRomConfig_nvmPageSize_SLE90_Fixup_t16_IfxRomConfig_nvmSectorSize_SLE90_Fixup_t8_IfxRomConfig_blockSizeIFX_ROM_rfu_10IFX_ROM_rfu_END_SLE90_Fixup_IfxRomConfigRegionEnd__asm___14_Cod_Init_Cim_c_229ffcb9____REV16__asm___14_Cod_Init_Cim_c_229ffcb9____REVSH__asm___22_Cod_Init_StartupMain_c_a8d70413____REV16__asm___22_Cod_Init_StartupMain_c_a8d70413____REVSH__asm___19_Cod_Init_Usermode_c_e60ddfd3____REV16__asm___19_Cod_Init_Usermode_c_e60ddfd3____REVSH__asm___24_Cod_Init_UsermodePart2_c_19c49283____REV16__asm___24_Cod_Init_UsermodePart2_c_19c49283____REVSH__asm___44_Cod_Init_UsermodeWrapperForDltFunctionPool_c_7d2b9416____REV16__asm___44_Cod_Init_UsermodeWrapperForDltFunctionPool_c_7d2b9416____REVSH__asm___29_Sub_Ana_AdaptCurrLimSetting_c_cd1f21f7____REV16__asm___29_Sub_Ana_AdaptCurrLimSetting_c_cd1f21f7____REVSH__asm___46_Sub_Ana_GetCurrLimSettingBasedOnVoltageClass_c_92e6b2ad____REV16__asm___46_Sub_Ana_GetCurrLimSettingBasedOnVoltageClass_c_92e6b2ad____REVSH__asm___38_Sub_Ana_IsCurrentVoltageClassBlocked_c_f560e3f8____REV16__asm___38_Sub_Ana_IsCurrentVoltageClassBlocked_c_f560e3f8____REVSH__asm___28_Sub_Ana_LoadCurrLimSetting_c_3de7e130____REV16__asm___28_Sub_Ana_LoadCurrLimSetting_c_3de7e130____REVSH__asm___35_Sub_Ana_LoadUserCurrLimAdjustment_c_e2963026____REV16__asm___35_Sub_Ana_LoadUserCurrLimAdjustment_c_e2963026____REVSH__asm___35_Sub_Ana_RestoreUserCurrLimSetting_c_892637b3____REV16__asm___35_Sub_Ana_RestoreUserCurrLimSetting_c_892637b3____REVSH__asm___37_Sub_Ana_PerformVoltageClassBlocking_c_e3ecf151____REV16__asm___37_Sub_Ana_PerformVoltageClassBlocking_c_e3ecf151____REVSH__asm___26_Sub_Comm_ClearCommBuffer_c_8a66b8a5____REV16__asm___26_Sub_Comm_ClearCommBuffer_c_8a66b8a5____REVSH__asm___15_Sub_Comm_Fail_c_4ab7a6e0____REV16__asm___15_Sub_Comm_Fail_c_4ab7a6e0____REVSH__asm___26_Sub_Comm_FlushCommBuffer_c_a19c4fd8____REV16__asm___26_Sub_Comm_FlushCommBuffer_c_a19c4fd8____REVSH__asm___15_Sub_Comm_Pass_c_02e0598d____REV16__asm___15_Sub_Comm_Pass_c_02e0598d____REVSH__asm___24_Sub_Comm_ReceiveBuffer_c_564b3fda____REV16__asm___24_Sub_Comm_ReceiveBuffer_c_564b3fda____REVSH__asm___22_Sub_Comm_ReceiveByte_c_145394da____REV16__asm___22_Sub_Comm_ReceiveByte_c_145394da____REVSH__asm___26_Sub_Comm_ReceiveHalfWord_c_36a87d53____REV16__asm___26_Sub_Comm_ReceiveHalfWord_c_36a87d53____REVSH__asm___22_Sub_Comm_ReceiveWord_c_4a627ba5____REV16__asm___22_Sub_Comm_ReceiveWord_c_4a627ba5____REVSH__asm___21_Sub_Comm_SendBuffer_c_873ca69b____REV16__asm___21_Sub_Comm_SendBuffer_c_873ca69b____REVSH__asm___19_Sub_Comm_SendByte_c_e694a56e____REV16__asm___19_Sub_Comm_SendByte_c_e694a56e____REVSH__asm___23_Sub_Comm_SendHalfWord_c_5619f980____REV16__asm___23_Sub_Comm_SendHalfWord_c_5619f980____REVSH__asm___19_Sub_Comm_SendWord_c_b8a54a11____REV16__asm___19_Sub_Comm_SendWord_c_b8a54a11____REVSH__asm___27_Sub_Const_DltFunctionPool_c_b5251251____REV16__asm___27_Sub_Const_DltFunctionPool_c_b5251251____REVSH__asm___24_Sub_Const_FixupSymbols_c_549a34df____REV16__asm___24_Sub_Const_FixupSymbols_c_549a34df____REVSH__asm___28_Sub_Const_IfxRomConfigArea_c_257d1e2a____REV16__asm___28_Sub_Const_IfxRomConfigArea_c_257d1e2a____REVSH__asm___17_Sub_Gen_GenWait_c_d5ae6d1d____REV16__asm___17_Sub_Gen_GenWait_c_d5ae6d1d____REVSH__asm___24_Sub_Gen_GetBiggerValue_c_64cdd9b7____REV16__asm___24_Sub_Gen_GetBiggerValue_c_64cdd9b7____REVSH__asm___25_Sub_Gen_GetSmallerValue_c_8bc16589____REV16__asm___25_Sub_Gen_GetSmallerValue_c_8bc16589____REVSH__asm___20_Sub_Gen_MemCompare_c_29922245____REV16__asm___20_Sub_Gen_MemCompare_c_29922245____REVSH__asm___21_Sub_Gen_ByteMemCopy_c_6925431a____REV16__asm___21_Sub_Gen_ByteMemCopy_c_6925431a____REVSH__asm___17_Sub_Gen_MemCopy_c_062a70e4____REV16__asm___17_Sub_Gen_MemCopy_c_062a70e4____REVSH__asm___16_Sub_Gen_MemSet_c_720b04f9____REV16__asm___16_Sub_Gen_MemSet_c_720b04f9____REVSH__asm___22_Sub_Gen_RestoreMsfrs_c_bc4ff0c0____REV16__asm___22_Sub_Gen_RestoreMsfrs_c_bc4ff0c0____REVSH__asm___18_Sub_Gen_SetMsfrs_c_af27e31f____REV16__asm___18_Sub_Gen_SetMsfrs_c_af27e31f____REVSH__asm___24_Sub_Imm_CheckImmForCim_c_7a35469f____REV16__asm___24_Sub_Imm_CheckImmForCim_c_7a35469f____REVSH__asm___27_Sub_Imm_DeactivateIso7816_c_71e1649e____REV16__asm___27_Sub_Imm_DeactivateIso7816_c_71e1649e____REVSH__asm___39_Sub_Imm_PerformTimer1InterruptCleanup_c_3927bce1____REV16__asm___39_Sub_Imm_PerformTimer1InterruptCleanup_c_3927bce1____REVSH__asm___41_Sub_Imm_FinishInterfaceActivationChecks_c_2b20d39c____REV16__asm___41_Sub_Imm_FinishInterfaceActivationChecks_c_2b20d39c____REVSH__asm___53_Sub_Imm_PerformInterfaceActivationInterruptsCleanup_c_7922e4c5____REV16__asm___53_Sub_Imm_PerformInterfaceActivationInterruptsCleanup_c_7922e4c5____REVSH__asm___30_Sub_Imm_PerformSoftwareReset_c_a16a1b84____REV16__asm___30_Sub_Imm_PerformSoftwareReset_c_a16a1b84____REVSH__asm___29_Sub_Imm_InitInterfaceConfig_c_85138a05____REV16__asm___29_Sub_Imm_InitInterfaceConfig_c_85138a05____REVSH__asm___37_Sub_Imm_PrepareDummyAtrTransmission_c_fe54e368____REV16__asm___37_Sub_Imm_PrepareDummyAtrTransmission_c_fe54e368____REVSH__asm___17_Sub_Imm_SendAtr_c_f2cf5a71____REV16__asm___17_Sub_Imm_SendAtr_c_f2cf5a71____REVSH__asm___31_Sub_Imm_UpdateInterfaceConfig_c_0c149a99____REV16__asm___31_Sub_Imm_UpdateInterfaceConfig_c_0c149a99____REVSH__asm___45_Sub_Imm_UpdateInterfaceConfigISO7816Related_c_9a590b63____REV16__asm___45_Sub_Imm_UpdateInterfaceConfigISO7816Related_c_9a590b63____REVSH__asm___45_Sub_Imm_HandleIso7816ActivationDeactivation_c_3c2e5474____REV16__asm___45_Sub_Imm_HandleIso7816ActivationDeactivation_c_3c2e5474____REVSH__asm___38_Sub_Imm_EnableCbResetChangeInterrupt_c_a6df757a____REV16__asm___38_Sub_Imm_EnableCbResetChangeInterrupt_c_a6df757a____REVSH__asm___40_Sub_Imm_EnableSwpStatusChangeInterrupt_c_4ccfb74c____REV16__asm___40_Sub_Imm_EnableSwpStatusChangeInterrupt_c_4ccfb74c____REVSH__asm___23_Sub_Init_BlockManager_c_369821a6____REV16__asm___23_Sub_Init_BlockManager_c_369821a6____REVSH__asm___26_Sub_Init_BlockPeripheral_c_75687944____REV16__asm___26_Sub_Init_BlockPeripheral_c_75687944____REVSH__asm___36_Sub_Init_CheckStartupConfiguration_c_0dc35597____REV16__asm___36_Sub_Init_CheckStartupConfiguration_c_0dc35597____REVSH__asm___23_Sub_Init_ClearBosBits_c_3fe88370____REV16__asm___23_Sub_Init_ClearBosBits_c_3fe88370____REVSH__asm___27_Sub_Init_GetBosRomVersion_c_8f5d764f____REV16__asm___27_Sub_Init_GetBosRomVersion_c_8f5d764f____REVSH__asm___21_Sub_Init_GlobalVars_c_6599407f____REV16__asm___21_Sub_Init_GlobalVars_c_6599407f____REVSH__asm___32_Sub_Init_InitBootSegmentSector_c_39c8bd5e____REV16__asm___32_Sub_Init_InitBootSegmentSector_c_39c8bd5e____REVSH__asm___25_Sub_Init_InitGlobalVars_c_ff939825____REV16__asm___25_Sub_Init_InitGlobalVars_c_ff939825____REVSH__asm___41_Sub_Init_InvalidateSecurityRelevantData_c_0eb6b050____REV16__asm___41_Sub_Init_InvalidateSecurityRelevantData_c_0eb6b050____REVSH__asm___34_Sub_Init_IsoResetAndRptcHandling_c_f38b9a56____REV16__asm___34_Sub_Init_IsoResetAndRptcHandling_c_f38b9a56____REVSH__asm___25_Sub_Init_RestoreNvmSfrs_c_67884d59____REV16__asm___25_Sub_Init_RestoreNvmSfrs_c_67884d59____REVSH__asm___22_Sub_Init_RestoreSfrs_c_cae414bf____REV16__asm___22_Sub_Init_RestoreSfrs_c_cae414bf____REVSH__asm___33_Sub_Init_ServePendingCimRequest_c_2558990d____REV16__asm___33_Sub_Init_ServePendingCimRequest_c_2558990d____REVSH__asm___33_Sub_Mailbox_EraseIfxMailboxPage_c_7664bb4c____REV16__asm___33_Sub_Mailbox_EraseIfxMailboxPage_c_7664bb4c____REVSH__asm___47_Sub_Mailbox_GetFlashloaderIndicatorFromIfxMbx_c_d2a6176b____REV16__asm___47_Sub_Mailbox_GetFlashloaderIndicatorFromIfxMbx_c_d2a6176b____REVSH__asm___48_Sub_Mailbox_GetFlashloaderIndicatorFromUserMbx_c_160f2d14____REV16__asm___48_Sub_Mailbox_GetFlashloaderIndicatorFromUserMbx_c_160f2d14____REVSH__asm___33_Sub_Mailbox_GetValidIfxMbxPage2_c_163e7181____REV16__asm___33_Sub_Mailbox_GetValidIfxMbxPage2_c_163e7181____REVSH__asm___28_Sub_Mailbox_InitIfxMailbox_c_d2d97ad7____REV16__asm___28_Sub_Mailbox_InitIfxMailbox_c_d2d97ad7____REVSH__asm___43_Sub_Mailbox_InitIfxMailboxTearingAnalysis_c_7d3bb4ee____REV16__asm___43_Sub_Mailbox_InitIfxMailboxTearingAnalysis_c_7d3bb4ee____REVSH__asm___29_Sub_Mailbox_InitUserMailbox_c_319a4eda____REV16__asm___29_Sub_Mailbox_InitUserMailbox_c_319a4eda____REVSH__asm___30_Sub_Mailbox_UpdateIfxMailbox_c_71b0b2df____REV16__asm___30_Sub_Mailbox_UpdateIfxMailbox_c_71b0b2df____REVSH__asm___43_Sub_Mailbox_IsFlashloaderPermanentBlocked_c_bb02d448____REV16__asm___43_Sub_Mailbox_IsFlashloaderPermanentBlocked_c_bb02d448____REVSH__asm___51_Sub_Mailbox_IsFlashloaderPermanentBlockedInIfxMbx_c_e6abe895____REV16__asm___51_Sub_Mailbox_IsFlashloaderPermanentBlockedInIfxMbx_c_e6abe895____REVSH__asm___52_Sub_Mailbox_IsFlashloaderPermanentBlockedInUserMbx_c_4c3efff0____REV16__asm___52_Sub_Mailbox_IsFlashloaderPermanentBlockedInUserMbx_c_4c3efff0____REVSH__asm___39_Sub_Mailbox_IsIfxMailboxUpdatePending_c_db5b8d63____REV16__asm___39_Sub_Mailbox_IsIfxMailboxUpdatePending_c_db5b8d63____REVSH__asm___37_Sub_Mailbox_UpdateIfxMailboxBpuLock_c_bbdc3c43____REV16__asm___37_Sub_Mailbox_UpdateIfxMailboxBpuLock_c_bbdc3c43____REVSH__asm___47_Sub_Mailbox_UpdateIfxMailboxFlashloaderActive_c_b28b3dea____REV16__asm___47_Sub_Mailbox_UpdateIfxMailboxFlashloaderActive_c_b28b3dea____REVSH__asm___50_Sub_Mailbox_UpdateIfxMailboxFlashloaderIndicator_c_24419d96____REV16__asm___50_Sub_Mailbox_UpdateIfxMailboxFlashloaderIndicator_c_24419d96____REVSH__asm___52_Sub_Mailbox_UpdateIfxMailboxModuleListMemoryConfig_c_ac89aa60____REV16__asm___52_Sub_Mailbox_UpdateIfxMailboxModuleListMemoryConfig_c_ac89aa60____REVSH__asm___48_Sub_Mailbox_UpdateIfxMailboxPerformProgramming_c_dfb35bb4____REV16__asm___48_Sub_Mailbox_UpdateIfxMailboxPerformProgramming_c_dfb35bb4____REVSH__asm___42_Sub_Mailbox_UpdateIfxMailboxTrackingInfo_c_39709ea8____REV16__asm___42_Sub_Mailbox_UpdateIfxMailboxTrackingInfo_c_39709ea8____REVSH__asm___35_Sub_Mailbox_UpdateVolatileMailbox_c_e51a005d____REV16__asm___35_Sub_Mailbox_UpdateVolatileMailbox_c_e51a005d____REVSH__asm___28_Sub_Memory_CacheBlockClean_c_d40014a5____REV16__asm___28_Sub_Memory_CacheBlockClean_c_d40014a5____REVSH__asm___23_Sub_Memory_CacheClean_c_8a6821a7____REV16__asm___23_Sub_Memory_CacheClean_c_8a6821a7____REVSH__asm___37_Sub_Memory_DisableFlashloaderMedKey_c_ba501a27____REV16__asm___37_Sub_Memory_DisableFlashloaderMedKey_c_ba501a27____REVSH__asm___24_Sub_Memory_HandleCache_c_ff63aefe____REV16__asm___24_Sub_Memory_HandleCache_c_ff63aefe____REVSH__asm___47_Sub_Memory_PerformCacheOperationOnMemoryRange_c_82518887____REV16__asm___47_Sub_Memory_PerformCacheOperationOnMemoryRange_c_82518887____REVSH__asm___21_Sub_Nvic_ImmHandler_c_a60ed557____REV16__asm___21_Sub_Nvic_ImmHandler_c_a60ed557____REVSH__asm___21_Sub_Nvic_SwpHandler_c_48d22863____REV16__asm___21_Sub_Nvic_SwpHandler_c_48d22863____REVSH__asm___22_Sub_Nvic_Tim0Handler_c_a4b9d741____REV16__asm___22_Sub_Nvic_Tim0Handler_c_a4b9d741____REVSH__asm___22_Sub_Nvic_Tim1Handler_c_6813d7df____REV16__asm___22_Sub_Nvic_Tim1Handler_c_6813d7df____REVSH__asm___22_Sub_Nvic_TrngHandler_c_1d996b44____REV16__asm___22_Sub_Nvic_TrngHandler_c_1d996b44____REVSH__asm___32_Sub_Nvm_ApplySectorNumberLimit_c_5b20138f____REV16__asm___32_Sub_Nvm_ApplySectorNumberLimit_c_5b20138f____REVSH__asm___38_Sub_Nvm_EnableSector0WriteProtection_c_dd387067____REV16__asm___38_Sub_Nvm_EnableSector0WriteProtection_c_dd387067____REVSH__asm___31_Sub_Nvm_GetPhysicalNvmAddress_c_1c898ce0____REV16__asm___31_Sub_Nvm_GetPhysicalNvmAddress_c_1c898ce0____REVSH__asm___34_Sub_Nvm_GetSectorAndModuleNumber_c_9de814d0____REV16__asm___34_Sub_Nvm_GetSectorAndModuleNumber_c_9de814d0____REVSH__asm___23_Sub_Nvm_GetSfrAddress_c_b140ffe5____REV16__asm___23_Sub_Nvm_GetSfrAddress_c_b140ffe5____REVSH__asm___26_Sub_Nvm_IsMapBlockErased_c_5e2bb30d____REV16__asm___26_Sub_Nvm_IsMapBlockErased_c_5e2bb30d____REVSH__asm___20_Sub_Nvm_LinSecInit_c_4262409f____REV16__asm___20_Sub_Nvm_LinSecInit_c_4262409f____REVSH__asm___20_Sub_Nvm_MapRamInit_c_fd9f5d63____REV16__asm___20_Sub_Nvm_MapRamInit_c_fd9f5d63____REVSH__asm___36_Sub_Nvm_MapRamInitAnalyzeAndRepair_c_13d9ae25____REV16__asm___36_Sub_Nvm_MapRamInitAnalyzeAndRepair_c_13d9ae25____REVSH__asm___35_Sub_Nvm_MapRamInitAnalyzeNoRepair_c_3cb6b77c____REV16__asm___35_Sub_Nvm_MapRamInitAnalyzeNoRepair_c_3cb6b77c____REVSH__asm___31_Sub_Nvm_MapRamInitSectorRange_c_ab0f84d5____REV16__asm___31_Sub_Nvm_MapRamInitSectorRange_c_ab0f84d5____REVSH__asm___32_Sub_Nvm_MapRamInitUsermodePath_c_942ce5ae____REV16__asm___32_Sub_Nvm_MapRamInitUsermodePath_c_942ce5ae____REVSH__asm___25_Sub_Nvm_WaitForNvmReady_c_f500e943____REV16__asm___25_Sub_Nvm_WaitForNvmReady_c_f500e943____REVSH__asm___27_Sub_Nvm_ProgramNvmCallRms_c_cdab5b72____REV16__asm___27_Sub_Nvm_ProgramNvmCallRms_c_cdab5b72____REVSH__asm___28_Sub_Nvm_TestmodeProgramNvm_c_57292a1e____REV16__asm___28_Sub_Nvm_TestmodeProgramNvm_c_57292a1e____REVSH__asm___18_Sub_Rng_InitTrng_c_c2ca72dd____REV16__asm___18_Sub_Rng_InitTrng_c_c2ca72dd____REVSH__asm___33_Sub_Rng_LoadTrngUsermodeSetting_c_2de61585____REV16__asm___33_Sub_Rng_LoadTrngUsermodeSetting_c_2de61585____REVSH__asm___19_Sub_Rng_StartTrng_c_483109a0____REV16__asm___19_Sub_Rng_StartTrng_c_483109a0____REVSH__asm___18_Sub_Rng_StopTrng_c_cfc6d963____REV16__asm___18_Sub_Rng_StopTrng_c_cfc6d963____REVSH__asm___39_Sub_Rng_TrngInterruptHandlerFirstCall_c_250d66c9____REV16__asm___39_Sub_Rng_TrngInterruptHandlerFirstCall_c_250d66c9____REVSH__asm___40_Sub_Rng_TrngInterruptHandlerSecondCall_c_9008ed34____REV16__asm___40_Sub_Rng_TrngInterruptHandlerSecondCall_c_9008ed34____REVSH__asm___39_Sub_Rng_TrngInterruptHandlerThirdCall_c_a5f480b3____REV16__asm___39_Sub_Rng_TrngInterruptHandlerThirdCall_c_a5f480b3____REVSH__asm___27_Sub_Rng_WaitForRandomData_c_28397fdf____REV16__asm___27_Sub_Rng_WaitForRandomData_c_28397fdf____REVSH__asm___36_Sub_Swp_AbortSwpActivationSequence_c_3f48a881____REV16__asm___36_Sub_Swp_AbortSwpActivationSequence_c_3f48a881____REVSH__asm___23_Sub_Swp_DeactivateSwp_c_467087fa____REV16__asm___23_Sub_Swp_DeactivateSwp_c_467087fa____REVSH__asm___41_Sub_Swp_HandleSwpActivationDeactivation_c_3d83cc49____REV16__asm___41_Sub_Swp_HandleSwpActivationDeactivation_c_3d83cc49____REVSH__asm___27_Sub_Swp_InitSwpModuleSfrs_c_40a2274d____REV16__asm___27_Sub_Swp_InitSwpModuleSfrs_c_40a2274d____REVSH__asm___30_Sub_Swp_PrepareSwpActivation_c_a861b4e0____REV16__asm___30_Sub_Swp_PrepareSwpActivation_c_a861b4e0____REVSH__asm___41_Sub_Swp_UpdateInterfaceConfigSwpRelated_c_ecdc6b10____REV16__asm___41_Sub_Swp_UpdateInterfaceConfigSwpRelated_c_ecdc6b10____REVSH__asm___39_Sub_Swp_PerformTimer0InterruptCleanup_c_0cfb038a____REV16__asm___39_Sub_Swp_PerformTimer0InterruptCleanup_c_0cfb038a____REVSH__asm___36_Sub_Swp_PerformSwpInterruptCleanup_c_d800df24____REV16__asm___36_Sub_Swp_PerformSwpInterruptCleanup_c_d800df24____REVSH__asm___45_Sub_TimingEmu_PerformTimingEmulationCleanup_c_79664b15____REV16__asm___45_Sub_TimingEmu_PerformTimingEmulationCleanup_c_79664b15____REVSH__asm___42_Sub_TimingEmu_TimingEmulationTimerResume_c_09e60375____REV16__asm___42_Sub_TimingEmu_TimingEmulationTimerResume_c_09e60375____REVSH__asm___41_Sub_TimingEmu_TimingEmulationTimerStart_c_be687e1c____REV16__asm___41_Sub_TimingEmu_TimingEmulationTimerStart_c_be687e1c____REVSH__asm___40_Sub_TimingEmu_TimingEmulationTimerStop_c_1c893082____REV16__asm___40_Sub_TimingEmu_TimingEmulationTimerStop_c_1c893082____REVSH__asm___51_Sub_TimingEmu_TimingEmulationTimerWaitForOverflow_c_117b8842____REV16__asm___51_Sub_TimingEmu_TimingEmulationTimerWaitForOverflow_c_117b8842____REVSH__asm___21_Sub_Uart_EnableUart_c_6c9bc76d____REV16__asm___21_Sub_Uart_EnableUart_c_6c9bc76d____REVSH__asm___33_Sub_Uart_EnableUartUsermodePath_c_92a06967____REV16__asm___33_Sub_Uart_EnableUartUsermodePath_c_92a06967____REVSH__asm___24_Sub_Uart_PollUpdateBit_c_f489b045____REV16__asm___24_Sub_Uart_PollUpdateBit_c_f489b045____REVSH__asm___23_Sub_Usb_InitUsbModule_c_5c37ff49____REV16__asm___23_Sub_Usb_InitUsbModule_c_5c37ff49____REVSH__asm___27_Sub_Usb_InitUsbModuleSfrs_c_cafd6d81____REV16__asm___27_Sub_Usb_InitUsbModuleSfrs_c_cafd6d81____REVSH__asm___32_Sub_Wrapper_RMS_AnalyseNvmPage_c_ff1d0624____REV16__asm___32_Sub_Wrapper_RMS_AnalyseNvmPage_c_ff1d0624____REVSH__asm___34_Sub_Wrapper_RMS_DoTearingService_c_c84a598a____REV16__asm___34_Sub_Wrapper_RMS_DoTearingService_c_c84a598a____REVSH__asm___28_Sub_Wrapper_RMS_ProgramNvm_c_dec25f3d____REV16__asm___28_Sub_Wrapper_RMS_ProgramNvm_c_dec25f3d____REVSH__Cod_Init_Cim__Cod_Init_UsermodeCod_Init_ChangeRamKeyCod_Init_CimCod_Init_PrepareUsermodeEntryCod_Init_ResetHandlerCod_Init_StartupMainCod_Init_UsermodeCod_Init_UsermodePart2Cod_Init_UsermodeWrapperForDltFunctionPoolSub_Ana_AdaptCurrLimSettingSub_Ana_GetCurrLimSettingBasedOnVoltageClassSub_Ana_IsCurrentVoltageClassBlockedSub_Ana_LoadCurrLimSettingSub_Ana_LoadUserCurrLimAdjustmentSub_Ana_RestoreUserCurrLimSettingSub_Ana_PerformVoltageClassBlockingSub_Comm_ClearCommBufferSub_Comm_FailSub_Comm_FlushCommBufferSub_Comm_ReceiveByteSub_Comm_ReceiveWordSub_Gen_GenWaitSub_Gen_GetBiggerValueSub_Gen_GetSmallerValueSub_Gen_MemCompareSub_Gen_ByteMemCopySub_Gen_MemCopySub_Gen_MemSetSub_Gen_RestoreMsfrsSub_Gen_SetMsfrsSub_Imm_CheckImmForCimSub_Imm_DeactivateIso7816Sub_Imm_PerformTimer1InterruptCleanupSub_Imm_PerformSoftwareResetSub_Imm_InitInterfaceConfigSub_Init_GetResetVectorAndUpdateFlBitSub_Init_InvalidateSecurityRelevantDataSub_Mailbox_GetFlashloaderIndicatorFromIfxMbxfunctionList$Ven$TT$L$$Sub_Init_ShippingModeApplicationEntrySub_Imm_FinishInterfaceActivationChecksSub_Imm_PerformInterfaceActivationInterruptsCleanupSub_Imm_PrepareDummyAtrTransmissionSub_Imm_SendAtrSub_Imm_UpdateInterfaceConfigSub_Imm_UpdateInterfaceConfigISO7816RelatedSub_Imm_HandleIso7816ActivationDeactivationSub_Imm_EnableCbResetChangeInterruptSub_Imm_EnableSwpStatusChangeInterruptSub_Init_BlockManagerSub_Init_BlockPeripheralSub_Init_CheckStartupConfigurationSub_Init_ClearBosBitsSub_Init_InitBootSegmentSectorSub_Init_InitGlobalVarsSub_Init_IsoResetAndRptcHandlingSub_Init_ReadStartupConfigurationAndUpdateFlBitSub_Init_RestoreNvmSfrsSub_Init_RestoreSfrsSub_Init_ServePendingCimRequestSub_Init_SetRamKeySub_Mailbox_EraseIfxMailboxPageSub_Mailbox_GetFlashloaderIndicatorFromUserMbxSub_Mailbox_GetValidIfxMbxPage2Sub_Mailbox_InitIfxMailboxSub_Mailbox_InitIfxMailboxTearingAnalysisSub_Mailbox_InitUserMailboxSub_Mailbox_UpdateIfxMailboxSub_Mailbox_IsFlashloaderPermanentBlockedSub_Mailbox_IsFlashloaderPermanentBlockedInIfxMbxSub_Mailbox_IsFlashloaderPermanentBlockedInUserMbxSub_Mailbox_IsIfxMailboxUpdatePendingSub_Mailbox_UpdateIfxMailboxBpuLockSub_Mailbox_UpdateIfxMailboxFlashloaderActiveSub_Mailbox_UpdateIfxMailboxFlashloaderIndicatorSub_Mailbox_UpdateIfxMailboxModuleListMemoryConfigSub_Mailbox_UpdateIfxMailboxPerformProgrammingSub_Mailbox_UpdateIfxMailboxTrackingInfoSub_Mailbox_UpdateVolatileMailboxSub_Memory_CacheBlockCleanSub_Memory_CacheCleanSub_Memory_DisableFlashloaderMedKeySub_Memory_HandleCacheSub_Memory_PerformCacheOperationOnMemoryRangeSub_Nvic_ImmHandlerInterruptNotUsed_HandlerDefault_HandlerSub_Nvic_SwpHandlerSub_Nvic_Tim0HandlerSub_Nvic_Tim1HandlerSub_Nvic_TrngHandlerSub_Nvm_ApplySectorNumberLimitSub_Nvm_EnableSector0WriteProtectionSub_Nvm_GetPhysicalAddressSub_Nvm_GetSectorAndModuleNumberSub_Nvm_GetSfrAddressSub_Nvm_IsMapBlockErasedSub_Nvm_LinSecInitSub_Nvm_MapRamInitSub_Nvm_MapRamInitAnalyzeAndRepairSub_Nvm_MapRamInitAnalyzeNoRepairSub_Nvm_MapRamInitSectorRangeSub_Nvm_MapRamInitUsermodePathSub_Nvm_WaitForNvmReadySub_Rng_InitTrngSub_Rng_LoadTrngUsermodeSettingSub_Rng_StartTrngSub_Rng_StopTrngSub_Rng_TrngInterruptHandlerFirstCallSub_Rng_TrngInterruptHandlerSecondCallSub_Rng_TrngInterruptHandlerThirdCallSub_Rng_WaitForRandomDataSub_Swp_AbortSwpActivationSequenceSub_Swp_DeactivateSwpSub_Swp_HandleSwpActivationDeactivationSub_Swp_InitSwpModuleSfrsSub_Swp_PrepareSwpActivationSub_Swp_UpdateInterfaceConfigSwpRelatedSub_Swp_PerformTimer0InterruptCleanupSub_Swp_PerformSwpInterruptCleanupSub_TimingEmu_PerformTimingEmulationCleanupSub_TimingEmu_TimingEmulationTimerResumeSub_TimingEmu_TimingEmulationTimerStartSub_TimingEmu_TimingEmulationTimerStopSub_TimingEmu_TimingEmulationTimerWaitForOverflowSub_Uart_EnableUartSub_Uart_EnableUartUsermodePathSub_Uart_PollUpdateBitSub_Usb_InitUsbModuleSub_Usb_InitUsbModuleSfrsSub_Wrapper_RMS_AnalyseNvmPageSub_Wrapper_RMS_DoTearingServiceSub_Wrapper_RMS_ProgramNvmSub_Comm_ReceiveBufferSub_Comm_SendBufferSub_Nvm_ProgramNvmCallRmsSub_Nvm_TestmodeProgramNvmSub_Comm_PassSub_Comm_ReceiveHalfWordSub_Comm_SendByteSub_Comm_SendHalfWordSub_Comm_SendWordSub_Init_GetBosRomVersion_SLE90_Fixup_t32_DummyBosVersionInfoparameterArrayblockVoltageClassMask_SLE90_Fixup_t8_PlatformIdentifier_SLE90_Fixup_t16_ClkuSettingsBos_SLE90_Fixup_t16_DBosTimingEmuClkuOpmPhase0_SLE90_Fixup_t16_DBosTimingEmuClkuOpmPhase1_SLE90_Fixup_t16_DBosTimingEmuClkuOpmCurrLimEmulation_SLE90_Fixup_t16_DBosTimingEmuSystemClockCyclesperipheralAddrregValuePrigths_SLE90_Fixup_BosRomRegionEnd_SLE90_Fixup_BosNvmRegionStartSub_Init_ShippingModeApplicationEntry_SLE90_Fixup_BosNvmRegionEndvolatileRamMailboxinterfaceConfigramFlashloaderIndicatorrandomDatamailboxUpdateRamBufferbbVolMbxMailboxStatusbbVolMbxMailboxUpdateInfobbVolMbxIntActInfobbIntConfigAtrBehaviorbbIntConfigModuleListbbIntConfigTimerFlag$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d.realdata$t$d$t$d$t$d.realdata$d.realdata$d.realdata..\common\src\Cache.c.text..\common\src\Nvic.c.text..\common\src\Nvm.c.textNVIC_ClearPendingIRQWriteMsfr16Securesrc\RMS_AnalyseNvmPage.c.textsrc\RMS_CheckNvmErasedPage.c.textsrc\RMS_DoTearingService.c.textsrc\RMS_EraseNvmPage.c.textsrc\RMS_EraseNvmSectorFastPers.c.textsrc\RMS_GetVersion.c.text.constdata.constdatasrc\RMS_InitNvmMapRam.c.textsrc\RMS_ProgramNvm.c.textCheck_NVMMAPCheck_NVMADDR_NonLinCheck_NVMADDRsrc\RMS_ProgramNvmFastPers.c.textsrc\RMS_SetLinearSectorsFastPers.c.textsrc\RMS_TestUmslc.c.textWriteMsfr16SecureCheckSfrCfgRMS_PATCHsrc\\RmsFixups.ssrc\Sa.c.text..\common\src\Trng.c.text..\common\src\Umslc.c.textWriteMsfr16Secure..\common\src\Utils.c.text..\common\src\Watchdog.c.textWriteMsfr16Securesrc\RmsPatch.c.text.ARM.__AT_0x10001400rmsFunctionList.ARM.__AT_0x100014F8.ARM.__AT_0x100014FCT:\firmcc7_tools\KeilARM\ARM\Startup\Infineon\SLE97\IFX_ISS.c.textdc.s../../memcpset.s.text../../memcpset.s.text$Ven$TT$L$$WriteMsfr16SecureBuildAttributes$$THM_ISAv4$P$D$K$B$S$PE$A:L22UL41UL21$X:L11$S22US41US21$IEEE1$IW$USESV6$~STKCKD$USESV7$~SHL$OSPACE$ROPI$EBA8$STANDARDLIB$REQ8$PRES8$EABIv2CheckCacheIntegrity_SLE90_Fixup_RmsRomRegionStartCleanCacheCleanCacheBlockCleanCachePageDisableInterruptEnableInterruptPollNvmReadyAccessAssemblyBufferAccessMapRamCalculateProgDataChangeHardReadLevelCheckNvmAddressRangeCheckNvmAddressDownCheckNvmAddressUpSetNvmModeGetMapInfoGetPhysicalAddressGetPhysicalPageSetPhysicalPageInitMapRamWaitNvmReadyInitMapRamSectorRangeEraseNvmPagePhysicallyEraseNvmSectorPhysicallyVerifyPageErasedVerifyPageProgrammedWriteAllEraseNvmPageWriteNvmPageRmsAnalyseNvmPageRmsCheckNvmErasedPageRmsDoTearingServiceRmsEraseNvmPageEraseNvmPageRmsEraseNvmSectorFastPersRmsGetVersionRmsInitNvmMapRamRmsProgramNvmSetupNonLinearProgrammingProgramNonLinearUnusedPageProgramNonLinearUsedPageProgramLinearUnusedPageProgramLinearUsedPageProgramPageFillAssemblyBufferHandleDisturbsAreParallelModeConditionsMetRmsProgramNvmFastPersProgramNvmInParallelFillAssemblyBufferFastPersRmsSetLinearSectorsFastPersRmsTestUmslcTestUmslc0TestUmslc1TestApbTestNvmMissTestScpTestShieldTestTrngAlarmRunHwSubtestsAnalyseEcc1AnalyseEcc2TfAnalyseDmEvaluatePageEvaluateDmPagesEnableReadLevelStartPageVerifyCheckHardReadLevelsResetSoftHardReadLevelSetSoftHardReadLevelRestartSectorMapramInitVerifyPageQualityDiscardTrngDataWaitTrngDataGetTrngDataSetupUmslcRestoreUmslcExitRmsCriticalSectionWaitSetupWatchdogRestoreWatchdogTestWatchdogOverflowTestWatchdogServiceIFX_ISS_StartIFX_ISS_CheckIFX_ISS_StopIFX_ISS_StatusIFX_ISS_SuspendIFX_ISS_SuspendRestartIFX_ISS_Resume__aeabi_memcpy__rt_memcpy_memcpy_lastbytes__aeabi_memcpy4__aeabi_memcpy8__rt_memcpy_w_memcpy_lastbytes_aligned$Ven$TT$L$$CheckFunctionVersion_SLE90_Fixup_t32_RmsVersionInfo_SLE90_Fixup_t32_RmsVersionInfoRdn_SLE90_Fixup_RmsRomRegionEnd_SLE90_Fixup_RmsNvmRegionStart_SLE90_Fixup_t32_RmsPatchVersionInfoRdn_SLE90_Fixup_t32_RmsPatchVersionInfoCheckFunctionVersionFillAssemblyBuffer_PatchRmsProgramNvmFastPers_PatchProgramPage_PatchTestEdc$Ven$TT$L$$IFX_ISS_SuspendRestart$Ven$TT$L$$IFX_ISS_Check$Ven$TT$L$$GetPhysicalAddress$Ven$TT$L$$RmsProgramNvmFastPers$Ven$TT$L$$CleanCacheBlock$Ven$TT$L$$IFX_ISS_Resume$Ven$TT$L$$ExitRmsCriticalSection$Ven$TT$L$$WriteNvmPage_SLE90_Fixup_RmsNvmRegionEnd$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d.realdata$d.realdata$d.realdata$d.realdata$t$d$t$d$t$d.realdata$t$d$t$d$t$d$t$d$d.realdata$t$t$d.realdata$d.realdataLibs\CBLib\sources\ISO7816.c.emb_textLibs/CBLib/sources/ISO7816.c.textiCall_ISO7816_lookupClkDiviCall_ISO7816_handlePPSCacheLocked.constdataFDDiv.dataPR_statepRXBuffer.nvm.fl90Iso7816FunctionLibs\CBLib\sources\cbUart.c.emb_textLibs/CBLib/sources/cbUart.c.nvm.secdeactiCall_UART_writeiCall_UART_config.textiCall_UART_initCB_setRxBufferCB_receivingCacheLocked.datapCbRxCallback.nvm.fl90FL90\sources\FLConfig90.c.emb_textFL90/sources/FLConfig90.c.nvm.flconfigFL90\sources\TLVInterpreter.c.emb_textFL90/sources/TLVInterpreter.c.textROM_TLV_scanROM_TLV_getRecordROM_TLV_parse.bsstlvContext.datapCurrCtxt.nvm.fl90FL90\sources\TLVLookUp.c.emb_textFL90/sources/TLVLookUp.c.nvm.secdeact.nvm.secdeactFL90/sources/Test90.cFL90\sources\admin.c.emb_textFL90/sources/admin.c.textGetRandomFL90\sources\aes.c.emb_textFL90/sources/aes.c.text.bssroundkeysFL90\sources\bpu.c.emb_textFL90/sources/bpu.c.text.constdatareflectNibble.nvm.fl90FL90\sources\cmdhandler.c.emb_textFL90/sources/cmdhandler.c.textiCall_Cmd_initiCall_Cmd_handleCommand.data.nvm.fl90.nvm.secdeact.nvm.secdeact.nvm.secdeactFL90\sources\crypto.c.emb_textFL90/sources/crypto.c.textSCP_availableSCP_waitSCP_initiCall_Crypto_initiCall_Crypto_encryptiCall_Crypto_decryptiCall_Crypto_setKeyiCall_Crypto_setModeiCall_Crypto_cipherBlockSizeSTOP_CODE.bsscryptoSCP_PrevCipherSCP_PrevPlainkeybuf.constdataNotSupported_EngineSW_AES128_Engine.dataFB_mode.nvm.fl90HW_SCP_AES128LO_Engine.nvm.fl90ScpFunction.nvm.fl90FL90\sources\dataRecordProcess.c.emb_textFL90/sources/dataRecordProcess.c.nvm.fl90.text.bssFastPersProgBufferFL90\sources\download.c.emb_textFL90/sources/download.c.text.datagDL_statusFL90\sources\flashloader.c.emb_textFL90/sources/flashloader.c.textiCall_saveFLConfigiCall_loadFLConfigiCall_FlashLoaderInitiCall_CheckFLEraseScheduled.bss.bss.constdata.constdata.data.nvm.fl90FL90\sources\main.c.emb_textFL90/sources/main.c.textFL90\sources\mpu.c.emb_textFL90/sources/mpu.c.text.nvm.secdeactFL90\sources\patchhooks.c.emb_textFL90/sources/patchhooks.c.nvm.patchareaiPatchMePatchCacheLockediFlashLoaderEndHook.nvm.fl90FL90\sources\protocol.c.emb_textFL90/sources/protocol.c.textiCall_Protocol_init_ISO7816iCall_Protocol_initiCall_Protocol_putResponseiCall_Protocol_reserveResponse.bss.bss.constdata.data.nvm.fl90FL90\sources\responses.c.emb_textFL90/sources/responses.c.constdataRESPONSE_SUCCESS_Response.constdataRESPONSE_EXEC_ERROR_NVM_UNCHANGED_Response.constdataRESPONSE_EXEC_ERROR_NVM_CHANGED_Response.constdataRESPONSE_EXEC_RNG_FAIL_Response.constdataRESPONSE_EXEC_ERROR_NVM_WRITE_Response.constdataRESPONSE_PROT_ERROR_WRONG_LENGTH_Response.constdataRESPONSE_CHECK_ERROR_INSUFFICIENT_SECURITY_Response.constdataRESPONSE_CHECK_ERROR_REFERENCE_DATA_Response.constdataRESPONSE_CHECK_ERROR_CONDITIONS_OF_USE_Response.constdataRESPONSE_PROT_WRONG_PARAMETERS_Response.constdataRESPONSE_PROT_FUNCTION_NOT_SUPPORTED_Response.constdataRESPONSE_PROT_WRONG_P1_P2_Response.constdataRESPONSE_PROT_WRONG_LE_Response.constdataRESPONSE_PROT_WRONG_INS_Response.constdataRESPONSE_PROT_WRONG_CLA_Response.constdataRESPONSE_FL_DOWNLOAD_SUCCESS_Response.constdataRESPONSE_FL_WRONG_KFDI_Response.constdataRESPONSE_FL_WRONG_ADDR_Response.constdataRESPONSE_FL_WRONG_SIGNATURE_Response.constdataRESPONSE_FL_FLASH_WRITE_ERROR_Response.constdataRESPONSE_NONE_Response.constdataFL90\sources\statusHandler.c.emb_textFL90/sources/statusHandler.c.text.dataFL90\sources\streamProcess.c.emb_textFL90/sources/streamProcess.c.textiCall_Stream_setModeiCall_Stream_initiCall_Stream_receiveHeaderiCall_Stream_prefetchRXDataiCall_Stream_receiveDataiCall_Stream_getDataiCall_Stream_checkSum.bssstreamBuffer.dataprefetchTriggeredstream_modestream_cipherblkSizewritePosreadPoscryptPos.nvm.fl90FL90\sources\system_SLE97.c.emb_textFL90/sources/system_SLE97.c.text.ARM.__AT_0x20000000.dataFL90\sources\utils.c.emb_textFL90/sources/utils.c.textiCall_memcmp0iCall_memxoriCall_shadowBytesiCall_checkShadowBytesiCall_writeNvmiCall_writeByteWithShadowiCall_eraseSectorsFastNvmiCall_erasePageNvmiCall_mapNvmiCall_setupLinseciCall_updateUserMbx.nvm.fl90FL90/sources/aes_decrypt.saes_decrypt_aes_decrypt_cdataaes_inv_sboxFL90/sources/aes_encrypt.saes_encrypt_aes_encrypt_cdataaes_sboxFL90/sources/startup_SLE97.sSTACKHEAPRESETSTARTUP_CODE.textIFX/src/Cod_Const_SetIfxMailboxArea.cIFX/src/Cod_Const_SetUserMailboxArea.cUSER_MBX_AREAIFX\src\IFX_ISS.c.emb_textIFX/src/IFX_ISS.c.textdc.s../../microlib/string/memcpy.c.text../../microlib/string/memset.c.text../../microlib/string/memcpy.cBuildAttributes$$THM_ISAv4$P$D$K$B$S$PE$A:L22UL41UL21$X:L11$S22US41US21$IEEE1$IW$USESV6$~STKCKD$USESV7$~SHL$OSPACE$EBA8$MICROLIB$REQ8$EABIv2_SLE90_Fixup_FLRomRegionStart__asm___9_ISO7816_c_46edb90b____REV16__asm___9_ISO7816_c_46edb90b____REVSH__asm___8_cbUart_c_475ecef5____REV16__asm___8_cbUart_c_475ecef5____REVSH__asm___12_FLConfig90_c_d0b6a74d____REV16__asm___12_FLConfig90_c_d0b6a74d____REVSH__asm___16_TLVInterpreter_c_bd78eae9____REV16__asm___16_TLVInterpreter_c_bd78eae9____REVSH__asm___11_TLVLookUp_c_9763385c____REV16__asm___11_TLVLookUp_c_9763385c____REVSH__asm___7_admin_c_4f1eb813____REV16__asm___7_admin_c_4f1eb813____REVSH__asm___5_aes_c_314cc46d____REV16__asm___5_aes_c_314cc46d____REVSH__asm___5_bpu_c_ff24b9c2____REV16__asm___5_bpu_c_ff24b9c2____REVSH__asm___12_cmdhandler_c_d777acb8____REV16__asm___12_cmdhandler_c_d777acb8____REVSH__asm___8_crypto_c_5b884b21____REV16__asm___8_crypto_c_5b884b21____REVSH__asm___19_dataRecordProcess_c_cd755e70____REV16__asm___19_dataRecordProcess_c_cd755e70____REVSH__asm___10_download_c_LoadData____REV16__asm___10_download_c_LoadData____REVSH__asm___13_flashloader_c_d126b13e____REV16__asm___13_flashloader_c_d126b13e____REVSH__asm___6_main_c_72cd6446____REV16__asm___6_main_c_72cd6446____REVSH__asm___5_mpu_c_0aa5a7da____REV16__asm___5_mpu_c_0aa5a7da____REVSH__asm___12_patchhooks_c_923173ca____REV16__asm___12_patchhooks_c_923173ca____REVSH__asm___10_protocol_c_d2c30316____REV16__asm___10_protocol_c_d2c30316____REVSH__asm___11_responses_c_RespTbl____REV16__asm___11_responses_c_RespTbl____REVSH__asm___15_statusHandler_c_9de185fb____REV16__asm___15_statusHandler_c_9de185fb____REVSH__asm___15_streamProcess_c_dc9d063d____REV16__asm___15_streamProcess_c_dc9d063d____REVSH__asm___14_system_SLE97_c_6b61f0cc____REV16__asm___14_system_SLE97_c_6b61f0cc____REVSH__asm___7_utils_c_430b603a____REV16__asm___7_utils_c_430b603a____REVSHISO7816T0_initISO7816T0_startReceptionISO7816T0_headerAvailableISO7816T0_receiveHeaderISO7816T0_startDataReceptionISO7816T0_dataAvailableISO7816T0_receiveDataISO7816T0_sendResponseISO7816T0_sendWTXISO7816T0_flushISO7816T0_switchBufferSetConfigGetConfigSetTrackingInfoGetGenericCimGetChipStatusGetStatusGetKeyLabelChangeKeyAfterDownloadActionGetChallengeExtAuthenticationSW_AES128_setKeySW_AES128_encryptSW_AES128_decryptInvalidateKeyBpuLockGetPeripheralBlockingInfoConstructBillingReceiptBpuGetReceiptSetPeripheralBlockingInfoBpuBlockfmoveDaddDSCP_SetConfigSCP_loadRegisterSCP_storeRegisterSCP_encryptSCP_decryptSCP_AES128_setKeyadjust2NonPCBCUFL_STREAM_HEADER_handlerNO_OP_handlerSECURE_SIGN_handlerCFG_ATR_BEHAVIOUR_handlerCFG_CURR_SETTINGS_handlerCFG_LINSEC_0_handlerCFG_MULTI_IF_handlerCFG_SECURE_SIGN_handlerCFG_VTOR_handlerCFG_MPU_handlerFLASH_PAGES_PART_V_SLE90_handlerFLASH_AND_FILL_PAGES_V_SLE90_handlerLoadDataLoadData_AfterDownloadLoadCheckSignature_NoDownloadLoadCheckSignatureFlashLoaderMainFlMpuInitProtocol_startReceptionProtocol_headerAvailableProtocol_receiveHeaderProtocol_startDataReceptionProtocol_receiveDataProtocol_sendResponseProtocol_sendWTXProtocol_flushiCall_Cmd_handleStatusSystemInitNMI_HandlerHardFault_HandlerMemManage_HandlerBusFault_HandlerUsageFault_HandlerSVC_HandlerDebugMon_HandlerPendSV_HandlerSysTick_HandlerCRYPTO_IRQHandlerGPIO_IRQHandlerI2C_IRQHandlerIMM_IRQHandlerSCP_IRQHandlerSPI_IRQHandlerSWP_IRQHandlerSYSTEM_IRQHandlerTIM0_IRQHandlerTIM1_IRQHandlerTIM2_IRQHandlerTIM3_IRQHandlerTRNG_IRQHandlerUSB_IRQHandler__aeabi_memcpy__aeabi_memcpy4__aeabi_memcpy8__aeabi_memset__aeabi_memset4__aeabi_memset8__aeabi_memclr__aeabi_memclr4__aeabi_memclr8_memset$wrapperCacheLocked$$BaseUART_RxCallbackUART_IRQHandler$Ven$TT$L$$TLV_ParserTabCountCacheLocked$$Limit$Ven$TT$L$$IFX_ISS_Start$Ven$TT$L$$IFX_ISS_Suspend$Ven$TT$L$$IFX_ISS_Resume$Ven$TT$L$$IFX_ISS_Stop$Ven$TT$L$$_aes_keyschedule$Ven$TT$L$$_aes_encrypt$Ven$TT$L$$_aes_decrypt$Ven$TT$L$$getValueData$Ven$TT$L$$IFX_ISS_Check_SLE90_Fixup_FLRomRegionEnd_SLE90_Fixup_UserNvmMailboxRegionStart_SLE90_Fixup_t16_UserMailbox_templateVersion_SLE90_Fixup_t16_UserMailbox_contentVersion_SLE90_Fixup_t8_UserMailbox_userOsStartFlagUSER_MBX_rfu_000_SLE90_Fixup_t8_UserMailbox_curLimConfigAtStartupUSER_MBX_rfu_100_SLE90_Fixup_t8_UserMailbox_atrColdRstBehavior_SLE90_Fixup_t8_UserMailbox_atrColdRstValue_SLE90_Fixup_t16_UserMailbox_atrColdRstDivFactorUSER_MBX_rfu_110_SLE90_Fixup_t8_UserMailbox_atrWarmRstBehavior_SLE90_Fixup_t8_UserMailbox_atrWarmRstValue_SLE90_Fixup_t16_UserMailbox_atrWarmRstDivFactorUSER_MBX_rfu_120_SLE90_Fixup_t8_UserMailbox_startupMode_SLE90_Fixup_t8_UserMailbox_startupConfigUSER_MBX_rfu_130_SLE90_Fixup_t32_UserMailbox_userBootVectorAddrUSER_MBX_rfu_140_SLE90_Fixup_t32_UserMailbox_swpSync_Id1_SLE90_Fixup_t32_UserMailbox_swpSync_Id2_SLE90_Fixup_t32_UserMailbox_linSecPhysStartAddrUSER_MBX_rfu_150_SLE90_Fixup_t32_UserMailbox_userProgCounterUSER_MBX_rfu_200_SLE90_Fixup_t8_UserMailbox_chipType_SLE90_Fixup_t8_UserMailbox_trackingInfoUSER_MBX_rfu_210_SLE90_Fixup_t32_UserMailbox_ramUserStartAddr_SLE90_Fixup_t32_UserMailbox_ramUserEndAddr_SLE90_Fixup_t32_UserMailbox_nvmUserStartAddr_SLE90_Fixup_t32_UserMailbox_nvmUserEndAddr_SLE90_Fixup_t32_UserMailbox_cacheConfig_SLE90_Fixup_t32_UserMailbox_moduleListUSER_MBX_rfu_220_SLE90_Fixup_t32_UserMailbox_bpuLock_SLE90_Fixup_t32_UserMailbox_trackingInfoUpdateEn_SLE90_Fixup_t32_UserMailbox_flashloaderIndicatorUSER_MBX_rfu_300USER_MBX_rfu_END_SLE90_Fixup_UserNvmMailboxRegionEnd_SLE90_Fixup_FLNvmConfigRegionStart_SLE90_Fixup_FLNvmRegionStartgFLConfig_SLE90_Fixup_t8_FLPatchVersionInfo_SLE90_Fixup_FLNvmConfigRegionEnd__Vectors__VectorTable_UART_IRQHandlerReset_Handler__mainTLV_ParserTabCountTLV_ParserTabCmd_CommandTabCmd_CommandTab_AfterDownloadCmd_CommandTab_MultipleLDFsMpuRegionDescriptorArray__asm___9_IFX_ISS_c_beb7ab92____REV16__asm___9_IFX_ISS_c_beb7ab92____REVSHgetValueDataIFX_ISS_StartIFX_ISS_CheckIFX_ISS_StopIFX_ISS_StatusIFX_ISS_SuspendIFX_ISS_SuspendRestartIFX_ISS_Resume_aes_decrypt_aes_encrypt_aes_keyscheduleFL_VersionInfo_SLE90_Fixup_t8_FLVersionInfobstrDefaultATRISO7816T0_protocolRespTblUartFunctionTlvFunctionBpuFunctionCmdHandlerFunctionCryptoFunctionFlasLoaderFunctionPatchHookProtocolFunctionStreamFunctionUtilsFunction_SLE90_Fixup_FLNvmRegionEndVolatileFlMailboxAreacbRxCountpCbRxBufferpCmd_CommandTabbAfterDownloadActionbMultipleLDFsgOperationModelenTXpTXBufferprotocolgCorrectLeSystemFrequencygFLStatusgFLConfigRAMFlRamUserMailBoxPage1FlRamUserMailBoxPage2SessionKeyOS1_RXBufferOS1_TXBuffer__heap_base__heap_limit__initial_sp$d.realdata$d.realdata$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d$t$d.realdata$d.realdata$d.realdata$t$d$t$d$t$d$t$d.realdataBuildAttributes$$THM_ISAv4$P$D$K$B$S$PE$A:L22UL41UL21$X:L11$S22US41US21$IEEE1$IW$USESV6$~STKCKD$USESV7$~SHL$OSPACE$EBA8$STANDARDLIB$REQ8$PRES8$EABIv2Load$$LR$$ROM_MIFARE90_ENTRYPOINTS$$Base_SLE90_Fixup_MifRomRegionStart_SLE90_Fixup_t32_MifVersionInfoMIF_DeselectCardMIF_GetMifareOSInfoMIF_GetStatisticsMIF_ProcessCompletionMIF_ProcessSwpFrameMIF_SelectCardMIF_SelectCardWithUIDMOS_EncryptBlockMOS_DecryptBlockMOS_GetCachedBlockAddressMOS_GetCachedBlockMOS_GetCachedSectorTrailerROM_MOS_CacheCardROM_MOS_CacheSectorMOS_Cmd_HaltMOS_Cmd_Auth1MOS_Cmd_Auth2MOS_Cmd_ValueBlock1MOS_Cmd_TransferMOS_Cmd_Read_DataBlockMOS_Cmd_Access_DataBlockMOS_Cmd_Read_SectorTrailerMOS_Cmd_Access_SectorTrailerMOS_Cmd_Access_Block0MOS_Cmd_AccessMOS_Cmd_Write_DataBlockMOS_Cmd_Write_SectorTrailerMOS_Cmd_ValueBlock2MOS_ReceiveMOS_ReceiveCommandMOS_ReceiveBlockMOS_ReceiveDeltaValueMOS_ReceiveAuthRaRb_MOS_SendMOS_Send0MOS_SendAckMOS_SendNackMOS_SendBlockMOS_SendAuthRbROM_MOS_GetUidIFX_ISS_CheckIFX_ISS_SuspendRestartIFX_ISS_Resumememcpy_issmemclr_issMOS_PatchActivateMOS_PatchDeactivateMOS_GetPseudoRandomByteMOS_Stm_AuthMOS_Stm_ValueBlockMOS_Stm_WriteDataBlockMOS_Stm_WriteSectorTrailerMOS_Stm_CommandMOS_Stm_InitMOS_StmMOS_ResetStateMOS_GetNvmBlockMOS_GetSectorSectorNumMOS_GetSectorNumMOS_GetSectorTrailerNumMOS_IsSectorTrailerMOS_GetAccessBitsMOS_IsValueBlockMOS_GetTrailerAccessRightsMOS_GetContextPtrMIF_ProcessSwpFrame_WrapperMIF_ProcessCompletion_WrapperMIF_AuthCopyCallback_WrapperMIF_GetStatistics_WrapperMIF_SelectCard_WrapperMIF_SelectCardWithUID_WrapperMIF_DeselectCard_WrapperMIF_GetMifareOSInfo_Wrapper$Ven$TT$L$$MOS_InitContext$Ven$TT$L$$MOS_CacheCard$Ven$TT$L$$MOS_GetUid$Ven$TT$L$$MIF_AuthCopyCallbackMOS_BlockMaskrfBitLengthTableMOS_PatchData_SLE90_Fixup_MifRomRegionEndLoad$$LR$$ROM_MIFARE90$$Limit_SLE90_Fixup_MifNvmRegionStart_SLE90_Fixup_t32_MifPatchVersionInfoMIF_AuthCopyCallbackMOS_InitContextMOS_PatchLoadMOS_CacheCardMOS_CacheSectorMOS_GetUid$Ven$TT$L$$MOS_GetSectorNum$Ven$TT$L$$memclr_iss$Ven$TT$L$$MOS_ResetState$Ven$TT$L$$memcpy_iss$Ven$TT$L$$IFX_ISS_Check$Ven$TT$L$$ROM_MOS_CacheCard$Ven$TT$L$$ROM_MOS_CacheSector$Ven$TT$L$$ROM_MOS_GetUidMOS_RamSize_1KMOS_RamSize_4KMOS_Patches_SLE90_Fixup_MifNvmRegionEnd$d.realdata$d.realdata$t$d$t$d$t$d$t$d$d.realdata$t$d$t$d$d.realdata$d.realdata..\\src\\main.c..\src\main.c.text.constdata.data..\\..\\..\\..\\..\\..\\src\\c\\system_SLE90.c..\..\..\..\..\..\src\c\system_SLE90.c.textUSER_MBX_AREA..\..\..\..\..\..\src\asm\startup_SLE9x.sSTACKStack_Mem__initial_spHEAPHeap_MemRESET.textFAULT_TRAPdc.s../clib/heapaux.c.text../clib/angel/startup.s!!!main../clib/angel/kernel.s.ARM.Collect$$rtentry$$00000000../clib/angel/kernel.s.ARM.Collect$$rtentry$$00000002.ARM.Collect$$rtentry$$00000009.ARM.Collect$$rtentry$$0000000A.ARM.Collect$$rtentry$$0000000C.ARM.Collect$$rtentry$$0000000D../clib/angel/kernel.s.ARM.Collect$$rtentry$$00000004../clib/angel/sys.s.text../clib/stdlib.c.text../clib/angel/boardlib.s../clib/angel/boardlib.s../clib/angel/boardlib.s../clib/libinit.s.ARM.Collect$$libinit$$00000000../clib/angel/sys.s.text.bss../clib/angel/kernel.s.ARM.Collect$$rtexit$$00000000../clib/libinit.s.ARM.Collect$$libinit$$00000002.ARM.Collect$$libinit$$00000008.ARM.Collect$$libinit$$0000000A.ARM.Collect$$libinit$$0000000C.ARM.Collect$$libinit$$0000000F.ARM.Collect$$libinit$$00000011.ARM.Collect$$libinit$$00000013.ARM.Collect$$libinit$$00000015.ARM.Collect$$libinit$$00000017.ARM.Collect$$libinit$$00000019.ARM.Collect$$libinit$$0000001B.ARM.Collect$$libinit$$0000001D.ARM.Collect$$libinit$$0000001F.ARM.Collect$$libinit$$00000021.ARM.Collect$$libinit$$00000023.ARM.Collect$$libinit$$0000002A.ARM.Collect$$libinit$$0000002C.ARM.Collect$$libinit$$0000002E.ARM.Collect$$libinit$$00000030.ARM.Collect$$libinit$$00000031../clib/angel/kernel.s.ARM.Collect$$rtexit$$00000002.ARM.Collect$$rtexit$$00000003.ARM.Collect$$rtexit$$00000004../clib/armsys.c../clib/armsys.c../fplib/fpinit.s../clib/angel/boardlib.s../clib/armsys.c../clib/armsys.c../clib/libinit.s.ARM.Collect$$libshutdown$$00000000../clib/angel/sysapp.c../clib/heapalloc.c../clib/signal.c../clib/signal.c../clib/libinit.s.ARM.Collect$$libshutdown$$00000003.ARM.Collect$$libshutdown$$00000006.ARM.Collect$$libshutdown$$00000009.ARM.Collect$$libshutdown$$0000000B.ARM.Collect$$libshutdown$$0000000E.ARM.Collect$$libshutdown$$0000000F../clib/angel/sys.s../clib/angel/sys.s../clib/angel/rt.s../clib/signal.c../clib/signal.c../clib/signal.c../clib/signal.c../clib/angel/sysapp.c../clib/signal.s../clib/signal.c../clib/signal.c../clib/signal.c../clib/signal.c../clib/signal.c../clib/signal.c../clib/signal.c../clib/signal.c../clib/angel/scatter.s!!!scatter../clib/angel/handlers.s!!handler_copy../clib/angel/handlers.s!!handler_ziBuildAttributes$$THM_ISAv4$P$D$K$B$S$PE$A:L22UL41UL21$X:L11$S22US41US21$IEEE1$IW$USESV6$~STKCKD$USESV7$~SHL$OSPACE$ROPI$EBA8$UX$STANDARDLIB$REQ8$PRES8$EABIv2__ARM_use_no_argv_SLE90_Fixup_UserNvmMailboxRegionStart_SLE90_Fixup_t16_UserMailbox_templateVersion_SLE90_Fixup_t16_UserMailbox_contentVersion_SLE90_Fixup_t8_UserMailbox_userOsStartFlagUSER_MBX_rfu_000_SLE90_Fixup_t8_UserMailbox_curLimConfigAtStartupUSER_MBX_rfu_100_SLE90_Fixup_t8_UserMailbox_atrColdRstBehavior_SLE90_Fixup_t8_UserMailbox_atrColdRstValue_SLE90_Fixup_t16_UserMailbox_atrColdRstDivFactorUSER_MBX_rfu_110_SLE90_Fixup_t8_UserMailbox_atrWarmRstBehavior_SLE90_Fixup_t8_UserMailbox_atrWarmRstValue_SLE90_Fixup_t16_UserMailbox_atrWarmRstDivFactorUSER_MBX_rfu_120_SLE90_Fixup_t8_UserMailbox_startupMode_SLE90_Fixup_t8_UserMailbox_startupConfigUSER_MBX_rfu_130_SLE90_Fixup_t32_UserMailbox_userBootVectorAddrUSER_MBX_rfu_140_SLE90_Fixup_t32_UserMailbox_swpSync_Id1_SLE90_Fixup_t32_UserMailbox_swpSync_Id2_SLE90_Fixup_t32_UserMailbox_linSecPhysStartAddrUSER_MBX_rfu_150_SLE90_Fixup_t32_UserMailbox_userProgCounterUSER_MBX_rfu_200_SLE90_Fixup_t8_UserMailbox_chipType_SLE90_Fixup_t8_UserMailbox_trackingInfoUSER_MBX_rfu_210_SLE90_Fixup_t32_UserMailbox_ramUserStartAddr_SLE90_Fixup_t32_UserMailbox_ramUserEndAddr_SLE90_Fixup_t32_UserMailbox_nvmUserStartAddr_SLE90_Fixup_t32_UserMailbox_nvmUserEndAddr_SLE90_Fixup_t32_UserMailbox_cacheConfig_SLE90_Fixup_t32_UserMailbox_moduleListUSER_MBX_rfu_220_SLE90_Fixup_t32_UserMailbox_bpuLock_SLE90_Fixup_t32_UserMailbox_trackingInfoUpdateEn_SLE90_Fixup_t32_UserMailbox_flashloaderIndicatorUSER_MBX_rfu_300USER_MBX_rfu_END_SLE90_Fixup_UserNvmMailboxRegionEnd__Vectors__main__scatterload__scatterload_rt2__scatterload_rt2_thumb_only__scatterload_null__scatterload_copy__scatterload_zeroinitSystemCoreClockUpdate_sys_exit_pass_sys_exit_fail_sys_exitSystemInitpassfailReset_HandlerNMI_HandlerHardFault_HandlerMemManage_HandlerBusFault_HandlerUsageFault_HandlerSVC_HandlerDebugMon_HandlerPendSV_HandlerSysTick_HandlerCRYPTO_IRQHandlerGPIO_IRQHandlerI2C_IRQHandlerIMM_IRQHandlerSCP_IRQHandlerSPI_IRQHandlerSWP_IRQHandlerSYSTEM_IRQHandlerTIM0_IRQHandlerTIM1_IRQHandlerTIM2_IRQHandlerTIM3_IRQHandlerTRNG_IRQHandlerUART_IRQHandlerUSB_IRQHandler__user_initial_stackheapRegion$$Table$$BaseRegion$$Table$$Limit__rt_lib_init__rt_lib_init_alloca_1__rt_lib_init_argv_1__rt_lib_init_atexit_1__rt_lib_init_clock_1__rt_lib_init_cpp_1__rt_lib_init_exceptions_1__rt_lib_init_fp_1__rt_lib_init_fp_trap_1__rt_lib_init_getenv_1__rt_lib_init_heap_1__rt_lib_init_lc_collate_1__rt_lib_init_lc_ctype_1__rt_lib_init_lc_monetary_1__rt_lib_init_lc_numeric_1__rt_lib_init_lc_time_1__rt_lib_init_rand_1__rt_lib_init_return__rt_lib_init_signal_1__rt_lib_init_stdio_1__rt_lib_init_user_alloc_1__rt_lib_shutdown__rt_lib_shutdown_fp_trap_1__rt_lib_shutdown_heap_1__rt_lib_shutdown_return__rt_lib_shutdown_signal_1__rt_lib_shutdown_stdio_1__rt_lib_shutdown_user_alloc_1__rt_entry__rt_entry_presh_1__rt_entry_sh__rt_entry_li__rt_entry_postsh_1__rt_entry_main__rt_entry_postli_1__rt_exit__rt_exit_ls__rt_exit_prels_1__rt_exit_exitproceduremain__use_two_region_memory__rt_heap_escrow$2region__rt_heap_expand$2region__user_setup_stackheapexit__user_libspace__user_perproc_libspace__user_perthread_libspaceglobal_var2global_varglobal_var3global_var4__libspace_start__temporary_stack_top$libspace 7Xe%Jo /[8@BHDXF~HJLN$PSRcTVXZ \3^[`bdfh(jOlxnprtvGxqz|~Ly% S  F    ; d     !  K p   $ d     F s    !In  *QyB k"$&(*,A.f02 <>@B?DgFHJLN0PYRTVXZ&\O^x` Hs ?h >XI\r`dlnp/r\tl*[P KuK[   "M} $,-PQR{STX\ `-dOhqlpt{=a' S    !-!Y!!!!"3"_""""#(#I# Y#####!$G$n$$$&$($0%4?%8j%<%=%>%?&@=&Ae&B&]#&&&'4'_''''' (0(N(r((((()$)|')3)6)9)<)?)B) E) H)L K)P N) Q)H T) W) Z)t ])| `) c)0 f)> i)H l)^ o)l r) u) x) {) ~) ) )J )P )j )t ) ) ) ) )))) )Z)h)v)|))))H)))N)h)))r)))))()))))))<*H*j*x **** *L*P*n *t#*&*)*,*/*2*5*$8*,;*p>*A*D*G*J*M*JP*PS*V*Y*n\*x_*b*e*h*,k*n*q*t*w*hz*x}***d*l*******.*4*>*D*x***********$*`*l*** * *& *, * * *l!*x!*!*!*<"*@"*"*"+,#+<#+X# +d# +n#+t#+#+#+#+#+#"+#%+#(+$++$.+$1+R$4+d$7+$:+$=+$@+%C+$%F+0%I+X%L+l%O+%R+%U+%X+%[+&^+&a+8&d+H&g+p&j+t&m+&p+&s+&v+&y+&|+&+&+'+$'+0'+>'+D'+b'+t'+'+'+'+'+(+,(+(+(+)+ )+^)+d)+++ + +@ + , , ,@" ',"3,"?,"K,"W,"c,{,,,,,d),,0,--%- +-R-|p----P d-- -..5.H ;.T.^.v. |....| ../4/ :/n/x// ///>00 D0h)O0000H 0l)011L1l R1111 1 22L2 R2222 233@3P F3m3w33t 333 4 474A4d4(v4444,(45&5P5 V5555(56 646 :6g6 q66N(66(67)7I70S7~7 )778774)728@<8l8 r8 8\88H88k9 '9<9p)$G9|9P9999X9:$:S:`]:: ::h::.:%;p/;V;<\;;x;;`;;;<t<C<M<p<v<<<<<==4=:=i=s=====>>R>\>> >>>"?T(?t?~???@ @<@hB@v@@@|@@@4Ah:AbAlAAAAABBRB\BBBBB0C(6CsC}CCCCD@DFDuDDDDDDEH E)D+EgE qEExEE(EFFLF0VFFX)FFF G8G>G@"@ SG"@hG"}G" G"@G" G@  G G  GD  H HRH@\HH HHHHH,IEIPOIIIIXI JPJ]Jt4cJJ`JJJJh K3K9KrKp|KKKK,TK,LQLLxLLLM)MoMuMMMNNSN]NNNNNOO[OeOOPOOO#P)PbPlPPPPP9Qx?QQQQQ6R@RRRRRS!SaSkSS,SSTGTMTTTTTBULUUxUUU9V?VVVVlVWWWW]WWWWWXX=XCXX XX4XX( Y7YD=YY0YYYZ8Z;ZAZsZ  yZ Z|ZZZ@ZZZ&[H0[Z[`[[P[[[[X\*\$0\g\`q\\l\\h\*]0]f]pp]]]]x] ^&^T^^^^ ^^^^, ^'_1_X_p ^____ __`<`x!B`|```!``a4a!:aqa{aa@"aaab" bRb\bbh(bbbc(cCcMcrc #xcccc<#cd(dNdd#Td}dddt#ddd4e#:eyeee#ef fFf#Lf~fff$ffg8g$>glg vggd$gg(g,h$2hdh0nhh%hh8hi0%iXi@biil%iiHi&j%,jgjPqjj%jjXjk&#kSk`]kkH&kkhkkT&k-lp7ldlt&jllxll&lm"mKm&Qmmmm&mm n5n';ninsnn0'nnn oD'oNoXoot'ooop'pRp\pp'p+qJqTq}rqqqqrJr wrrrr s$"s'Js(us)s*s+s, t.Lt0st1Ntttt uAuuuuu vCvvvwMwww)xmxxx"ycyyy(zkzzz{5{m{{{{5|k| | | }C}w}}!}%~)B~-s~1~5~9=?AxEIMQWUY]a%e[imɁqu-y`}‚MK8}ą ^)d%THމ)m  =rߋ!Y%)Ќ-1>5w9=ݍAEYIMǎQUUY]Տa eCiwmqu)yh}Aݒ[ϓaהO2Ֆ'l7ј!qÙcA  Û7l!%')]-15-9`=AƞEI-MaQUɟY]1aoeim5qruy}/dѢ ;mѣUפQͥ;t!Q0aKש  aӪW!%)-O159=9AEǭI MQQUծY ]kaeiBmqϰuyf}\Ѳ<q!_ߴSbv( <Q d f͵I x } D 6 NR1 I m R  & 2'Q @u N g *| 0!/з=$au+<8Sm!:i}@̸ H\UI Upni"D4<`)bغHI"y@*$@ _- wQu(ȻD -D(fHwFQfܼ"y?qRʽ- lMyx`m^ؾ  +5 OE4f"4ѿln%<$m*C hN - Bq J y!P!0>!@\A"{" # =#e# u##  #4#Z$t$6e$0$\%1%( m%.4%>Z%}& I& U&u&$!&S& g&' 1'E'u'0'('>)-("@O(Ti(n(H(( )!)5)$Y)d))h)8l)Np)qr)x)|)) ) P)@_)ok   @  )D  4  K@"@ a"@{"" "@" lnllpqrrsstt`v|vlxxhyyyz n{ {H`p!$,'.*L-\0369<?BؗEH̘KNQTWzZ]L`\cf iuxp{~@Tlllrr 9r?\sb}t|vxyz+{1>#SA a~p,L  $̘*@FٙXnt? G\MRc izd 8l6Llk7l vCl Ml"l8l6lmm1mm m in:4n<FnQn\ oo o!o3oo* pN[p$pqbsqgr,(r5rGs]tq}vwPxyxzZ{v } ~ ~l#eZ;ZQ]prqGP-M -!)5S=5H\Vdpyj~8@/K$ojٗ *8Gz/͘*?L Xc"pf[ DŚx=ϛp]m{ (2 A P \sn~dߝ 6U}Ng U (_ Ai _s }     @`$!$'*-0369.<`?BE`HxK@NQT<WZ]`cfixloruRxl{~ (0 P $%%%%%&&(( ((()*D+X+/>  ! " =Gdj*X+0X+h+    ,, 0%>%$O%,a`gatw"   ,$ '1O$U%b*t ,    ,  &&0(:OUV_r0|  8++, @!;`Aa Pkh n, x'px''H/A a6`}P%X:%,NQcW] D    +(++  ,,, #, /-9ZPd(x  X  `#><D=WjgY6   ++ $-hp!4:'@Hbxl//> > 8-, B)=$X)w0 |4 N+, d-,,,,3,>,g ,r , , ,,,,,8,C,p,{,,,,,!,"!,E$,P$,p',{',*,*,-,-,4,4,$;,/;,OB,ZB,I,I,P,P,T,T"( .KUrx$%*Ol} / /, 2 D P e n v t-l "   & 4#A?SY"j{HyZ3&Y2&-,(4%-7-D_*Tl. ~.P P %|%,` !#5(?Q (W\{\Rp  0Z!%),-P1r59=AE,IQMvQUY](aSe~imquy2}\)V,P>_x,1&Wq$ - .9EBO3>Yqdi@w "/$)6U4 0#M=aU5<cq}3["yx$ 8$R9 lC$g qBpl5 Sf v 9AIQYai q/DFmQ "] "o" "# "- "7"? "I "S"S"S"S"!S"0S"?S"NS"`S"pS"S"S"S"S"]$]] ,<L\n(~T1 0; E O  Y %c Am Yw q   ! ! !> !j !{!!!!!! !! !!J !![!!!!!!!!!! !!J!![ !!$!,!P!!T!!X!!\!!0"!]"!n"!"! "!("!,"!'0"!U4"!8"!<"!D"!"!"!:"!l#!}#!#!$$$S$"$D%N@%l% "z%&&'px'''@()(O (\!(j1(x?(Y(k(((( ($**R++"+1+(DT,TL,Y, e, q, -$-8-,d-t--,W "  & 6 K Y h n x           0 4 NP P T *#6$B %El%Hp%K%N%QN%TT%WХ%Zԥ%]%`%cX%fd%iT%l`%o%r%ub%xh%{%~%%%2%H%r%%%%V%%%X'X( X)X)X)Y)Y)Z)Z)L[)z$!L%q:%%U|%/ե.%CD%Re%ha%y(% %"%"%٫%Ӭ%ѭ%٭$%%!8%5/%FN%],%v+%%}j%%gT%:% % D%' B%: /%K ݹ4%a .%v ?R% % % ú% ݺ% c*% % %% 3.% a$% 2% ,% %* %> I*%V %c %v % % žF%  V% a%  %  % % /% G%, _*%@ h%R `%c Q0%~ % h% f% kf% N% N% mN%6 N%O  N%k  %  %  %  % % % &  = X\ X( !X) X) Y ) Z) Z) Z) Z ) [ )[ ))[ )?%[ )X/[ )u9[ )C[ )L[)N[)P[*_ !`, |`,`,`,a,a,b,b,""b,%db,1b-4b-7b-:Xc-=\c-I@ .Uesb-y\c-@ .`, ! /$ /. ; /@ /I`|,Oa,Ub,`ewb-}|`,b-b- b-+b-Kb-kb-b-bJ-Hc- %>Pb-pTc-H `/b-b-b-b-7b-Wb-wb-b-b-b-b-b-7b-Wb-wb-b-b-b-b-b-7b-Wnb-b-b-):Lb-pb-b-b-;b-_b-b-&=N_p`4,`,!:`,G ! !K !w ! !!!!!!!& !!R !! !!!!!!!! !!1!!Y!!!! !!$!,!P!!T!!'X!!X\!!i"!"!"!"! "!("!4,"!`0"!4"!8"!<"! D"!"!A"!s"!#!#!#!`,}`,`, `,, `,: `,M `,` `,w `, `, `, `", a", a", a", a", a", a", a",!a",!a",,!b",8!b",I! b",X! b",h!b",z!b",!b",!b",!b",!b",!b",!b",!b",!b","b","b",'"b",7"b",G"b",V"b ,o"db,"b"b-"b-"b-"b-"b-"b-#b-.#b-A#b-Y#b-p#b-#b-#b-#b-#b-#b-$b-$b-2$b-I$b-_$b-z$b-$b-$b-$b-$b-$b-%b-.%b-9%b-L%b-Z%b-h%b-|%b-%b-%b-%b-%b-%b-%b-%b,-%b-%b-&b-1&bJ-H&Ic -M&Uc"-]&Uc"-u&Uc"-&\c-&@ .&D .&E .&H `/& /ER_IFX_CFG_AREAER_IFX_MBX_AREAER_DEFAULT_CODE_AREA_0ER_IFX_ROM_CFG_AREAER_DEFAULT_CODE_AREA_1ER_SHIPPING_MODE_APPLICATION_ENTRY_AREARW_VOLATILE_MBX_AREARW_INTERFACE_CONFIG_AREARW_GLOBAL_VARS_AREARW_MBX_UPDATE_RAM_BUFF_AREARW_BOS_IRAM1ER$$.ARM.__AT_0x10000400ER$$.ARM.__AT_0x22000040ER$$.ARM.__AT_0x22000080ER$$.ARM.__AT_0x22000100ER$$.ARM.__AT_0x22000400ER$$.ARM.__AT_0x22000680ER$$.ARM.__AT_0x22000780ER_IROM1ER_RMS_PATCHER$$.ARM.__AT_0x10001400ER$$.ARM.__AT_0x100014F8ER$$.ARM.__AT_0x100014FC.rom.fl90.ram.fl90.ram.fl90.stack.fl90.nvm.flconfig.nvm.reset.nvm.sectdeact.nvm.fl90PATCH_CACHED_REGIONER_USER_MBX_AREAER$$.ARM.__AT_0x20000000.rom.entrypoints.rom.version.rom.mifare.rom.mifare.nvm.entrypoints.nvm.version.nvm.mifare.nvm.mifareER_USER_MBX_AREAER_IROM1ER_IROM2RW_IRAM1RW_IRAM1__@post_paddingER_DEFAULT_CODE_AREA_0__@post_paddingER_IROM1__@post_padding.rom.entrypoints__@post_padding.ram.fl90__@post_paddingER$$.ARM.__AT_0x10000400__@post_paddingER_RMS_PATCH__@post_padding.nvm.reset__@post_padding.nvm.sectdeact__@post_padding.nvm.fl90__@post_paddingPATCH_CACHED_REGION__@post_padding.nvm.entrypoints__@post_padding.nvm.mifare__@post_paddingRW_IRAM1.comment.debug_abbrev.debug_frame.debug_info.debug_line.debug_loc.debug_macinfo.debug_pubnames.note.strtab.symtab.shstrtab !8HLgcHy y y @ y y yy@"y@("y@A"yZ"y s"y@"y ly 2ث$ D ` $P `0$`>%`|I%dX(@b>v    !XX X0P[P   P`P&b/@ 8H `Ag 8|%H'L4/hM>pXP_lc` ,"'*NyD0}  P~")$/Ĩ&7pF ?"Ipyelftools-0.26/test/testfiles_for_unittests/compressed.c000066400000000000000000000011531357220457300241320ustar00rootroot00000000000000/* Generated by compiling with any GCC version and with a binutils ** distribution that includes support for compressed sections. GNU binutils ** 2.28 is fine. ** ** gcc -c -m32 -O0 -g compressed.c -o compressed_32.o ** gcc -c -m64 -O0 -g compressed.c -o compressed_64.o ** ** compressed_unknown_type.o is a copy of compressed_64.o that is hand ** hex-edited to replace the ch_field with 0x7ffffffe. ** ** compressed_bad_size.o is a copy of compressed_64.o that is hand ** hex-edited to replace the ch_size with 0x328 (instead of 0x327). */ #include int foo(int i) { printf ("i = %i\n", i); return 0; } pyelftools-0.26/test/testfiles_for_unittests/compressed_32.o000066400000000000000000000070401357220457300244530ustar00rootroot00000000000000ELF 4(USuR]i = %i $0xE=hTA7gg&(QLt5kP\%h-D,$HP `%b@PVP !EZJl-]*mx»sܹ3kY)4C$(o%*}Eclqƒ1 &Iy<򬦵8}# l^ M(]( &|2pޣh~V{LfU܍nwx~;2x o& _H ~WHٿa5T^lj 0~?AZ䂦~&4 ִKM;dL~[\T2o@6KSSc;JN큜  Or dlUrƟb0YnژY|BNsH=q]׺G4Mj{UK -2JxV*z럺ʹtyiz֧t`~0 K5 ۗg|K ~똩x|Y5&[ԤzFHLлR8ۮ=֓\!I6A7(\]S0DFKʊdm@7.ԙYվo"3NxmRR0 $-KO 00pq%Ա(|=M;p,kyOOإжz^YjY͆UCGL=ZZ+o7f]z}h8ӂ뺀Q(7CvD @^!2읏Qom:"t/N@գlal3qʑ{q &W%ʙ4R@ \ſ|$j=::a"٠{mҋz)p xZBR_e[iجج\EE1ȒBfofvRDˀ#e ʼn4_z"E:mкӥ 57(GCC: (GNU) 7.1.1 20170630zR|  2AB Dj @   2(>compressed.cfoo__x86.get_pc_thunk.ax_GLOBAL_OFFSET_TABLE_printf  !    ! & 3 : A H O V d k p {              $ 1 > K X e r              ) 0 < H T           D.symtab.strtab.shstrtab.rel.text.data.bss.rodata.text.__x86.get_pc_thunk.ax.rel.debug_info.debug_abbrev.rel.debug_aranges.rel.debug_line.debug_str.comment.note.GNU-stack.rel.eh_frame.group4<2 @h %n+n0n8vXzT @dv3 r @  S @  0y0tP @ @  E pyelftools-0.26/test/testfiles_for_unittests/compressed_64.o000066400000000000000000000116201357220457300244570ustar00rootroot00000000000000ELF>P@@UHH}EH=i = %i 'x]KQn6OW"D> VbF,ĠH -(b%`iiFoq~3*>ț;Lkg,a;S6 qJpԼ k2y" K7`)\k)4#/*WpR ܨnQ(S_RaCaUqDU<MfQTb"*㰤!+* 㰦RC\m]%I,y&Z氣JTDNTET:DUÍJV;wLl_z #a=8E*-.dJɮdGRW¾h;f"/^NkU}xTL|:5TgکG1Ex=O@ }eDʰ4Q&H\nz`Ԉ6?Ծ)t}MMVd (;:HK] se'ȅg,)\sM #`CE=We @ϡ!QsHBCp^yߏʒb$:0xa```bd _xUA 0E'q ]yf(HU*45ېI=xia?< V!^=KLsV"»!OE?dUJtXXo%%FinJ؋.]iJ.t#JL;J `2i 3xeRN0$-)JNG3I:v".m 7اv}('!`7W"|=Qn:"LFlf (`w=ʎcWHSGa 8A9F[;v/0D`O lЃŮR pm,t /ۼ`-lxClτ j. 5;beZ9vsRB1:jf+(/{~}y]5zlWj6dq; =h):l]W8 @zmкĥx<-yydLGCC: (GNU) 7.1.1 20170630zRx (AC c    ((compressed.cfoo_GLOBAL_OFFSET_TABLE_printf    ) . E; B I PP W ^ ;l q |  c b C   + T  i  K  - .: vG T ea n {   !  L n u |     :  + h7 C    t   m  % Y  .symtab.strtab.shstrtab.rela.text.data.bss.rodata.rela.debug_info.debug_abbrev.rela.debug_aranges.rela.debug_line.debug_str.comment.note.GNU-stack.rela.eh_frame @(@@0&h,h1h>p9@pJ]/X@@ 0 ql@p  }0u0 ;@8@ x / pyelftools-0.26/test/testfiles_for_unittests/compressed_bad_size.o000066400000000000000000000116201357220457300260060ustar00rootroot00000000000000ELF>P@@UHH}EH=i = %i (x]KQn6OW"D> VbF,ĠH -(b%`iiFoq~3*>ț;Lkg,a;S6 qJpԼ k2y" K7`)\k)4#/*WpR ܨnQ(S_RaCaUqDU<MfQTb"*㰤!+* 㰦RC\m]%I,y&Z氣JTDNTET:DUÍJV;wLl_z #a=8E*-.dJɮdGRW¾h;f"/^NkU}xTL|:5TgکG1Ex=O@ }eDʰ4Q&H\nz`Ԉ6?Ծ)t}MMVd (;:HK] se'ȅg,)\sM #`CE=We @ϡ!QsHBCp^yߏʒb$:0xa```bd _xUA 0E'q ]yf(HU*45ېI=xia?< V!^=KLsV"»!OE?dUJtXXo%%FinJ؋.]iJ.t#JL;J `2i 3xeRN0$-)JNG3I:v".m 7اv}('!`7W"|=Qn:"LFlf (`w=ʎcWHSGa 8A9F[;v/0D`O lЃŮR pm,t /ۼ`-lxClτ j. 5;beZ9vsRB1:jf+(/{~}y]5zlWj6dq; =h):l]W8 @zmкĥx<-yydLGCC: (GNU) 7.1.1 20170630zRx (AC c    ((compressed.cfoo_GLOBAL_OFFSET_TABLE_printf    ) . E; B I PP W ^ ;l q |  c b C   + T  i  K  - .: vG T ea n {   !  L n u |     :  + h7 C    t   m  % Y  .symtab.strtab.shstrtab.rela.text.data.bss.rodata.rela.debug_info.debug_abbrev.rela.debug_aranges.rela.debug_line.debug_str.comment.note.GNU-stack.rela.eh_frame @(@@0&h,h1h>p9@pJ]/X@@ 0 ql@p  }0u0 ;@8@ x / pyelftools-0.26/test/testfiles_for_unittests/compressed_unknown_type.o000066400000000000000000000116201357220457300267660ustar00rootroot00000000000000ELF>P@@UHH}EH=i = %i 'x]KQn6OW"D> VbF,ĠH -(b%`iiFoq~3*>ț;Lkg,a;S6 qJpԼ k2y" K7`)\k)4#/*WpR ܨnQ(S_RaCaUqDU<MfQTb"*㰤!+* 㰦RC\m]%I,y&Z氣JTDNTET:DUÍJV;wLl_z #a=8E*-.dJɮdGRW¾h;f"/^NkU}xTL|:5TgکG1Ex=O@ }eDʰ4Q&H\nz`Ԉ6?Ծ)t}MMVd (;:HK] se'ȅg,)\sM #`CE=We @ϡ!QsHBCp^yߏʒb$:0xa```bd _xUA 0E'q ]yf(HU*45ېI=xia?< V!^=KLsV"»!OE?dUJtXXo%%FinJ؋.]iJ.t#JL;J `2i 3xeRN0$-)JNG3I:v".m 7اv}('!`7W"|=Qn:"LFlf (`w=ʎcWHSGa 8A9F[;v/0D`O lЃŮR pm,t /ۼ`-lxClτ j. 5;beZ9vsRB1:jf+(/{~}y]5zlWj6dq; =h):l]W8 @zmкĥx<-yydLGCC: (GNU) 7.1.1 20170630zRx (AC c    ((compressed.cfoo_GLOBAL_OFFSET_TABLE_printf    ) . E; B I PP W ^ ;l q |  c b C   + T  i  K  - .: vG T ea n {   !  L n u |     :  + h7 C    t   m  % Y  .symtab.strtab.shstrtab.rela.text.data.bss.rodata.rela.debug_info.debug_abbrev.rela.debug_aranges.rela.debug_line.debug_str.comment.note.GNU-stack.rela.eh_frame @(@@0&h,h1h>p9@pJ]/X@@ 0 ql@p  }0u0 ;@8@ x / pyelftools-0.26/test/testfiles_for_unittests/core_linux64.elf000066400000000000000000010000001357220457300246220ustar00rootroot00000000000000ELF>@@8h  @0`@`P:Y`VY `vY@@wY 0wY@@pwY`Y00@Y `YpЙYYX.  _. _. `PCOREc[Zc[ZpZ.0@Z.FxxY@(4>Yc[c[(4>Y3FXZ.+YCORER@c[Zc[Zcoredump_self./coredump_self foo bar 42 IGISCOREc[0CORE!_.d@@8 pwY 0@   Z.Z.Z.mELIFCORE @@``` `:YVYVYvYvYwYwY0wYpwYyYYЙY%ЙYY&/home/max42/pyelftools/test/coredump_self/home/max42/pyelftools/test/coredump_self/home/max42/pyelftools/test/coredump_self/lib/x86_64-linux-gnu/libc-2.23.so/lib/x86_64-linux-gnu/libc-2.23.so/lib/x86_64-linux-gnu/libc-2.23.so/lib/x86_64-linux-gnu/libc-2.23.so/lib/x86_64-linux-gnu/ld-2.23.so/lib/x86_64-linux-gnu/ld-2.23.so/lib/x86_64-linux-gnu/ld-2.23.soCORE////////////////ttime__vdso_get@LINUX////////////////ttime__vdso_getELF>0@@@8 @@@@@@88@8@@@ ``(0 ((`(`TT@T@DDPtd@@44QtdRtd``/lib64/ld-linux-x86-64.so.2GNU GNUHiHՆg/V T # libc.so.6abort__libc_start_main__gmon_start__GLIBC_2.2.5ui 2`` `HH% HtCH5 % @% h% h% f1I^HHPTI@H0@H&@fD?`UH-8`HHvHt]8`f]@f.8`UH8`HHHH?HHtHt ]8`]fD=Q uUHn]> @ `H?uHtUH]zUHAWAVAAUATL% UH- SIIL)HHgHt 1LLDAHH9uH[]A\A]A^A_Ðf.HH;0<||Lr| zRx (*zRx $0FJ w?;*3$"D AC DdeBBE B(H0H8M@r8A0A(B BBB@@ @ @``o@@@ > `0@@ o`@ooV@ELF>0@@@8 @@@@@@88@8@@@ ``(0 ((`(`TT@T@DDPtd@@44QtdRtd``/lib64/ld-linux-x86-64.so.2GNU GNUHiHՆg/V T # libc.so.6abort__libc_start_main__gmon_start__GLIBC_2.2.5ui 2`` `HH% HtCH5 % @% h% h% f1I^HHPTI@H0@H&@fD?`UH-8`HHvHt]8`f]@f.8`UH8`HHHH?HHtHt ]8`]fD=Q uUHn]> @ `H?uHtUH]zUHAWAVAAUATL% UH- SIIL)HHgHt 1LLDAHH9uH[]A\A]A^A_Ðf.HH;0<||Lr| zRx (*zRx $0FJ w?;*3$"D AC DdeBBE B(H0H8M@r8A0A(B BBB@@ @ @``o@@@ > @Y`0@@ o`@ooV@(`hYxYN>Y@P @b@8 @HG@@@00`Z`Z`Z ;;`O ++<+<pppDD;;xPtd|Z|Z|ZTTQtdRtd;;@8@8GNU:`gxezGNU  0D E` @2*@T<, 2H&f2P  ($ ZXDB(B @IPQ@@@!B٤X@@" F&8PB (!`@ h Dh ,bA Dd#@ P`"  aqa ]@  `C6@ A [0Ā` `@b1$(btb  A``"P" Bk ܨ@b 8PDD h@ 5ȀL  | D HM( "l@1v*0" H@ :6 $ANK NpFz (-$  S@€`pb B$h!hP4@@T@BFT H$`EH$@^C) S"$@q" ` ((@`@(8PM@Wp#l$*R I $9B$ @@h` L$3\Hj")@B8 D#4(P (  T % @ pI@@ PR AX@o@ A<(# @@@ BG L & R@ (@"Y!Q&& 0d@Ԡ $iPD2R `̀ `( t@C`9@` 40ФᏜW H@Hp@HN @qpE`bŰa A@ @aT @J5A A F  "`JAtp*a Da@R y! @ BdP(DAB(8`@ ؒH `2 @ HX (BH`#@^*$H(`I %D "C"PE)f`'h@> B@A8 A0 @ `T4ADH0b#RU (@ PAЈJAp4)C1$jR`H@ @GWx 0T;8B> 22 I  D /i¤Հ*T'  B@C<9C@()%<I``4kk7 2d#0h@A0D Bbe zG-'tT !  &$aE#AL0 AH.$@@H"Jh NYE@S $ E@(1"@@BHFEJ+ "@,r ,D `@b@6@9 IZ J@q@0F 1HӀ `B!@=$"@3!@ dP TEԄ J"A {e  2aC6$`@10$ RBP@ @(1M 8Hؑ@ 8 @0T - "0`145H  "%')*,.0158;=@ADEGINPRSUVX\_cegikmoswy}  $&(*,/1368>CDGIMQSUXZ\acefgijnoruz}   !#$&(*,-/2468;>ACDFGHKLMPQSUXZ_bcfgjlpqrx~ $wYZwYSYESYESY.HSYSYo0SY4SY8SYPNaPqk,jj6HT7qYIσ7 qR>)OqN9NL(K@K箂CAk[Sž@@? O@X SYdSYtSYdSY SYSY SYSYSYSY SYSY SY›SYқSY›SY SYSYSY SYSY SYSYSY"SY SY3SY SY"SYDSYUSY SYbSY SYUSYySYARY;RYARY;RYERYJRYSY@,wY`0wYwYwYwY wY`vY`wY`wY 7wYwYwY`wYp2CYP.CY,CY wYMCYeCYSYSYZ.Z.DwYvY TYvYvY`vY`vY vYvY vYvYvYvY@vYvYJRY;RYARYSYSYSYSYSYSYSYSYSYSYSYSYSY@%wY &wYp7wY`wYwY wY7wYwYwY@%wY &wYwYp @t@8@PQPQ [["[" p^p^"p^"pp$$Ptd&&&44QtdRtd[["["@@GNUܾܪ|;VQNga      A 4 @z@ A+" j`=l=l|= ֻ$=uTi7JGCpTB#dt" 0  @4m\"ph^"& q_rtld_global__get_cpu_features_dl_find_dso_for_object_dl_make_stack_executable__libc_stack_end__libc_memalignmalloc_dl_deallocate_tls__libc_enable_secure__tls_get_addr_dl_get_tls_static_infocalloc_dl_debug_state_dl_argv_dl_allocate_tls_init_rtld_global_rorealloc_dl_tls_setup_dl_rtld_di_serinfo_dl_mcount_dl_allocate_tls_r_debugfreeld-linux-x86-64.so.2GLIBC_2.2.5GLIBC_2.3GLIBC_2.4GLIBC_PRIVATE;}dui yii $yii $c ]"]" ]"]"P)]"]"`?]"K]"o]" ;]"_" _"`" `"(`"0`"5U"%U"@%U"h%U"h%U"h%U"h%2U"fATUISH HH@-mU"H|$ Ht$(LD$ HT$Ht$H|$HD$D$0LD$MtH51LHڿ 1 19- U"H@[]A\1H=Dd"SH d"Hd"*H{@HH=MU"HS?Hc"HpH@HtH jH5MH=X"H{T"1HtH(tHcHHTHRHH9tH H5H=dВ$v'HHuH5G1 aH@HGc"H6Hvt&H>H5o1 Xc"H[H5|P1g f.H8?IċO"ZH$)RHIHH=VS"ILIU1vHLAfHb"GÐf.oÐf.SHE1E1HHwHGHT$HD$jH?jH腚HT$Y^HtHtHHBHCH[1ff.HIc"SHL N"DN"H HH0H?&=HCXZ[@f.>HuHqN"HHHHDH51f.H9N"IH_HH5uHHHE1Df.SDGHH3H1A E11kyHC[DAUATUSH-cHHHHHt$I@HHHHHHH)HD HшuID$Ll$ H)LH=HGƒArH1At At  f HAt  ILH5eH)HHкHGƒ|t4H=FL1Ƅ$L`"It$HLHHHHHHH) $wYZwY;RYARYJRYYYYl _nq\#c[Z.@YYPYiyY`[yYYiyYw[yYYiyY[yYiyY[yY /lib/x86_64-linux-gnu/libc.so.6:YY wYٙYYY8Y wY` wYP wY wY wY wY wY wY wY0 wY@ wY wY wYp wY wY wY wY wY wY wY wY wY wY wY wY@:YP;YY>;YvYxx;@8PYlibc.so.6/lib/x86_64-linux-gnulibc.so.6YٙYYٙYhYYٙYhYYٙYJ@ui @_.uHP @b@8 @HG@@@00`Z`Z`Z ;;`O ++<+<pppDD;;xPtd|Z|Z|ZTTQtd Z.Z.D xYYY_._.{xY_.YhZ.dZ.Z.IxYD xYZ.Y;Y;Y{xY;YYZ.Z.D xYY;Y;Y{xY;YY8Z.4Z.xYȹY#@@8Z.}G<=Z.;Y;Y4Z.Z.ȹYD xYYYZ.YhYZ.OxYYhY.N=8.YZ.Z.Z.}#@ M;YY_.YZ.YhYZ.OxYY`0@pZ.Z.hxY(YM;YpZ.SxY////////////////Z.0@pZ.*P>Y ////////////////&@Z.xZ.@xxY}@hY/@0@0 @@8@))```<<Ptd444<<   40Fe~UqK x|Cn*&&bemXp" v 0 b" 0 b* 1"  vT6 )=" )__vdso_clock_gettime__vdso_gettimeofday__vdso_time__vdso_getcpulinux-vdso.so.1LINUX_2.6 DuTD o` ^ o(oo/build/linux-Ay7j_C/linux-4.4.0/arch/x86/entry/vdso/vclock_gettime.cLinuxGNUp4pŧJ8t 2[;8lT||l$DzRx $#AC Y A D $DAP A A A DlvAC GU BBBA A  BBBA A 4bAC K BBBA A @AM F  @)AH _ UH1H H HH9w]H]f.UA{IHSAA?ADH= LHcHHH)HD1H N^H H+VHHxLHH AсA9u{D9rFHVt!HH9HC[]HH f.UHAVAUATSLm܉Ht{tE3HHHHV;yuH1[A\A]A^]`uHHHHV;AtD%4Au,EHNHL5FQ%1b D;%uLHH=ɚ;:1H-ʚ;H=ɚ;wHHFE܅4HcH[A\A]A^]ÅLmuD%AyEHHfL5{tV1 XD9%5uLHH=ɚ;1H-ʚ;H=ɚ;wHHFE܅QaH+H#H땋AH+H#HHuHuHuHu1LHuHuLHuHuwf.UHAVAUATSHHLmHD%*AEH8H L5 1 D;%uLHH=ɚ;H1HȃH6eHɚ;wEHHKHHS㥛 HHH?HH)HS1HuXH[A\A]A^]ËH+ZdH#UHYLHuHuHuAHunjV땸`H1G@f.UHHHtH]ÐU{HHt Ht 1]û0q&rqrGCC: (Ubuntu 5.3.1-14ubuntu2) 5.3.1 20160413.shstrtab.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_d.dynamic.rodata.note.eh_frame_hdr.eh_frame.text.altinstructions.altinstr_replacement.comment  @ o``H ^%o2o((8A``JppR<X44<fpp(p Iv4 0)-VH`HH5pyelftools-0.26/test/testfiles_for_unittests/empty_pubtypes/000077500000000000000000000000001357220457300247135ustar00rootroot00000000000000pyelftools-0.26/test/testfiles_for_unittests/empty_pubtypes/Makefile000066400000000000000000000000451357220457300263520ustar00rootroot00000000000000main: main: CFLAGS=-gpubnames -g -O0 pyelftools-0.26/test/testfiles_for_unittests/empty_pubtypes/main000077500000000000000000000230101357220457300255610ustar00rootroot00000000000000ELF>@@@8 @&#@@@@@88@8@@@ `` ( ((`(`TT@T@DDPtddd@d@44QtdRtd``/lib64/ld-linux-x86-64.so.2GNU GNUt]s,"rl b4ҩ  libc.so.6__libc_start_main__gmon_start__GLIBC_2.2.5ui ,``HH] Ht+H5R %T @%R h%" f1I^HHPTIP@H@H@fD7`UH-0`HHvHt]0`f]@f.0`UH0`HHHH?HHtHt ]0`]fD= uUHn] @ `H?uHtUH]zUH]AWAVAAUATL% UH- SIIL)HHHt 1LLDAHH9uH[]A\A]A^A_Ðf.HH;0L||Lr| zRx (*zRx $ FJ w?;*3$"DAC B DdeBBE B(H0H8M@r8A0A(B BBB@@ @ T@``o@@@ 8 `x@`@ o@@oo8@(`@GCC: (Ubuntu 5.4.0-6ubuntu1~16.04.11) 5.4.0 20160609,@G-mainC _f@@% B.?: ; @B5 main.c @JGNU C11 5.4.0 20160609 -mtune=generic -march=x86-64 -gpubnames -g -O0 -fstack-protector-strongmain.c/home/real/work/qemu/device_creator/src/debug/pyelftools/test/testfiles_for_unittests/empty_pubtypesmainG8@T@t@@@@8@@@ `@ x@ @ @ @@T@`@d@@`` `(``` `0` !"  `@P@.@D0`S`z@`@ ``(``d@`P@, p  `H0`&T@On `{ (``@@e8`t@*0`@ 0`  @crtstuff.c__JCR_LIST__deregister_tm_clones__do_global_dtors_auxcompleted.7594__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entrymain.c__FRAME_END____JCR_END____init_array_end_DYNAMIC__init_array_start__GNU_EH_FRAME_HDR_GLOBAL_OFFSET_TABLE___libc_csu_fini_ITM_deregisterTMCloneTable_edata__libc_start_main@@GLIBC_2.2.5__data_start__gmon_start____dso_handle_IO_stdin_used__libc_csu_init__bss_startmain_Jv_RegisterClasses__TMC_END___ITM_registerTMCloneTable.symtab.strtab.shstrtab.interp.note.ABI-tag.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.got.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.jcr.dynamic.got.plt.data.bss.comment.debug_aranges.debug_pubnames.debug_info.debug_abbrev.debug_line.debug_str.debug_pubtypes8@8#T@T 1t@t$Do@N @HV@8^o8@8ko@@@ z`@`Bx@x@@ @@rT@T `@`d@d4@`` ` (`(``  ` 0`0005 e0+G7-E$9Q0]\-l@%6 pyelftools-0.26/test/testfiles_for_unittests/empty_pubtypes/main.c000066400000000000000000000000171357220457300260010ustar00rootroot00000000000000void main() {} pyelftools-0.26/test/testfiles_for_unittests/exe_solaris32_cc.elf000066400000000000000000000145301357220457300254440ustar00rootroot00000000000000ELF44 (44o< < < < X X X/usr/lib/ld.so.1    !(.:NU ^ !f| X   <    ] <  8 H { x    $ exe_solaris32.elfcrti.scrt1.ocrt1.sfsr.svalues-Xa.cexe_solaris64.elf.ccrtn.s__xargc_environ_PROCEDURE_LINKAGE_TABLE__DYNAMIC___Argv_edata_etext_init__fsr_init_valuemain_GLOBAL_OFFSET_TABLE___xargv_lib_version_exitatexit__fpstart__fsr_start_end_fini__environ_lock__longdouble_usedlibc.so.1SYSVABI_1.367@   !H L P T 5@ %D %H h%L h%P h%T hjjRX th E u T RU   R PdP\juURQt`|$у  D$td$у`tƒ 3fd$f T$tfd$f L$l$YZ]ÐUjjEEUWVS[1[^_UWVS[[^_X 6   || L `\` ```@ocoo \\ oodo`o``>< |\|  \ |   8 < X    o u!(.  9E8 Th}  !| X   <    <  8 %H { +x 2 7 = L exe_solaris32.elfcrti.scrt1.ocrt1.sfsr.strap_tablevalues-Xa.cDrodata.rodataexe_solaris64.elf.ccrtn.s_END__START___xargc_environ_PROCEDURE_LINKAGE_TABLE__DYNAMIC___Argv_edata_etext_init__fsr_init_valuemain_GLOBAL_OFFSET_TABLE___xargv_lib_version_exitatexit__fpstart__fsr_start_end_fini__environ_lock__longdouble_usedanotate anotate X  Q anotate . Dacomp: Sun C 5.12 SunOS_i386 2011/11/16as: Sun Compiler Common 12.3 SunOS_i386 2011/11/16ld: Software Generation Utilities - Solaris Link Editors: 5.11-1.2276exe_solaris64.elf.c /home/yann/devel/pyelftools/test/testfiles /opt/solarisstudio12.3/prod/bin/cc exe_solaris64.elf.cXa;R=Sun C 5.12 SunOS_i386 2011/11/16;backend;raw;cd;DBG_GEN 5.3.3-' exe_solaris64.elf.c DD%.interp.SUNW_cap.SUNW_syminfo.hash.SUNW_ldynsym.dynsym.dynstr.SUNW_version.SUNW_versym.SUNW_dynsymsort.rel.plt.text.init.fini.rodata.got.dynamic.data.bssf.bss.symtab.strtab.annotate.comment.debug_info.debug_line.debug_abbrev.shstrtab ooBd!||'o\\ 5 ="||LEo So2`o@q B\\  u||Pz.    8 8 < < X X X  L     * ^o|p[1 pyelftools-0.26/test/testfiles_for_unittests/exe_solaris32_cc.sparc.elf000066400000000000000000000127641357220457300265620ustar00rootroot00000000000000ELF4 4 (44@@(/usr/lib/ld.so.1         +2 7@ !@ L T ]$b \0i o  u | h  0 _environ_etext_PROCEDURE_LINKAGE_TABLE_atexit_end_DYNAMIC__cg92_used__xargc__xargv_exit_edata_init_fini_start__fsr_init_value__environ_lock___Argv_lib_versionmainlibc.so.1SYSVABI_1.37̳$ 0  @"aD"a"a, @'က $+`-` `?-)!- =--% # @@5A@@2#@@ @@+@@,㿘'D'H@@ '  㿠 㿠00<0H0  @\  oٌo(o$tt$ ooXoo``@\(Ht     @ h w }#* 8D Sp    @ !   $ 0     h  ( 50 exe_solaris32_cc.elf.sparccrti.scrt1.s__crt_scratchvalues-Xa.cDrodata.rodataexe_solaris64_cc.elf.sparc.ccrtn.s_END__START__environ_etext_PROCEDURE_LINKAGE_TABLE_atexit_end_DYNAMIC__cg92_used__xargc__xargv_exit_edata_init_fini_start__fsr_init_value__environ_lock___Argv_lib_versionmainanotate anotate, ( L Tanotate@ 0XP@(#)stdlib.h 1.51 04/06/30 SMI@(#)stdlib_iso.h 1.9 04/09/28 SMI@(#)feature_tests.h 1.26 11/04/12 SMI@(#)ccompile.h 1.2 04/11/08 SMI@(#)isa_defs.h 1.30 11/03/31 SMI@(#)stdlib_c99.h 1.2 04/03/29 SMIacomp: Sun C 5.12 SunOS_sparc Patch 148917-04 2013/03/19ld: Software Generation Utilities - Solaris Link Editors: 5.10-1.1512exe_solaris64_cc.elf.sparc.c /home/yann/tmp /opt/solarisstudio12.3/prod/bin/cc exe_solaris64_cc.elf.sparc.cXa;R=Sun C 5.12 SunOS_sparc Patch 148917-04 2013/03/19;backend;raw;cd;DBG_GEN 5.3.360 exe_solaris64_cc.elf.sparc.c DD%.interp.SUNW_syminfo.hash.dynsym.dynstr.SUNW_version.SUNW_versym.rela.plt.text.init.fini.rodata.dynamic.data.bss.symtab.strtab.annotate.comment.debug_info.debug_line.debug_abbrev.shstrtab oBX@@ `%"\\-o(( ;oHH,HBtt$  R0X^ dMX l@@(u h h({  # :oL|J:! 7pyelftools-0.26/test/testfiles_for_unittests/exe_solaris64_cc.elf000066400000000000000000000216501357220457300254520ustar00rootroot00000000000000ELF> @@@8@ @@@@o@ @0 0 0 0 A88` ` APdd@/usr/lib/amd64/ld.so.1 ; 8x   $ @*AC     ")0<PWA`0 @g @ @hA` ADAX!A@A8A @hA @M @  @! @! @A, @ 0A @*exe_solaris64.elfcrti.scrt1x.ocrt1.sfsrx.svalues-Xa.cexe_solaris64.elf.ccrtn.s_environ_etext_PROCEDURE_LINKAGE_TABLE_atexit_end_DYNAMIC__longdouble_used__xargc__xargv_exit_edata__fsr_init_fini_start__fsr_init_value__environ_lock_lib_version___Argvmainlibc.so.1SUNW_0.7(= " H A P A X A5%%h%h%hjjHHH` AHtH @HEH %AHu HL H %AHRHUH%0AH%8AQR%@AP _^ZYuPPHK__THAAAtf<$EAAHA $At$$EA`tA D3Af$$fD $AtAAf$$fD $,$A$EAAAHAAt%%!$EAA@D3A$$D $EAD $At $t $@$HUH3HHH#H<$$L$t @tH]ÐUHH }HuEEUHSATAUAVAWPHA_A^A]A\[UHSATAUAVAWPHA_A^A]A\[` A @ @ @ @  @@x@ +P@ `x@``` @`<oo @oH8 @8 @H oX@o\o`@o``>0 A@@@@X@@x@P@ x@ @ @ @ 8 @ @ @ @ @, @0 A` AAhAhAqhAw@")0HA ;G, @VjA0 @ @ @hA` ADA!A@A8A @hA @M @  @! @! @A&, @30A; @*exe_solaris64.elfcrti.scrt1x.ocrt1.sfsrx.strap_tablevalues-Xa.cDrodata.rodataexe_solaris64.elf.ccrtn.s_END__START__environ_etext_PROCEDURE_LINKAGE_TABLE_atexit_end_DYNAMIC__longdouble_used__xargc__xargv_exit_edata__fsr_init_fini_start__fsr_init_value__environ_lock_lib_version___Argvmainanotate anotateP H @ @` A @ @S @ @anotate8 @: @*PDacomp: Sun C 5.12 SunOS_i386 2011/11/16as: Sun Compiler Common 12.3 SunOS_i386 2011/11/16ld: Software Generation Utilities - Solaris Link Editors: 5.11-1.2276exe_solaris64.elf.c /home/yann/devel/pyelftools/test/testfiles /opt/solarisstudio12.3/prod/bin/cc -m64 exe_solaris64.elf.cXa;R=Sun C 5.12 SunOS_i386 2011/11/16;backend;raw;cd;DBG_GEN 5.3.31' exe_solaris64.elf.c DD%.interp.SUNW_cap.eh_frame_hdr.eh_frame.SUNW_syminfo.hash.SUNW_ldynsym.dynsym.dynstr.SUNW_version.SUNW_versym.SUNW_dynsymsort.rela.plt.text.init.fini.rodata.got.dynamic.data.bssf.bss.symtab.strtab.annotate.comment.debug_info.debug_line.debug_abbrev.shstrtab@ o@ p@!p@@+oBX@X\9@?ox@x M P@P( U"x@x+]o @ ko @ .xo @ <B8 @8 H @ @ @  @ ! @ !, @, 0 A0 0` A`  AXhAhhAhh0, @oQ4=q pyelftools-0.26/test/testfiles_for_unittests/exe_solaris64_cc.sparc.elf000066400000000000000000000172001357220457300265550ustar00rootroot00000000000000ELF+@@@8@@@XX   ht  P/usr/lib/sparcv9/ld.so.1     8     + 2 t7 ! 8@ pH hQ V hP ]  pc  i Dp @   `  @,_environ_etext_PROCEDURE_LINKAGE_TABLE_atexit_end_DYNAMIC__xargc__xargv_exit_edata_init_fini_start__fsr_init_value__environ_lock_lib_version___Argvmainlibc.so.1SUNW_0.7 =(    [`+p @ "ap`+p @ rah`+p @ ra`, @`+p ' \8 t8+``+p ) -`-!X `?-!X =--%!X !X#0@j`+p  @c!@@ @c@i0'w@U  ' < PP0o0o0o  p    oo@oHH oxoToo``+ Xx@`   p        8 hw t}#* X8D  Sp 8      t ! 8 p h  h   p   D @  ! `)  @,exe_solaris64_cc.elf.sparccrti.scrt1.s__crt_scratchvalues-Xa.cDrodata.rodataexe_solaris64_cc.elf.sparc.ccrtn.s_END__START__environ_etext_PROCEDURE_LINKAGE_TABLE_atexit_end_DYNAMIC__xargc__xargv_exit_edata_init_fini_start__fsr_init_value__environ_lock_lib_version___Argvmainanotate anotate h l " # $ anotate8 (D @,XP@(#)stdlib.h 1.51 04/06/30 SMI@(#)stdlib_iso.h 1.9 04/09/28 SMI@(#)feature_tests.h 1.26 11/04/12 SMI@(#)ccompile.h 1.2 04/11/08 SMI@(#)isa_defs.h 1.30 11/03/31 SMI@(#)stdlib_c99.h 1.2 04/03/29 SMIacomp: Sun C 5.12 SunOS_sparc Patch 148917-04 2013/03/19ld: Software Generation Utilities - Solaris Link Editors: 5.10-1.1512exe_solaris64_cc.elf.sparc.c /home/yann/tmp /opt/solarisstudio12.3/prod/bin/cc -m64 exe_solaris64_cc.elf.sparc.cXa;R=Sun C 5.12 SunOS_sparc Patch 148917-04 2013/03/19;backend;raw;cd;DBG_GEN 5.3.3:0 exe_solaris64_cc.elf.sparc.c DD%.interp.SUNW_syminfo.hash.dynsym.dynstr.SUNW_version.SUNW_versym.rela.plt.text.init.fini.rodata.dynamic.data.bss.symtab.strtab.annotate.comment.debug_info.debug_line.debug_abbrev.shstrtabXX oBxxT %"-o@@ ;o``*HBH R X p p^ d M  l Pu 8 80{ h h  h(# .oJ" FR hpyelftools-0.26/test/testfiles_for_unittests/lambda.elf000077500000000000000000000556401357220457300235470ustar00rootroot00000000000000ELF> @@R@8 @$#@@@@@88@8@@@x x  ` `  ` `TT@T@ Ptd @ @TTQtdRtd ` `((/lib64/ld-linux-x86-64.so.2GNU   C)ELO7 ``@libstdc++.so.6__gmon_start___ZNSt8ios_base4InitD1Ev_ZNSt8ios_base4InitC1Ev_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc_ZSt4cout_ZNSolsEilibm.so.6libgcc_s.so.1libc.so.6__cxa_atexitrand__libc_start_mainGLIBCXX_3.4GLIBC_2.2.5 t)ui #```` ` `(`0`8`@`H` HH HtH5 % @% h% h% h% h% h% h% hUHHHq`H@Hq`HX`fEH]f.UH]D1I^HHPTI @H0 @H@ Df.@U``H=``HtHt ]``D]fD``UH``HHHH?HHtHt ]``]fD= uUH~ ]D@f.UH]fUHH E}HuEdEEH}1H ]fDUHH0H}H}H``H}HH @Hu6HHǾ HE/H``H @HǾ HE*H``H @cHǾ fHEH0]f.fAWAVIAUATL% UH- SAIL)HHHt 1LLDAHH9uH[]A\A]A^A_Ðf.HHx=foobar;T P8`pPpXzRx +zRx $0FJ w?;*3$"X CAC ~ xPJAC E AC   AC F DeBBE B(H0H8M@r8A0A(B BBB 8@@@ @ @ ` `ox@@@ / `x@0@H o@oo@ `V@f@v@@@@@GCC: (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0clang version 7.0.0-3~ubuntu0.18.04.1 (tags/RELEASE_700/final)U<std::__exception_ptrstd::__debugmainmain::operator()/std::__ioinit __gnu_cxx*stdu__cxx_global_var_init__gnu_debugQE ?DMJ q`HYQLaj^b]e^e 4j |       $ 5         1 H z        4 O a  O         ! N7 7 @        - E ] o {      2 O g ~    ( ? V r       & A \ w      ' C ^ p nj Ȩ      2 H ^ y       !? %y & '" $O2[ Q$S [ FxUV X[ $`$b $e $i Bv LBz y ^6 I K 9UE  0 1 2< 3R 5h 6s 7~ 8 : ; < = ? @ B C D E1 GG HR I] Jh Ls M~ N O Q R 5 6 7 @ A B  C D/ E@ FQ Gb Hs I J K L Wm E b c e f g h1 iC jT kf l m n o p q r* sE t] uy v w x y | ~  # : L ^ o          & = Y p      !R !S. !T !V9 !WJ !Y[ ![l !\} !] !^ !_ !` !a !b !c !d  !e !f1 !gB !hS !idW] MEW Ww>vFBDElLPW UW  e   !  hW  k  1[ \ \ b b t "a #m >$ % %W \ \ [ b b Q| W W&f W'3 [ w   F S  [ b W  b b d u b (i n  ( W d u b '; [ b b t &l W)+W"%[ [ b '*  0u u  (  7 u  W >m u  WF W  Mb } b ( (  !n VW n ] O  ҍ ؟     ! O x x y   ,R -]     Z uPLx Nx Og&}r WIx x WO x x px  x u  W  u  W { u   ~7 u   & ' ( + . 3| 4 6 7 8 9$ :5 ; < = > ? @ A C1 DH Ez G H I J K L M4 NO Pa Q )0 4.  W Q *   p + ,|- :   WA  Q.HX i d W (_  n f W m =W  W DW  / mW  /B  )s | 3b u b ( (b d u b  $W ! Qb d  b ( `  n   n  NW d b / wW /    VW  01 1 1[ 1[  W   cW d b   W  ^W  W ' -b } n  / ai d 6 jW = W E Wi d L b T Cb d b ( !.] ` b g ei d b o mW b w \i d b  Wb }  b (  b  y (i  ~   i d    W m  W  b d b  W  W b  i d b  i i b  i i n b  KW / tW /  i n  i  i n  i  i n b   7  x  W   W!2342!5: $*5& GW(]+2D?FMG[Hi+5w,W-/o=a% '& )<(m &,1Qm >Sm LTm ZUh6v7 8m :pm >m d. z W  6} lW W mW W nW W oW W qW W pW W rW W sW W tW W uW W $vW W -zW W 5}W W =W WLRNO'Y  bW iW nW  uW |W W } ( (4 } W }   u u  8W } u /W W rW u }b % b b }([   u u }7 yW } u /W   WW  ! b  b b }(\ }W )WA '   >W u /W W  W WxW  W  W   ' 8 W u /'" } } &W } } W b . @W } u /P W u u /6      W W  GW } u % MW u - OW } u F TW } b u /6 W } u > W u E XW } b u O W u u $W 0)!Gm a "& j "_W  s "eW  | "W  "hW  "W  . "lW  "pW  "uW  "xW  "}W  "W  "W  "W  7   "  "  4  ".  7@CV J8@JV #W9xP #W9pU #:l#W;C@:hZ #<#W# # !=`@V/" >xa O?@ V6 %BU94I: ; n<6  : ; I: ;?<.: ;<?2 I4 : ;  .n: ; I<? I : ; 6  : ;  I: ; 8 .: ; <?c.n: ; <?.: ; <?2 .n: ; I<?2 .n: ; <?2 .n: ; I<?2 cI: ; <.n: ; <?9$> I.: ;I<?<6 : ; .: ;<? .: ; I<?!&I"#&$I: ;%I&.: ;<?'.: ;<?(7I).: ;I<?*6 : ; +I,!I7 -$ > .</06  1 I8 2I3;4BI5:: ; 6.: ; I<?7.@: ; 8.@: ; I?9: ; I:4: ; I; <6 : ; =.@dnG>I4?.@n4~ /usr/bin/../lib/gcc/x86_64-linux-gnu/7.4.0/../../../../include/x86_64-linux-gnu/c++/7.4.0/bits/usr/bin/../lib/gcc/x86_64-linux-gnu/7.4.0/../../../../include/c++/7.4.0/bits/usr/bin/../lib/gcc/x86_64-linux-gnu/7.4.0/../../../../include/c++/7.4.0/usr/include/usr/include/clang/7.0.0/include/usr/include/x86_64-linux-gnu/bits/types/usr/bin/../lib/gcc/x86_64-linux-gnu/7.4.0/../../../../include/c++/7.4.0/debug/usr/include/x86_64-linux-gnu/bits/usr/bin/../lib/gcc/x86_64-linux-gnu/7.4.0/../../../../include/c++/7.4.0/extatomic_word.hios_base.hiostreamstdlib.hstd_abs.hcstdlibstddef.hstdlib.h__mbstate_t.hmbstate_t.hcwcharwint_t.hwchar.h__FILE.hexception_ptr.hc++config.hdebug.htypes.hstdint-intn.hcstdintstdint.hstdint-uintn.hclocalelocale.hctype.hcctypenew_allocator.h FILE.hcstdio_G_config.hstdio.hwctype.hcwctypewctype-wchar.hlambda.cpp @ #H J# @ Yvg< <p.u f <gclang version 7.0.0-3~ubuntu0.18.04.1 (tags/RELEASE_700/final)/tmpstdios_base_S_refcount_Atomic_word_S_synced_with_stdio~Init_ZStL8__ioinitquotremabortatexitat_quick_exitatofatoiatolbsearchsize_t__compar_fn_tcallocfreegetenvmallocmblenmbstowcswchar_tmbtowcqsortreallocsrandstrtodstrtolstrtoulsystemwcstombswctomb__gnu_cxxlong long intlldiv_t_Exitllabslldivatollstrtollstrtoulllong long unsigned intstrtoffloatstrtoldlong double_ZN9__gnu_cxx3divExx_ZSt3abse__count__value__wch__wchb__ARRAY_SIZE_TYPE____mbstate_twint_tfgetwc_IO_FILE__FILEfgetwsfputwcfputwsfwidegetwcharmbrlenmbrtowcmbsinitmbsrtowcsputwcharungetwcvfwprintfgp_offsetfp_offsetoverflow_arg_areareg_save_area__va_list_tagvfwscanfvswprintfvswscanfvwprintfvwscanfwcrtombwcscatwcscmpwcscollwcscpywcscspnwcsftimetmwcslenwcsncatwcsncmpwcsncpywcsrtombswcsspnwcstodwcstofwcstokwcstolwcstoulwcsxfrmwctobwmemcmpwmemcpywmemmovewmemsetwcschrwcspbrkwcsrchrwcsstrwmemchrwcstoldwcstollwcstoull__exception_ptr_M_exception_object_ZNSt15__exception_ptr13exception_ptr9_M_addrefEv_M_addref_ZNSt15__exception_ptr13exception_ptr10_M_releaseEv_M_release_ZNKSt15__exception_ptr13exception_ptr6_M_getEv_M_getdecltype(nullptr)nullptr_t_ZNSt15__exception_ptr13exception_ptraSERKS0_operator=_ZNSt15__exception_ptr13exception_ptraSEOS0_~exception_ptr_ZNSt15__exception_ptr13exception_ptr4swapERS0_swap_ZNKSt15__exception_ptr13exception_ptrcvbEvoperator bool_ZNKSt15__exception_ptr13exception_ptr20__cxa_exception_typeEv__cxa_exception_typetype_info_ZSt17rethrow_exceptionNSt15__exception_ptr13exception_ptrErethrow_exception__gnu_debug__debug__int8_t__int16_t__int32_t__int64_t__intmax_tunsigned char__uint8_tunsigned short__uint16_t__uint32_t__uint64_tuint_fast8_tuint_fast16_tuint_fast32_tuint_fast64_tuint_least8_tuint_least16_tuint_least32_tuint_least64_t__uintmax_tuintptr_tlconvsetlocalelocaleconvisalnumisalphaiscntrlisdigitisgraphislowerisprintispunctisspaceisupperisxdigittolowertoupperisblankptrdiff_t_G_fpos_tclearerrfclosefeofferrorfflushfgetcfgetposfgetsfopenfputcfputsfreadfreopenfseekfsetposftellfwritegetcharperrorputcharremoverenamerewindsetbufsetvbuftmpfiletmpnamungetcvfprintfvprintfvsprintfvfscanfvscanfvsnprintfvsscanfwctrans_twctype_tiswalnumiswalphaiswblankiswcntrliswctypeiswdigitiswgraphiswloweriswprintiswpunctiswspaceiswupperiswxdigittowctranstowlowertowupperoperator()__cxx_global_var_initmain_ZZ4mainENK3$_0clEv_GLOBAL__sub_I_lambda.cppargcargvlambdathisUstd::nullptr_t<int32_tintmax_t]__int64_tRuint_fast16_thint_fast8_tuint8_t^boolRstd::size_tfpos_tsint_fast16_twint_twctrans_tm long unsigned intuint16_tlong intdecltype(nullptr)int_least32_tFILE<__uint64_t__intmax_t*__int16_tt __compar_fn_tRint64_tuintptr_t7 long doubleO lldiv_t5shortuint_least32_tintptr_t __uint16_t__FILEint_least64_t)__mbstate_tldiv_t]std::ptrdiff_tint16_t]uint_fast32_t unsigned intn wchar_tWintb size_t~int_fast32_tuint_least64_t|div_tL_Atomic_wordsigned charstd::__exception_ptr::exception_ptr__uintmax_tdoubleint8_tint_least16_t charG__int32_tuint32_tmbstate_tsuint_least8_tGuint_fast8_t long long unsigned int__uint8_thuint_fast64_tx long long int__va_list_tagunsigned shortint_least8_t.wctype_t_G_fpos_t~uint_least16_t __int8_tint_fast64_t float&__uint32_tuintmax_tunsigned char1uint64_t@@@@@$ @8@T@x@@@@@0@ x@ @ @@ @ @ @ @ @ ` ` ```P```  @ q`* `@> @CT_ `@a @t @p` ` @ `Tt @ @  ` `& `9`O``Vh P`h @w @J|X` @ P@l @+N @`` O``fP`!x`s`` 0 @e @ @_GLOBAL__sub_I_lambda.cpp_ZStL8__ioinit_ZZ4mainENK3$_0clEv__cxx_global_var_initcrtstuff.cderegister_tm_clones__do_global_dtors_auxcompleted.7697__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entry__FRAME_END____GNU_EH_FRAME_HDR_DYNAMIC__init_array_end__init_array_start_GLOBAL_OFFSET_TABLE__edatarand@@GLIBC_2.2.5_IO_stdin_usedmain__dso_handle_dl_relocate_static_pie__cxa_atexit@@GLIBC_2.2.5_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@@GLIBCXX_3.4__TMC_END___ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c@@GLIBCXX_3.4_ZSt4cout@@GLIBCXX_3.4__data_start__bss_start_ZNSt8ios_base4InitC1Ev@@GLIBCXX_3.4__libc_csu_init_ZNSolsEi@@GLIBCXX_3.4__libc_csu_fini__libc_start_main@@GLIBC_2.2.5__gmon_start___ZNSt8ios_base4InitD1Ev@@GLIBCXX_3.4.symtab.strtab.shstrtab.interp.note.ABI-tag.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.dynamic.got.got.plt.data.bss.comment.debug_pubnames.debug_info.debug_abbrev.debug_line.debug_str.debug_macinfo.debug_pubtypes.debug_ranges8@8#T@T 1ox@x(; @C@/Ko@Xo@@g0@0HqBx@x{ @ v@@@@ @  @  @ T @ ` `  `  ` ``PP`P``` 0`j{U /$2&0v7f 1A@APeF@Fh"6 N.>Q^pyelftools-0.26/test/testfiles_for_unittests/lib_versioned64.so.1.elf000066400000000000000000000207301357220457300260710ustar00rootroot00000000000000ELF>@x@8@D D    $$Ptdt t t ,,QtdRtd @@GNUJC)QkLQYcA_O  1 BEĆ(ck|AXqXAXĆ(ckĆAX   a 8 R"H  P  H   u  < ! __gmon_start___init_fini_ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalize_Jv_RegisterClassesfunction1_ver1_0putsfunction1_ver1_1function2strlcatgzoffset__stack_chk_failfunction1libz.so.1libc.so.6_edata__bss_start_endlib_versioned.so.1VER_1.0VER_1.1VER_1.2ZLIB_1.2.3.5GLIBC_2.4GLIBC_2.2.5&@$ A$ $B$ ! 5)ii 6ui @ `  @ @           ( 0 8  HoH5 % @% h% h% h% h% hHHE HtHfH H= UH)HHw]H Ht]@Ha H=Z UH)HHHH?HHHu]H Ht]@=! u'H= UHt H= =h] fffff.H=h tHw HtUH=R H]WRfUHH=]UHH=]UHH@dH%(HE1EfuncEtionHEHEEfEHEкH5kHǸ=E̿PEHUdH3%(t)HHfunction1 version 1.0function1 version 1.12;(Dl.@zRx $p`FJ w?;*3$"DAC M dAC M AC  `   <   oP L  x oooooo FVfv@ GCC: (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_d.gnu.version_r.rela.dyn.rela.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.jcr.dynamic.got.got.plt.data.bss.comment$.o`8 PP@@LHo0UodoPs}x 00`< < E E .t t ,      ( @@ @H H0H*r`. P   0  < E t        @ H D T_ l   H   `  T@ - 9@ F OH [ q  H  <   ) :P ? IH U h | " /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crti.ocall_gmon_startcrtstuff.c__JCR_LIST__deregister_tm_clonesregister_tm_clones__do_global_dtors_auxcompleted.6744__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entrylib_versioned.elf.c__FRAME_END____JCR_END____dso_handle_DYNAMIC__TMC_END___GLOBAL_OFFSET_TABLE_function1_ver1_0_ITM_deregisterTMCloneTableputs@@GLIBC_2.2.5_edatastrlcat_fini__stack_chk_fail@@GLIBC_2.4function1@VER_1.2VER_1.2VER_1.0__gmon_start__gzoffset@@ZLIB_1.2.3.5function1_ver1_1_endfunction2__bss_startfunction1@@VER_1.0_Jv_RegisterClasses_ITM_registerTMCloneTableVER_1.1__cxa_finalize@@GLIBC_2.2.5_initpyelftools-0.26/test/testfiles_for_unittests/lib_with_two_dynstr_sections.so.1.elf000077500000000000000000000211401357220457300310760ustar00rootroot00000000000000ELF>@@8@D D    $$Ptdt t t ,,QtdRtd @@GNUJC)QkLQYcA_O  1 BEĆ(ck|AXqXAXĆ(ckĆAX   a 8 R"H  P  H   u  < ! __gmon_start___init_fini_ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalize_Jv_RegisterClassesfunction1_ver1_0putsfunction1_ver1_1function2strlcatgzoffset__stack_chk_failfunction1libz.so.1libc.so.6_edata__bss_start_endlib_versioned.so.1VER_1.0VER_1.1VER_1.2ZLIB_1.2.3.5GLIBC_2.4GLIBC_2.2.5&@$ A$ $B$ ! 5)ii 6ui @ `  @ @           ( 0 8  HoH5 % @% h% h% h% h% hHHE HtHfH H= UH)HHw]H Ht]@Ha H=Z UH)HHHH?HHHu]H Ht]@=! u'H= UHt H= =h] fffff.H=h tHw HtUH=R H]WRfUHH=]UHH=]UHH@dH%(HE1EfuncEtionHEHEEfEHEкH5kHǸ=E̿PEHUdH3%(t)HHfunction1 version 1.0function1 version 1.12;(Dl.@zRx $p`FJ w?;*3$"DAC M dAC M AC  `   <   oP L  x oooooo FVfv@ GCC: (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2fake .dynstr sectionfake .dynstr section.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_d.gnu.version_r.rela.dyn.rela.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.jcr.dynamic.got.got.plt.data.bss.comment.dynstr2$.o`8 PP@@LHo0UodoPs}x 00`< < E E .t t ,      ( @@ @H H0H*@r, (x/ P   0  < E t        @ H D T_ l   H   `  T@ - 9@ F OH [ q  H  <   ) :P ? IH U h | " /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crti.ocall_gmon_startcrtstuff.c__JCR_LIST__deregister_tm_clonesregister_tm_clones__do_global_dtors_auxcompleted.6744__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entrylib_versioned.elf.c__FRAME_END____JCR_END____dso_handle_DYNAMIC__TMC_END___GLOBAL_OFFSET_TABLE_function1_ver1_0_ITM_deregisterTMCloneTableputs@@GLIBC_2.2.5_edatastrlcat_fini__stack_chk_fail@@GLIBC_2.4function1@VER_1.2VER_1.2VER_1.0__gmon_start__gzoffset@@ZLIB_1.2.3.5function1_ver1_1_endfunction2__bss_startfunction1@@VER_1.0_Jv_RegisterClasses_ITM_registerTMCloneTableVER_1.1__cxa_finalize@@GLIBC_2.2.5_initpyelftools-0.26/test/testfiles_for_unittests/lib_with_two_dynstr_sections_reversed.so.1.elf000077500000000000000000100114201357220457300327760ustar00rootroot00000000000000ELF>@X @8@D D    $$Ptdt t t ,,QtdGNUJC)QkLQYcA_O  1 BEĆ(ck|AXqXAXĆ(ckĆAX   a 8 R"H  P  H   u  < ! &@$ A$ $B$ ! 5)ii 6ui @ `  @ @           ( 0 8  HoH5 % @% h% h% h% h% hHHE HtHfH H= UH)HHw]H Ht]@Ha H=Z UH)HHHH?HHHu]H Ht]@=! u'H= UHt H= =h] fffff.H=h tHw HtUH=R H]WRfUHH=]UHH=]UHH@dH%(HE1EfuncEtionHEHEEfEHEкH5kHǸ=E̿PEHUdH3%(t)HHfunction1 version 1.0function1 version 1.12;(Dl.@zRx $p`FJ w?;*3$"DAC M dAC M AC  `   <   oP L  x oooooo FVfv@ GCC: (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2fake .dynstr sectionfake .dynstr section__gmon_start___init_fini_ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalize_Jv_RegisterClassesfunction1_ver1_0putsfunction1_ver1_1function2strlcatgzoffset__stack_chk_failfunction1libz.so.1libc.so.6_edata__bss_start_endlib_versioned.so.1VER_1.0VER_1.1VER_1.2ZLIB_1.2.3.5GLIBC_2.4GLIBC_2.2.5.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.gnu.version.gnu.version_d.gnu.version_r.rela.dyn.rela.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.jcr.dynamic.got.got.plt.data.bss.comment.dynstr2.dynstr$.o`8 PP@@o0Mo\oPkux z00`< < E E .t t ,      ( @@ @H H0H*r, LL  x/ P P  0  <  E t        @ H D T_ l   H   `  T@ - 9@ F OH [ q  H  <   ) :P ? IH U h | " /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crti.ocall_gmon_startcrtstuff.c__JCR_LIST__deregister_tm_clonesregister_tm_clones__do_global_dtors_auxcompleted.6744__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entrylib_versioned.elf.c__FRAME_END____JCR_END____dso_handle_DYNAMIC__TMC_END___GLOBAL_OFFSET_TABLE_function1_ver1_0_ITM_deregisterTMCloneTableputs@@GLIBC_2.2.5_edatastrlcat_fini__stack_chk_fail@@GLIBC_2.4function1@VER_1.2VER_1.2VER_1.0__gmon_start__gzoffset@@ZLIB_1.2.3.5function1_ver1_1_endfunction2__bss_startfunction1@@VER_1.0_Jv_RegisterClasses_ITM_registerTMCloneTableVER_1.1__cxa_finalize@@GLIBC_2.2.5_initpyelftools-0.26/test/testfiles_for_unittests/obj_stabs.S000066400000000000000000000002121357220457300237070ustar00rootroot00000000000000# gcc -c -o obj_stabs.o obj_stabs.S .stabs "label", 0x95, 0xc8, 0x4072, 0xdeadbeef .stabs "another label", 0x41, 0x66, 0xf9b1, 0xcafebabe pyelftools-0.26/test/testfiles_for_unittests/obj_stabs.elf000066400000000000000000000016301357220457300242600ustar00rootroot00000000000000ELF>X@@ ! r@ᆳAfobj_stabs.Slabelanother label.symtab.strtab.shstrtab.text.data.bss.stab.stabstr@!@'@,@$2d!; Ppyelftools-0.26/test/testfiles_for_unittests/sample_exe64.elf000066400000000000000000000300551357220457300246110ustar00rootroot00000000000000ELF>@@0@8 @*'@@@@@88@8@@@ `` @@`@`TT@T@\\Ptd  @ @$$QtdRtd``/lib64/ld-linux-x86-64.so.2GNUSuSESuSE GNUPͨYIĪ- I} __gmon_start__libc.so.6__libc_start_mainGLIBC_2.2.5ui ,``HcH5 % @% h1I^HHPTI @H0@H@HH HtHÐUHSH= uK0`H H-(`HHXH9s%HBH (`H H9rs H[fff.UH=o HtHt8`IA@ÐUH}HuHE‹   EÐfffff.Hl$L|$H- L= Ld$Ll$Lt$H\$H8L)AIHIKHt1@LLDAHH9rH\$Hl$Ld$Ll$ Lt$(L|$0H8ÐUHSHHH Ht`DHHHuH[ÐHOH; <t$zRx @+AC zRx $4Jf@ @ @@o@0@@ 8 `@@ op@ooh@@`@ospwGGCC: (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973],@*,@+, @!wo_IO_stdin_used -mainglob60M__libc_csu_finii__libc_csu_inits@*@../sysdeps/x86_64/elf/start.S/usr/src/packages/BUILD/glibc-2.11.1/csuGNU AS 2.20.0~%,@,@agiNintupX @W_~z.c@@o@@oolv`int|po `,~% @@u?int @"@wj0@@LiFiiz i{4'  p 4 F ; =%% $ > $ > $ > 4: ; I?  &I% .? : ; ' I@: ; I $ >  I$ > 4: ; I?  % $ > : ; I$ > .? : ; ' @ .? : ; ' @: ; I4: ; I U 4: ; I  I &I I!' I4: ; I? < ]4 ../sysdeps/x86_64/elfstart.S @.>!>L$ uvx[# init.c5 z.c @KZ /usr/lib64/gcc/x86_64-suse-linux/4.3/includeelf-init.cstddef.h  @^oto<foJ<[ǒ#x @+AC x 8 @$80@Jf@long unsigned intshort unsigned int/usr/src/packages/BUILD/glibc-2.11.1/csushort int_IO_stdin_usedunsigned charlong intGNU C 4.3.4 [gcc-4_3-branch revision 152973]argv/tmp/ebendersglobargcmainsize_tenvp__libc_csu_initelf-init.c__init_array_startsize__init_array_end__libc_csu_finiww+v@w@wUUU^UTU]UQU\\{S(UvIM@C.symtab.strtab.shstrtab.interp.note.ABI-tag.note.SuSE.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.ctors.dtors.jcr.dynamic.got.got.plt.data.bss.comment.SUSE.OPTs.comment.debug_aranges.debug_pubnames.debug_info.debug_abbrev.debug_line.debug_frame.debug_str.debug_loc.debug_ranges8@8#T@T 1t@t<@$S@Oo@Y @Ha0@08ioh@hvop@p @@@@ @@@ @ $0@0`(`(8`8@`@`` ` `00"9`+;sGEUWa@n0-yJGP&)> 0.8@T@t@@@@@0@ h@ p@ @ @ @@@@@ @0@`(`8`@```` ` !"#$%&,@#.`<(`J8`WP@m `|(`@# `@8`@`` `@`% `0 @@@G`L [ o@u@``0`0@`0``@+ @init.cinitfini.ccall_gmon_startcrtstuff.c__CTOR_LIST____DTOR_LIST____JCR_LIST____do_global_dtors_auxcompleted.6159dtor_idx.6161frame_dummy__CTOR_END____FRAME_END____JCR_END____do_global_ctors_auxz.celf-init.c_GLOBAL_OFFSET_TABLE___init_array_end__init_array_start_DYNAMICdata_start__libc_csu_fini_startglob__gmon_start___Jv_RegisterClasses_fini__libc_start_main@@GLIBC_2.2.5_IO_stdin_used__data_start__dso_handle__DTOR_END____libc_csu_init__bss_start_end_edatamain_initpyelftools-0.26/test/testfiles_for_unittests/simple_gcc.elf.arm000066400000000000000000001040131357220457300251740ustar00rootroot00000000000000ELF(44 (  -L(Ko/0 R  /$@-0S 0S/@/- M  0Ћ/ -L(Ko/4GCC: (Sourcery G++ Lite 2010.09-51) 4.5.1A/aeabi%ARM7TDMI-S ,.symtab.strtab.shstrtab.init.text.fini.init_array.fini_array.jcr.data.bss.comment.ARM.attributes!x'-9EJPU0*^p0n  # І;   05D4k4`whh( ' $acrtstuff.c__JCR_LIST__$d__do_global_dtors_auxcompleted.4946__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entrymain.c__JCR_END___bss_end____bss_start____dso_handle_init__bss_end___start__bss_startmain__end___fini_edata_end_stack__data_start_Jv_RegisterClassespyelftools-0.26/test/testfiles_for_unittests/simple_gcc.elf.mips000066400000000000000000000053201357220457300253660ustar00rootroot00000000000000ELF4('Я,($ !00 $ @!0 @! "!b!$B0b*@!,($ '00 | <0  cMfoo __v _x_hi_lint% .?: ; 'I@B: ; I4: ; I$ > d /home/kvo/sources/pyelftools-gh/test/testfiles_for_readelfgcc48-simple.src.c HvK GNU C 4.8.3 -msoft-float -mllsc -mplt -mno-shared -g -O0 -fno-dwarf2-cfi-asm/home/kvo/sources/pyelftools-gh/test/testfiles_for_readelf/gcc48-simple.src.cGCC: (OpenWrt/Linaro GCC 4.8-2014.04 r42955) 4.8.3Agnu.symtab.strtab.shstrtab.rel.text.data.bss.reginfo.rel.pdr.mdebug.abi32.rel.debug_frame.rel.debug_info.debug_abbrev.rel.debug_aranges.rel.debug_line.debug_str.comment.note.GNU-stack.gnu.attributes@ H(%+0p=( 9 pBHTpHPP x epga 0 qpWpV  pv p0 04o@  [   OSW/home/kvo/sources/pyelftools-gh/test/testfiles_for_readelf/gcc48-simple.src.cfoobarbaz 0<L\   ,qpyelftools-0.26/test/testfiles_for_unittests/simple_mipsel.c000066400000000000000000000003761357220457300246360ustar00rootroot00000000000000/* Generated by compiling with any GCC version for MIPS Little Endian. ** GCC 5.4.0 is fine. /usr/bin/mipsel-linux-gnu-gcc -g -O0 ./simple_mipsel.c -o ./simple_mipsel.elf */ void main(void) { int a = 1, b = 2, res; res = a + b; return; } pyelftools-0.26/test/testfiles_for_unittests/simple_mipsel.elf000077500000000000000000000213641357220457300251650ustar00rootroot00000000000000ELF@44 ('$44@4@``@@ p@@p@@@@\ \ AAx@@@@ @@$$RtdAA/lib/ld.so.1GNUAGNUkE&\5 @  @@@D@ pA5p  Appp@ p p p$po@oo@    @ T @A@ .@D @ ^ x !@3"B __libc_csu_init__libc_csu_fini__libc_start_main__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable_Jv_RegisterClasseslibc.so.6_DYNAMIC_LINKING__RLD_MAP_IO_stdin_usedGLIBC_2.0ii <'!'H@% H % B<'$<9'vB<'$9' '%% B<'%'$$' D % % % % A ,,#P @%1&%0%( % `2&40,($ 8'% % A<$y"' $p$$ &1$ ('%x  $<'!'B<'$9'R '@@@@@A@GCC: (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609@@@?8@@DeY B@DT@Daa alb apres atint% .?: ; '@B4: ; I$ > ?( .simple_mipsel.c@K | @DDDD h H/home/dimas/ISP/qdt/debug/pyelftools/test/testfiles_for_unittests./simple_mipsel.cmainGNU C11 5.4.0 20160609 -mel -march=mips2 -mtune=mips32r2 -mfpxx -mllsc -mips2 -mno-shared -mabi=32 -g -O0 -fstack-protector-strongAgnu@@@@@@@D@@ @ @ @ @ @ @T @X @AAAAA A`ApA !"#V@ ZeAsAA@ @@ @ pAtA<@ ZAX @A @ 1@>AO@XA_Ak@ { A!dAu @AA"`AT @A@A"@ JA2dA>@D CL@ Tc@ j ~A AdA ,@ /usr/lib/gcc-cross/mipsel-linux-gnu/5/../../../../mipsel-linux-gnu/lib/../lib/crt1.ohltcrtstuff.c__CTOR_LIST____DTOR_LIST____JCR_LIST__deregister_tm_clones__do_global_dtors_auxcompleted.6840dtor_idx.6842frame_dummy__CTOR_END____FRAME_END____JCR_END____do_global_ctors_aux./simple_mipsel.c_MIPS_STUBS___init_array_end_DYNAMIC__init_array_start__libc_csu_fini_DYNAMIC_LINKING_ITM_deregisterTMCloneTable_edata__DTOR_END____data_start__gmon_start____dso_handle_IO_stdin_used_fdata__libc_start_main@@GLIBC_2.0__RLD_MAP__libc_csu_init__bss_startmain_gp_disp__start__gnu_local_gp_ftext_Jv_RegisterClasses__TMC_END___GLOBAL_OFFSET_TABLE__fbss_ITM_registerTMCloneTable.symtab.strtab.shstrtab.interp.note.ABI-tag.MIPS.abiflags.reginfo.note.gnu.build-id.dynamic.hash.dynsym.dynstr.gnu.version.gnu.version_r.init.text.MIPS.stubs.fini.rodata.eh_frame.ctors.dtors.jcr.data.rld_map.got.sdata.bss.comment.pdr.debug_aranges.debug_info.debug_abbrev.debug_line.debug_frame.debug_str.gnu.attributes.mdebug.abi32@ #@ 1*p@@p@I@$\@ e@Hk D@D s@{o@o@ @@P@  @ DT @T X @X AAAAA A @`A`pAd0d4`p pi#pH1pC=p 0Jp0<Uoe(hs(&< pyelftools-0.26/test/testfiles_for_unittests/trailing_null_dies.elf000066400000000000000000000005121357220457300261570ustar00rootroot00000000000000ELF>@@@8@ 3$$.shstrtab.debug_info.debug_abbrev$ABCpyelftools-0.26/test/testfiles_for_unittests/unicode_symbols.elf000077500000000000000000000200501357220457300255100ustar00rootroot00000000000000ELF>@@@8 @@@@@@88@8@@@ ``48 ``TT@T@ Ptd@@44QtdRtd``/lib64/ld-linux-x86-64.so.2GNU 0 libc.so.6printf__libc_start_mainGLIBC_2.2.5__gmon_start__ui $```HH HtH5 % @% h1I^HHPTI@H@@H@ DU8`H=8`HtHt ]8`D]fD8`UH8`HHHH?HHtHt ]8`]fD=} uUH~k ]D@f.UH]fUHHH@E%0`%0`4%0`1EH]f.AWAVAAUATL% UH- SIIL)HH_Ht 1LLDAHH9uH[]A\A]A^A_Ðf.HH%d;4(HP(xzRx +zRx $ FJ w?;*3$"DxEAC DdeBBE B(H0H8M@r8A0A(B BBB@@ @ @``x@o@ @@ ? `@@0 oh@oo`@`@GCC: (Ubuntu 7.2.0-8ubuntu3) 7.2.0clang version 4.0.1-6 (tags/RELEASE_401/final)8@T@x@@@ @`@h@ @ @ @ @ @@@@@````` `4`  @@ p@! @74`F`m @y`@```@` @S  `4`@/0`2Q `^ m(`z@ @@e8`W @+4` @E8` @crtstuff.cderegister_tm_clones__do_global_dtors_auxcompleted.7632__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entrytest3.c__FRAME_END____init_array_end_DYNAMIC__init_array_start__GNU_EH_FRAME_HDR_GLOBAL_OFFSET_TABLE___libc_csu_fini_edataprintf@@GLIBC_2.2.5Δ__libc_start_main@@GLIBC_2.2.5__data_start__gmon_start____dso_handle_IO_stdin_used__libc_csu_init__bss_startmain__TMC_END__.symtab.strtab.shstrtab.interp.note.ABI-tag.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.dynamic.got.got.plt.data.bss.comment8@8#T@T 5x@x$1o@; @`C @ ?Ko`@`Xoh@h g@0qB@{@v@ @@ @@4@`````  ` 4`404R+ @pyelftools-0.26/test/testfiles_for_unittests/x64_bad_sections.elf000066400000000000000000000300551357220457300254530ustar00rootroot00000000000000ELF>@@0@8 @'@@@@@88@8@@@ `` @@`@`TT@T@\\Ptd  @ @$$QtdRtd``/lib64/ld-linux-x86-64.so.2GNUSuSESuSE GNUPͨYIĪ- I} __gmon_start__libc.so.6__libc_start_mainGLIBC_2.2.5ui ,``HcH5 % @% h1I^HHPTI @H0@H@HH HtHÐUHSH= uK0`H H-(`HHXH9s%HBH (`H H9rs H[fff.UH=o HtHt8`IA@ÐUH}HuHE‹   EÐfffff.Hl$L|$H- L= Ld$Ll$Lt$H\$H8L)AIHIKHt1@LLDAHH9rH\$Hl$Ld$Ll$ Lt$(L|$0H8ÐUHSHHH Ht`DHHHuH[ÐHOH; <t$zRx @+AC zRx $4Jf@ @ @@o@0@@ 8 `@@ op@ooh@@`@ospwGGCC: (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973],@*,@+, @!wo_IO_stdin_used -mainglob60M__libc_csu_finii__libc_csu_inits@*@../sysdeps/x86_64/elf/start.S/usr/src/packages/BUILD/glibc-2.11.1/csuGNU AS 2.20.0~%,@,@agiNintupX @W_~z.c@@o@@oolv`int|po `,~% @@u?int @"@wj0@@LiFiiz i{4'  p 4 F ; =%% $ > $ > $ > 4: ; I?  &I% .? : ; ' I@: ; I $ >  I$ > 4: ; I?  % $ > : ; I$ > .? : ; ' @ .? : ; ' @: ; I4: ; I U 4: ; I  I &I I!' I4: ; I? < ]4 ../sysdeps/x86_64/elfstart.S @.>!>L$ uvx[# init.c5 z.c @KZ /usr/lib64/gcc/x86_64-suse-linux/4.3/includeelf-init.cstddef.h  @^oto<foJ<[ǒ#x @+AC x 8 @$80@Jf@long unsigned intshort unsigned int/usr/src/packages/BUILD/glibc-2.11.1/csushort int_IO_stdin_usedunsigned charlong intGNU C 4.3.4 [gcc-4_3-branch revision 152973]argv/tmp/ebendersglobargcmainsize_tenvp__libc_csu_initelf-init.c__init_array_startsize__init_array_end__libc_csu_finiww+v@w@wUUU^UTU]UQU\\{S(UvIM@C8@T@t@@@@@0@ h@ p@ @ @ @@@@@ @0@`(`8`@```` ` !"#$%&,@#.`<(`J8`WP@m `|(`@# `@8`@`` `@`% `0 @@@G`L [ o@u@``0`0@`0``@+ @init.cinitfini.ccall_gmon_startcrtstuff.c__CTOR_LIST____DTOR_LIST____JCR_LIST____do_global_dtors_auxcompleted.6159dtor_idx.6161frame_dummy__CTOR_END____FRAME_END____JCR_END____do_global_ctors_auxz.celf-init.c_GLOBAL_OFFSET_TABLE___init_array_end__init_array_start_DYNAMICdata_start__libc_csu_fini_startglob__gmon_start___Jv_RegisterClasses_fini__libc_start_main@@GLIBC_2.2.5_IO_stdin_used__data_start__dso_handle__DTOR_END____libc_csu_init__bss_start_end_edatamain_initpyelftools-0.26/test/utils.py000066400000000000000000000031061357220457300163420ustar00rootroot00000000000000#------------------------------------------------------------------------------- # test/utils.py # # Some common utils for tests # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- from __future__ import print_function import os, sys, subprocess, tempfile def run_exe(exe_path, args=[], echo=False): """ Runs the given executable as a subprocess, given the list of arguments. Captures its return code (rc) and stdout and returns a pair: rc, stdout_str """ popen_cmd = [exe_path] + args if os.path.splitext(exe_path)[1] == '.py': popen_cmd.insert(0, sys.executable) if echo: print('[cmd]', ' '.join(popen_cmd)) proc = subprocess.Popen(popen_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) proc_stdout = proc.communicate()[0] from elftools.common.py3compat import bytes2str return proc.returncode, bytes2str(proc_stdout) def is_in_rootdir(): """ Check whether the current dir is the root dir of pyelftools """ return os.path.isdir('test') and os.path.isdir('elftools') def dump_output_to_temp_files(testlog, *args): """ Dumps the output strings given in 'args' to temp files: one for each arg. """ for i, s in enumerate(args): fd, path = tempfile.mkstemp( prefix='out' + str(i + 1) + '_', suffix='.stdout') file = os.fdopen(fd, 'w') file.write(s) file.close() testlog.info('@@ Output #%s dumped to file: %s' % (i + 1, path)) pyelftools-0.26/tox.ini000066400000000000000000000003141357220457300151620ustar00rootroot00000000000000[tox] envlist = py27,py35 [testenv] setenv = LC_ALL = en_US.utf-8 commands = python test/run_all_unittests.py python test/run_examples_test.py python test/run_readelf_tests.py --parallel pyelftools-0.26/z.py000066400000000000000000000021531357220457300144750ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- # Just a script for playing around with pyelftools during testing # please ignore it! # from __future__ import print_function import sys, pprint from elftools.elf.structs import ELFStructs from elftools.elf.elffile import ELFFile from elftools.elf.sections import * from elftools.elf.relocation import * stream = open('test/testfiles/exe_simple64.elf', 'rb') efile = ELFFile(stream) print('elfclass', efile.elfclass) print('===> %s sections!' % efile.num_sections()) print(efile.header) dinfo = efile.get_dwarf_info() from elftools.dwarf.locationlists import LocationLists from elftools.dwarf.descriptions import describe_DWARF_expr llists = LocationLists(dinfo.debug_loc_sec.stream, dinfo.structs) for loclist in llists.iter_location_lists(): print('----> loclist!') for li in loclist: print(li) print(describe_DWARF_expr(li.loc_expr, dinfo.structs))