pax_global_header00006660000000000000000000000064127510025650014515gustar00rootroot0000000000000052 comment=60319cbb9d469e8d7c56e8f85dd55294c0ce4f62 pyelftools-0.24/000077500000000000000000000000001275100256500136425ustar00rootroot00000000000000pyelftools-0.24/.gitignore000066400000000000000000000001141275100256500156260ustar00rootroot00000000000000*.pyc .coverage .tox htmlcov tags build dist MANIFEST *.sublime-workspace pyelftools-0.24/.travis.yml000066400000000000000000000001551275100256500157540ustar00rootroot00000000000000language: python python: - "2.7" - "3.2" - "3.3" - "3.4" - "3.5" script: python test/all_tests.py pyelftools-0.24/CHANGES000066400000000000000000000047351275100256500146460ustar00rootroot00000000000000Changelog ========= + Version 0.24 (04.08.2016) - 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 (08.11.2014) - 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 (30.03.2014) - 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 (17.04.2013) - 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 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 (27.01.2012) - 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 (06.01.2012) pyelftools-0.24/LICENSE000066400000000000000000000027761275100256500146630ustar00rootroot00000000000000pyelftools 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.24/MANIFEST.in000066400000000000000000000003311275100256500153750ustar00rootroot00000000000000recursive-include elftools *.py recursive-include scripts *.py recursive-include examples *.py *.elf *.out recursive-include test *.py *.elf *.arm *.mips include README include LICENSE include CHANGES include tox.ini pyelftools-0.24/README.rst000066400000000000000000000036501275100256500153350ustar00rootroot00000000000000Introduction: 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 >= 2). 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. 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.24/TODO000066400000000000000000000015121275100256500143310ustar00rootroot00000000000000New version ----------- * Update elftools/__init__.py * Update setup.py * Update CHANGES * Tag in git (v0.xx) construct --------- The 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 ------------ python setup.py build sdist upload 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`` (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.24/elftools/000077500000000000000000000000001275100256500154715ustar00rootroot00000000000000pyelftools-0.24/elftools/__init__.py000066400000000000000000000004131275100256500176000ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- __version__ = '0.24' pyelftools-0.24/elftools/common/000077500000000000000000000000001275100256500167615ustar00rootroot00000000000000pyelftools-0.24/elftools/common/__init__.py000066400000000000000000000000001275100256500210600ustar00rootroot00000000000000pyelftools-0.24/elftools/common/construct_utils.py000066400000000000000000000031461275100256500226030ustar00rootroot00000000000000#------------------------------------------------------------------------------- # 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 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") pyelftools-0.24/elftools/common/exceptions.py000066400000000000000000000007331275100256500215170ustar00rootroot00000000000000#------------------------------------------------------------------------------- # 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 DWARFError(Exception): pass pyelftools-0.24/elftools/common/py3compat.py000066400000000000000000000025431275100256500212560ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools: common/py3compat.py # # Python 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 _iterkeys = "keys" _iteritems = "items" _itervalues = "values" 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 ifilter = filter maxint = sys.maxsize else: import cStringIO StringIO = BytesIO = cStringIO.StringIO _iterkeys = "iterkeys" _iteritems = "iteritems" _itervalues = "itervalues" def bytes2str(b): return b def str2bytes(s): return s int2byte = chr byte2int = ord from itertools import ifilter maxint = sys.maxint def iterkeys(d): """Return an iterator over the keys of a dictionary.""" return getattr(d, _iterkeys)() def itervalues(d): """Return an iterator over the values of a dictionary.""" return getattr(d, _itervalues)() def iteritems(d): """Return an iterator over the items of a dictionary.""" return getattr(d, _iteritems)() pyelftools-0.24/elftools/common/utils.py000066400000000000000000000063501275100256500204770ustar00rootroot00000000000000#------------------------------------------------------------------------------- # 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 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.24/elftools/construct/000077500000000000000000000000001275100256500175155ustar00rootroot00000000000000pyelftools-0.24/elftools/construct/LICENSE000066400000000000000000000020721275100256500205230ustar00rootroot00000000000000Copyright (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.24/elftools/construct/README000066400000000000000000000006331275100256500203770ustar00rootroot00000000000000construct 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. LICENSE is the original license. pyelftools-0.24/elftools/construct/__init__.py000066400000000000000000000110021275100256500216200ustar00rootroot00000000000000""" #### #### ## #### ## ## #### ###### ##### ## ## #### ###### ## ## ## ## ## ### ## ## ## ## ## ## ## ## ## #### ## ## ## ## ###### ### ## ##### ## ## ## ## ## ## ## ## ## ### ## ## ## ## ## ## ## ## ## #### #### ## ## #### ## ## ## ##### #### ## ###### 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.24/elftools/construct/adapters.py000066400000000000000000000404451275100256500217010ustar00rootroot00000000000000from .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 "\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 = "\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 "\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). default is "\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 = "\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.24/elftools/construct/core.py000066400000000000000000001267241275100256500210330ustar00rootroot00000000000000from 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.24/elftools/construct/debug.py000066400000000000000000000100241275100256500211520ustar00rootroot00000000000000""" 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.24/elftools/construct/lib/000077500000000000000000000000001275100256500202635ustar00rootroot00000000000000pyelftools-0.24/elftools/construct/lib/__init__.py000066400000000000000000000004101275100256500223670ustar00rootroot00000000000000from .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.24/elftools/construct/lib/binary.py000066400000000000000000000056171275100256500221320ustar00rootroot00000000000000from .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.24/elftools/construct/lib/bitstream.py000066400000000000000000000037471275100256500226420ustar00rootroot00000000000000from .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.24/elftools/construct/lib/container.py000066400000000000000000000075551275100256500226330ustar00rootroot00000000000000""" Various containers. """ from collections import MutableMapping from pprint import pformat 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.24/elftools/construct/lib/hex.py000066400000000000000000000024361275100256500214260ustar00rootroot00000000000000from .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.24/elftools/construct/lib/py3compat.py000066400000000000000000000026251275100256500225610ustar00rootroot00000000000000#------------------------------------------------------------------------------- # py3compat.py # # Some Python2&3 compatibility code #------------------------------------------------------------------------------- import sys PY3 = sys.version_info[0] == 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.24/elftools/construct/macros.py000066400000000000000000000516101275100256500213560ustar00rootroot00000000000000from .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 = "\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) to use. default is "\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 = "\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.24/elftools/dwarf/000077500000000000000000000000001275100256500165745ustar00rootroot00000000000000pyelftools-0.24/elftools/dwarf/__init__.py000066400000000000000000000000001275100256500206730ustar00rootroot00000000000000pyelftools-0.24/elftools/dwarf/abbrevtable.py000066400000000000000000000047551275100256500214320ustar00rootroot00000000000000#------------------------------------------------------------------------------- # 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 AbbrevDecl(code, 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] = 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.24/elftools/dwarf/aranges.py000066400000000000000000000104451275100256500205720ustar00rootroot00000000000000#------------------------------------------------------------------------------- # 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.24/elftools/dwarf/callframe.py000066400000000000000000000434561275100256500211100ustar00rootroot00000000000000#------------------------------------------------------------------------------- # 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 iterkeys from .structs import DWARFStructs from .constants import * class CallFrameInfo(object): """ DWARF CFI (Call Frame Info) stream, size: A stream holding the .debug_frame section, and the size of the section in it. 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, base_structs): self.stream = stream self.size = size 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 = {} 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) 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) is_CIE = ( (dwarf_format == 32 and CIE_id == 0xFFFFFFFF) or CIE_id == 0xFFFFFFFFFFFFFFFF) if is_CIE: header_struct = entry_structs.Dwarf_CIE_header else: header_struct = entry_structs.Dwarf_FDE_header # Parse the header, which goes up to and including the # return_address_register field header = struct_parse( header_struct, self.stream, offset) # If this is DWARF version 4 or later, we can have a more precise # address size, read from the CIE header. if 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) # 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, structs=entry_structs) else: # FDE with preserve_stream_pos(self.stream): cie = self._parse_entry_at(header['CIE_pointer']) self._entry_cache[offset] = FDE( header=header, instructions=instructions, offset=offset, 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 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 """ def __init__(self, header, structs, instructions, offset, cie=None): self.header = header self.structs = structs self.instructions = instructions self.offset = offset self.cie = cie self._decoded_table = None 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=None) 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() last_line_in_CIE = copy.copy(cie_decoded_table.table[-1]) cur_line = copy.copy(last_line_in_CIE) 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(cur_line) elif name == 'DW_CFA_restore_state': cur_line = line_stack.pop() # The current line is appended to the table after all instructions # have ended, in any case (even if there were no instructions). 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 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.24/elftools/dwarf/compileunit.py000066400000000000000000000124211275100256500214760ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools: dwarf/compileunit.py # # DWARF compile unit # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- 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. Lazily parsed. self._dielist = [] 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 """ return self._get_DIE(0) 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. """ self._parse_DIEs() return iter(self._dielist) #------ PRIVATE ------# def __getitem__(self, name): """ Implement dict-like access to header entries """ return self.header[name] def _get_DIE(self, index): """ Get the DIE at the given index """ self._parse_DIEs() return self._dielist[index] def _parse_DIEs(self): """ Parse all the DIEs pertaining to this CU from the stream and shove them sequentially into self._dielist. Also set the child/sibling/parent links in the DIEs according (unflattening the prefix-order of the DIE tree). """ if len(self._dielist) > 0: return # Compute the boundary (one byte past the bounds) of this CU in the # stream cu_boundary = ( self.cu_offset + self['unit_length'] + self.structs.initial_length_field_size()) # First pass: parse all DIEs and place them into self._dielist die_offset = self.cu_die_offset while die_offset < cu_boundary: die = DIE( cu=self, stream=self.dwarfinfo.debug_info_sec.stream, offset=die_offset) self._dielist.append(die) die_offset += die.size # Second pass - unflatten the DIE tree self._unflatten_tree() def _unflatten_tree(self): """ "Unflatten" the DIE tree from it serial representation, by setting the child/sibling/parent links of DIEs. Assumes self._dielist was already populated by a linear list of DIEs read from the stream section """ # the first DIE in the list is the root node root = self._dielist[0] parentstack = [root] for die in self._dielist[1:]: if not die.is_null(): cur_parent = parentstack[-1] # This DIE is a child of the current parent cur_parent.add_child(die) die.set_parent(cur_parent) if die.has_children: parentstack.append(die) else: # parentstack should not be really empty here. However, some # compilers generate DWARF that has extra NULLs in the end and # we don't want pyelftools to fail parsing them just because of # this. if len(parentstack) > 0: # end of children for the current parent parentstack.pop() pyelftools-0.24/elftools/dwarf/constants.py000066400000000000000000000075071275100256500211730ustar00rootroot00000000000000#------------------------------------------------------------------------------- # 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_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 # 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_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.24/elftools/dwarf/descriptions.py000066400000000000000000000524401275100256500216610ustar00rootroot00000000000000#------------------------------------------------------------------------------- # 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 %016x\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]) 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_Upc: '(nified Parallel C)', 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.24/elftools/dwarf/die.py000066400000000000000000000163501275100256500177140ustar00rootroot00000000000000#------------------------------------------------------------------------------- # 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 self._children = [] 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): """ Yield all children of this DIE """ return iter(self._children) 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 add_child(self, die): self._children.append(die) def set_parent(self, die): self._parent = die #------ PRIVATE ------# def __repr__(self): s = 'DIE %s, size=%s, has_chidren=%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 with preserve_stream_pos(self.stream): 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_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.24/elftools/dwarf/dwarf_expr.py000066400000000000000000000232101275100256500213050ustar00rootroot00000000000000#------------------------------------------------------------------------------- # 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, ) 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.24/elftools/dwarf/dwarfinfo.py000066400000000000000000000256421275100256500211360ustar00rootroot00000000000000#------------------------------------------------------------------------------- # 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 # 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 # # 'name' and 'global_offset' are for descriptional purposes only and # aren't strictly required for the DWARF parsing to work. # DebugSectionDescriptor = namedtuple('DebugSectionDescriptor', 'stream name global_offset size') # 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): """ 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 # 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 = {} 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, 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, base_structs=self.structs) return cfi.get_entries() 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.24/elftools/dwarf/enums.py000066400000000000000000000254331275100256500203040ustar00rootroot00000000000000#------------------------------------------------------------------------------- # 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_lo_user = 0x4080, 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_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_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_ref_sig8 = 0x20, DW_FORM_GNU_strp_alt = 0x1f21, DW_FORM_GNU_ref_alt = 0x1f20, _default_ = Pass, ) # Inverse mapping for ENUM_DW_FORM DW_FORM_raw2name = dict((v, k) for k, v in iteritems(ENUM_DW_FORM)) pyelftools-0.24/elftools/dwarf/lineprogram.py000066400000000000000000000266651275100256500215040ustar00rootroot00000000000000#------------------------------------------------------------------------------- # 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.24/elftools/dwarf/locationlists.py000066400000000000000000000051431275100256500220400ustar00rootroot00000000000000#------------------------------------------------------------------------------- # 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 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 pyelftools-0.24/elftools/dwarf/ranges.py000066400000000000000000000043311275100256500204260ustar00rootroot00000000000000#------------------------------------------------------------------------------- # 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.24/elftools/dwarf/structs.py000066400000000000000000000321521275100256500206600ustar00rootroot00000000000000#------------------------------------------------------------------------------- # 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, RepeatUntil, Field, Rename, Enum, Array, PrefixedArray, CString, Embed, StaticField ) from ..common.construct_utils import RepeatUntilExcluding 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_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_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_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() 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_offset(''), 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_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): # 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')) else: 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.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)) 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.24/elftools/elf/000077500000000000000000000000001275100256500162375ustar00rootroot00000000000000pyelftools-0.24/elftools/elf/__init__.py000066400000000000000000000000001275100256500203360ustar00rootroot00000000000000pyelftools-0.24/elftools/elf/constants.py000066400000000000000000000052541275100256500206330ustar00rootroot00000000000000#------------------------------------------------------------------------------- # 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_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_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 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 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_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.24/elftools/elf/descriptions.py000066400000000000000000000274341275100256500213310ustar00rootroot00000000000000#------------------------------------------------------------------------------- # 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, ENUM_SH_TYPE, ENUM_RELOC_TYPE_i386, ENUM_RELOC_TYPE_x64, ENUM_RELOC_TYPE_ARM, ENUM_RELOC_TYPE_AARCH64, ENUM_RELOC_TYPE_MIPS) 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['PT_LOOS'] and x <= ENUM_P_TYPE['PT_HIOS']: return 'LOOS+%lx' % (x - ENUM_P_TYPE['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['SHT_LOOS'] and x < ENUM_SH_TYPE['SHT_GNU_versym']: return 'loos+%lx' % (x - ENUM_SH_TYPE['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_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) 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) #------------------------------------------------------------------------------- _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_ARM='ARM', 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_BLAFKIN='Analog Devices Blackfin', 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='ARM_EXIDX', PT_ARM_UNWIND='ARM_UNWIND', PT_AARCH64_ARCHEXT='AARCH64_ARCHEXT', PT_AARCH64_UNWIND='AARCH64_UNWIND', ) _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_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', ) _DESCR_RELOC_TYPE_i386 = dict( (v, k) for k, v in iteritems(ENUM_RELOC_TYPE_i386)) _DESCR_RELOC_TYPE_x64 = dict( (v, k) for k, v in iteritems(ENUM_RELOC_TYPE_x64)) _DESCR_RELOC_TYPE_ARM = dict( (v, k) for k, v in iteritems(ENUM_RELOC_TYPE_ARM)) _DESCR_RELOC_TYPE_AARCH64 = dict( (v, k) for k, v in iteritems(ENUM_RELOC_TYPE_AARCH64)) _DESCR_RELOC_TYPE_MIPS = dict( (v, k) for k, v in iteritems(ENUM_RELOC_TYPE_MIPS)) _DESCR_D_TAG = dict( (v, k) for k, v in iteritems(ENUM_D_TAG)) pyelftools-0.24/elftools/elf/dynamic.py000066400000000000000000000217461275100256500202470ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools: elf/dynamic.py # # ELF Dynamic Tags # # Mike Frysinger (vapier@gentoo.org) # This code is in the public domain #------------------------------------------------------------------------------- import itertools from .sections import Section, Symbol from .segments import Segment from ..common.exceptions import ELFError from ..common.utils import 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. """ return parse_cstring_from_stream(self._stream, self._table_offset + offset) 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._stream = stream self._elffile = elffile self._elfstructs = elffile.structs 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 class DynamicSection(Section, Dynamic): """ ELF dynamic table section. Knows how to process the list of tags. """ def __init__(self, header, name, stream, elffile): Section.__init__(self, header, name, stream) stringtable = elffile.get_section(header['sh_link']) Dynamic.__init__(self, stream, 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']) 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() # 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'] if nearest_ptr is None: raise ELFError('Cannot determine the end of DT_SYMTAB.') string_table = self._get_stringtable() for i in range((nearest_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.24/elftools/elf/elffile.py000066400000000000000000000411641275100256500202250ustar00rootroot00000000000000#------------------------------------------------------------------------------- # 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) 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 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.header = self._parse_elf_header() 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(): 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 bool(self.get_section_by_name('.debug_info')) or \ bool(self.get_section_by_name('.zdebug_info')) 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') compressed = bool(self.get_section_by_name('.zdebug_info')) if compressed: section_names = tuple(map(lambda x: '.z' + x[1:], section_names)) 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 = 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: 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], # TODO(eliben): reading of eh_frame is not hooked up yet eh_frame_sec=None, 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]) def get_machine_arch(self): """ Return the machine architecture, as detected from the ELF header. Not all architectures are supported at the moment. """ if self['e_machine'] == 'EM_X86_64': return 'x64' elif self['e_machine'] in ('EM_386', 'EM_486'): return 'x86' elif self['e_machine'] == 'EM_ARM': return 'ARM' elif self['e_machine'] == 'EM_AARCH64': return 'AArch64' elif self['e_machine'] == 'EM_MIPS': return 'MIPS' else: return '' #-------------------------------- 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.stream) elif sectype == 'SHT_NULL': return NullSection(section_header, name, self.stream) 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.stream, self) elif sectype == 'SHT_DYNAMIC': return DynamicSection(section_header, name, self.stream, self) elif sectype == 'SHT_NOTE': return NoteSection(section_header, name, self.stream, self) else: return Section(section_header, name, self.stream) 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, self.stream, 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, self.stream, 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, self.stream, 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, self.stream, 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, self.stream, 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='', stream=self.stream) 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. """ self.stream.seek(section['sh_offset']) # The section data is read into a new stream, for processing section_stream = BytesIO() section_stream.write(self.stream.read(section['sh_size'])) 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']) @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.24/elftools/elf/enums.py000066400000000000000000000511201275100256500177370ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools: elf/enums.py # # Mappings of enum names to values # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- 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_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, EM_M32=1, EM_SPARC=2, EM_386=3, EM_68K=4, EM_88K=5, EM_860=7, EM_MIPS=8, EM_S370=9, EM_MIPS_RS3_LE=10, EM_PARISC=15, EM_VPP500=17, EM_SPARC32PLUS=18, EM_960=19, EM_PPC=20, EM_PPC64=21, EM_S390=22, EM_V800=36, EM_FR20=37, EM_RH32=38, EM_RCE=39, EM_ARM=40, EM_ALPHA=41, EM_SH=42, EM_SPARCV9=43, EM_TRICORE=44, EM_ARC=45, EM_H8_300=46, EM_H8_300H=47, EM_H8S=48, EM_H8_500=49, EM_IA_64=50, EM_MIPS_X=51, EM_COLDFIRE=52, EM_68HC12=53, EM_MMA=54, EM_PCP=55, EM_NCPU=56, EM_NDR1=57, EM_STARCORE=58, EM_ME16=59, EM_ST100=60, EM_TINYJ=61, EM_X86_64=62, EM_PDSP=63, EM_PDP10=64, EM_PDP11=65, EM_FX66=66, EM_ST9PLUS=67, EM_ST7=68, EM_68HC16=69, EM_68HC11=70, EM_68HC08=71, EM_68HC05=72, EM_SVX=73, EM_ST19=74, EM_VAX=75, EM_CRIS=76, EM_JAVELIN=77, EM_FIREPATH=78, EM_ZSP=79, EM_MMIX=80, EM_HUANY=81, EM_PRISM=82, EM_AVR=83, EM_FR30=84, EM_D10V=85, EM_D30V=86, EM_V850=87, EM_M32R=88, EM_MN10300=89, EM_MN10200=90, EM_PJ=91, EM_OPENRISC=92, EM_ARC_A5=93, EM_XTENSA=94, EM_VIDEOCORE=95, EM_TMM_GPP=96, EM_NS32K=97, EM_TPC=98, EM_SNP1K=99, EM_ST200=100, EM_IP2K=101, EM_MAX=102, EM_CR=103, EM_F2MC16=104, EM_MSP430=105, EM_BLACKFIN=106, EM_SE_C33=107, EM_SEP=108, EM_ARCA=109, EM_UNICORE=110, EM_L10M=180, EM_AARCH64=183, _default_=Pass, ) # sh_type in the section header ENUM_SH_TYPE = 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_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 SHT_LOPROC=0x70000000, SHT_HIPROC=0x7fffffff, SHT_LOUSER=0x80000000, SHT_HIUSER=0xffffffff, SHT_AMD64_UNWIND=0x70000001, SHT_SUNW_LDYNSYM=0x6ffffff3, SHT_SUNW_syminfo=0x6ffffffc, SHT_ARM_EXIDX=0x70000001, # also SHT_MIPS_MSYM SHT_ARM_PREEMPTMAP=0x70000002, # also SHT_MIPS_CONFLICT SHT_ARM_ATTRIBUTES=0x70000003, # also SHT_MIPS_GPTAB SHT_ARM_DEBUGOVERLAY=0x70000004, # also SHT_MIPS_UCODE 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, _default_=Pass, ) # p_type in the program header # some values scavenged from the ELF headers in binutils-2.21 ENUM_P_TYPE = 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, PT_LOPROC=0x70000000, PT_HIPROC=0x7fffffff, PT_GNU_EH_FRAME=0x6474e550, PT_GNU_STACK=0x6474e551, PT_GNU_RELRO=0x6474e552, PT_ARM_ARCHEXT=0x70000000, PT_ARM_EXIDX=0x70000001, PT_ARM_UNWIND=0x70000001, PT_AARCH64_ARCHEXT=0x70000000, PT_AARCH64_UNWIND=0x70000001, _default_=Pass, ) # 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 = 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_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, 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_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_AUXILIARY=0x7ffffffd, DT_FILTER=0x7fffffff, _default_=Pass, ) 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 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, ) # 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, ) pyelftools-0.24/elftools/elf/gnuversions.py000066400000000000000000000205351275100256500212000ustar00rootroot00000000000000#------------------------------------------------------------------------------ # 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, stream, elffile, stringtable, field_prefix, version_struct, version_auxiliaries_struct): super(GNUVersionSection, self).__init__(header, name, stream) self.elffile = 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, stream, elffile, stringtable): super(GNUVerNeedSection, self).__init__( header, name, stream, 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, stream, elffile, stringtable): super(GNUVerDefSection, self).__init__( header, name, stream, 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, stream, elffile, symboltable): super(GNUVerSymSection, self).__init__(header, name, stream) self.elffile = elffile self.elfstructs = self.elffile.structs 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.elfstructs.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.24/elftools/elf/notes.py000066400000000000000000000031041275100256500177370ustar00rootroot00000000000000#------------------------------------------------------------------------------- # 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_Nhdr_abi, elffile.stream, offset) elif note['n_type'] == 'NT_GNU_BUILD_ID': note['n_desc'] = ''.join('%.2x' % ord(b) for b in desc_data) else: note['n_desc'] = desc_data offset += roundup(note['n_descsz'], 2) note['n_size'] = offset - note['n_offset'] yield note pyelftools-0.24/elftools/elf/relocation.py000066400000000000000000000242301275100256500207510ustar00rootroot00000000000000#------------------------------------------------------------------------------- # 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 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 RelocationSection(Section): """ ELF relocation section. Serves as a collection of Relocation entries. """ def __init__(self, header, name, stream, elffile): super(RelocationSection, self).__init__(header, name, stream) self.elffile = elffile self.elfstructs = self.elffile.structs if self.header['sh_type'] == 'SHT_REL': expected_size = self.elfstructs.Elf_Rel.sizeof() self.entry_struct = self.elfstructs.Elf_Rel elif self.header['sh_type'] == 'SHT_RELA': expected_size = self.elfstructs.Elf_Rela.sizeof() self.entry_struct = self.elfstructs.Elf_Rela else: elf_assert(False, 'Unknown relocation type section') elf_assert( self.header['sh_entsize'] == expected_size, 'Expected sh_entsize of SHT_REL section to be %s' % expected_size) def is_RELA(self): """ Is this a RELA relocation section? If not, it's REL. """ return self.header['sh_type'] == 'SHT_RELA' def num_relocations(self): """ Number of relocations in the section """ return self['sh_size'] // self['sh_entsize'] def get_relocation(self, n): """ Get the relocation at index #n from the section (Relocation object) """ entry_offset = self['sh_offset'] + n * self['sh_entsize'] 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 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) 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 # 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=8, 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.24/elftools/elf/sections.py000066400000000000000000000146361275100256500204520ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools: elf/sections.py # # ELF sections # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- from ..common.utils import struct_parse, elf_assert, parse_cstring_from_stream from collections import defaultdict from .notes import iter_notes 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, stream): self.header = header self.name = name self.stream = stream def data(self): """ The section data from the file. """ self.stream.seek(self['sh_offset']) return self.stream.read(self['sh_size']) 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): return self.header == other.header def __hash__(self): return hash(self.header) class NullSection(Section): """ ELF NULL section """ def __init__(self, header, name, stream): super(NullSection, self).__init__(header, name, stream) def is_null(self): return True class StringTableSection(Section): """ ELF string table section. """ def __init__(self, header, name, stream): super(StringTableSection, self).__init__(header, name, stream) 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('ascii') class SymbolTableSection(Section): """ ELF symbol table section. Has an associated StringTableSection that's passed in the constructor. """ def __init__(self, header, name, stream, elffile, stringtable): super(SymbolTableSection, self).__init__(header, name, stream) self.elffile = elffile self.elfstructs = self.elffile.structs 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.elfstructs.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, stream, elffile, symboltable): super(SUNWSyminfoTableSection, self).__init__(header, name, stream) self.elffile = elffile self.elfstructs = self.elffile.structs 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.elfstructs.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 __init__(self, header, name, stream, elffile): super(NoteSection, self).__init__(header, name, stream) self.elffile = elffile 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']) pyelftools-0.24/elftools/elf/segments.py000066400000000000000000000100461275100256500204370ustar00rootroot00000000000000#------------------------------------------------------------------------------- # 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='ascii'), 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.24/elftools/elf/structs.py000066400000000000000000000234771275100256500203350ustar00rootroot00000000000000#------------------------------------------------------------------------------- # 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, ) 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 self._create_structs() def _create_structs(self): 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_phdr() self._create_shdr() self._create_sym() self._create_rel() self._create_dyn() self._create_sunw_syminfo() self._create_gnu_verneed() self._create_gnu_verdef() self._create_gnu_versym() self._create_note() 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_phdr(self): if self.elfclass == 32: self.Elf_Phdr = Struct('Elf_Phdr', Enum(self.Elf_word('p_type'), **ENUM_P_TYPE), 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'), **ENUM_P_TYPE), 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): self.Elf_Shdr = Struct('Elf_Shdr', self.Elf_word('sh_name'), Enum(self.Elf_word('sh_type'), **ENUM_SH_TYPE), 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_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): self.Elf_Dyn = Struct('Elf_Dyn', Enum(self.Elf_sxword('d_tag'), **ENUM_D_TAG), 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 7 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 off "version definition" entries are documented in # Oracle "Linker and Libraries Guide", Chapter 7 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 off "version symbol" entries are documented in # Oracle "Linker and Libraries Guide", Chapter 7 Object File Format self.Elf_Versym = Struct('Elf_Versym', Enum(self.Elf_half('ndx'), **ENUM_VERSYM), ) def _create_note(self): # 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), ) self.Elf_Nhdr_abi = Struct('Elf_Nhdr_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'), ) pyelftools-0.24/examples/000077500000000000000000000000001275100256500154605ustar00rootroot00000000000000pyelftools-0.24/examples/dwarf_decode_address.py000066400000000000000000000103671275100256500221540ustar00rootroot00000000000000#------------------------------------------------------------------------------- # 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 or entry.state.end_sequence: 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.24/examples/dwarf_die_tree.py000066400000000000000000000046131275100256500210010ustar00rootroot00000000000000#------------------------------------------------------------------------------- # 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.24/examples/dwarf_location_lists.py000066400000000000000000000104131275100256500222420ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools example: dwarf_location_lists.py # # Examine DIE entries which have location list values, and decode these # location 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.locationlists import LocationEntry 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()) 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_location_list(attr): # This is a location list. Its value is an offset into # the .debug_loc section, so we can use the location # lists object to decode it. loclist = location_lists.get_location_list_at_offset( attr.value) print(' DIE %s. attr %s.\n%s' % ( DIE.tag, attr.name, show_loclist(loclist, 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) def attribute_has_location_list(attr): """ Only some attributes can have location list values, if they have the required DW_FORM (loclistptr "class" in DWARF spec v3) """ if (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')): 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.24/examples/dwarf_range_lists.py000066400000000000000000000065121275100256500215330ustar00rootroot00000000000000#------------------------------------------------------------------------------- # 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.24/examples/elf_low_high_api.py000066400000000000000000000066051275100256500213200ustar00rootroot00000000000000#------------------------------------------------------------------------------- # 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.24/examples/elf_notes.py000066400000000000000000000034561275100256500200200ustar00rootroot00000000000000#------------------------------------------------------------------------------- # 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.24/examples/elf_relocations.py000066400000000000000000000032351275100256500212050ustar00rootroot00000000000000#------------------------------------------------------------------------------- # 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.24/examples/elf_show_debug_sections.py000066400000000000000000000017271275100256500227240ustar00rootroot00000000000000#------------------------------------------------------------------------------- # 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.24/examples/elfclass_address_size.py000066400000000000000000000025371275100256500223740ustar00rootroot00000000000000#------------------------------------------------------------------------------- # 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.24/examples/examine_dwarf_info.py000066400000000000000000000036551275100256500216670ustar00rootroot00000000000000#------------------------------------------------------------------------------- # 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.24/examples/reference_output/000077500000000000000000000000001275100256500210365ustar00rootroot00000000000000pyelftools-0.24/examples/reference_output/dwarf_decode_address.out000066400000000000000000000001161275100256500257000ustar00rootroot00000000000000Processing file: ./examples/sample_exe64.elf Function: main File: z.c Line: 3 pyelftools-0.24/examples/reference_output/dwarf_die_tree.out000066400000000000000000000043241275100256500245350ustar00rootroot00000000000000Processing 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.24/examples/reference_output/dwarf_location_lists.out000066400000000000000000000032121275100256500257760ustar00rootroot00000000000000Processing 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 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)>> Found a compile unit at offset 418, length 300 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.24/examples/reference_output/dwarf_range_lists.out000066400000000000000000000007211275100256500252640ustar00rootroot00000000000000Processing 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.24/examples/reference_output/elf_low_high_api.out000066400000000000000000000004311275100256500250440ustar00rootroot00000000000000Processing 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.24/examples/reference_output/elf_notes.out000066400000000000000000000007231275100256500235470ustar00rootroot00000000000000Processing 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.24/examples/reference_output/elf_relocations.out000066400000000000000000000002011275100256500247300ustar00rootroot00000000000000Processing file: ./examples/sample_exe64.elf .rela.dyn section with 1 relocations Relocation (RELA) offset = 6295520 pyelftools-0.24/examples/reference_output/elf_show_debug_sections.out000066400000000000000000000002551275100256500264540ustar00rootroot00000000000000In 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.24/examples/reference_output/elfclass_address_size.out000066400000000000000000000003111275100256500261150ustar00rootroot00000000000000./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.24/examples/reference_output/examine_dwarf_info.out000066400000000000000000000011641275100256500254150ustar00rootroot00000000000000Processing 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.24/examples/sample_exe64.elf000066400000000000000000000300551275100256500204470ustar00rootroot00000000000000ELF>@@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.24/pyelftools.sublime-project000066400000000000000000000002241275100256500210660ustar00rootroot00000000000000{ "folders": [ { "path": ".", "folder_exclude_patterns": ["build", "dist", ".tox", ".hg"] } ] } pyelftools-0.24/scripts/000077500000000000000000000000001275100256500153315ustar00rootroot00000000000000pyelftools-0.24/scripts/readelf.py000077500000000000000000001506731275100256500173240ustar00rootroot00000000000000#!/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 os, sys from optparse import OptionParser import string # 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) 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, NoteSegment from elftools.elf.sections import 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_ver_flags, describe_note ) from elftools.elf.constants import E_FLAGS 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 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._emitline(' '.join('%2.2x' % byte2int(b) for b in self.elffile.e_ident_raw)) 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": if flags & E_FLAGS.EF_ARM_HASENTRY: description += ", has entry point" version = flags & E_FLAGS.EF_ARM_EABIMASK if version == E_FLAGS.EF_ARM_EABI_VER5: description += ", Version5 EABI" elif self.elffile['e_machine'] == "EM_MIPS": if flags & E_FLAGS.EF_MIPS_NOREORDER: description += ", noreorder" if flags & E_FLAGS.EF_MIPS_CPIC: description += ", cpic" if not (flags & E_FLAGS.EF_MIPS_ABI2) and not (flags & E_FLAGS.EF_MIPS_ABI_ON32): description += ", o32" if (flags & E_FLAGS.EF_MIPS_ARCH) == E_FLAGS.EF_MIPS_ARCH_1: description += ", mips1" 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']))) 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._emit(' W (write), A (alloc), X (execute), M (merge), S (strings)') if self.elffile['e_machine'] in ('EM_X86_64', 'EM_L10M'): self._emitline(', l (large)') else: self._emitline() self._emitline(' I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown)') self._emitline(' O (extra OS processing required) o (OS specific), p (processor specific)') def display_symbol_tables(self): """ Display the symbol tables contained in the file """ self._init_versioninfo() for section in self.elffile.iter_sections(): 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.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: # readelf only prints this if there is at least one segment if self.elffile.num_segments(): self._emitline("\nThere is no dynamic section in this file.") def display_notes(self): """ Display the notes contained in the file """ for segment in self.elffile.iter_segments(): if isinstance(segment, NoteSegment): for note in segment.iter_notes(): self._emitline( "\nDisplaying notes found at file offset " "%s with length %s:" % ( self._format_hex(note['n_offset'], fieldsize=8), self._format_hex(note['n_size'], fieldsize=8))) self._emitline(' Owner Data size Description') self._emitline(' %s%s %s\t%s' % ( note['n_name'], ' ' * (20 - len(note['n_name'])), 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 if symbol['st_name'] == 0: symsec = self.elffile.get_section(symbol['st_shndx']) symbol_name = symsec.name else: symbol_name = symbol.name self._emit(' %s %s%22.22s' % ( self._format_hex( symbol['st_value'], fullhex=True, lead0x=False), ' ' if self.elffile.elfclass == 32 else '', 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_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: self._emitline("Section '%s' does not exist in the file!" % ( 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: self._emitline("Section '%s' does not exist in the file!" % ( 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() 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. """ 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. """ 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_debug_frames(self): """ Dump the raw frame information from .debug_frame """ if not self._dwarfinfo.has_CFI(): return self._emitline('Contents of the %s section:' % self._dwarfinfo.debug_frame_sec.name) for entry in self._dwarfinfo.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'], fullhex=True, 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']) self._emitline() else: # 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'], fullhex=True, 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))) self._emit(describe_CFI_instructions(entry)) 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_debug_frames_interp(self): """ Dump the interpreted (decoded) frame information from .debug_frame """ if not self._dwarfinfo.has_CFI(): return self._emitline('Contents of the %s section:' % self._dwarfinfo.debug_frame_sec.name) for entry in self._dwarfinfo.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'], fullhex=True, lead0x=False), bytes2str(entry['augmentation']), entry['code_alignment_factor'], entry['data_alignment_factor'], entry['return_address_register'])) ra_regnum = entry['return_address_register'] else: # 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'], fullhex=True, 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'] # Print the heading row for the decoded table self._emit(' LOC') self._emit(' ' if entry.structs.address_size == 4 else ' ') self._emit(' CFA ') # Decode the table nad look at the registers it 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)) self._emit(' %-9s' % describe_CFI_CFA_rule(line['cfa'])) 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 _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: based on pyelftools %s' % __version__ def main(stream=None): # parse the command-line arguments and invoke ReadElf optparser = OptionParser( usage='usage: %prog [options] ', description=SCRIPT_DESCRIPTION, add_help_option=False, # -h is a real option of readelf prog='readelf.py', version=VERSION_STRING) optparser.add_option('-d', '--dynamic', action='store_true', dest='show_dynamic_tags', help='Display the dynamic section') optparser.add_option('-H', '--help', action='store_true', dest='help', help='Display this information') optparser.add_option('-h', '--file-header', action='store_true', dest='show_file_header', help='Display the ELF file header') optparser.add_option('-l', '--program-headers', '--segments', action='store_true', dest='show_program_header', help='Display the program headers') optparser.add_option('-S', '--section-headers', '--sections', action='store_true', dest='show_section_header', help="Display the sections' headers") optparser.add_option('-e', '--headers', action='store_true', dest='show_all_headers', help='Equivalent to: -h -l -S') optparser.add_option('-s', '--symbols', '--syms', action='store_true', dest='show_symbols', help='Display the symbol table') optparser.add_option('-n', '--notes', action='store_true', dest='show_notes', help='Display the core notes (if present)') optparser.add_option('-r', '--relocs', action='store_true', dest='show_relocs', help='Display the relocations (if present)') optparser.add_option('-x', '--hex-dump', action='store', dest='show_hex_dump', metavar='', help='Dump the contents of section as bytes') optparser.add_option('-p', '--string-dump', action='store', dest='show_string_dump', metavar='', help='Dump the contents of section as strings') optparser.add_option('-V', '--version-info', action='store_true', dest='show_version_info', help='Display the version sections (if present)') optparser.add_option('--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}')) options, args = optparser.parse_args() if options.help or len(args) == 0: optparser.print_help() sys.exit(0) if options.show_all_headers: do_file_header = do_section_header = do_program_header = True else: do_file_header = options.show_file_header do_section_header = options.show_section_header do_program_header = options.show_program_header with open(args[0], '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 options.show_dynamic_tags: readelf.display_dynamic_tags() if options.show_symbols: readelf.display_symbol_tables() if options.show_notes: readelf.display_notes() if options.show_relocs: readelf.display_relocations() if options.show_version_info: readelf.display_version_info() if options.show_hex_dump: readelf.display_hex_dump(options.show_hex_dump) if options.show_string_dump: readelf.display_string_dump(options.show_string_dump) if options.debug_dump_what: readelf.display_debug_dump(options.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.24/setup.py000066400000000000000000000024271275100256500153610ustar00rootroot00000000000000#------------------------------------------------------------------------------- # pyelftools: setup.py # # Setup/installation script. # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- import os, sys from distutils.core 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.24', 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.24/test/000077500000000000000000000000001275100256500146215ustar00rootroot00000000000000pyelftools-0.24/test/README000066400000000000000000000001121275100256500154730ustar00rootroot00000000000000All tests should be run from the root development directory of pyelftools pyelftools-0.24/test/__init__.py000066400000000000000000000000001275100256500167200ustar00rootroot00000000000000pyelftools-0.24/test/all_tests.py000077500000000000000000000015431275100256500171730ustar00rootroot00000000000000#!/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.24/test/external_tools/000077500000000000000000000000001275100256500176635ustar00rootroot00000000000000pyelftools-0.24/test/external_tools/Makefile000066400000000000000000000006011275100256500213200ustar00rootroot00000000000000CFLAGS = -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.24/test/external_tools/README.txt000066400000000000000000000003071275100256500213610ustar00rootroot00000000000000Some 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.24/test/external_tools/elf_creator.c000066400000000000000000000164641275100256500223270ustar00rootroot00000000000000/* 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.24/test/external_tools/readelf000077500000000000000000016414501275100256500212260ustar00rootroot00000000000000ELF>2"@@(<@8 @@@@@@88@8@@@ ggF ggTT@T@DDPtdFFttQtdRtdgg/lib64/ld-linux-x86-64.so.2GNUGNU^ji8CQξ!0H ^HKN(ĉݣk\|Ĺ@9!c2>ZN% diAu-.SgY' T' FoyG6 nl:J |:g!:g!:g C:g;g C:g ;glibz.so.1_ITM_deregisterTMCloneTable__gmon_start___Jv_RegisterClasses_ITM_registerTMCloneTableinflateinflateResetinflateInit_inflateEndlibc.so.6__stpcpy_chkfflushstrcpy__rawmemchr__printf_chkexit_IO_putcsetlocalembrtowcfopenstrncmpoptindstrrchr__strdupdcgettextftellstrncpy__stack_chk_failputcharreallocabortsbrk__assert_failrewindgmtime__ctype_get_mb_cur_maxcallocstrlenmemsetwarn__errno_locationfseekmemcmp__fprintf_chkstdoutfputcfputsstrnlenmemcpyfclosestrtoulmallocoptargstderr__snprintf_chkfscanfgetopt_longfwritefread__fread_chkstrchr__vfprintf_chkqsort__strcpy_chk__sprintf_chk__xstatmemmovebindtextdomain_IO_getc__strcat_chkstrcmpstrerror__libc_start_mainferrorstpcpyfree__environGLIBC_2.7GLIBC_2.14GLIBC_2.4GLIBC_2.2.5GLIBC_2.3.4ii ii ui ti )g,:gH:gO:gL;gP;gM g g( g0 g8 g@ gH gP gX g ` g h g p g x g g g g g g g g g g g g g g g g g!g!g !g!!g" !g#(!g$0!g%8!g&@!g'H!g(P!g)X!g*`!g+h!g,p!g-x!g.!g/!g0!g1!g2!g3!g4!g5!g6!g7!g8!g9!g:!g;!g<!g=!g?"g@"gA"gB"gC "gD("gF0"gGHHM 'HtH5B '%D '@%B 'h%: 'h%2 'h%* 'h%" 'h% 'h% 'h% 'hp% 'h`% 'h P% 'h @% 'h 0% 'h % 'h % 'h% 'h% 'h% 'h% 'h% 'h% 'h% 'h% 'h% 'hp% 'h`%z 'hP%r 'h@%j 'h0%b 'h %Z 'h%R 'h%J 'h%B 'h %: 'h!%2 'h"%* 'h#%" 'h$% 'h%% 'h&% 'h'p% 'h(`%'h)P%'h*@%'h+0%'h, %'h-%'h.%'h/%'h0%'h1%'h2%'h3%'h4%'h5%'h6%'h7p%'h8`%z'h9P%r'h:@%j'h;0%b'h< %Z'h=%R'h>%J'h?%B'h@%:'hA%2'hB%*'hCATUSH|$ H4$ #DdH%(H$11 #DLDLDLDVH|$ HYl$ L$$E1+gH0FLgcRDml?t-AtLD1H1H='50Du1Duj@'Da'eVfW6SJ,'@plnh+'fdxec^+'yfw|sxf蠧KItENHH=z'.Dstxrfl+'+'H=['**+'+'L+'*'`G'*'|+'H='Ht$1HUG'xH='*'Hg*'ҫM*'A臦2*'*'+'*'*'A*'*'*';*'*' *'f*'O*'(*')')')'|)'P*'{H='Ht$1x']H=')'Ht P)'軩6)'*0)'=*'=)'=)'uy=a)'up=)'ug=_)'u^=&)'uU= )'uL=('uC=('u:=('u1=('u(=('u=7)'u=n('u =U)'''[D$ Hc'H9~ L)'19<LD1HH1被Hcv' ;T$ |B\'H$HHT$HT$(u8FHHIĺ/FtH$HHH$MD/H$"MD$=!''LHLHB;'H';'LH8LIľp0F1HLHH1H0F1HH1 LqH=%'HtH=%'HtH$dH3 %(Hİ[]A\úLDH1L;HߺL$HCHHy%'tH5P%'HHO%'r1PE9H1?R%'{10FHH1H1LDH1裫1I^HHPTIDH0DH@@:gUH-:gHHw]øHt]:g:gUH-:gHHHH?HHu]úHt]Hƿ:g=9'uUH~]&'@H=&tHtUgH]{sHtvtHi!H\@HwHH D D DHGHH wTH.H>HD$HFUDtqfDDDHGf.HWHefDjHlHn< Dt, DrHoL DumDfDH p/vVHpBHpsWHp Dt DrHp Dt@1DHpHp$RHp DX D DHGÐHNd@HSfDjHU?DVD(DHG@H{HEH DH DH DDH%XH*t&fH,vDsDfDHGøWDø3Dø Dø Dø Dø Dø DøD@HwXHul DHv| DjHKbfDHIDHJD,f.Hp+H! DH4 D@HH2 DPHB D@H"BfDHDH!DmH3H/DH2D:H^fDw~H\DH]DfDH pwiH p DoH p3 DH# DIH$DH_D)HdDHpY DHpl D\f.HLDHMD2Hy DHz DHpZ DHpn Df.Hf DfH{ Df.H:D9H;DH DH Dlf.H&7DH'GDBH?DHC$D"HODHRDH DH Df.Hp DVHp Df.HfD)Hg DHp DHp D\ø DøDø DøDøDøDøF Dø DømDø Dø Dø# Dø\ DøwDøDø'DøDøDø DøJ DøT DøDø DH3`wqH!`@H`mwH`2 Dt1H`? Dt#H `& DIf1fDfDHC`CH;`JH7`DtH9`&DtH5`q1DufDH+`H%` D{H'` DiH#` DODHK`;HG`D+HI`DHE`DDH/` DH1` DH-` DH`j DH`{ DH`` DH?`YDvHA`hDdH=`GDJHO`D6Hp D$HM`D Df.8Df. Df.L Df.fDDf Df.zDf.C'f+wEf fvff(tf*f1Dff#wBf1fufD1f&fufDffǫ1 f&oD1 fuf1f6fD1ftJvft1 ffDfw1fsf>tf^1Ð11f11fffff.Sw`$`D@['D1+[@D1[D1 [D1[D1QD=vjD=v|D1AI  Fg1m Fg[fDeS] :G Dwf$@ D/ B) *,  *Dt+ufDfD[fDO )D j? JAEtErBDtC0EtD1AI@@Eg1SEg[@L wrE ( ~ dN jDP(E[fD03 v5 , EE[@  A DLDAD3D[o *j lND`EmlDnD [Z> _ZbD``ExaE[bf*D)DaMD[475E6PE[@r/4hE:D[ÃI!LJ`E.D[fFE2E'GEH8Ef[fpEDED[ÃqDErEs E[f DrDgDYD[fE/`E$EbqD[ø@E[fTw=QEXER DSE[fDW0D8UV+D[& Dg4>rD[f\t]E'^yD[E{D<=D[f.#D0%@E[@EE[@MErNE[fEOE[@-D*.|D[f.WDND[@8pE9,D[ÃxtbD[ÃcdE[ÃD[Á XDo)D[ÃXYiDE[ÁAp0E[øD[øhE[øLD[øvD[øbD[øSD[øD[ÁF,D[øXE[øE[[D1D[øD[øD[ø0E[ømD[ø+D[øD[øED[øE[øE[øD[øsD[øD[øD[ø0E[øD[ø@E[øD[ø6D[øE[øD[øE[øHE[øE[ÁǫLHoSH H_iH_H H DPDHDHDHH=q 'f+:lf=f2ffquHpDt>D1II@@ =g1 =g[fDHoHoRHo}HoDtDrHoeDtHoD[HfDHP2HF DSQDHH YD9H!gD[Ho3Ho]WHADgHKDHPD*[fHfD"H*D/D2DHG[HoKHoD[DDHG[HvtHD-DDHG[DHoHoDHoDHoD6[DHPD$)DPDHG[ÐHoDrDQDHG[fDHPDq%D#DHG[fHoIDFDDHG[fDH9D!\DjDHG[fHoDDHoD@[H DDDHG[fHoDD$DHG[fDHo6D[@kD[f D[fD[f'TD[fwD[fDD[fD[fWD[f D[fD[fD[fPD[f.D[fD[fkD[HH=v:f=\'uVHH=wGHHE #'fOf2uHHt[úDf ftifHH 0EH[ff&qHpD_[H`/EuHNHpHpD'[fHH3 H@0EkHpzD[HHH /E9HptOv9HpDHptvD[HsD[HpDu[øD[ff='St;t[D1S[D1>fDpLELIF,+FIGISu[\D1f.D1AI@@@;g1n@;g[  ju[hE13lfv>[E1@lw2K0[E1DbJ[PE1xrZ[E1L@ ) m[$D1:[pE1[ E1[xD1[xE1[?D1[HE1[ E1p[(E1^[E1L[E1:[pE1([xE1[XE1[E1[E1[E1[E1[E1[8E1[E1[E1t[E1b[E1P[E1>[E1,fff.AWAVAUATUHSHHMLtxIHH5'IIL1MMMt^LHHLmH9t51pEHHLH1裁M9tLvE1HL[]A\A]A^A_Ð1HHH9r_@E1NHHLH1E1GDL%' E1LH1LE1}HHHzHT$HItHT$DAWIAVAUAATAUSHHH|HILHHH=H9uxH{HIA]DEu *fDÉ؉DM,LD)'IECuLLH[]A\A]A^A_f.E1H1H1[]A\A]A^A_úDҺD1H1L1눐SHE1HH1i1ExHH1F1 EUHH1#1E2HH110EHH1H&H9t1H9@D1H=&H¹`E1H&fffff.AWAVAUATIUSHH)HD$If.HT$IAMFD1DE1,@C41Dgt+IIt8D9D1ED<uտ IIu1fDA<G^v.H9H5&Mc M"L|$M)$H5m&H []A\A]A^A_DS&@@tfD D/f+f2u,H?H (=:& /D,H T$ ufHwqHHWOHH ,f.HH f SRfHH9E-DH+H9pINfD>fD11fLGMXfDfDTX &Lfw]H0tVoHfW^fD NfDf>tuptH T$HAfDH T$@1fDftf fH@{fH<$1EE+D=gHM=gD5& rxlfftfb 0 &HH9tyvKHH9t|H H9tcHH9LLHH9t;H H9N v艿fSt)@u;@uu@tV #D[H5&0fDH &cDaDu#1uLt7 #D} #D1hDu1uStft' #D%aD1oDu%t;aD[}D1faD1vDu[ATH1IUHSHH5lHË$HŃ{te1DHƿ1#LHH1k$DHՉ1HH[]A\1HLHkHË$DH1]Df.1IH1zHH[]A\fD1HLH(kHË$DH1>~CDtھD1HH[]A\fuԺHDMD1HLHjHË$DH1访tIuDDHD1|HTHlef.DDHTD~Dtt!Dtk&tdLfvpf>tjtrtL~fthDǹ.D aHHD$E1E1MHuBDAH} EH &H} C&CM9LHLH&H}HC&H}H&H}HC&=Ct=c-CVfDHT$HtJ<O&C/1DưH1d@H|$Ht虯L葯H|$tH|$tMHD$L(HD$H([]A\A]A^A_D}D1_H1edH|$HD$tE11D'IL$ It$IH=HHD$$HD$HHD$fAWAVAUATUSHH(HN8iDHT$HHs 1HHHIH@HH9H1D{HK HsIHHIL%&M'H+&HAD$(HD$HHH9 Lz^HHD$E1E1MHuHfAH}EH 6&H}HC#&HCM9KI,H&H}HC&H}C&H}C&=Ct=d-CWHT$HtJ<&C/1DH1b@H|$HtѬLɬH|$tH|$tMHD$L(HD$H([]A\A]A^A_D}D1藭H1aH|$HD$tE11D_IL$ It$IHuHHD$ HD$HfHD$fAWAVAUATIUHSHӺH=N&H $LD$1DѬHILHHIIHؾIIIL[HI1E1MtTDH@AI\I,H&H}H&H}HCfHCDI9wL H$L(HD$L H[]A\A]A^A_fD1DHILHHI"IHؾIIIL[HI1E1MubADI9OH,@HI\-LH&H}H&H}HCef=@&HCu=&tHKHHH H8H HH(H HHHH H HCLL贩1D質H1^fH1[]A\A]A^A_ffffff.AWAVIAUATUHSHӺHLD$D&H $E1D?LIHٺHYHIHH|YHH1E1HtKfDHvM,AL|LA&II}/&DIGIGH9wL蓨H$H(HD$HH[]A\A]A^A_1DtLIHٺHHIHHXHH1E1Hu{fDADH9eHvHM,6L|La&I}IO&f=&IGIGu=&tHHH H8H HH(H HHH%H H IOZLb1DaH1g\H1[]A\A]A^A_ffffff.H=&tAV@AUATUSH=.&uWHIźZDM&1DE-ا &&IH5&HHI D&E1LHEDH߾A&H@HEH{&H{HEо&H{ HEؾ&H{HE&H{HE&H{HEx&H{HEȾH a&HED;% &PLȥL-&[]A\A]A^fD諦 &&IH5&HHID &E1LHEt@H߾A&H@HEH{&H{HEȾ&H{HEо&H{HEؾv&H{ HEc&H{(HEP&H{0HEH89&HED;%&PL蘤11D1莥H1Y1ffff.AWIAVAUATUSHxY&uD~&Ek&L-&EM߾QHH7&C11HTLHLfHPH9txuHPHH9HuHH &ueD &EuIHx[]A\A]A^A_DD&EtۺE1sH1褦fE@膥HHD$(Hw&E1L|$ HD$`EHD$8HD$HD$HD$0MHD$AIPA9ssA|$uH- &HA$HH;&s{AD$(9sHHHk&{E1耣HH1W&H|$HtIH|$H6@%D1'M&HfD1H1W1SH9\$t;H|$HtʡD3&HT$`HH|$ EH\$HD$H|$AD$,H;D$`Ht$HHC<^HD$@(;&H|$HD$0Ht:HD$8HD$%D1'HD$H1=DDIL$ It$IH|$ %HHD$@tHID$ 1ҾHH[It$8Iō@A-&5&IHD$(AEDxHD$@JlLt$(Ld$XDAN LH&HHtE &L0k&tMKDHH&GHZ&HP0H;58&H 2CD]D1* ID`IHH9H߾H(&D-&ID9-E1蔠AMHDD1T뫺`EDjE1SD뾋BHE1LL$PD$H1t$HH13TLL$P&LH=&#H\$HD$FLd$XH|$@՞HD$(gD1ɟ&H%D1誟HL,IL-c&L;l$0tVH|$Htm14HDlIM IuIH|$ HHD$IE Ll$0HD$8HCH9D$8HD$HD$HC;3&HHH&H%&H|H;&H4Ht$HIH|$H$衝HD$8HD$HD$0oEA #DtKAADt?6D1LL$PdLL$PI  =g1!A=g1ELT$P%LT$PLL$HIDHD4$1L?1IDH1./D1ɝHD1賝H8ELl$0HHD$8HD$0Y%D1jHD$HD1RHD$H/D17HD$Hiffff.AUIATIHUHLSH1HH5&urHHLHI~Ht31pE跜LHǾ1E1PH9tH腛HL[]A\A]H)& E1E1eLH1HePHHt @O@E1$LHǾ1E1Puf.AUATUSHH(dH%(HD$1=&HD$E1'~cW@ D1ALݝtA Lct6 `FutIH5R&ALuHt$dH34%(Du]H([]A\A]f.Hھ D1AU HL$HHHMHIHIGKAWAVE1AUIATMUHSH8H9JHD$pH4$LL$fD0H@RHH:Ht肙H}Htt1lDLmoIM IuIH; }&L &HEHEHELIMM9L HPL9soV,9sHHLI9uVu@ U HMHV LEHvH;HUHEf. tHPL9rf1HU(HJ< &HUIʼnD$ HEH](H RH H9t?LE1@H|$LH|$ HH|$(L;M9s^EtKHD$|$ 8H](H8[]A\A]A^A_{/H81[]A\A]A^A_L8HM9rAAM9HKH<$u IIIL DLKHuML~5&MM)f(fɿDL<͠NE LtuDLIDH|$pA%D$ A@D l$ LOff.pE1ߗLH1NHEHUH RHH H9H|$LL$ LEL$(f.ɿxDL0HL[]A\A]LGMt)H9r$II)L9vMHLf.IH M9'DGHAAuHMI1E1fһDIH M9WHHuLGMtD;ouI9rLH)H9vHHHLGMt#I9rLH)H9vHHH@IH M9OOHHuf%D1I9HھD1 vFD1H0D1E1ؓHL[]A\A]1UHSHHtN1D萓H9HھD1sHKH\HH[]@H9HH1>$H"DHH1%HH[]HH1=Hŋ$DH1$`Df.D1H1EGHH[]D1\H1荒HH[]EfDfEfEf꾢D1-ATIUSHH~D1L9uBHt$ HL1<T$ H"DHH1貑HH[]A\fDHھD1茑HdH\DHt$ H19<HŋD$ /DH1NtJ@ut@@ #D1DώH1ENH5&0蟏H5& 莏HH[]A\fH i&HDE@aDN1@gf.aD1VDz@ 1@@aD1hDJ@ P1@@d@aD1uD@ŀP1faD1DN1aD1D躏N1 0aD1D芏@N1aDD1Z_aDD18D@ #D1_D @1@ uDaD1oDڎ@@1@ŀ$@aD1|D誎1aD1Dz1aD1DJ 1@t4@aD1Dfdfz #Du d, #D'f #Df #Df@@> #D9 #D1NDG@1@@tz #D$ #Df$L #DGf@ŀ& #D@@ & #D@. #D)f@d, #D'faD*fDAUATIUHSHHHH&HEFD1HAž0D1DL1D͋D&HEbQFD1詋H5B& ؉HkHFD1vH0D1b{vDH¿1B{@@DH¿1CD<t<yDt<DDHDп1D{{H¾D1躊H=&H[Ht H;&D1LHHƿ1zH5&H []A\A]韈H=&HѾD1݊HH5ǫ&HED苈5fD DH¿1fHD1܉uHD1載Hh)AUHIATI1UHSHHP4HË$HŃ u!MtLHAH[]A\A]fD~ھD11I9uCHt$ HL13T$ H"DHH1HH[]A\A]DHD1̈H褆HlD1LHHx3 $HúHL9te2D1IHHƿ1uHMHHD[]A\A]D1DH1<E0E1Hƿ1D1…H1<HAWAVAUIATUSHHHh&H|$(D$HD$&u!MD$HD$P9D$1HL$you1JD~H5j& p~:fDT$`HL$hH|$HH5:&Hÿ =~HDHtDHH|$HD$`HL$ILL$S$HD$HH(HHD$@HH9` nEf1AfDHH H9HL0uL@MtM9wLL)L9sHJIIfD1$D/HS$I$D1 H0$D1GC$fD$D1GC$fDi$D1GC$fDX$D1Gf.F$D1oGC#TfD3$D1OGC#,fD*$D1/GC#fD!$D1GC#fD$D1FC#fD$D1FC#fD#D1F`f.#D1FC"4fD#D1oFC" fD10#DOFC @1D#D2FC ffN#D1 FC!n[#D1EC"W1h#DEC"B1u#DEC"-1#DEC"1#DsEC"#D1VEC"D#D17EC sfD!#D1EC KfDIH E1E1fADIH I9PHHuL@MtD;xuI9rLH)I9vHIIL@Mt#I9rLH)L9sHfII@IH I9PHHuf.%D1AILOCD1CH e&"DeDr%D1AHHD$@HHABfIEIHB @/D17AH:D1AH!1L?=-s&Hr&/D1@H?D1@H)E1YE1@H1BDr&9EV D)"DAAUH1ATUHSHHHcIA‹$E1HfII(MEIE9`"guI1$DM`"gIU?BAEt^1HHH$AMH9ȉIUHH<$?H9HھD1AH?H\X@E~DD1AH9v_AuHt$ HH1BT$ H"DHH1TAHH[]A\A]AA:B$DH9w1D>H1뺉꾢D1@1HHH$HӃA%D>H{umH;%D1l>H1@DHH1HXHŋ$2D1H.>HHƉ1Z@H2>HDH1HHHŋ$HÃ[ @%D@=HH1HHHŋ$HÃ~^u%D 1HHHH‹$HÃM~9RS~$DV#%D HH<`+g;$D%DPE- DE%D;T$0YH52\&@89HCT$0FDMl%HH@HEf='j&HHDI1;:L0D1': 6D$Pi&f)tBHi&HHHTPfDHHII9rHHp I9HPH9u1XFr7LH159l$ N6H$H88S1E7H1FD1T$+9T$0D19H5Z& 7t$0H|$`E1E11ɺ躷@DI)LDFD180D18H BZ&W%D9f8F1L$+6L$H1L$ ?H$Ht4H$Ht4H$Ht4H$Ht4g&_%D15H1D15HE D)"D 6ffff.AT1HUHSHHHUIċ$AT$HÃ?V$`D;&D1O7HھD1;7H5HDH[]A\DH1HHHŋ$DH16#$`D@H1HHHŋ$%DH16=Df%DKfDHHH1HHŋ$FH1^6%D13H1-6HH[]A\ÐHHH1Hŋ$FHH1HHHŋ$%DH15.%DsfDH1HHpHŋ$&DH15FDH1HHHŋ$&DH1.5uWFfHHH1Hŋ$FH14-f꾢D14HH[]A\HHH1hHŋ$FHH1HH@Hŋ$!&DH1V42D12HHƉ114H 2HDE~DD13H9AuPHt$ HH1T$ H"DHH13H %D^HھD13Hd1H\D8F&f%Dv%D0HfDp%Dn0HfDk%DV0HfDf%D>0HfDHD%D0HfD{%D/HfD%D^%DNpF>F.%D1D0H1AUATIUSHHHufDL(1tdHCHHHa&HtQH=s&HteHH;s&r1%D/LH0uHH[]A\A]f1/DO/HgD1/HIfDEa&1L-`&Eu*fDLH0;a&H,HLt2H= s&HtFUHH;r&r1%D.H롐1/D.Hf.Dq.HifH1[H]A\A]AWAVAUATUHSHHxdH%(HD$h1$HT$(HL$LD$LL$ $ HT$(LD$(HL$0HHрt7=6^&:={&L`F@H|$0,HD$hdH3%(gHx[]A\A]A^A__&f=ttf2?FftU@ftE@ft5@f t%f1 F -H1DŽ$@HT$(LD$(HL$0HHV(=']& =y&.Ff.11,H1.1H|$(DDÉىҾ_0D1EDD$ I.DD$ IV^&fi24f=#ff=ftjf=0 f=f=IN$oEMx&0DL(0DHD1-]&f=&ML9l$v H|$0D1T+LHƿ1-U]&f+H5 O& +D%y[&Euf=&]&~H;D$(FL4@ILHD$0HHX9[&a\&Dftf+DEËw&IݾS&DI HٿEDD$ g&DHD1,DD$ 7f.f=Zgf=ǫt6"f=rK$f=A;f=t f= DŽ$fZJfjfisf^tfetf\f=f=sf=f=sf=tf=@D$E\=Y&HD$0 1DNl01 +ML0D1+^[&f+ M 1DLHھ0DH 1H(@+f-Nf@ff(^X f$f'I N$ED0DL$4M%fDILl$ ='AE< M=X&H|$ A IEB%DHtHL$ H;$HHBwpA9ǺrAW)1ED0D*M}M&AU10D$pD$E8HD$0JT0HX0D1)rY&f=AXf=ZfDf=03 f=Ff=ATIN$E,@fTNf>fLfFfKIN$ f2uwO&<$< H|$@0D(1e Ht$@fjfIYN$@Et@f=0%>I4N$EOf=f= IN$hEf.f=Pvf=vvfX6 fYfI"N$@EfcfeIzN$EDf=^AQB$EA5.DoA#.DdA.DYA-DNA-DCA-D8A-D-A-D"A-DA-D Ao-DAY-DA=-DA$-DA-DAFA,DA,DA,DAFAFAFApF}A,DrAHFgAt,D\AV,DQA FFAF;AF0AF%AFA:,DA,DA,DA+DA+DA+DA+DA}+DA`+DAO+DA>+DA++DA+DA*DA*DuA*DjA*D_A*DTA{*DIAd*D>AM*D3A6*D(A*DA*DA)DA)DA)DA)DA)DA{)DAj)DAY)DAI)DA9)DA))DA)DA)DA(DxA(DmA(DbA(DWA(DLAs(DAA\(D6AI(D+A.(D AXFA0F AFAFAFAFApFAHFA FAFAFAFAxFAPFA0F{AFpAFeA(DZA'DOA'DDA'D9A'D.A'D#AFAF AxFAPFA0FA'DAFAf'DAK'DA0'DA'DA&DA&DA&DA&D~A&DsA&DhA{&D]@IN$@E9fL#I I)N$`E fIN$4EfDIN$=EfDIN$`4EfIkN$EfDIKN$@EffDI.N$VEIfIN$E)fIN$EDIN$EfIN$tEfDI8N$1EfI nN$@EfINN$`EifI .N$`EIfI3N$DE)fIN$`E fIN$EfDIN$EfI N$EfIkN$NEfDINN$ Eif7I*N$@WEEDI N$`FE&fDAwAfDjAA/DAv/D/DLGfDI N$@EfI@~N$@Ef=gI]N$ExI=>N$EYfIN$E9fIN$`Ef5IN$ EfSIN$E@F@FFfjqA BAzAbA =A/DcA?0Dke= D&-t =C&IGHL$Ef+fVfPffSfTgf(f$JfD5fEAA^/DJf= f=Yf=f=ff=YfDRf=0%}f=03f=ATAW0DA80D AW0DfsgfDfq6'fBfff=vvf=ff=Pvf=)f=f=Aj/DA 0D A/DA/DAP/D/D1Hf=Zf=WPf=PAA/Df=f="f="A/DuD1Huf>Kff*f+.ff=f=Ef=wfxwgf'gWA L0DA%Df=#)f=&VfDAUATUHSHH_ H1IP1D Hm1LIHH5R&Hv7@E1 1HLH1HH[]A\A]fDH{OHHtLHھH H9tpE1J LHH1JH1 fDHaQ&HMH; >Q&H s8 F1 HHƿ1%H1[]A\A]%D1 Hf.H-YQ& E1 LH1H1D1r Hbf.AWAVAUATI1UH1DSHӺH5 HIHLOXIHD$01Mk1@ F HHHƿ1L#11D 11DI 1Hź1D LHH1 I9H\$:LD$,I~7 HHWHLH MBD5H9DH޹~1D HA/2DH<LCDA42DDHL$3D1 HL79DH޹b3DHUH޿1D)ۅ#HtHV L;|$LHT$H)f=b<&2H HT$ H}W&HIW&IH] H}MfiW&IHD$HHIHT$ M< HL9L9LH)H9B|371MaDA42D71DI=`;& 1HHT$ H}V&HIV&IH]H}MfV&IHD$HHIHT$ M<HL91@ F1H+l$0H1H西 F1HL$HLL1H|$0D$,HĈ[]A\A]A^A_If.hIj.Ik Il4D1CH1t LU&HjH|$xHHBzՔHHH?HH)HT$x 0XHDHD@ t$@l3D$1 9@AE e AkA1  F1pIDHA42Drf.=7&EAA =7&EAA =7&MA I =s7&HHD$ Hd$ HHD$ =U7&EAHAIELIF\$,\$,VfA42DHL7 3DHA# D1wEI@@;g16A;gI6I14D#H1THD$HIGfA$15fFI&I9u _fAE A9 7&f)f+f=&A!A#A A2D@@HLWB&I|$CDB&I|$C1B&I|$fCB&HCCIM9} wL$H8&HAEHH;8&[F1_HHƉ1H$HXLpLk~cC<  $h$EDH= pH=pMt$fDHHID$HD$8H|$PMH|$hH=7& LHID#&1;7DE fHt$hH|$@IL|?HH I1LI@&IHL9rH1F1LHƿ1,F1HSfDLQFD1H5& #H=6&HmHt H;-6&VD1uHHƿ1H5<& HL9sqI HھD7D1HHH-86&c1FDLmND g"&E6H=&L麬D1*fDLH|$X|H|$`tH|$xtH$y H$dH3 %(H[]A\A]A^A_ID$HD$H!ID$HD$`H|$@Il$IN W#&H"&HHH9rY F1HH1ҧHl$PHP8HxHH!H9rHHP(H9DH@H9sH8uH|$@K,I\$HqH "&HL"&HHH9lHH@H9SH8uHP8HxHH!H9rHHP(H9wHXH)fH|$@Ml$J,GF /"&H!&HHH9LH@H9H8uHP8HxHH!I9rHHP(H9wLhI)f.ID$H$NfDM|$>fDID$HD$X)fID$H$fDH|$8x=&L|$XHT$HHL$8H|$@EA A=o&EAA=]&HH=L&EH+T$pLAAHIIHH)Fi &Hm &HHH9H|$8fDH@H9H8uHP8HpHH!H9wHHP(H9wH\$8HXH)HCFH1HhA ICIT$H9 CT%B<^vվ57D1H & 7DHCuGtH & 7D`kH d& 6D@HCtH A&6DHC!H & 6DH & 6DH & 6DHC  H &6DuH y& |6DUHC ) IH B&6D)H "&?6D{+H & T6DH{H+H5&)HCE H &s6Dit 6D1f=&HLc8&LH$8&H{ H$8&LI8&H{H$~8&H{H$g8&H$Hþ.6D1H=&HٺD1 L$L$LH$F1HC FH1H;SHK5D1D F1'LH1Ll$h1 FHH1 DH5 &Lc LIPF1H1蹝1 F1H\$8H1HO1Q7DnH|$@HIH5HHt1j7D=H1n1y7DH1NDg&HD$8EH]H= &HѾD1`FM17DH117D17DH17DHD$Xr17DHD$P\HL$PLD$XEHH$D1yHD$8HHHR17DHH1CHH+|$8DH_5&DHH L9rHD$pH9D$H HH|$`KLCо!7D1c~Ht$hH|$@IL3HHI1LI4&IHL9rH$xH|$@> )&H&HHH9CH$LD$xL@H@H9 H8uHP8HxHH!I9rHHP(H9wHt$xHpH)QFD11h5DnH|$@ILH2HH$1F4LHƿ1bH &1@F HH@H$1L$L$rf.EAAAAAA >Ex #DHHH;$H2&H{I2&H{H$2&H{ I2&H{I}2&H$IPH$A3DL$ HDlL$HL$H L$@$11HDH(&Ht L;-(&[}5D1mLHƿ1H$1ML5D|Mc15D"H%D1HH &6DHCH &f6DHCH &k6DiHCH i&_6DEHCH E&6D!HCH !&6DHCH &6DHC8H & 6DHC LcB0&H{H$+0&LH$0&H{ Iž0&LH$/&H{H$/&H$H6D1HhH)7fH(FJ4(*D5D1H$1"+1 F1H1؎Ht$xyD5D1Hf F1H1苎Lt$`fff.AUATUSH=l &ELFt*(F1yH11H[]A\A]f=s &T.&uzH= &H =T &jP &t@J &n9r 0 &H&H[]A\A]HW Љ &f8D1H18D1HgHƿ11 9DHHHgu߿ 8DX-5&@t@8D1hF%HHƿ1S&]D1DI  `Fg1`Fg1FHHƿ18Ds&t ۽ #D1FjHHƿ1AAg=/&c1HúF/HHƿ1]&1(FH14=&1HúXFHHƿ1=&61HúFHHƿ1H&1FxHHƿ11FUH1H/&FD1n1Hھ0DZ1F H1:H&!D1"18FH1H&!D11Z9DH1H&&U%ۉfK ;f f**f$Pf(AA@AAABA9DAgt1:D1HƿAg^H&1`FoAgHHƿ1n&1FAH1HoI&1FH1HF$&1FH1HH&Ht=&H5% 0&10FH1H&1hFpH1HH'&Htx&H5% ]&1FH1HJH&-&Ht =t 9&H5% L}G,&f.G(&fD1DI  Fg1Fg809D1?H{fDfj f=HfDrf= f=f@@z@?DAg|' D1H D1oH19D1OHHP ?D1kfD@,T¾?D1B<DK9D1&H]1@DH1f ffJ!;DR(?D1jf[7fcfi?D1Ag9H! tHy€DHEHҺHi@Ճ c$$E?D H 8FHMSP430XHHMSP430x4f@4HHMSP430x4f@3HHMSP430x4f@2HHMSP430x4f@1HHMSP430x3f@3HjHMSP430x3f@2HRHMSP430x3f@1H:HMSP430x1f@6H"HMSP430x1f@5H HMSP430x1f@4HHMSP430x1f@3HHMSP430x1f@2HHMSP430x1f@1HDf+ f2 H, 64-bit%H%@ @ŀ@@'=% \@tt?DAg$?DAg` f=Af=f=AT| H, simple%H%ff%=='=1?D1:DHIʼnw $'EDAgH! tH, cf, is€DHAHDҺHHAgHAgHAgHfǁAga ƁAgC@@0< 0A8DAgH! tL€DHAHDҺHHAgHAgfǁAg, ƁAgH%8DAD1LH@DHHHAg HAHP H 8DAD뼻8D6D8DA6D뛻DmDfW$fXl0`2r%, m3%f%>5A0%, G1fD%%f@ @w @T @1 @  @ŀ   | %=Z=====DAg%= + t=/e=DAg_   @DXR &0=DAgH%=Z=;= u>DL~ Y 4   @$?DAgN@ /?DAg"@  ?DAgH, reloca%dule%H%Htable moH%R 8@`0FH, highgprsR%HA%f-B%G @$ @ :DAg؃x$ (E{>DLVL>DAgH%:m>DL뷾S>DL릾FLH, sh3-no[%mmuHL%u4>D LaA>DLM'>D L9H, sh4-no%fpuH% >DL>DL>DL%, shf%5%, shf%4 >DLH, sh4al-_%dspHP%yH, sh3-dsf@%pH1%ZH, sh-dsp#%H%=%, shf%3%%, shf%2 %, shf%1%=qd@A@` 0DEu`W@ Zg@u[DAg趿a;DAg裻N>DAg芻>DAgq{>DAgXV>DAg?1+;%, v8f8% ?DAg m?DAgJ?DAgٺH, non-PIACH%fD-%H, 64-bit%H%H doublesH%?DAg%>DAg i:DAg:DAgڷC%, PIf%n9DAg覷[?DAg芷>DL>DLk=DAgI1=DcHƿAg!HS%ME ;DAg==.1W=DHƿAg襶H, fido_a%H%3q=DAgo ===uQ=DAg9=DAg HY%A8DJ9DAgE1tPt5A!!Ճu׺xFAg諵Ѻ9DAg蕵뻺FAg륺9DAgi9DAgPE1*=@ts=ud9DAg!Y!!=tw=u,9DAgƺ :DAgӴA먺9DAg赴H, fr405H%M"H, fr400H%+H, fr550Hz%Pd=DAgEH~%=DAg%H^%H, m68000 %H%H, v850e1%H%=DAg˳H%o=DAg裳H%G=DAg胳H%'H, fr???Hn% H, fr300HX%H, fr500HB%H, RH850 1%ABIH"%o%, emf%b=DoeDAg豰\H, tomcat%H%?:DAg{L:DAgb=:DAgI:DAg0q=DAg~"=DAge1=DHƿAg=v@, LEfA8fDUSHv]oqZoDtoDt@DrfH[]fg @Dt%Dr @Dtf.o@ADyPDhoDRf$)D-@Df.TD@DbfoDoA9DYD"fDkD@%f>fGf(f2uE%=x<p1@D!y>@Dp'@DA蹒AD Ag1ѯAgDfD@DfD.DfDIDfD\DfDDvfDDfDAwf=X%2ADGfDDAD-AD1AI  Ag1ªAgf=f=fi'f=u@D@D@DuqAfDB$(ELADN@DDVAD:iAD0sAD&AD>ADfft f )HŠ-EHf=p@D H@-E북AD+ADpvADkp]H-Ebp@D>:pt1p_@D pR@D p@DD߁y@DAWAVAUATUSHHdH%(HD$81%H|$uCH=%%1HL$8dH3 %(vHH[]A\A]A^A_fZ%t %H|$t4%E1D56%H%H|%H%E1`HsH5%1H|$ɪAF1譨H1\D%%Eu7H@9-%vOEHHbHtD%u%EtH59% H@Ȩ9-f%D%K%wEH=%H=Z%1`FH141CDH1%E1H%CDEDIL%^%HXP1Ω5%:f.I $HQHSt=LKMD$M9rwM)MD$0MPM9wfHt  H{ IM9rL@HH?%H HH; % JkF15%DHP9s}HCHǁ:SI $:HtHRtdt HuDLKMD$M9rM)MD$(MPM9wLK M9HP9rfH5% A諦D9-H%^@H=%RHCL%%H%HC(MHb%p%E1ACDu&@L tfAD;=%cDHHLIlH5%HHH;%r1%D]LHƹ uMIF HA~ IVH%HCH%H9~HHK(H9nH98F`fDL#I I *IADI@DM$I %f(/  f=M f=f* f2 ICD fDf=R%2Fo/D1HGH|$1AACD  蹢`H|$Ht$1Jg%胤%0F1茣JgHƿ1踥D%%@D1WHIPtd!IADtI+D1]CDGD-`%ED%,%EHSiCD11FDLcD%ELQFD1٤H5r% 1FDLc 賤D%ELQFD1菤H5(% 辢HS(iCD1iHS0CD1THSCDHHуHHɃD@EɃWH҃΃R1 HS8}CD121F蟡H1UM$)DjIHD[fDIQtdBD>IRtdBD,16CD'H1Xr%Fu6D=9%FEu%@F1H1F1ǠH1D%%1(F蛠H1̢F1vH1BDI`BDKXBDKBDnBDeBDBDBDCDBD}~BDsBDiBD_BDUBDKBDABD7BD-DAWAVAUATUHSHxf=?%Lv tHx[]A\A]A^A_f56%IH=%H HHH9sIHfDHPH9vC tuS,9sHHHH9uHS Ht9s(sŃLL$HsLD$@HL$PLD$LL$If=|%*=%ED$D$C(H4HH5 %HT$`LLL$LL$HD$HT$@Ll$PK<1H|$HRMIDI9aH\$ MLD=%DDfAifAYfA0!WL F%MHH HHDHD$HH4I+11HsLH;T%LT$PHT$@H%HRHIH95m%HC!D=%fAfA+fAAfA+LL$GH=t%t*F1葕H1ID=%fA^4fAtcsfAfAfAv7fA1ALT$PHT$@@D1EffAY=h+A@B$)EfAiE=%-t =%L p%MHH HHDHD$HH4I+11HsLH;T%H%LT$PHT$@HH HHDHHL$H %fAiuӀ=%-t =%u1ADD踪4fA2 ,fAT  fA& fAD 1AfA@.HM LH9t$M9HC5%IH ILDL9l$`L=p%M EIH;J%d F1LLH1ILT$PHT$@fAi2=%-=%f."H=_%!FfA#fAFvfAjfAj fA01fA.>fAtDfA$g yfA*fD fA'fA(1AfA&JfAǫAD$EK"1AtH|$uH|$PkUH%H+MIH; %L, F1>LL6fA(, fAOfAfAfAHH HHDHHL$H %fA#fA@fAxfA7 fAjfA^ F1NAH1PD[HT$`LLL$FLL$HD$fA>kfA*fA+fA2fAS@lfAZEfA03t fAFfAAT*f%D1oL;IfAt]fAQfAqAfA.fAfAWqfAPrzfA>l fAKfALq1AfAKAGf=fAL$AGf{fAfA+1A&fAfA2SfAfA&fA1AfAutfAZNfABfAx  fAZ ` fAqG  fAe fAiK =%- =b% 1A DHD$IIL9A}H c%DH9HD$ H;2%L$IL+|$PHIL9Iž0F1ŌLHLL1CLT$PHT$@{fAt0fA1APfAfA1A6fAQ fALfA-fA!DfA fA fAA)A fAfADfAfA.DL$fA^LSt fAcAfAvvtfAVu A vDT$8LL$0LT$(LT$(LL$0T$8uXfA2%fA_fA&zfA`1AfA!IrfALIEIuH+3%LT$PHT$@ofA\LfAYzfAZifA[^f.fA@?D1-L;IfAefAfA+I1A,fAfAr1AfAsfAtNDfAfAfA"1A{fAsfArTfA&H@fAǫ3@1AfAEfA@fAfAhfA xE1LT$8։T$0LLL$($%LT$8D=%T$0LL$(ISA1A1A1AfA1AHfA0=@1AfA>tALf1AafA1AfAfAZf%D1蟇IfA,1AfATfAUfAV1A P1A'fAc.fAe*fAi fDfAAA fA-fAIfA+1A,fALIuL%fA^&D1A z1A"l1A^fASJfDfA1A.fA+fA-D1I1AO%D1ЅA}Iă1A31A.fA>tALf1Aw1Af1AX1A JfA21Ae:fA0%2fA>tiALfX1A)@fA1AfAqrd1A1AfA fA-@fAPvfAvv fA[fATfAtnL-}%M EIH;W%xF1LHD1:LT$PHT$@1AfAsqfAtu1A\fAPvwhfAY1w41AfA#fAW?1A D1AfA#fAFyfAhfAt81A fA1AfA1A~fAWfAYsfAtfA1AH1A.1A1AO1A1A 1A fASwNAGf1A%D1ID1IfAUfAYAWAVAUATUSHD=%dH%(H$1H|$ Eu)H$dH3%(sH[]A\A]A^A_L%%%M@E1fDv%S9DkM<$DHDHH%H=U%HHH;0%LBuD5ǰ%E|$E9H%HoD<(AS%9nEVMd$M.H _%HL$5 D5[%E2 D$0K_PD$0HD$PD$09_% %;D$0L D$0HHD$H%tHt$ H|$qHHD$(H|$W H%H` HL$ H; %H 1CDHH1΁5%H=Q%H HHH9v@LD$HP tuP,9sHHHI9KHPH9wHD$Ld$(Lh HHMHL$HT$IAMFD1DE1,@C41Dt+IIt8D9D1EDԀuտ I}Iu1fDA<G^v.HU}9H5*%Mc M~L|$M)$H|$(}H5% ~H%HL$Ht$ H|$oHHD$(H|$5 H %H HL$ H; %Hc1CD}HHƿ1H\$Ld$(H|$ LH+Lk HKMHL$DHT$IAMFD1DE1f,@C41DGt+IIt8D9D1EDuտ I{Iu1fDA<G^v.H{9H5r%Mc M}L|$M)$H|$(Z{H5C% |HB%HL$H|$OHn%HXHD$HH;D%Ht$ H|$mHI1F{HH1~5%H=%HHHH9sBLD$HfJ tuJ,9sH HHI9HPH9rHD$LLHh 1H9w&HH9t`FtH9!LzH5% {H%HL$H|$H-%%HHD$HH;%gHD$FHx xFtrHDDCDA 0gA HD1DI}H{7I}H{IP"uú`F1"zHHƿ1P|1%DyH߾{HIUH %DHHHL$6{HL$HxL-%|%L@1/DyH}DayH_AI$xF19yHH1/R%}HھDDL)1J{HxHyHøHx 9p(1FxH1zHz 19r((10FxH1z 1PEjxH1p,\$(LcD-y%E1KL%%HD$Hd$HD$H 0gEHD$u,f.HXytiAD;5%%DHHLI3H%H<AUH;%H<r1%DwHHxu1L9l$D$4D$(HD$(L$II 0gMl$?HD$HL 0gLx_HD$LpMLt$ t$0L%H8%KLH|$HX0gDD$4H%EuI|$HuID$ID$ ID$(a1/DvH1DvHg%D1fvHP%D1MvH%D14vH%D1vHbE1p1FuH1(xHL$HAHAT$0D9ZH %ڀ<u(F1uH1],g%뻉‹[%HHL80gH 0gIHD$8MLE18tHD$8H@H@ H@(-DD HHD$Hh/D1tH!/D1tHD1tHD1tH/D1tH/D1qtHD1XtHD1?tHrIl$1:DD!tH$II@@1rHL$H|$ L$HAID$ HHI HpHIID$HD$H@ H ID$(vVJDDLM8tUM;HD$(HHh0g9Ht$H|$ L"M'%1x11oAVAN An I HHANHHANLl$@HHANHHAN HHAN HDŽ$HHDŽ$HDŽ$D$HHHHHl$`_H|$@pODDItD\$HEuBD$`HH|$@H)HLHD$XquH|$@tDT$HEt?tLqID$Lr-DDHLD$(H|$@suDL$`EuLpHD$Ml$Il$(Hh 8@AWAVAUATUSH( %dH%(H$1H|$u%u-%DHi%H %u.@%%H=%@;%f=& =%^AAH|$ %H%HHH9j H{@H@H9S H8uHP8HpHH!H9rHHP(H9wHXH)@ fE1HD$E1HD$HH!%HHD$`HD$pHD$8HD$0H-%HlD%EjD%EZH=\%LHH=%f%0H|$1FoHl$HHƿ1Hq1PFoH1qHpHIE111HHt$HLD$f.IHt8I9v3I L)fHtIIJ)H9HI9wIHH9uH{(pHHHt$HLI HHHDH9uH|$HHUH*t$Ht$HH*[DDY\$^D$pHMI*|$ AE1VI*YL$H^L$  H*L꾀FIYD$^D$2pL9JLHIIyLLHH H*XfDH=p%=%5Ÿ%L%_%H$D$L$L$MH$H$HD$xAE „ui%%IM8H@HY%HAEH;5%HF1lHHƿ1o5%D$IP9t$pi%L$L$H|$tH|$kLwkH$dH34%(H([]A\A]A^A_f%u.D-/%ED%%EH=~%H|$ $%H%HHH9$H{H@H9H8uHP8HpHH!H9rHHP(H9wHXH)f5 % |%1FskH1mlHHvH,jL$jH|$ٛ%jL jH|$8H|$09lHHú1FjL|$0Hƿ1Lm1PFjH1lM{ LD$pH|$8E1LL$`11LHHt0L)IufDHDtH9HHBIHH9uH}pkHIV HD$0HHH HIDH9uIUH*d$0d$HN H*DDYT$^D$kH MLI*l$AE1RI*YL$H^L$H*L⾀FIYD$^D$kL93 KLHIIyLLHH H*XfDD$IP9t$(IE 1H%HHHdAEHH;% 1FhHHH1j%@FuF1jhH1j%H$LH|$5XHD$hH|$hAE(;M% ;=%HD$@HD$X 1E1H$Lt$hELl$PD1tDDj%IQFD1iH5{% hInHFD1iH0D1iA~讫DH¿1ziA~@@DH¿1TiAFD<t<yDt<DDHDп1DiA~ A~©H¾zDD1hI~H9|$@H|$XHD$Px uH-;%HH5S%A I DfH;$xLl$PH|$h1eHD$XH;u%tHeD$5L%IP9t$NDcHD$hff=H=%HѾD1hDH¿1gf1%DeHHD1g  F1OeHH1HH5%H|$1,gFu_LD$H$L_gHH$LD$LH3gH F1E1dH1HD$%t1H|$E1tcLE1icHD$HD$HH|$H\# i%H%HHH9H<+H@H9H8uHP8HpHH!H9rHHP(H9wHhH)HHHH H*X\ F1cHH1wHH5M%H|$1eF1xcH1~HD$`HD$8H|$8Bb<%1DHHHH H*X F1 cHH11DDbHt$HT+H$IA觔HnH$%AV;͔%H$fD$ 8HHHM%x$f$H%Hۉ$uH|$ ;%HГ%HHH9 H{f.H@H9 H8uHP8HpHH!H9rHHP(H9wHXH)H$H$D$L$H$H$HD$(1DDqaL$Ht$H$HL1HH|$xL$ %HþH$LL$%H$MDH|$(`%HLAL%IǾLL8%f9l$ }Mt.1DD`Ht$H$HHoHuH$H$H$D$L$u*1DDE`H1K$f$Hm%HH|$ҷ %H%HHH9 H{H@H9 H8uHP8HpHH!H9rHHP(H9wHXH)H$L$HL$ Lt$HD$(D$ f%fD$ TfH$%HL%IH|$(%f9\$ H(HH1DD^H$IAHL輐HsL$E11DD^Ht$JT%H$IArH9H$%I;FH9D$@ HD$Xf$UDDVDDHIH1v`FbR_HI8L\H\H|$8\H|$p\V%D1]H%D1]HH$HL$H<]HFH%HD$XH%HD$@]1DŽ$H14HDHH%$]H|$IHK Hs:HHD$XHC HD$@1 F\H1D1\H11*AAHHHH H*X1Fh\H1^D%(FEuhF17\H1h^Ld$0M;L|$Ll$81L|$pLt$@MtMt-HT$`HI,f.LHIBDtHL9uL|$Lt$DH$%IHDHD$H%DLt$IljL觎LDHHD$蒎HIHH9D$@Ht$XD$L$HA;DD1G]1ZDDZH1"]D ;%(FEuhF1ZH1\Ld$HM1Ll$f.HL9IlHtI9v@HHeI,HtI9wLAHL H*f(Xd$1 FZH1iHHHH H*X`HL$HHȃHH H*f(Xt$)LAHL H*f(Xt$ [1 FYH1ZH%H{HD$0Ӧ%H{HD$`%H5%-%H|$HVH,HHD <%Hъ%HHH9H}H@H9H8uHP8HpHH!H9rHHP(H9wHHHHH)Hb%H|$1HZt~F1XH1 HD$8D1hXHeD1OXH F16XHH1HhHD$0AALyHHD$HL$HLWI9L@HHD$8:EAUF$tIHl$ H\$(Ll$8DʼnH|$Md%I$EuHl$ H\$(H|$AHV1H|$0LHt$0H|$8LD$`I9LBHH9tVHHtI9|I9uIL$5HD$@1 FVHH1 I9fL+l$`HD$0H|$LLdv5%HQ%HHH9I|$f.H@H9H8uHP8HHHH!I9rHHP(H9wL`I)LH5ݚ%H|$1!Xt1IIHd%HL$HUHtFs1 FUHH1r  F1UH1R H1 FiUH1/ F1IUH1O 1 F)UH1 %D1 UHE1TH1|1 FTLH1 %D1TL1 FTH1] QD1wTH1}H|$SSDXHD$0H|$H\ Q%H%HH4H9H{H@H9voH8uHP8HHHH!H9rHHP(H9wHXH)HH5y%H|$1U[H|$DӆHHD$pa41 FSHH1B 1 F_SH1% ~Sfffff.AWAVAUATUSHD-W%H%Eu;H=%]DF%E-H[]A\A]A^A_fI=%t5%E %1#EDRȄ%H5%DIHL踞HITH߾PHHH2%EALOlIIHHP%H}C%H}Cz%H} HCg%H}HCT%H}HCȾA%H}HCо.%H}Cؾ%H} Cܾ %H}$HC%HCH(L96H?%LHTP%%t$9s HHL,I} f=%H.%Hs%H%H%/%%f/f.ff  1AHH5%H/UH;%L4U 5 f  x'ـ%G%uQ%uu_%uk5%uaW%uW%uMD=%EuAD:%Eu5D%Eu)=%u = %u=%u=%tiD`EDL hEDLL DDL %tqED L %{ED L~%9H~%SH >DN %H5ހ%DIHLHIH߾P$HHHw%ZE)ALOlIIDHHPޛ%H}C̛%H}C%H}HC%H} HC%H}8HCо%H}(HCn%H},Cؾ\%H}CܾJ%H}0HCȾ7%HCH@L96;F1MH1eH[]A\A]A^A_ÐHy% F1hMDHHٿ1OD-x%1D6MH1<@H1[]A\A]A^A_H%%H=@8E1A3EDLH^AA9ZDHHHIH5%HHH; %r%D1L~%H@%`pFDLK%It"DL}[%tyFL^D=/%Et8,yFL DH=%:  F1KH1}%HP9D-|%EED1{KH1MD%{%E -q|%"F$1=KH1nMD G|%EDC}%1H|%A EDEf.HW H5 %H HH;%U KED1L{Rؗ%EDHID1L z%\%ND5{%EF{FDH¿1zLD-z%HSE QFD1ULHS)FD1@LS(14FD,LDEz%HS E QFD1LH5m% 6JDz%HS8ER QFD1KHK0S,AFD1K5z%HP9-{%ED1K5_z%GH H5g%H HH;B%蒑SD%D1HI\HEDLLH=% `!FH{HP0]5DH¿1J9-z%=y%euz%Lf6 f>X%F' 10HH1aJ@HSQFD1CJHK HS1LC8ED&Jy%H k%EDJS(;y%NE1=x%efDED1IHK0S,ED1IMA}Dk(1 $FFGDHlj1fH=x%!FKfDH5j% GD Xw%HSE[QFD1IHSOFD1I18FDHD w%HS EQFD1H1EDH=v%HS8QFD1HH{}18DH¿1~HK,S(XFDLC01cHfDHKH=i%D1HHSFD1'HHS FD1HHS81EDGD=v%EH i%EDbHS(K,FD1GHS0FD1G=u%HM8EAA=u%MAII9u F1H $EH $H1H !F1DDH1Lu8&DA~zIFINHEu#D ؑ%EtX"DHu6fDD=yt%DsA9THut%H DFHtD%EtyFHt=%\5V%tqFHLw e%tFHLZ%t,yFH;D= %Et,FHD5א%Et~wFHD%Et*wFHwFHDt%EtxFHD g%EtFHDN%EtFH`=^%8zFHL?bFHL, Lu8I F1BHL1 !F1~BH1HE8fst%ftkwQftcfvTA #D=Os%A}LED1JD~Df>tf+ufDAEDtA #DEDLDH{Wy18DH¿1CfDq%HM8H $EAAMAII9tL F1XAH $Hlj1HU !F14ADH17q%Lu8 [gHL*eH%?fD%D1@HH=d%HѾD1CUH=d%HѾD1uCH=id%HѾD1UC%D1_@HH=)d%HѾD1CH= d%HѾD1BIH=c%HѾD1B/D1?IT=)p%HM8EAA=p%MAII9pf.H{'w18DH¿1AfDD1W?IH-p%K,LC0ED1aA@=qo%HM8EA A =[o%MA I I9(ffDX Ffxt f=Hp%Huҋ%D%Do%"FE!ED1Y>H1@X"FDk?HIL n%DHH$LLD$?LD$L#F1D<H1u>H#FfDED1<H1E>!FfD5%eDwFH#4DDHufH= H=H=pFDL:D=)k%A9-DsDo I B$*E@cH5c%IHٺHykHIU Hc%c%I9cL1@LHc%HH9s"oc%H߉^c%Xl%Huˋ=Mc%CHHHvP% *c%MHHH9+LHk%I|$HCk%b%HCIHHP%H9rH6Hf H0HHH{H=Q%DH|oH=o\@:H=oH=ob21HDH1LkM=AA]A9AAA A@AŀA[A1AAAA A@A}ASA)AAAA A@AAwAID1IfDH= @%L麬D1HsHwdHsdHv^HSHIg\HSgF1TJD1H1"f.H vLkL,IgH_%H|L;-_%oLIcHVP H7H>JD51(LHƿ1V<H=oH=ohHCH|$0HD$0mpDHD@ Hl0t$@)F$1@H=tH=H=H=o H=o H=oHDu1;H1lH^%HtHSH;e^%y #4D1>LkFD1)L0D1H5=% D7H=oL1HDH1LkM'A'AHD1IfH=oLkL-K%"@H=oH=opH=HE]%LkHL;-!]%N4(A>1^JDLHƿ1 DH=ou(HSgFfrH=ovfHHwHsoH)H4@IgJJ%f   f]f2f H=5`H=pnH=`LkFD11L0DHC1gE #@9 ff@CĀcCKD1gMf6H[%Hp1X)FH118(FH11HDH1LkM+An AJ MtL0D1fD #DfH :% ]HDDMt1l@H 9%kDH 9%*DH 9%DuH y9%4IDUpL-Y9%1?DhLH HHD|H59% f.H*fDqD1H1L1H=YH=zHD|H=`L{A E*@I}H5m8%M151II0EMuMtuH5>8% f X%HE%HHH9H@HHHH9H;uLcHL%G%k? F%HE%HHH9rH@H9H8uHP8HxHH!I9rHHP(I9wL`I)H=8X% L-X%M)M 1,HD^ILLHx_1HHW%IEHW%@ W%HD%HHH9HE1'H=otPH=otPHHHH9HH=ouH{tعE' D )FOLcfHLkdj/ D%H?D%HHH9scKt% @H@H9sOH8uHP8HxHH!I9rHHP(H9wLhI)L-V%HC% V%'1 FLH1HU%HM1AHDHILH1]HILjHHHU% ILD%YU%EJH9sHDH߾H^%H{fE^%U%fEHH.U%HH9rL  zU%HB%HHH9H@HHHH9lH;uLcHL%C%ht B%HdB%HHH9rH@H9H8uHP8HxHH!I9rHHP(I9wL`I)H=T%Ld$HOHT%L)HD$P@%Ht$0 [gHHD$he]H=T%HT%HA% YT%(F1H1HqA% +T%fD1 FLH1b=D-S%1)FqHH1@%Rf.Ht$0 [gHHD$hE_1 FLH1mH1IDLHƿ1JgLJD1H1H¾oJD1fuH-pH.e$+EHSHJE1A HSDDHHt+J @EED #D`FHD1<1IIuL=DR%MLkL;- R%MJDHCH|$0HD$05PH$A3DL$ HDlL$HL$H L$@$13 1JDB H$Hƿ1kQHS!D1Q7*JDJD1HH/H+D$HHD$P&uH50% # L0D1HD9hHD*HD1 FL H1 1 F, H1HD1LIHD12IxID1IlID1 IID1 IID1 IID1 I{ID1 IfpID1j I@ ICID1! I;ID1 I3ID1 Aa+ID1 I@= ID1 I ID1 I ID1 IID1e IHD1K IHD11 Ie(F1H1H{:% 5M%111 FH1gMLkFD1 L0D1 JD1 HCLhCLHKH|$0HHHH?HH)HT$0 pDHD@ Hl0t$@3D$1 1h(FH1ϻ1(FH1读AJD1 HCJD1 HCJD1 HCJD1{ HCJD1a HCJD1G HC]7KD1- HC+KD1 HCKD1HC[KD1HC8KD1HCJD1HCJD1HCJD1wHC1wJDK/Hƿ1J05DH$1DH1Lsff.AWHAVAUATUSHHgHHt$(dH%(H$1-HtW-F1fHH1iH$dH3 %()H[]A\A]A^A_f=6%HxR%CHuR%C1=6%H$HL$(95%H$HD$0S$HgH6HR%Lt$0f6%I~Q%I~f6%Q%I~Hf6%Q%I~H86%Q%I~ H*6%Q%I~$H6%Q%I~(H6%pQ%I~* 6%[Q%I~,5%FQ%I~.5%1Q%I~05%Q%I~25%Q%5%NHP%CHP%PCt0HHHP%Lt$0fS5%I~P%I~f;5%P%I~H5%uP%I~ H4%_P%I~(H4%IP%I~0H4%3P%I~4H4%P%I~64%P%I~84%O%I~:4%O%I~<4%O%I~>{4%O%n4%H=64%: 2%1#ED$34%H54%IH|$("NHHPGHIH3%"&H&O%H}A$O%H}AD$N%H}ID$N%H} ID$N%H}8ID$ N%H}(ID$8N%H},AD$(N%H}AD$,N%H}0ID$sN%HID$0H3%H3%Hx3%He3%HR3%H?3%H,3%H3%H3%H2%H2%H2%H2%H2%H2%H2%ƒHIgu1%H2%-/%0%9t% 9l$H5/%H=/%T/(nH|$(xuP0%40%j0%P0%0%u0%0%0%H|$(Yu L0%H|$(U[ 0%0%Z E1EEHcC DKL#H,IgCA HcAL,IgE@H7 HHEuf=0%2EE|E+F -/%D$p(HD$x@DŽ$2HDŽ$p@DŽ$HDŽ$P@DŽ$HDŽ$@DŽ$HDŽ$tq=A0%( 9$p@ 9$P@ 9$@w cHþ,F1HHƿ1H|$(H=A%mD/%E]H=A%OH=A%AH=B%1,FZH1D$A%E1lfH % LD@@@& #DW;@%H@%A܉ھKDBl1LH@%HH@%HLht L;-@%-KD1lLHƿ1H53 % HB@%BfH % LD@ 1;ID=@1!LD"@1+LDHD11ft3;@%s(H ?%HtHH'-%H@H;?%LD1EJ4*CDH\$(HkHCy+%L%,%tEf="-% D !-%E ,F1H1L%,%DV+%LE ,%E1AIPA9A|$ouA9D$(s1h5DlIL$ It$IH|$(FHHD$PtiAD$(11LDHHH+%!H|$(IHK Hs7FHHD$@t I|$8b H|$PH|$@,%AIPA975P*%H+%H=j+%HtHU+%HtHxHM+%H==%Ht\H=%H=%H==%Ht5H=%H=%H=8=%HtH#=%H(=%H==%HtH<%H=*%HtH*%H=(%HtH(%L%(%MtUL-(%11Mt2HI<HuHHeHuL9rLNH(%N1H=0(%151PKD!HHƿ1O*%ff+z fifH )%HL$@-D$HD$HHD$@P9D$HHL$@Qptou1JDrIHD$@H|$(HH HpCHHD$PA HD$@H@ HD$0HD$PLxHD$0HHD$8{fDLI_fD%H;D$8HH)D$81UDHH1EwH޿tLDAAgEDt$0u)EwAnDt$0uEwAuDt$0u AGD$0HD@HMcH)N<MgE7LC%H9HH)IAI\{AAD1AHƿ1T$0LL9vL@1HHSnH9wIE1HWH|$8H|$Py'%fDxE1gHƿ1H1'f.lD14H1eEDL9LHH西H9wIAJfD1H1¾.!D1Ht$p1LH軡T$pIׅuп l}DfD1oH1LHI)E1AkpHH=$%HD$8HD$8-#%H#%PE1Lt$8Hƿ1DLHD$8%%E1E1H%%u IHPI9C tuHk LkHt1KDbH1H7%H H; j7%H "D1_1H1Hs8FILHL1E1*{C(ADž$%9H HH $%A g#%HT$pHHL$@H|$(?HL$@HD$8H|$8$%A(t ;$%1LD$pHL$8E1H|$(D|$HH$LH|$8AF$%uH|$(HD|$H$E1E11LA$%?H|$(E"+F1H11*FDL$PLHIL1H5%H|$(L%5%HD$8Hu5%HD$@HY5%HD$HIDL$P P#%H"%HHH9VIt-fDH@H9<H8uHP8HxHH!I9rHHP(H9wLHpH)DL$LD$@HLL$8HL$HH|$(L$$WH$%HHDD@H|$( "%LM~1#HHPH9YHP{uHS HsHtH|$( -"%ff f"H|$( @jH!% F1DL$PLH1lLDL$PHC H-3%HD$HHId$ HHHA$HH;3%1-F;HHHƿ11d1P-FHI|$ H\$P D|$\jL9l$H`HD$@J(FLD1HT$0HL$81MMULDHHHId$ HH90H;%H{I;%H{HD$p;%H{ HD$8;%H{I;%H|$pIH‹@H|$0 A3DDl1L$ JL$JL$J L$R$1HD=:%L9l$Hv8HD$@J(LLD1%D1wH%D1^HD|$\^1D>Hƿ1lH|$(DA3%H%,1@H@9H;uHS(HsHtH|$(l%H4 F5H5% %-z0%H0%1p,FHHڿ1f(H (%HL$@D$HD$HHD$@P9D$HsHL$@Qptou1JDIHD$@H|$(HH Hp8HHD$PA5HD$@H@ HD$0HD$PLxHD$0HHD$8{fDLI_8%H;D$8HH)D$81UDbHH1EwH޿nLDAAgEDt$0u)EwAnDt$0uEwAuDt$0u AGD$0HD@HMcH)N<MgE7L28%H9HH)IAI\AqAGD1{AHƿ1L$0LL9vL@1HHbH9wIE1HWH|$8H|$P ?%fDxE1Hƿ1H!1'f.}D1H1¾.!D1Ht$p1LH蛖T$pIׅuп vEL9LHHH9wIA f1lD4H1eDKfDD1H10LHIBE1APE1Lt$8Hƿ1DLHD$8!1DHƿ1I%D1[H#H|$( @bH %H %HL$@ D$Hf.D$HHD$@P9D$HCHL$@Qptou1JDIHD$@H|$(HH Hp3HHD$PA5HD$@H@ HD$0HD$PLxHD$0HHD$8{fDLI_4%H;D$8HH)D$81UD2HH1`EwH޿{LDAAgEDt$0u)EwAnDt$0uEwAuDt$0u AGD$0HD@HMcH)N<MgE7L4%H9HH)IAI\{AAD1KAHƿ1xD$0LL9vL@1HH^H9wIE1HWH|$8H|$P%fDxE1Hƿ1H1'f.lD1H1EDL9LHH%&H9wIAJfD1DH1u¾.!D1]Ht$p1LHT$pIׅuп l}DfD1H1LHIE1APE1Lt$8Hƿ1DLHD$8!1DSHƿ1I=% w (%H%E1HD$pHD$xHDŽ$HDŽ$HDŽ$HD$`HHD$hHHH9IHD$@E1HD$HHD$8Dt$PCH vH=`H=`u HEHD$`HHHH9HEH=#`vH=A`H=E`H=I`uHE1rKDAH$H$H5'%IH$H|$(H/HID$@Ht$xH9]HD$8L$0H$Ll$p1*FLMHƿ11*FgH1E1H$I^ tH¾KD1lH{ I/%KD¿1FH{H c/%J4D¿1 L;$H4/%FD¿1H{/%H={%HD1gH{.%IH%D+F"L6H% %%H=%`HEH$HHEHD$xH|$8HEHD$@z[KD1Ht$HH5]%%HL$@H|$(I,H_%HD$8 %%/HE18+FAHD$hHT$`H5%%IHt$hH|$(H H,HI1KD9H1j1`+FH1JE1H|$`I^ wfDLQFD1H{I9-%FD¿1H{ H(-%KDH¿1L;d$`6H,%FD¿1H{,%5mFH¿1H{,%IGHteH¾KD1NH{o,%FDIſ1+E%H=%L麬D1D꾫KDHEHD$H+HEHD$pH|$8Dt$PHtiE EHEH$H|$(H% F1(H1LDL$PE .%H5%IH|$(*HHPBHIH%H!+%H}A$+%H}AD$*%H} ID$*%H}ID$*%H}ID$*%H}ID$ *%H}AD$(*%H} AD$,*%H}$ID$0n*%HID$8ff#,HL$@HD$8H%D1Hb/!DyAHPE1tH1z-D %^ %hX*F1AA%DD11HL$14HDIL% % H|$(IIL$ It$(HD|$IT$ IH|$(LD$pLHL$8HD$@H$HdHD$@Hr1DH1藏 ET6 D)F@AWAHAVAUIHATUSHxD % %H|$(H|$0HD$0dH%(H$h1HD$8HD$HL$HD$PHD$`HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$] %'H$E1HD$H$HD$H$HD$WHD$xLHH%H%HD$xuA H= %HtH % %HHt$x1LH|$L<H<H|$LD H|$1 HD$x<9tHL$H|$0H%LUHHHH|$0HLHD$ 茧HHtdEHt$pH]H$HH<1H5% 2H$H2A f.LD1Ht$(H1ЌAH$HtxL0H|$0&DH$hdH3 %(7Hx[]A\A]A^A_f.H|$P1Hl$XH\$@-F9HT$(HIHٿ1_LwH|$@HD$111 HT$HKL$H4H;4H$H|$0訞HH$H|$0HHItj0.F1LHƿ1HD$HFDN$ 10D1LH5*$ L(AL;d$X LHT$P7dF1NLH|$P!lH;D$@HT$HL$H4fT$ H|$(H蟒HH8FH&HH'HD$pHHHT$ H3%HT$ A H>HV/1D$EH\$XH9Ht$1L#D%%E-u%vG%hD%EXD%EHD %E8D%E(=y%5[% =<%=%=%=%=%=%E1L${DD1X.FHt$(H1D$EDH/F1Ht$(H1؈+fDHL$x/FH\$0/F1zHH1AwL$f./F1?Ht$(1.FHt$(H)HH1D/FAHt$(HH1@H$ 0F1AHH1贇1-FHt$(H1與X/F1eHH1hHA:pAWAVAUIATAUSKHHH5:$H 0gH 0gdH%(H$1HIPH 0gH]H=$H}Ht&HEHE HE(H]D1:DDH$IIٹ@@1KIGIO L$IwLHE vHHHEIG H HE(H޿JDDH@@8HKHh0gtLL9H}$H$dH3 %(H[]A\A]A^A_H}H5$舡HI/H]H]H^HE(1SK Ds HHKHHKHHKHHK HHK D$HHC HD$PHD$XHD$`HD$HHILDt$0 H|$pODDHD$L$B]D$0LH|$H)HHD$HD$(uH|$T$ttH|$EHE1~H|$uًD$0uHHD$Lu(HEHMw :f.SHHH80gH 0gHtHCHC HC([H6FH7F16F1H1(7F1rH11f.fAASAA7FA7FHED 8FHDȺ8F1L%IH[@SH_IAy 1HCHǃHI xL~%8FȄ7F 7F8FHD1H[ffff.S 8F Hu>8F1H[#8F1H[f.SH_Hǃy!1@HCHƒHH ׄxAHZ8FA:F1H[AVAUATUHSHdH%(H$1@@t[8F1IH$dH3%(LqH[]A\A]A^DLgDA @ @$=FfDLgD rHL$ 1H fDt,tt,HF1bHG~AD:F1fD1SD8FH=*%1E1IJHLeDm]AH5$H8FH9%vF@DH_oAuAH Հ?FDźn}DH=F1脼H@G7H_IAy1HSHЃHI x@@$>FH_DGփ$rD$4@iHT$H@uHrHP@6t,HrB7HA9F9F1蟻Hf.kHt$dH34%(%H([]D3ِf{8F16H@1HH$HkIAy!1@HEHƒHI ЄxHIY9F8F1HH[]DuH[]H[]8F1ʵHH[]wHcHH H @Ff.@H$HH 1H9H9)fHG +F HH1H9H9)fDSH_@F1ʲHHƿ1[ÐAWAVAUATUSHLo(HG LgH_MHD$ s`F1sHHƿ1衴HT$IAMFD1DE1v,@C41DWt+IIt8D9D1ED,uտ IٰIu1fDA<G_v.H議9H5$Mc ML|$M)$H5]$ H[]A\A]A^A_þX`F1SHHƿ1聳H1[]A\A]A^A_H$@|Ff.FHfDyFHfDwFHfDFHfD`FHfDwFHfDwFHfD"DHfDAA/!Dbg1LbgHfH(tSH_X`F1:HHƿ1h1[@UIHAWL~AVAUIATISHH(I9LEH9I$AAI9MwMxL9L9vHL)ƅ1fAD$(AF1H1Ef1?fDLML$I$LMH9ME L9LMLEL$LELMHp I$AA IH93H9MxL)I$L9#DUHML($fAD$HMfDU LHH9vHMLD$AD$ HMLyL9kHHM$HMAD$fA|$vDHH9L9AD$pAFHL)DAD$IOH9HMLC$MGAD$HML9DHLE$IOAD$LEH9.HML$IWAD$HMH9HUH$A|$HUAD$M4$HE@A|$ML(HeH[A\A]A^A_]DL9vHL)LyAD$ HL9AD$L9vHL)MGAD$L9IOAD$H91IWAD$H9)AD$>@H9v H)˅A|$fL9vHL)ƅtHML$IWAD$HMH9vDHML$AD$HMI HH)΅f.HH)΅HLE5$IOAD$LEH9 I9sHL)_I$MA A HL),*D@FHpMAA HMLz$AD$ HMLyL9HMLR$MGAD$HML9_HHu$AHtE9=W$v=HHt2H$A`F@@`g1U`gHAn D@@`g1'`gHffff.UA39FHAνF`FSH8$dH%(HD$(1HHcƒHH\g$1 Ҭ@1II@H蓨HL$(dH3 %(u H8H[]ĩ@UA5DHAνF`FSH8+$dH%(HD$(1HHcƒHH\g$1 2@1II@HHL$(dH3 %(u H8H[]$@ATIUSH0$dH%(HD$(1HcƒHH\gq$tOI1A`F@@HmF؍DHHL$(dH3 %(uOH0[]A\E1AνF`F H1>MI@@H1HEDH9vSLGHȃyIA&DIEHALσHH EyI9uHtDE11AfUHSHHHt_IA`FHH@1K@IA`F)HHH<1"HH[]IHA`FH@1HH[]fUSH8dH%(HD$(1H$HHH+$HH;$w$HL$(dH3 %(H8[]fZ$HA5DAνF`F HcHH\g'$1[II@H@11AF+HH1\`F1 D`F1&DAW`FAVAUIATUSH8H_Lw1趥HHƿ1I}(!Ll^1źaFHvHHƿ1褧C1CUI~^I~I]I~ I]I~H]I~H]IU(DH9w&DH9rH9rAL9rAL9I]BF1蛤HH1^[1H8[]A\A]A^A_DI]AFaF1OHH1[H81[]A\A]A^A_Ð1AFH1Z1 BFH1Z1XBFH1Z1BFΣH1ZD)D)D$KT$$l$$D)HD$KT$I>)1I,6T$ /aFM$l$l$HD$E1VH1臥|$$twD|$$H\$(DBI<[I|I[1HúGaFDMDH1LAE9wH\$(1;aF跢H1t$E1AH\$(DD$J|%Q[J|%I?[J|%I-[1maFI9HƉLAM1Z$MA`F@@HcЃHL\g$1L踠LJkF1 躠9\$(H\$(1\aF蚡H1ˣL$ E1@DAH<+CZH|+I1ZH|+IZHŋ$MA`F@@HcЃHL\g$1LڟLJkF1& $MA`F@1HcуHL\g v$@L脟LJkF1Т1kFDHƿ1订D9l$ 1aFRH1胢Dl$$T$E1AuAD;t$L|$BI<XI|HžXH tL|$DaF1I /I<XK 衞HCDt$1I<LH|$WXAA%AAAD9 D)aFDп1qAEB$ň|FEbF1H1$ Ν96Dt$@EaF1裞HfDEaF1胞HfDaF1lHt@E*bF1KHS aFD1]AEtiJbF1H1D+fDt$ ќ@aF1輝H@aF3fD`bF1蔝HbF1|H@:bFfDxfDAUA39FIAνF`F ATIUSHH8dH%(HD$(1$HcHH\g$H1؟II@@H1虛1vbF訜HHƿ1֞LL)H9HFHIt8L@HHo${aFH¿1蒞HuMHL$(dH3 %(Lu H8[]A\A]VfDAWAVAUIATUS1HHGIHD$0Lg(IHY$IvIB$Hl$0H},$H} I$HHD$8HHHL$HH,HHHD$I9At'AHĘ[]A\A]A^A_fDLH=$H)HPHHHHH$H4$ʈH$DT$8EtD$8HL$0Lt$HL|$L,$H\H$HD$ HD$pHD$HT$ Ht$LUH|$puH$L$ Ll M9w'qfrIM95$H5$vLL$n$;$r18CFIH1!NM9w@L,$CF1I]H1HP1{I]BF1ÙT$8HH1P1KMmbF‰D$DAHLHD$`HIHD$hL)I9=D=$ELHJ$III9,D=$ELHJ<跃HD$XH$<$$H<臃H$818CF*H10JtpCF1 LH1L1fDAVAUIATIUSHĀdH%(HD$x1G9}{u$-$Ml$8HcЃHH\gN$1MA`F@@HLt$AF؍TH1JkF|A|$U D$expL1bFE11OAT$1ۅ\fvf fAn/aLbF1AT$HI9}`ID$(ftf/~f[f=9fuID$ bFF(dL1Q|@ >HD$xdH3%(H[]A\A]A^DID$ F (H$HtCD; $s:DHHt.H$A`F@@`g1詒(An D@@`g1A`gcjFdL1耖AsfEfAexp@ufArfID$ bFF(DAvexpAFGH$A\$LEL$HHD; $s}DLMtqAٹbFdL1ŕLt$E1AνF`F L1處MM@@H1ZH%fAn D@@`g1/A`gc@t$bFbF11ۍ1WAM8f.HHtGbF1&AMH9}wID$f<(tA9\$PtDH}$Ht;b$rAAn D@@`g1l`gD1bF诓AMH9| V|fff.AWAVAUIATUS1HLdH%(H$1LHo(Ln$IvIW$MwIB$I HD$.$HHD$D$H1s`FLHHD$(HкHD$ IEHD$}HT$Hƿ1詒1CFXDHƿ1膒Av"CF1/Hƿ1^1CF T$Hƿ1:1DFT$Hƿ1H;l$ AteAcF1誏H1ۑ 葎H$dH3 %(H[]A\A]A^A_T$tHD$pL|$(E0Ll$HD$HD$`HD$HT$Ht$LUJH|$`u H|$pLs$LL$`H\$ Ll$pMH$A`F@@1蠍H$@M)HA`FH<H1o1(DF~H$HD1褐H9w/f.¾.!D1HyH9H$uο IIAD9d$H]I]BF1ۍT$HH1D17MebFD$HHD$ LHHD$8D$AHкLHD$@ID$LLLH91bFOH1耏D$Ld}F1#H1bFO1Ld$ tT@<L[$$հ|FfF1bF9u 見D$wD$HL$p1MLt$XL|$PHL$HL$`AփIDHL$HD$0HD$(IHT$Ht$LvGL$?LL$`HL$8D$HL|$pMH,H$A`F@@1ƊH$@M)HA`FH<H1蕊1cF褋H$HD1E1Ǎt5B<AH$cF¿1蓍A9uο DIIAL;d$0L|$PLt$X 1bFH19D$L }F1܊H1bF1Ld$ f<L $$|Ff"DfDwFfDwFfD`F~fDFnfDwF^fDyFNfDF1bF49< D$;D$E1MlHD$pL|$(HD$HD$`Ll$HD$fHT$Ht$LDL$?LL$`HL$@D$HLl$pMH,H$A`F@@1H$@M)HA`FH<H1݇1cFH$HD1E1t5B<AH$cF¿1ۊA9uο 茇IIAL;t$"D^fDwFNfDwF>fD`F.fDFfDwFfDyFfDAA/!Dbg1輆bgfAA/!Dbg1茆bgfH$MA`F@@1Yw@H$MA`F@@1)@Ll$CF1I]&H1H=1fH$MA`F@@1ɅU6F1ӆH6F1迆HpCF1諆LH1n=1 †fAVs`FAUATUSH_LgHHo(1hLHƿ1薈H9DLc<<{<L9KHCAAA!A"fHxAHHH @yH9wAMHL)L藆I\DF1衅LHD1̇H9;[]A\A]A^D<<8L9'KHCAAA-A'HxAHHH @yH9wAMHL)LυI\DF3.cF1DŽH1L$L9KHCAAAA'HxAHHH @yH9wAMHL)LI\DFLL9SHCIA"@HPHփHI yH9wIL9A$I\$AAA&HSHЃHH ƄyH9uI(fHpHHH @yH9u܉LH9>HH9$HPIA!A)fHzAHHI @yH9uLH90L`D0蝃HtCH=$H(LhDpH@H@ H@(sHp$HB(He$L9@A$ID$HՃ,$@HD@LƒHH EyH9uIL9A$ID$IA$@HD@LƒHI EyH9uIL9ta艂Ht)H$H(LhH@Hzt/HJ HAHB HL9t1E1ffDHBӺ EF1QH1W41[]A\A]A^E1qII\H $E11[]A\A]1A^Hffff.AWs`FAVAUATIUSHLwH_LHG(1HD$HHƿ1H$Ht?@H{Hk(HufLLd~MuHW~HtHHt$LH:$H$zH="$HVM+t$1dcFH1LAL5$MAN1zcF~I^IljuVHIHM1cFI^HuU@L;UcFMt"I PEFtD]^HH1LcF荀H[HtdL{ADcFMtD=\HIucF1~MIdd ag1A ag|XMv(MHIf1cF}I^IljVUHcF1}IIdd bg1K| bgcF1R}IMddag1|ag |H[]A\A]A^A_fUHAWAVAUATSH.$HHdH%(H]1H_IL(HP$HH1xEFHX|H1H~HPHDž(-DDL9Iƅ&$HH1JFHX/|H1H]~L9PHDž(-DDLP\fDHHH( H@HcFHH$LpLH$$$$HEH$$$$z$HEH$HDž@Dž0HDžXHDž8HEH$HEÉ$I9AfMA)DEAA/=$1H}IH$H=$H=$Iu5$HXHa$H@L4LzH#HkD$EHHHPxgHPHLHcy=Y$%}D $L$Hڋ $gF1"|A!HxHpI9HE,$EI\$A8A !A$@}F\dF1yH1{M9 HHH( H@H2 cFH H$LpH$1$$ $HEH~$$$$$HEHV$HDž0HEHF$HEÉ$LI9ƺ1ydFxH1zL;pA)UA܉uD X$1DmH}A5DAνFL8LH`FL$$L-$H@ LcI$1L-$I\gzLEM@@L1vZ$H}A39FAνF`F LcI($1I\gZzL8LE@@L1Mv0HF1"wL@HAML1E?yD-$H}uA0!DAνF`F ܋$]LcAIr$1I\gD-$yLELc˹@@L1]udF1lvDHL1xLXL9pvLH+P1dFlxIFE&HXEA8A B$}FfF1uH1xLXL9pwfDH5$ 7v=fFIM9&HX$ILH=z$$H=l$Iċ$H}A39FAνF`F Hc؃H$1H\gxLE@M@H1sxJF1tLHHڿ1wM}HcrEHHH=$H=$ HIaHþ JF1}tLHHڿ1vLX fF1KtH1|vJ$LXD3$ٽ$H}A0!DAνF`F ELcÃII\g$1vLEIٹ@A@L1rfF1sLHƿ1u$LX'LXH`LLNHË$H}A39FAνF`F D`LcIܼ$1I\gvLEIٹ@@L1MqzfF1rLHƿ1uҾ$mLXH`LLHË[$H}A0!DAνF`F D`LcI"$1I\gTuLEIٹ@@L1MqIF1 rLHƿ1Nt$L;XP(AvIFH@(!fHpHHH @yI9w܃@?`w@t HHH ËF$LXA0!DD-~$AνF`F LcIH}AI$1I\gD-<$+tLEIٹ@L@1o1^fFpDHL1%sHXH`LHD`UIIހ¼$1}LHHIԈ$H=$H=|$HX*$H}A39FAνF`F Hc؃H$1H\g*sLEM@Hߺ@1n1IFoHXHEHڿ1r:fFL;X] AVIFIA&#@HpHHI @yI9wALX`DM9 E E&1dF@*oH1AMnSqA!A$~FLXH`LLHË$H}A39FAνF`F D`LcIc$1I\gqLEIٹ@L@1MRm1fFanLHƿ1pf.EH}A5DAνF`F LЋӷ$LcML-$I$1L@I\gL-߹$pLEML@@1lt$H}A39FAνF`F LcIB$1I\gtpL@LE@L@1M-l1GFaе$eFP1$kLLL)hjMlM9AEIuHÃ&H~HHH @yL9uIՋ$H}A39FAνF`F LcI$1I\gkLEIٹ@@L1g1LXdFjM9QAEIUHÃA"fHrAHHH @yL9uM$H}A39FAνF`F LcI$1I\gkLEIٹ@@L1f1LXdFjM9A$ID$HӃ HxHHH @yL9uI C$H}A39FAνF1HcуHL\g $ `FCjLEIٹ@@L1fLXdF1OiLfM9 M61`GFfHH+PHƿ1i;IE1DAHپ3dFD1hLHH)wgH\;u ]1pFFsfH1hC1JFLfAHƿ1yhH0HFl LXE AA #DP DLEM9AIFHӃ!fHpHHH @yL9u܋f$`H}A5DAνF`F LXLcI'$1I\gYhLEIٹ@@L1dLX1LgFL[g`IAH5$ weGF1dH1Mz$H}A39FAνF`FHcЃHH\gU$ 1gLE@HE1ɹ@1IcHھXdF1f$H}A39FAνF`FMHcЃHH\gح$ 1 gLEE1ɹ@@H1bHھXdF1f1HIqII0ƅ&W&H]dH3%(He[A\A]A^A_]E1L;XLH+X@]$11}HHHIՈB$H=$H=$胹HIظHþHJF1bEHLHڿ1eLXDž`hHF1bH1zLc`LXGIAfDI9TED$ID$MAEC(HD@LƃHI EyI9wA@?`wEt HHI L$HD $I9#HXHt`H@Ht`H5$ -bM9H`LHvD`IźhgF1kaLHƿ1IcHpf.H`HHIċ`E F4 HD*HJAA$FfDH`LHθD`UI܀w  ܬ$H1HMHì$HpH$@H`LHnD`$HpIfIM9[ I9vLH)ޅM H1H4$I$_H`LHD`Iʼn$IHX} AHXKDmHËX H@! H@_gFHH1aHpf$HIMUH  r$IH1HMHV$HH0$bD 5$1HIE!$?At$IHI9w I9v D)΅ H٪$L$EHpID0HXHPEl$DH4@HSLHHXDH@$L$HPI $H^HPHpH`HLHHP+AD$`H`HPHpHHHPAD$ `H`HPHpHѵAD$ED0IHpEEH$Ʃ$$I$$$$$$HpgF1K]ADHƿ1Er_IHpZ A:DHHPFJHPLHH1\}tbD $Lۨ$1 ߨ$HھgF_A [}HH=$@L$ $HھzgF1^f$HPIHPHHItݺ$s[5i$5}L$ $HھgF1:^DHHHLpHMLLHx(蟫HH8HEH$$$$$$$u$Es$HDž@LtA>tpM1LLL)[MdA<$uHHHA>H@t+HLL3LL)H[MtA>uMA~MfLE1LHH)[HDI98HH HyyL9uHI9b8HPy fHzyL9uHI9:HB#@HxyL9uH A;EDD0H<@HGA~HXIEfLMeLL)ZIDI9HpHʃA'fDHDFALǃHH EyL9uLI9AUHPIAy;A#HzAHHI @yL9uDHI9EE p HB΃D A#HxAHHI @yL9uN$ EEIA<$H@5HXA8DD@tH@L$D$EuL`XHK4HXgF1L(XLHƿL1FZKF1WIHƿ1#ZHEIHpH-$HEH*$HEH'$HEH$$1JFWAHƿ1YH8HAIDTE&D'E@AA #DP DLEM9NA$ID$HӃ?'HpHHH @yL9u܋$`H}A5DAνF`F LPLcIW$1I\gYLEIٹ@@L1IULP1LgFLX`IAD'H5 z$ VDž0HDžXHHZ$Hp11AEAE IE1DI HMH)hHF1UH1IF HpUIHHHU$UHHpH:$lHSgF1aWHpL11`VHX gFH1'WIELLH=Ƞ$H=$,LI聪HþBfFHKF1TSHƿ1VHp6gF1_TAUƅ&LX9HXgF1L &THL(1E1A@He$H$eF_SLc@0`@HIFHHI\2SI9sAUIEIA (fHpHHI @yH9w܉IA`AA1IF"SDHƿ1PU,dF1RH1+UH$$מ$ў$˞$ɞ$Þ$$$+`H@LI9wE1M9vDD)E1t Lɟ$Iċ$HH}A5DAνF`F Hc؃Hۛ$1H\g ULEM@@H1PdF1QHHƿ1 TL%Ý$؝$H`LL蕩HË\$H}A39FAνF`F LcI*$1I\g\TLEIٹ@L@1P1eF+QLHƿ1YS51dFQH14S1)"HpHHI @yH9w܉Iċّ$}H}A5DAνF`F LcI$1I\gJLEM@@L1F1L5lFII9f mF1IML9w'AVIFIAk'"HpHHI @yH9w܉Iċѐ$}H}A5DAνF`F LcI$1I\gILELM@@1ELlF1HDIL9c#L$INj,$H}A5DAνF`F LcI$1I\g,IO /LEL@@1DL`LF1M4HL9?%AVIFH׃7%A#HpAHHH @yH9wDIJ/E1HDELE5$H}A5DAνF`F LcI$1I\g5HLELM@@1CLkF1AGlF1'GI9GH]dH3%(E%He[A\A]A^A_]fHuHLE1莜UH}A5DAνF`FIHJ(1$LE LcI$1I\gGGLELM@@1CLkF1SF.fDINEvEAA`AtA@t@AE5 $AHHX "$HXIDpuHxHH+GHG IAtAtHc$AHE‹`L$KF1E$LcI$EI\g MA`F@@L1AHhIJkF1 EkF1EfL9!AVIFAAE!&HpHHI @yH9w܉EIH$}Ht D; $xAn D@@`g1@A`gӋ$H}A39FAνF`F L`LcI$1I\gDLEM@@L1@L`1L@LFLCL9!A$ID$IA,"HpHHI @yH9u܉Iĉ}$H}A5DAνF`F LcI$1I\gCO /LEL@@1?LjF1B@L9AVIFIA"HpHHI @yH9w܉Iċ$}H}A5DAνF`F LcI܉$1I\gCO /LEL@@1>LMt$1kFBL9L-$IHLLlO$>L9< AVIFIA0 "HpHHI @yH9w܉Iĉ}kF1sAHxLMMH$MUuDEH5b$)MEo? f.}}IHpM4L9^E1L9vD)E1҅t L$II9LA6IFIA@{$DHpHHI @yH9u܃?}w@@t HHI ċه$H}A0!DAνF`F L`LcI$1I\g@LEM@@L1<l$H}A5DAνF`F LcI:$1I\gl@L`LEL@@1M%f.wlF1>f.dlF1>f.RlF1>zf.lF1>Zf.lF1_>:f.1KF;H10> ZkF1>f1lkF=L9AVIFIA !fHpHHI @yH9w܉Iĉ}HLLMnfD12kFw=L9AVIFIA)f.HpHHI @yH9w܋$}H}A39FAνF`F LcIa$1I\g=LEM@@L1S91DkFb:LHƿ12LXMLNjF1L}5EIRfL9AvIFIA@!fHpHHI @yH9w܃?}w@@t HHI Njy|$H}A0!DAνF`F LcIG|$1I\gy5LEM@@L191L>jF14EEISL9AVIFAAE&HpHHI @yH9w܉EIH}$}Ht D9 f}$<An D@@`g1o0A`gC{$H}A39FAνF`F L`LcI {$1I\g<4LELM@@1/L`L*jF1L>3fiF13f.IL9 LfH¾iF12Mf.iF12f.iF12zf.iF12Zf.H{$APHt D;={$ @EAn D@`g1.`gDjF12AWоiF11fDL9tAvIFIA@r!fHpHHI @yH9w܃?}w@@t HHI ‹x$H}A0!DAνF`F L`ApLcIx$1I\g1L`LE1@@LM-Hz$Ht D;=dz$ @EAn D@`g1j-`gMDjF10EIiF10jf.iF1o0Jf.IL9 LH¾iF120M f.iF10f.iF1/f.yiF1/f.iF1/f.L9 AVIFIA~ "HpHHI @yH9w܋v$}H}A39FAνF`F LcIv$1I\g/LE@M@L1+LciFfDXiF1.f.OiF1.zf.EiF1.Zf.;iF1_.:f.1iF1?.f.'iF1.f.iF1-f.iF1-f.iF1-f.hF1-zf.hF1-Zf.hF1_-:f.hF1?-f.IL9LEx$H¾hF1-MfhF1,f.hF1,f.hF1,zf.L9 AvIFIA@ !fHpHHI @yH9w܃?}w@@t HHI Njs$H}A0!DAνF`F LcIgs$1I\g,LE@M@L1Y(LhF@L99AVIFIA "HpHHI @yH9w܋r$}H}A39FAνF`F LcIr$1I\g+LE@M@L1'LhF1*EI@M~L9LMf uhFH¿1*L9HL)1Ҿ!D1l*GIL9LH¾NhF12*M f.IL9sL5u$H¾;hF1)MfM~L9LMf t$ahFH¿1)L9HL)1ҾgF1)^fDIL9{LH¾(hF1J)M"fIL9#LUt$H¾hF1)MfIL9LVH¾hF1(Mf.IL9`Ls$H¾gF1(MifgF1o(Jf.DuHML9uE1tH`Lcs$H`INjo$H}HA5DAνF`F LcIno$1I\g(LELM@@1`$LgF1M'@AlFAwlF1=%H1n'RE1L94D) 1L9HL)D1L9BHL)4$f1L9HL)f1L9HL)|lfL91DL911L9HL)tf1L92HL)$f1L9CHL)5$f1L9HL)f1L9"HL)f1L9CHL)5$f1L9HL)fE1L9HL)E1L9HL)1L93HL)%fE1L9HL)HXIDE1L9&HL)DDLMsDH HDLMxDH HaDLMu?u@H}E1AνF`F 1(%LEM@@L1 LDuML9;u@DuML9uHL);L)o$HMf 1ahF#1L9BLn$H,HL)LHMf 1uhF#1L9 LHEO1E1@E111E1E@E111E1oEɸ\11E1UFEE1A@E{1E1f\E11E111E1ۉE111E1EP@E111E14Eɸ!11E11E11E1111E1511E1)1E1@Eֹ11E1IĿ111E111E11E1 KFpKFE111E1fff.UH HAWAVAUATSHH HHpdH%(H]1IH@IqEDLh(H mFE1,GH[H`1tk$`FXHHƿ1LJ M9HDž8HDž0LsEM9H6k$HHPHǸH9HAAHAHI9HxHH+@HHMHM9M9HDžpsLL),Hԅ@Hp=XK IHǺX G@F@F1Ht Ht E1HfDtH0I^AFI IF IF EA^9rqh$t9wcPHI~HcAVH9=IF19IF }0INHcH QH1AfDBHA;^|A$I|$1I~(hL`IF(8euxhuxu Hci$Iăh&I\$I9@<LIi$M9AFV8DHh$AFWAFVM9h$AF01111EI9vLH)ޅfH+@mF1HLWL9& H]dH3%(jGHe[A\A]A^A_]DD,\g1 HHH@HpEtLH+pHH0Ht$H;GEH H;B'HHuHpDoqHHHƿPF1J_$uHA_$dH=_$E$_$9e$mDPHH=^$Hc‰^$H9EH^$19H^$}=H ^$HcH QH1ff<BH;^$|ᐋf$H^$ #DE1^$^$HDžh\g^$1XHDž\'ILI9@L|f$HU^$LD5G^$IG'H9pA HpA!DHhL f$HhHpQf.HH+@LPA`F@@LpHHb$Lc؃II\ga$1LLxLxLpLFHH1K4Lxf.Lc M95M9vLL)4ME1A AHDžP fd$M9AFWAFVA$IT$HǃB$@HDBLƃHH EyL9uۉIM9EA~0DA$ID$H׃~AA HPAHփHH yL9u܃?DEg2@MĄt HHH ǃhA~4!I\$I9Y7M9vLL)K7AFPIF(E1HDž08z>HH14mF{_$E^VLcII\gEۉ_$!LP1A`F@@LD\D\AAF؍TL1JkFl_$E^VLcII\gEۉJ_$ Lp1A`F@@LD\7D\AAF؍TL1JkFiD~b$E !AN0IV(M$HAFL9LF`E/A?%IFDpE~4fB<`IF F$t9w{HH=7$Hc‰p7$H9Hd7$19Ha7$}6H P7$HcH QH1f4BH;7$|Y7$HhDwTED5@7$D>$Ӊ\HDžzD<t<@t @<E5>$AL ApAuH LH+WHW HI<H~6$IHI9WI9v D)SHZ6$HhLHDžHDžH@(8zHHhD546$L`:$L+@LcII\gEp:$zLpL1A`F@@dAAF؍DINj(:$D5$LcII\gE҉:$LP@1A`F@LDpDpAAF؍LLHH1MMLF=%5$ 9$D=5$L%4$L%4$LcII\gEO9$L1MA`F@@GAAF؍DIƋ 9$D=4$Lt4$LcII\gE8$1MA`F@@LAAF؍TLL1*nFA\g<$7H) nF1LLMfA14fFIM9uH5;$ A\gH5$$ DH}E1AνF`F 1LpLpLE@@L1MLH}E1AνF`F 1LEM@@L1m7H}E1AνF`F 1]LPLE@@L1L>H}E1AνF`F 1 LpLE@@L1v@\<:$H2$*:$EDMc^4He8$MH p;=<8$ HpHH LPAH$A`F@@`g1!LP1Mع`gLNF^A?\H7$H D; 7$ AHHr DpA`FH$@@`g1Dp1`gHھ2nFDp;DpnfH)7$H D;% 7$ DHHH$EA`F@@`g1`gHھEoF1BH E11MH$5$8$HpȡFqFN;Hy6$Mc~4LpH D; M6$ AHH DPA`FH$@@`g1:DP1M`gLMFDPpA<$DPffH5$Hp;=5$HpHHH$AA`F@@`g11`gL⾕nFHP5$HD;=05$ DHHH$EA`F@@`g1"`gA<$uH4$Hx D;%4$k DHH[ H$EA`F@@`g11`gLznFA?HY4$HpD;%94$cDHHSH$EA`F@@`g1+1`gL`nFrA?pIcF4HpHPH3$H5D;%3$(DHHH$EA`F@@`g1LP1`gLMFA?fH93$H`D;%3$SDHHCH$EA`F@@`g1 1`gLNFRA?PH2$HD;%2$DHHH$EA`F@@`g1`gHھhNF1H E11MH$53$HpXFqF;rMc^4H2$MHXD;%1$KDHH;LPLpEH$A`F@@`g1LpLPL1Mع`gPOFLpLpA:AfDIcF4HpHPH>1$HD;%1$DHHH$EA`F@@`g1LP1`gLMFPA?NDMc^4H0$MH8p;=0$&HpHHLPAH$A`F@@`g1qLP1Mع`gLNFA?MMFEɸfCH9fMVL1$If.Lb1$If.J1$IfL21$If.DAvVDpA~0I~8:DpAV0HLF1ADp@AvVLc:JnFH¿1f.1OF$DH1gfLr0$If.H#nF1 LAM)0$AHPE1H H<Hc'$H?H'$H9v H1FH<Hcl'$H=m'$&EAn D@@`g1 EAn D@@`g1DpAn D@@`g1LPLP{DDpAn D@@`g1LPaLPDEAn D@@`g1,DpAn D@@`g1cEAn D@@`g1EAn D@@`g1LPLpLPLpEAn D@@`g1T?An D@@`g1Dp Dp@EAn D@@`g1\An D@@`g1DPDPy@EAn D@@`g1EAn D@@`g1TM9sLL) IAFVM91AFWL,$AFPDn,$LEN(NF|?nFmv'oF1H HE1M1H$5+$衕FqF'H<HcSH?HCH93 H<HcSH{onF-I~L8H4AVIFH?I~ HcH9 H4AVH4AVIFH?I~ HcH9 H4AVH}E1AνF`F 1LpLpLE@@L1MRLH}E1AνF`F 1Lp@LpLE@@L1MLH}E1AνF`F 1LpLpLE@@L1MLH4o!$H!$H?H=!$HcH9 H48!$#H4LHH? AVIFI~ LHHcH9HMFAVLHH4LHH?AVIFI~ LHHcH9 HwI~AVLHH4PMVAVDHH4LHH?AVIFI~ HLHcH9%HMFAVHLH4LHH?ANIFI~ LHHcH9HI~ANLHvHcAVMFDHH4LHH?/EFIFI~ LHIcH9$H4I~EFLHH4DLHAVIFH?I~ HLDHcH9HAVHLDIF 9GH4LHH?<ANIFI~ LHHcH9 HANI~LHH4LHH?ANIFI~ LHHcH9HI~ANLHH4LHH?lAVIFI~ LHHcH9H>MFAVLHM9VLL)F1fD nF1oH0HpLLI14fFH8L9uH5# Hp[WAVVymF1AVWmF1HuHL/HHEHHHHuHLX/D}H0IILH)ޅDž\pDž\\Dž\HH4PANIFH?I~ PHcH9cHANPH4PaANIFH?I~ PHcH9H0ANPH4pANIFH?I~ pHcH9HANp^H1HfGHxWH4AVH?IFI~ HcH9)H4hI~AVf9Iă@H0HhIԸ%M1EE11E$M1E$1E11E1_1E11E1PI1E11E1A+DII׸wIǸAHÃ@E 11111E~HA@U)L111E1EHÃ@L111E1LE111E1뵃@H4$H$H?H=$HcH9wmH4{$L`L`L`H1vI1 111k1錹1fH1LH1eH11H1 H1I11111騷D1E111I1nLI9 $M9AFVy.H1ffff.UHAWAVIAUATISHHE0L@LXLU HDž`HPHE8HHdH%(HE1H9HIIH{ H: HX H; H9p"HZHƃy8#DHSHЃHH ƄyL9uI>H`}(E1ۅ@:$uFMtAIH I! I2!I3!uH`IB E(M| LH I8LHII Iz I I I  IEHIH`HPH9x(L+p&1Iĺ0RF\LHL1H Hf TH H` }!E@0PF1L8LH1L8E(E1ۅ=H`L0L8&jFH¿1L8L0j@H> H. H H9"$HZIAy8#DHSHЃHI ńyL9uI6E(& HHHLLLHD$(HPHD$ E(LT$D$ED$HEH$LXL@HÐH}dH3<%(H"He[A\A]A^A_]H H H*HXHHH9 XtL8L$L8H`HXHI}(E1ۅwH`L0L8M$*pFH5H9K2HBH@I$DHpHHH @yL9u܃? @L@t HHH H`H9HZHƃy5 fHSHЃHH ƄyL9uI>H`D](EU HP.L8HxYHL8yFH H 5#L]L`H8g9gHHL+X HtL_8L9X(HzL0~H8J<u$H8IL0L+Z L;Z(LZHEH8LH`A5DAνF`FL H($HcЃHH\gu$ 1H0H8L(L8@H0@1PpF1_HH0Hƿ1E1L !I^I9M9sLL)I;I fDIIIx L[M99 L0L8H $L8L0HH`E( I3I^I9@L8L$L8H`+III I! DM(E1EkH`L(L0A hQF1H8H8Hƿ1L0L(~I*I`$8H`IB(IJt4 IBI>*I@$}IEHIMLHH(HPL`H$LHL@MUXL)AE$1tFuH1I*@fD" I2`I6+H`H1HHH@H=14tFH1!<@I@N$}nIEHwdAJ@ABD9:2IB8HHH`tHHHW0H`Ir0H΋g$AB@*f.I@I fDIu(E1ۋ 8$J$qI  I fHI I x L[M99 I!IMIU} IEHv I=ARPABT980IBHH`H4ЍAABPM9AI^Hƃy<'fHSHЃHH ƄyL9uI>H`DHHLHDž`HӋu(E1ۅH`A0!DAνF`FL L(H0 $HcЃHH\g$ 1H8H}L0H8LE@@1H8bjF1L(L I^I9KfEHLI9vJutL8L$L8H`HLH]NfDfDM9sDD)H9)fDDM(E1EH`L0L8foFHNfL}MDcF bjF1L8L8fDDE(E1EH@H`L0L8jFH@H`HHHr1sFH1KffDH`H=3$ŰFfDH`H H H 1NsFH1fDE1IFI8<IIfDI1fDM(HCH0I9 HDžpHDž`E1HEMA`F@@H8H1L(L(H81*pFL($L(S$EH0TIJ/f.L9L[Hƃy>)f.IASHЃHH ƄyM9uL;E(H`lLLL0L8#L8HL0EHHH9 utL8L $L8H`HLH]HR#HXH`HvHXHH;8# L8HNjX $HL8HH`L(H0hIpF1H8H0H8Hƿ1E1L(rF1rF1trF1erF1\rF1KrF1u:rF1_zrF1IdrF13NqF18qF1"qF1 qF1qF1qF1qF1qF1rF1mrF1WrrF1A\*rF1+FrF10rF1HH"1 sF蛽H1̿L9sLH)ޅHDž`1I\apF1L86LH1sL8DE(4MI)HLL8սL8H\@L[M9SfH`IB(IQ INILs H`H]AHsF1蠾oF1GH1L sD$ L;0|L9sLH)ޅnHDž`H0I; E(E1ۅPH`L L(H`H0hPF1H8苻H0H8Hƿ1讽L(L III DE(EHfDI H`Hl A H Hq 1QFH1.fDII H`HB&H1XtF肺H1購fDH`HV : H HsF1i@H`H  H H  Hd H pF1HCI9H0HDžpHDž`1HEIA`F@@H8H1L(8L(H8pF1L(rH0L( H0tF1LHH1%LHMHپoFI)ؿ1DL0L8L0L8H #L]L`H 12g09gH H> @/ H  Hx qF1eI"fDkI/aDL8HHL8cF1˷IMdd ag1芶 agL8L8H$H0H`L8JIz0L L8AЉ(J4L0L8L0Iz8J4IB0̤L8(L IB8ARDMXHHH9<XtL8L&$L8H`HXHIH9 )IFcIHTH`HpHL8}qLpL`L8M=HEA`F@@L HH81L(״H8L(@)HA`FHHM1衴L H`HpHL8pLpH`L8MHEA`F@@L(HH81)H8@I)HA`FHH1L(/sF1=XDsF1'B8sF1,HxL1 1IĺtF誴LHƿ1ضItIH {$Hu;@HI(Ht.L9!uLaDHH¾jF1艶]?sF1isF1SnH@H`H`j!tF1#>1sFͳH1fsF1ysF1ҵnsF1輵dtF1覵ptF1萵tF1z+tF1dIMuDMIZH !HHpF1HX_H^HaqF1ŴL(H=M#QFH8H01NH8H0H1ioFL(IzHL(0LHΉ8H趟LH8L(0AJTIBHAJP|oF1貱HHEL0H8H9)1IĺRFiLHƿ1藳1 tFAH1rsF1\wsF1FasF10K1QFڰH1 &1ypF走H11pF萰H16#A5DAνF`FL L(HcЃHH\g#HE H0H8H1L(L8@H0@1MɮPF1دH0H1foF1趯L HIK@L1H1H1H1@Hù1CtFLH1}`Fu#A5DAνF`FL L(HcЃHH\g#HE H0H8H1ɱL(L8@H0@1M{QF1芮H0H1Ie@QF1hL HUI1SH>HesHqF1`{HHI8qF16QHHpF1 $H H pF1߯L0PFL0PFqF1蝯jqF1臯]qF1qqF1[v$qF1E`oqF1/JpF14pF1HH=1IĺqF蒬LHƿ1pF1誮HqF1蔮pF1~pF1hpF1RmpF1#fLLH+HPH# #tHHPH;\HHHH HHfDH;tHH9uHDž@H8HIH9XL9XHDž  H@HH@HH H@`HH(LsL9XmH9Xƅi E1tbH H9XHDž`HDžpH8HL4L9X DHH#HIHԋHuf#Y#uDE( H?HHHPHH0H;Q(ILfg#H}A5DAνF`F Hc؃HQ#1H\g胩LPLE@@H1?pTF1NLHH1 ]L9XHu B#$#uu #HHMdH3 %(KHe[A\A]A^A_]L9X HDžHDž8ALsL;XHDž1fLfDH#DH(L#H(H H@HHHDžHH0gH(H)# C#C#H=+#HPL1Hú(SF薤HHƿ1ĦHAtFtFHEH1 uFHKHHHƿ1r1&uF!LHƿ1KH o1HúHp1vF膎LL 2II#LcI#EI\gIA`F@L@1赊LXJkF1KT=r#MA`F@@HcЃHL\gE#1LVKT=JkF1蠍)vF֊LxHEHEHHEHhI9pL`.@HxMT#LcI#EI\gMA`F@L@1觉HXJkFI1e#HxA`F@HcЃM H@L\g0#1LAHXI1JkF腌M9H5# 襊HDID+uWDH}E1AνF`F 1݌LEI@L@1虈LJkF1_#H}E1AνF`F LcI0#1I\gbLEM@@L1"Lf.H}E1AνF`F 1LPLPLE@L@1M过LJkF1 #H}E1AνF`F LcIV#1I\g舋HxLE@@LM 1@LL%)#vF18LH݈L%#tvFDvF1H1(L`@H8VF1HX輇HHsH5# H 胆H L(H8L;h L`1VFYLHL1>H8VF1HX(H1H=1MVF1H14#HHIUHAWAVAUATI.SHH_HPdH %(HM1HOHHHHƿyFHPH@(HHLD#EAL#1E1E11E1M@Ap@A9DBtWtSI@0E̺H9v.Ix0HH9vHH9rH9wAIXE9uD EDHHPHIE{@EtAIC0HPH8H;{ t-H[IĺxWF14LHH1;D HDžEuDHArHHP1s`FHXބH1H 1WF軄H1;`#vH C#LDžfD HHPHEHu[HQ@t H1‰Q@9wHA0HֹcBH#讃H #HHȋX@PHcEMH4HrHHHVfHH0H Hp8DH@Hp$HPH+K HHEHhH`]L9WF t HhH9NHP{HXHX(HH#L`LpMMH@xpL1vFL)HhL9 M|$L9HL)vF1蜂H1̈́H56#HHEM9H@D UEu HDUED Hx0ME/ DAIH J9 aHhH9Dž1PXFHhH18H5y#HEL`MH9H@fDHE1DuD)D$`1tF1xH1bzL9@H#svFfDHٛ#vF1wHHxH}E1AνF`F 1zLEI@Hߺ@1ivHھJkF1y/#H}E1AνF`F Hc؃H#1H\g2zLEM@@H1uHWf.HDIfXF1vHH`LH1H)H)~-UfLUL#LUDO$:L9XF1MevHhH1M!-@I1XF4vDH1,f$1tFvH12xkDL9wXM|$ 11]vF x1I9HMH#L#HL)tLM|$ #]vF¿1w1L9HMQ11f1MPX`F1uHHƿ1Mw11E11XDɸE1Dž E1DžHWF1tH1(L\#6L`1YFL)tHHL1O+ DžHPVF1HXOtH1H+1HHPHVLCtUHAWAVIAUATSH8LgH}LH_(HuMn1s`FsLHƿ1uI9JDM|$L9wvI9s HL)ulMAEIWH9N *IfE1HEL9fE.uLMH#LMI@L#HEH9Ml$ L9w.L9v HL)u$MMEAXLMA1#HEE IWH9w3I9HEN *IIĸfE1L9fEvS&HEIľHULIĿ#HUfEʃfEN *L9H9vHH)օE1ܾ#LweHH #HPHDXDL;AtFHXH9uHE@ZF1LMLELxqLEH1LL(LELMK )IH9wXE1L9v HL)ȅuGf}Lvc#L9 apHeظ[A\A]A^A_]DuLEHML#LEHMIf}Lw1YFHMLEqHUHƿ13s1YFpUHƿ1s1YFpLEHƿ1Lr1ZFpLHƿ1Ir1vFqpH1rHMHNAUIEHӃ9 #@HpHHH @yI9w܉IHIM,M91M9vLL)LIľ^F3M9 AUIEу )f.HpHHH @yI9w܉ILL)LS_Ml@^FM9,AUIEHӃ6 #@HpHHH @yI9w܉IHIM,M91M9vLL)LŶIľ^F1]LHƉڿ1_0M9 AUIEIA "HpHHI @yI9w܉MDM9 AMjAAA(fIAUHЃHH ÄyM9uAMDE1x]F\H11]F~\Hƿ1^fDM9AUIEуl)f.HpHHH @yI9w܉ILL)L\Mlp^FvF1[H1]M8HHLMM9EAI@IAHpHHI @yL9uAMMvF1[Hƿ15]IFHKD5MHfD1M9vLL)HD$(HD$ E1D$HD$E1D$HL1LH$҇MIM)L9t ,VYH; II^I9iL#HchH11DžIM,M91fDLY#HH11DžIM,M9@L#HH11DžIM,M9@L٦#HdL#HH11DžIM,M9@L#HfLa#HUfLQs#M?HOs#HpH9(HM48M$INI9M9sLL)AH9HQI9I9LH)΅f M3WDž@vF1XHƿ1M;ZHLQ#HH9I M9KI9vLH)΅=LH*r#A HH#pHLHLrHzM9wI9LH) D#L8HHt$IDLLL)WMtA>uLzLrGH@LLL)WIDI98HHHyyL9uHI9ĉw8HPx!f.HzyL9uHI9ԉ:HB4fDHxyL9uAI։HA>UHM9BLLL)VHI|L蟭HHdH8HvALIHLHIH)NVH\;IuLHMLM22D1]FUL4$HƋIM18WI1IƹHȾVI2HHcF1TMIdd ag1 agYSH֡#LHp A Hn#HpAHn#AƾTٸx111^ٸ111Aվ`F1SDH11#t;w)tuNH#F#evHu#F[#~f.fffff.USH-"#D #Et5H#9t_A1fIx9\8tIʍJD9uH1[]Åt(DEuJDEtʅuE1HL[]AIHH }u H!}uQ#2 :g肴Կp:gv@1HHH9vHFRfD1ffff.1HHH9vH=fD1ffff.HH1HH9v H=1ffff.ATUH-#SHt3H}Le(HuHH_NHuHNMtLH#H#1D߃"uL%:#M;#wUHLHPIlXCTt)HXH9t2CDuH{00NH{8'NCTuH{HHXNH9uLNH##[]A\fff.AUIATUSHA wFFfDHNILHLMuMA$tw<,tsHH]Huƺ18`FuNLH18L,NHItAE<,fAEI]H[]A\A]f.HEU m#t '#Mfffff.ATUHS1DtEF<.$hFD #ƚ#Duf[]A\#@#@ #|@#ifN#QF#A>#12#!N# 1#@#L%p#18`FLLH1{fD##ʙ##™###t##T#^##n#X#B#4#Z#DUSHHt$(HT$0HL$8LD$@LL$Ht7)D$P)L$`)T$p)$)$)$)$)$HH=io#dMH$H-ud#(F1D$HD$HD$ D$ 0HD$EKH=Fo#HH¾1 NH=-o#HL$Hھ#JH[]fS$ȦFGW[HHH WH WHH WH H WH(H WH0H H8H fD[W[ f.G[HHH WH DGW[HHH WH HH f.GW[HHH WH WHH H H GW[HHH WH WHH WH H H(H @GW[HHH WH WHH WH H WH(H H0H Ð4F1OIH1S^Hfffff.USHHt$(HT$0HL$8LD$@LL$Ht7)D$P)L$`)T$p)$)$)$)$)$HH=l#JH$H-a#OF1D$HD$HD$ D$ 0HD$HH=l#HH¾1LKH=ml#HL$HھcGH[]fSw`$FHH8GHH0GHH(GHH GHHGHHGHHG@7[D4F1GH1FfDSwX$XFH@wHGHHGHH HG@wH@wH@wH@7[D4F1?GH1CNFfffff.S$ŠFGW[HHH H WHH WH H WH(H WH0H WH8H fD[G[ f.GW[HHH H DGW[HHH H WHH f.GW[HHH H WHH WH H GW[HHH H WHH WH H WH(H @GW[HHH H WHH WH H WH(H WH0H Ð4F1oEH1s~Dfffff.S#w`$Ff4H[H1H[H-[DH5H-[f.Cff.H=5#CtSGOHHH OH OHH HGOHHH H OHH HGOHHH OH HH HGOHHH OH OHH HAWAVAULcATIUSHHT0A<$/t]H9tXH)N<(IIEHHt}LHHOEJ|5LL?EBD=HH[]A\A]A^A_A}HcdEHHt,LLHDBD-HH[]A\A]A^A_fDD1OCH1U1닐AWEAVAUAATIUHSHHH8dH%(HD$(1 D1ҾHHkHCHHCHC HC(HC0HC8HC@DkPCTHCHDAƺ0FLkXH<L,BHHx/FHL$(dH3 %(D|H8[]A\A]A^A_D]FLnFLEFLuH1 DIHC8HCHLIDMSH`F@HHD$L$HKHLҾ`>H;CIH|$=_@HHD$L$HKHLҾ>H;CuH<H$I)L|$@HHCH4$E1HL$Ht8HCHϾH $NILD$ LD$H $IHL;{rH|$HHC tsL|$HKHL{(LHIL<1ҾHLcHCLHCHC HC(HC0HC8HC@CPCTHCH=ź0Fu@LsXL<L ;HfD .fD fD fDfDHHs0H;)SHItHLtLD4/HHs@1LHItL4L#AUATUSHHX/Y/Z/%[/+\/1]/7^/=_/C`/a/?b/Ec/Kd/ae/gf/mg/s!HSXHHS`@HPH[]A\A]H0tH8u*8F1)4H1/H1[]A\A]fHG@HYH H6sPIąHs8LC0I9C < LuA  t t HH9rHJI8/PIKPtBH{@t;LHs0H;D)IHItHH`L62fDLHC0@H$H=8:4Hx 15HC@DXHHCX[]A\A]@fffffff nfD ^fD NfDH .fD fDfDLMHs@1HHHL0Hn@AWAVI%DAUATUHպSH1H(1L#IL1HI1{PIIuuYHHt$43HHHt$H,$MAFHH10H(H[]A\A]A^A_fDH{@tvI>H 1ItHHt$2HHHt$IHl$HtpH$MAFHH1/HH([]A\A]A^A_HHt$^2HHHt$t'H,$MAF)L[L<$뎺D1I0H1O1f.AVHAUATIUSH?HG1@HHxuzHcH+I<$IHtcI\$M1D/xLHcHEI6HHIHL)/H{HuID-L[]A\A]A^ÿ11@UHSHHt2H?HHtH7.H;HuHH[]!.H[]fAWAVAUATUSHH(H!/HxE1E11E1E1*HD$D$ `F@DtH`F@uD$ tD$ OT9|0Med$ LHct$ H6IOTIHL$uffD1HHtM6`F@tD D u΀\Eft~'HHu@H|$LT$LT$ML$IKD fDH`F@uMf.Et#"uE16fD&fD't#"UAE1AD1E16@\D$ IH|$+H(L[]A\A]A^A_HE1AUATIUSHHt`HIHu(fD<'t4<"ft.L-t1Ht<`F@u<\uL\c-uH[]A\A]fDL ;-tII]Hu1DAWE1AVIAUATEUSHXH|$D$8 EE|$A9IIcH,H<؀?@u؃l$8HF?.HH$1HI-LL,$,HIfH<$11q-PI}H $LHHD$*I9HtH<$HD$*HT$ HD$t4`F@HD$fD`F@HuHD$0HD$ HIHHD$H8H1HHxuzHcHHt$HD$(H>HHVDd$D|$LH*Ht$L$0HߋD(H|$(H<$(HD$HX[]A\A]A^A_H|$HD$ HHD$01E1E1>E1HH=L#xF1{+Ht+H?t%H1HHu1f.-veB7<:9Ft"Fr:Ft;FuofD wFtrFtFtfD1DAl Age>FIfUFuf#(1%FF&$F'6FE7zFF«FԫF2B/FdFY0ܮFK1FgCF/F [FnFU@@@hF@yF@FAFFtA Fc A)FF:f  3F$ @F~@*iFXF+wF,FCÐFfjFF@ FF!Fy"խFÐ?FZf@FDA$F@40F"F5@F 6UFcÐAذFv]AFAF+fF F@5FfAİFD=FʬFffDcFFffDCRFjׯFf.FFf.Ff.Ff.Ff. Ff.Ff.lFf.HFf.Ff.lFf. Ff.UFf.Ff.Ff.w5vr  'FtP6FFHGÐOveywFtFr FfDFtߺFFHGÃvuFtѲFFHG@ XFt!lFtBF1f._FblFQFHGFBFufDF"±FufDѱFf.Ff.fDFfDFf.zFf. Ff.+Ff.aR " D /   ~ 4 vF^F F FD8  *  4ʴFLFAܴF3'F@!# ! f!) cF !|F!FfDL yV QfNFlFaOFSPGҷF@3! !f!F  F!ѽF!F{ JFF Ffkn!f)jcFLFAd'F3e'F;`F<pF@[?^`R\F]FD N  ûFC 4ٻFÐ !!|f*!F!XF2a5,3ȵF4ܵFD#&:8L#Fc2TݾFÐ ;NmĹF0F%nչF кFD*FF8FGFGDFFE FFvF5!zF_gFT6!FC"4FÐ !FF !*F !?FÐXVFDFYfFZvFf. wF^F F uxFD.{FtfH/FtV1uNFøFøFøLFøFøHFøFøFø.FøFø(FøTFøF1fDSFtFrTFt݃Uuո&Ff"%FtƸFr%7Ft'uFFf.?FtFr@FtAy¶FfD ڳFbʳFW FI=Ff.!FF!˼F!ڼFÐhgF\FiwFjFf. F F y0FfD0!F_1!,FH2!9=FfDrF"`FF Ff. FF (F @FÐINF: %xAArch64WE32100SparcSPUIntel 80386MC68000MC88000Intel 80486Intel 80860MIPS R3000IBM System/370MIPS R4000 big-endianSparc v9 (old)HPPAPower PC (old)Sparc v8+Intel 90860PowerPCPowerPC64Fujitsu FR20TRW RH32MCOREARMDigital Alpha (old)Renesas / SuperH SHSparc v9Siemens TricoreARCRenesas H8/300Renesas H8/300HRenesas H8SRenesas H8/500Intel IA-64Stanford MIPS-XMotorola ColdfireAlphad10vd30vRenesas V850mn10300mn10200MoxieFujitsu FR30Fujitsu FR-VpicoJavaSiemens PCPDenso NDR1 microprocessprMotorola Star*Core processorToyota ME16 processorSony DSP processorSiemens FX66 microcontrollerSilicon Graphics SVxDigital VAXVitesse PrismAdvanced Micro Devices X86-64Intel L1OMIntel K1OMIBM S/390SUNPLUS S+CoreSanyo XStormy16 CPU coreOpenRISCAdapteva EPIPHANYOpenDLXVitesse IQ2000Tensilica Xtensa ProcessorTenor Network TPC processorMAX ProcessorFujitsu F2MC16Lattice Mico32Renesas M32cAnalog Devices BlackfinSharp embedded microprocessorArca RISC microprocessorUnicoreAltera NiosAltera Nios IIInfineon Technologies xc16xAltium TSK3000 coreSeiko Epson C17 familyCypress M8C microprocessorQUALCOMM DSP6 ProcessorIntel 8051 and variantsCyan Technology eCOG1X familyToshiba MeP Media EngineXilinx MicroBlazeRenesas RL78Renesas RXCyan Technology eCOG16 familyNVIDIA CUDA architectureNone: 0x%xSTRTABSYMTABRELASZRELAENTSTRSZSYMENTFINISONAMERPATHRELENTTEXTRELJMPRELFINI_ARRAYFINI_ARRAYSZRUNPATHPREINIT_ARRAYPREINIT_ARRAYSZPLTPADSZMOVEENTMOVESZFEATUREPOSFLAG_1SYMINSZSYMINENTADDRRNGLOCONFIGDEPAUDITPLTPADMOVETABSYMINFOVERSYMTLSDESC_GOTTLSDESC_PLTRELACOUNTRELCOUNTFLAGS_1VERDEFVERDEFNUMVERNEEDVERNEEDNUMAUXILIARYUSEDFILTERGNU_PRELINKEDGNU_CONFLICTGNU_CONFLICTSZGNU_LIBLISTGNU_LIBLISTSZGNU_HASHPPC_GOTALPHA_PLTROC6000_DSBT_BASEC6000_DSBT_SIZEC6000_PREEMPTMAPPPC_TLSOPTNIOS2_GPProcessor 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)Unknown note type: (0x%08x)Out of memory Report bugs to %s 0x%8.8lx %2.2xnoneWEAK | INFO | [%*.*lx]: OS (%*.*lx)PROC (%*.*lx)UNKNOWN (%*.*lx)|INEX%sUFLO%sOFLO%sDIV0%sINVAL Tag_ISA: MSP430 MSP430X ??? (%d) Tag_Code_Model: Small Tag_Data_Model: Restricted Large : "%s" %d (0x%x) LARGE_COMSCOMSUNDANSI_COMPRC[0x%04x]OS [0x%04x]RSV[0x%04x]bad section index[%3d]%3dTHUMB_FUNCTHUMB_LABELPARISC_MILLIHP_OPAQUEHP_STUBIFUNCNOTYPEOBJECTFILESRELC: %d: %d: %dLinux C6000UNIX - System VUNIX - HP-UXUNIX - NetBSDUNIX - GNUUNIX - SolarisUNIX - AIXUNIX - IRIXUNIX - FreeBSDUNIX - TRU64Novell - ModestoUNIX - OpenBSDVMS - OpenVMSHP - Non-Stop KernelAROSFenixOSStandalone AppBare-metal C6000UNIQUEWEAK^%c%.1sMICROMIPSMICROMIPS, MIPS PICMIPS16OPTIONALMIPS PLT IGN RSV STD LNK: %xsh_entsize is zero Invalid sh_entsize symbolssymbol table section indicies32-bit relocation dataout of memory parsing relocs 64-bit relocation dataprogram headersCOMDAT [: 0x%x] [Index] Name [%5u] %s unwind dataR_ARM_NONER_ARM_PREL31R_C6000_NONER_C6000_PREL31%016lx%6d(gp)%10s <+0x%lx Tag_GNU_MIPS_ABI_FP: Hard or soft float Soft float Tag_unknown_%d: corrupt tag %ld (0x%lx) Tag_GNU_Sparc_HWCAPS: mul32%sdiv32%sfsmuld%sv8plus%spopc%svis%svis2%sASIBlkInit%sfmaf%svis3%shpc%srandom%strans%sfjfmau%sima%scspareDEFAULTINTERNALHIDDEN%5ld %3lu: %-7s %-6s [%s] %3.3s corrupt vendor attribute flag = %d, vendor = %s attributesAttribute Section: %s File Attributes Section Attributes:Symbol Attributes:Unknown tag: %d Unknown section contexts Unknown format '%c' Tag_GNU_Power_ABI_FP: Hard float Single-precision hard float Tag_GNU_Power_ABI_Vector: Any Generic AltiVecSPEr3/r4Memory 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 {r14 finish[Spare]readelf.clen == 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)] i < sizeof (buf) uhandler ehandleraux.strtab == ((void *)0).IA_64.unwind_info.gnu.linkonce.ia64unw..gnu.linkonce.ia64unwi..IA_64.unwind'%s'unwind info Unwind section unwind tableR_IA64_SEGREL <>: [], info at +0x%lx Unknown version. .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 Tag_%s: Application Microcontroller Application or Realtime 8-byte 4-byte ??? 38-byte, except leaf SP True ???attr->type & 0x80 [cantunwind] C62xC67xC67x+C64xC64x+C674x Tag_ABI_wchar_t: Not used 2 bytes 4 bytes 16-byte Tag_ABI_DSBT: DSBT addressing not used DSBT addressing used Tag_ABI_PID: Tag_ABI_PIC: Tag_ABI_compatibility: Tag_ABI_conformance: %16.16lx %16.16lx %12.12lx %12.12lx R_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_LDST128_ABS_LO12_NCR_AARCH64_GOT_LD_PREL19R_AARCH64_ADR_GOT_PAGER_AARCH64_LD64_GOT_LO12_NCR_AARCH64_TLSGD_ADR_PAGE21R_AARCH64_TLSGD_ADD_LO12_NCR_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_ADD_LO12_NCR_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_DTPMODR_AARCH64_TLS_DTPRELR_AARCH64_TLS_TPRELR_AARCH64_TLSDESCR_AARCH64_IRELATIVER_XSTORMY16_NONER_XSTORMY16_32R_XSTORMY16_16R_XSTORMY16_8R_XSTORMY16_PC32R_XSTORMY16_PC16R_XSTORMY16_PC8R_XSTORMY16_REL_12R_XSTORMY16_24R_XSTORMY16_FPTR16R_XSTORMY16_LO16R_XSTORMY16_HI16R_XSTORMY16_12R_XSTORMY16_GNU_VTINHERITR_XSTORMY16_GNU_VTENTRYR_IQ2000_NONER_IQ2000_16R_IQ2000_32R_IQ2000_26R_IQ2000_PC16R_IQ2000_HI16R_IQ2000_LO16R_IQ2000_OFFSET_16R_IQ2000_OFFSET_21R_IQ2000_UHI16R_IQ2000_32_DEBUGR_IQ2000_GNU_VTINHERITR_IQ2000_GNU_VTENTRY%-22.22s%-17.17sSUNDEFLARGE_COMMONVMS_SYMVECSCOMMON%8.8lx %8.8lx unrecognized: %-7lxR_ALPHA_LITUSE bad symbol index: %08lx()%-*s
- %lx + %lx%*c-%lxR_SPARC_OLO10 Type2: Type3: section contentsNT_VMS_TITLENT_VMS_LINKTIMENT_VMS_ORIG_DYNNT_VMS_PATCHTIME(NONE)UnknownnotesData sizeOwner %-20s %10s Description NetBSD-CORENetBSD procinfo structurePT_GETREGS (reg structure)PT_FIRSTMACH+%dSPU/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 %-20s 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: %04u-%02u-%02uT%02u:%02u:%02u 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 Provider: %s Name: %s Location: , Base: , Semaphore: Arguments: %s Page size: Page OffsetEndStart %*s%*s%*s %s liblist section data %s %#10lx %-7ld NONE EXACT_MATCH IGNORE_INT_VER REQUIRE_MINOR EXPORTS DELAY_LOAD DELTA %#xoptions 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 Global Offset Table data Primary GOT: Canonical gp value: Reserved entries: InitialAccessAddress %*s %10s %*s Purpose Lazy resolver Local entries: %*s %10s %*s Global entries: NameNdxTypeSym.Val. %-7s %3s Procedure Linkage Table data PLT GOT: %*s %*s Purpose PLT lazy resolver Module pointer Entries: %*s %*s %*s %-7s %3s %s ELF32ELF64(current)A+, nodiv, nouspemac_bemacELF Header: Magic: %2.2x 2's complement, little endian2's complement, big endian (bytes into file) , has entry point, , Version1 EABI, sorted symbol tables, Version2 EABI, Version3 EABI, Version5 EABI, BE8, LE8, soft-float ABI, hard-float ABI, GNU EABI, interworking enabled, uses APCS/26, uses APCS/float, position independent, 8 bit structure alignment, uses new ABI, uses old ABI, software FP, VFP, Maverick FP, , FDPIC, code in L1, data in L1unknown mac, float, relocatable, relocatable-lib, V3 architecture, FPU not used, regmode: COMMON, r4 not used, r30 not used, r5 not used, r2 not used, double precision FPU, single precision FPU, SIMD, CACHE, MMU, regmode:22, regmode:23, 8-byte alignment, r4 fixed, r4 free, r30 fixed, r30 free, r5 fixed, r5 free, r2 fixed, r2 free, v850e3v5, v850e2v3, v850, pic, cpic, ugen_reserved, abi2, odk first, 32bitmode, nan2008, fp64, 3900, 4010, 4100, 4111, 4120, 4650, 5400, 5500, sb1, 9000, loongson-2e, loongson-2f, loongson-3a, octeon, octeon2, xlr, unknown CPU, o32, o64, eabi32, eabi64, unknown ABI, mdmx, mips16, micromips, mips1, mips2, mips3, mips4, mips5, mips32, mips32r2, mips64, mips64r2, unknown ISA, sh3e, sh2e, sh4a, sh2a, sh4a-nofpu, sh2a-nofpu, sh4-nommu-nofpu, sh2a-nofpu-or-sh3-nommu, sh2a-or-sh4, sh2a-or-sh3e, fdpic, ultrasparcI, ultrasparcIII, halr1, ledata, tso, pso, rmo, PA-RISC 1.0, PA-RISC 1.1, PA-RISC 2.0, trapnil, ext, lsb, wide, no kabp, lazyswap, gnu calling convention, reduced fp model, constant gp, absolute, vms_linkages, warning, error, abort, D-Float, G-Float, dsp, pid, RX ABI: architecture variant: MSP430x11x1 : unknown (%ld) (%u) , cf, isa IA_64_EXTIA_64_UNWINDIA_64_PRIORITY_INITC6000_UNWINDC6000_ATTRIBUTESTI_ICODETI_XREFTI_HANDLERTI_INITINFOTI_PHATTRSPROGBITSNOTENOBITSSHLIBDYNSYMSYMTAB SECTION INDICIESVMS_TRACEX86_64_UNWINDAARCH64_ATTRIBUTESMSP430_ATTRIBUTESMSP430_SEC_FLAGSMSP430_SYM_ALIASESVMS_DEBUG_STRVMS_DEBUGVMS_TIE_SIGNATURESVMS_FIXUPVMS_SYMBOL_VECTORVMS_LINKAGESLOPROC+%xLOOS+%xLOUSER+%x%08x: PARISC_ARCHEXTPARISC_UNWINDPARISC_WEAKORDERINTERPPHDRGNU_EH_FRAMEGNU_STACKGNU_RELROHP_TLSAARCH64_ARCHEXTIA_64_ARCHEXTC6000_PHATTRHP_OPT_ANNOTHP_HSL_ANNOTHP_STACKHP_CORE_UTSNAMEHP_FASTBINDHP_PARALLELHP_CORE_MMFHP_CORE_SHMHP_CORE_STACKHP_CORE_LOADABLEHP_CORE_PROCHP_CORE_COMMHP_CORE_KERNELHP_CORE_VERSIONHP_CORE_NONE Elf file type is %s Entry point Program Headers: LOPROC+%lxLOOS+%lx %-14.14s 0x%6.6lx 0x%5.5lx %#lx0x%6.6lx %c%c%c %c%c%c .dynamic%%%ds Segment Sections... %2.2d .debug_info Hex dump of section '%s': [%6tx] .gnu.linkonce.wi..debug_line.%s section dataZLIB1.2.8@@%s Symbol table for image: %6d: %4s version dataversion needversion need aux (3)@%s (%d)bad dynamic symbol version defversion def aux 0 %-10lu (%5.1f%%) %-15s %-15.15s AFTERBEFOREsection headers.gcc_compiled_long32.dynstrdynamic strings.debug_.zdebug_.eh_frame.gdb_index Section Headers: Section Header: [Nr] Name Flags [%2u] %6.6lx %6.6lx %2.2lx<%s> %2u %2u %3u %2lu %6.6lx%2u %3u %-15.15s %16.16lx %u %-16u %lu %8.8lx %2u %3u %lu .trace_ 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 %03x: 0 (*local*) 1 (*global*) %4x%cversion need aux (2)*invalid*(%s%-*sdynamic sectiondynamic 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 SINGLETONShared library: [%s] program interpreterLibrary soname: [%s]Library rpath: [%s]Library runpath: [%s] (bytes) Not needed object: [%s] Interface Version: %sTime 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 File: %s dynamic string sectiondynamic section image fixups %-32s %6u Image relocs 0x%08x %-31s %08lx Relocation section %4d: SELF PARENT %-10d PASSTHRU COPYliblist string table%-20s%-20.20s %s %#010lx %-7ld %-7ld aeabic6xabimspabi` %s: bad archive file name /usr/local/share/localebinutilsInvalid option '-%c' Nothing to do. '%s': No such file '%s' is not an ordinary file ! ! BYTOFFJSRJSRDIRECTLinuxHurdARM_EXIDXARM_PREEMPTMAPARM_ATTRIBUTESARM_DEBUGOVERLAYARM_OVERLAYSECTIONPARISC_EXTPARISC_DOCPARISC_ANNOTPARISC_DLKMPARISC_SYMEXTNPARISC_STUBSMIPS_LIBLISTMIPS_MSYMMIPS_CONFLICTMIPS_GPTABMIPS_UCODEMIPS_DEBUGMIPS_REGINFOMIPS_PACKAGEMIPS_PACKSYMMIPS_RELDMIPS_IFACEMIPS_CONTENTMIPS_OPTIONSMIPS_SHDRMIPS_FDESCMIPS_EXTSYMMIPS_DENSEMIPS_PDESCMIPS_LOCSYMMIPS_AUXSYMMIPS_OPTSYMMIPS_LOCSTRMIPS_LINEMIPS_RFDESCMIPS_DELTASYMMIPS_DELTAINSTMIPS_DELTACLASSMIPS_DWARFMIPS_DELTADECLMIPS_SYMBOL_LIBMIPS_EVENTSMIPS_TRANSLATEMIPS_PIXIEMIPS_XLATEMIPS_XLATE_DEBUGMIPS_WHIRLMIPS_EH_REGIONMIPS_XLATE_OLDMIPS_PDR_EXCEPTIONRTPROCSCORE_BASE_ADDRESSSCORE_LOCAL_GOTNOSCORE_SYMTABNOSCORE_GOTSYMSCORE_UNREFEXTNOSCORE_HIPAGENOHP_LOAD_MAPHP_DLD_FLAGSHP_DLD_HOOKHP_UX10_INITHP_UX10_INITSZHP_PREINITHP_PREINITSZHP_NEEDEDHP_TIME_STAMPHP_CHECKSUMHP_GST_SIZEHP_GST_VERSIONHP_GST_HASHVALHP_GST_EPLTRELHP_GST_EPLTRELSZHP_FILTEREDHP_FILTER_TLSHP_COMPAT_FILTEREDHP_LAZYLOADHP_BIND_NOW_COUNTPLT_SIZEDLTDLT_SIZEPPC64_GLINKPPC64_OPDPPC64_OPDSZPPC64_TLSOPTMIPS_RLD_VERSIONMIPS_TIME_STAMPMIPS_ICHECKSUMMIPS_IVERSIONMIPS_FLAGSMIPS_BASE_ADDRESSMIPS_LOCAL_GOTNOMIPS_CONFLICTNOMIPS_LIBLISTNOMIPS_SYMTABNOMIPS_UNREFEXTNOMIPS_GOTSYMMIPS_HIPAGENOMIPS_RLD_MAPMIPS_DELTA_CLASSMIPS_DELTA_CLASS_NOMIPS_DELTA_INSTANCEMIPS_DELTA_INSTANCE_NOMIPS_DELTA_RELOCMIPS_DELTA_RELOC_NOMIPS_DELTA_SYMMIPS_DELTA_SYM_NOMIPS_DELTA_CLASSSYMMIPS_DELTA_CLASSSYM_NOMIPS_CXX_FLAGSMIPS_PIXIE_INITMIPS_LOCALPAGE_GOTIDXMIPS_LOCAL_GOTIDXMIPS_HIDDEN_GOTIDXMIPS_PROTECTED_GOTIDXMIPS_INTERFACEMIPS_DYNSTR_ALIGNMIPS_INTERFACE_SIZEMIPS_RLD_TEXT_RESOLVE_ADDRMIPS_PERF_SUFFIXMIPS_COMPACT_SIZEMIPS_GP_VALUEMIPS_AUX_DYNAMICMIPS_PLTGOTMIPS_RWPLTR_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_CALLR_XGATE_NONER_XGATE_8R_XGATE_PCREL_8R_XGATE_16R_XGATE_32R_XGATE_PCREL_16R_XGATE_GNU_VTINHERITR_XGATE_GNU_VTENTRYR_XGATE_24R_XGATE_LO16R_XGATE_GPAGER_XGATE_PCREL_9R_XGATE_PCREL_10R_XGATE_IMM8_LOR_XGATE_IMM8_HIR_XGATE_IMM3R_XGATE_IMM4R_XGATE_IMM5R_XGATE_RL_JUMPR_XGATE_RL_GROUPR_XC16X_NONER_XC16X_ABS_8R_XC16X_ABS_16R_XC16X_ABS_32R_XC16X_8_PCRELR_XC16X_PAGR_XC16X_POFR_XC16X_SEGR_XC16X_SOFR_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_GNU_VTINHERITR_X86_64_GNU_VTENTRYR_VAX_NONER_VAX_32R_VAX_16R_VAX_8R_VAX_PC32R_VAX_PC16R_VAX_PC8R_VAX_GOT32R_VAX_PLT32R_VAX_COPYR_VAX_GLOB_DATR_VAX_JMP_SLOTR_VAX_RELATIVER_VAX_GNU_VTINHERITR_VAX_GNU_VTENTRYR_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_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_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_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_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_COPYR_C6000_JUMP_SLOTR_C6000_EHTYPER_C6000_PCR_H16R_C6000_PCR_L16R_C6000_ALIGNR_C6000_FPHEADR_C6000_NOCMPR_SPU_NONER_SPU_ADDR10R_SPU_ADDR16R_SPU_ADDR16_HIR_SPU_ADDR16_LOR_SPU_ADDR18R_SPU_ADDR32R_SPU_REL16R_SPU_ADDR7R_SPU_REL9R_SPU_REL9IR_SPU_ADDR10IR_SPU_ADDR16IR_SPU_REL32R_SPU_ADDR16XR_SPU_PPU32R_SPU_PPU64R_SPU_ADD_PICR_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_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_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_SCORE_NONER_SCORE_HI16R_SCORE_LO16R_SCORE_BCMPR_SCORE_24R_SCORE_PC19R_SCORE16_11R_SCORE16_PC8R_SCORE_ABS32R_SCORE_ABS16R_SCORE_DUMMY2R_SCORE_GP15R_SCORE_GNU_VTINHERITR_SCORE_GNU_VTENTRYR_SCORE_GOT15R_SCORE_GOT_LO16R_SCORE_CALL15R_SCORE_GPREL32R_SCORE_REL32R_SCORE_DUMMY_HI16R_SCORE_IMM30R_SCORE_IMM32R_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_PC16DBLR_390_PLT16DBLR_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_PC12DBLR_390_PLT12DBLR_390_PC24DBLR_390_PLT24DBLR_390_GNU_VTINHERITR_390_GNU_VTENTRYR_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_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_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_JMP_IRELR_PPC64_IRELATIVER_PPC64_REL16R_PPC64_REL16_LOR_PPC64_REL16_HIR_PPC64_REL16_HAR_PPC64_GNU_VTINHERITR_PPC64_GNU_VTENTRYR_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_IRELATIVER_PPC_REL16R_PPC_REL16_LOR_PPC_REL16_HIR_PPC_REL16_HAR_PPC_GNU_VTINHERITR_PPC_GNU_VTENTRYR_PPC_TOC16R_PJ_NONER_PJ_DATA_DIR32R_PJ_CODE_REL32R_PJ_CODE_REL16R_PJ_CODE_DIR32R_PJ_CODE_DIR16R_PJ_CODE_LO16R_PJ_CODE_HI16R_PJ_GNU_VTINHERITR_PJ_GNU_VTENTRYR_OR32_NONER_OR32_32R_OR32_16R_OR32_8R_OR32_CONSTR_OR32_CONSTHR_OR32_JUMPTARGR_OR32_GNU_VTENTRYR_OR32_GNU_VTINHERITR_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_ILLEGALR_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_MSP430_NONER_MSP430_32R_MSP430_10_PCRELR_MSP430_16R_MSP430_16_PCRELR_MSP430_16_BYTER_MSP430_16_PCREL_BYTER_MSP430_2X_PCRELR_MSP430_RL_PCRELR_MSP430_8R_MSP430_SYM_DIFFR_MT_NONER_MT_16R_MT_32R_MT_32_PCRELR_MT_PC16R_MT_HI16R_MT_LO16R_MOXIE_NONER_MOXIE_32R_MOXIE_PCREL10R_MN10300_NONER_MN10300_32R_MN10300_16R_MN10300_8R_MN10300_PCREL32R_MN10300_PCREL16R_MN10300_PCREL8R_MN10300_GNU_VTINHERITR_MN10300_GNU_VTENTRYR_MN10300_24R_MN10300_GOTPC32R_MN10300_GOTPC16R_MN10300_GOTOFF32R_MN10300_GOTOFF24R_MN10300_GOTOFF16R_MN10300_PLT32R_MN10300_PLT16R_MN10300_GOT32R_MN10300_GOT24R_MN10300_GOT16R_MN10300_COPYR_MN10300_GLOB_DATR_MN10300_JMP_SLOTR_MN10300_RELATIVER_MN10300_TLS_GDR_MN10300_TLS_LDR_MN10300_TLS_LDOR_MN10300_TLS_GOTIER_MN10300_TLS_IER_MN10300_TLS_LER_MN10300_TLS_DTPMODR_MN10300_TLS_DTPOFFR_MN10300_TLS_TPOFFR_MN10300_SYM_DIFFR_MN10300_ALIGNR_MN10200_NONER_MN10200_32R_MN10200_16R_MN10200_8R_MN10200_24R_MN10200_PCREL8R_MN10200_PCREL16R_MN10200_PCREL24R_MMIX_NONER_MMIX_8R_MMIX_16R_MMIX_24R_MMIX_32R_MMIX_64R_MMIX_PC_8R_MMIX_PC_16R_MMIX_PC_24R_MMIX_PC_32R_MMIX_PC_64R_MMIX_GNU_VTINHERITR_MMIX_GNU_VTENTRYR_MMIX_GETAR_MMIX_GETA_1R_MMIX_GETA_2R_MMIX_GETA_3R_MMIX_CBRANCHR_MMIX_CBRANCH_JR_MMIX_CBRANCH_1R_MMIX_CBRANCH_2R_MMIX_CBRANCH_3R_MMIX_PUSHJR_MMIX_PUSHJ_1R_MMIX_PUSHJ_2R_MMIX_PUSHJ_3R_MMIX_JMPR_MMIX_JMP_1R_MMIX_JMP_2R_MMIX_JMP_3R_MMIX_ADDR19R_MMIX_ADDR27R_MMIX_REG_OR_BYTER_MMIX_REGR_MMIX_BASE_PLUS_OFFSETR_MMIX_LOCALR_MMIX_PUSHJ_STUBBABLER_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_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_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_MICROBLAZE_NONER_MICROBLAZE_32R_MICROBLAZE_32_PCRELR_MICROBLAZE_64_PCRELR_MICROBLAZE_32_PCREL_LOR_MICROBLAZE_64R_MICROBLAZE_32_LOR_MICROBLAZE_SRO32R_MICROBLAZE_SRW32R_MICROBLAZE_64_NONER_MICROBLAZE_32_SYM_OP_SYMR_MICROBLAZE_GNU_VTINHERITR_MICROBLAZE_GNU_VTENTRYR_MICROBLAZE_GOTPC_64R_MICROBLAZE_GOT_64R_MICROBLAZE_PLT_64R_MICROBLAZE_RELR_MICROBLAZE_JUMP_SLOTR_MICROBLAZE_GLOB_DATR_MICROBLAZE_GOTOFF_64R_MICROBLAZE_GOTOFF_32R_MICROBLAZE_COPYR_MICROBLAZE_TLSR_MICROBLAZE_TLSGDR_MICROBLAZE_TLSLDR_MICROBLAZE_TLSDTPMOD32R_MICROBLAZE_TLSDTPREL32R_MICROBLAZE_TLSDTPREL64R_MICROBLAZE_TLSGOTTPREL32R_MICROBLAZE_TLSTPREL32R_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_MEP_NONER_RELCR_MEP_8R_MEP_16R_MEP_32R_MEP_PCREL8A2R_MEP_PCREL12A2R_MEP_PCREL17A2R_MEP_PCREL24A2R_MEP_PCABS24A2R_MEP_LOW16R_MEP_HI16UR_MEP_HI16SR_MEP_GPRELR_MEP_TPRELR_MEP_TPREL7R_MEP_TPREL7A2R_MEP_TPREL7A4R_MEP_UIMM24R_MEP_ADDR24A4R_MEP_GNU_VTINHERITR_MEP_GNU_VTENTRYR_MCORE_NONER_MCORE_ADDR32R_MCORE_PCRELIMM8BY4R_MCORE_PCRELIMM11BY2R_MCORE_PCRELIMM4BY2R_MCORE_PCREL32R_MCORE_PCRELJSR_IMM11BY2R_MCORE_GNU_VTINHERITR_MCORE_GNU_VTENTRYR_MCORE_RELATIVER_MCORE_COPYR_MCORE_GLOB_DATR_MCORE_JUMP_SLOTR_M68HC11_NONER_M68HC11_8R_M68HC11_HI8R_M68HC11_LO8R_M68HC11_PCREL_8R_M68HC11_16R_M68HC11_32R_M68HC11_3BR_M68HC11_PCREL_16R_M68HC11_GNU_VTINHERITR_M68HC11_GNU_VTENTRYR_M68HC11_24R_M68HC11_LO16R_M68HC11_PAGER_M68HC12_16BR_M68HC12_PCREL_9R_M68HC12_PCREL_10R_M68HC12_HI8XGR_M68HC12_LO8XGR_M68HC11_RL_JUMPR_M68HC11_RL_GROUPR_68K_NONER_68K_32R_68K_16R_68K_8R_68K_PC32R_68K_PC16R_68K_PC8R_68K_GOT32R_68K_GOT16R_68K_GOT8R_68K_GOT32OR_68K_GOT16OR_68K_GOT8OR_68K_PLT32R_68K_PLT16R_68K_PLT8R_68K_PLT32OR_68K_PLT16OR_68K_PLT8OR_68K_COPYR_68K_GLOB_DATR_68K_JMP_SLOTR_68K_RELATIVER_68K_GNU_VTINHERITR_68K_GNU_VTENTRYR_68K_TLS_GD32R_68K_TLS_GD16R_68K_TLS_GD8R_68K_TLS_LDM32R_68K_TLS_LDM16R_68K_TLS_LDM8R_68K_TLS_LDO32R_68K_TLS_LDO16R_68K_TLS_LDO8R_68K_TLS_IE32R_68K_TLS_IE16R_68K_TLS_IE8R_68K_TLS_LE32R_68K_TLS_LE16R_68K_TLS_LE8R_68K_TLS_DTPMOD32R_68K_TLS_DTPREL32R_68K_TLS_TPREL32R_M32R_NONER_M32R_16R_M32R_32R_M32R_24R_M32R_10_PCRELR_M32R_18_PCRELR_M32R_26_PCRELR_M32R_HI16_ULOR_M32R_HI16_SLOR_M32R_LO16R_M32R_SDA16R_M32R_GNU_VTINHERITR_M32R_GNU_VTENTRYR_M32R_16_RELAR_M32R_32_RELAR_M32R_24_RELAR_M32R_10_PCREL_RELAR_M32R_18_PCREL_RELAR_M32R_26_PCREL_RELAR_M32R_HI16_ULO_RELAR_M32R_HI16_SLO_RELAR_M32R_LO16_RELAR_M32R_SDA16_RELAR_M32R_RELA_GNU_VTINHERITR_M32R_RELA_GNU_VTENTRYR_M32R_REL32R_M32R_GOT24R_M32R_26_PLTRELR_M32R_COPYR_M32R_GLOB_DATR_M32R_JMP_SLOTR_M32R_RELATIVER_M32R_GOTOFFR_M32R_GOTPC24R_M32R_GOT16_HI_ULOR_M32R_GOT16_HI_SLOR_M32R_GOT16_LOR_M32R_GOTPC_HI_ULOR_M32R_GOTPC_HI_SLOR_M32R_GOTPC_LOR_M32R_GOTOFF_HI_ULOR_M32R_GOTOFF_HI_SLOR_M32R_GOTOFF_LOR_M32C_NONER_M32C_16R_M32C_24R_M32C_32R_M32C_8_PCRELR_M32C_16_PCRELR_M32C_8R_M32C_LO16R_M32C_HI8R_M32C_HI16R_M32C_RL_JUMPR_M32C_RL_1ADDRR_M32C_RL_2ADDRR_LM32_NONER_LM32_8R_LM32_16R_LM32_32R_LM32_HI16R_LM32_LO16R_LM32_GPREL16R_LM32_CALLR_LM32_BRANCHR_LM32_GNU_VTINHERITR_LM32_GNU_VTENTRYR_LM32_16_GOTR_LM32_GOTOFF_HI16R_LM32_GOTOFF_LO16R_LM32_COPYR_LM32_GLOB_DATR_LM32_JMP_SLOTR_LM32_RELATIVER_IP2K_NONER_IP2K_16R_IP2K_32R_IP2K_FR9R_IP2K_BANKR_IP2K_ADDR16CJPR_IP2K_PAGE3R_IP2K_LO8DATAR_IP2K_HI8DATAR_IP2K_LO8INSNR_IP2K_HI8INSNR_IP2K_PC_SKIPR_IP2K_TEXTR_IP2K_FR_OFFSETR_IP2K_EX8DATAR_960_NONER_960_12R_960_32R_960_IP24R_960_SUBR_960_OPTCALLR_960_OPTCALLXR_960_OPTCALLXAR_860_NONER_860_32R_860_COPYR_860_GLOB_DATR_860_JUMP_SLOTR_860_RELATIVER_860_PC26R_860_PLT26R_860_PC16R_860_LOW0R_860_SPLIT0R_860_LOW1R_860_SPLIT1R_860_LOW2R_860_SPLIT2R_860_LOW3R_860_LOGOT0R_860_SPGOT0R_860_LOGOT1R_860_SPGOT1R_860_LOGOTOFF0R_860_SPGOTOFF0R_860_LOGOTOFF1R_860_SPGOTOFF1R_860_LOGOTOFF2R_860_LOGOTOFF3R_860_LOPCR_860_HIGHADJR_860_HAGOTR_860_HAGOTOFFR_860_HAPCR_860_HIGHR_860_HIGOTR_860_HIGOTOFFR_I370_NONER_I370_ADDR31R_I370_ADDR32R_I370_ADDR16R_I370_REL31R_I370_REL32R_I370_ADDR12R_I370_REL12R_I370_ADDR8R_I370_REL8R_I370_COPYR_I370_RELATIVER_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_USED_BY_INTEL_200R_386_GNU_VTINHERITR_386_GNU_VTENTRYR_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_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_FRV_NONER_FRV_32R_FRV_LABEL16R_FRV_LABEL24R_FRV_LO16R_FRV_HI16R_FRV_GPREL12R_FRV_GPRELU12R_FRV_GPREL32R_FRV_GPRELHIR_FRV_GPRELLOR_FRV_GOT12R_FRV_GOTHIR_FRV_GOTLOR_FRV_FUNCDESCR_FRV_FUNCDESC_GOT12R_FRV_FUNCDESC_GOTHIR_FRV_FUNCDESC_GOTLOR_FRV_FUNCDESC_VALUER_FRV_FUNCDESC_GOTOFF12R_FRV_FUNCDESC_GOTOFFHIR_FRV_FUNCDESC_GOTOFFLOR_FRV_GOTOFF12R_FRV_GOTOFFHIR_FRV_GOTOFFLOR_FRV_GETTLSOFFR_FRV_TLSDESC_VALUER_FRV_GOTTLSDESC12R_FRV_GOTTLSDESCHIR_FRV_GOTTLSDESCLOR_FRV_TLSMOFF12R_FRV_TLSMOFFHIR_FRV_TLSMOFFLOR_FRV_GOTTLSOFF12R_FRV_GOTTLSOFFHIR_FRV_GOTTLSOFFLOR_FRV_TLSOFFR_FRV_TLSDESC_RELAXR_FRV_GETTLSOFF_RELAXR_FRV_TLSOFF_RELAXR_FRV_TLSMOFFR_FRV_GNU_VTINHERITR_FRV_GNU_VTENTRYR_FR30_NONER_FR30_8R_FR30_20R_FR30_32R_FR30_48R_FR30_6_IN_4R_FR30_8_IN_8R_FR30_9_IN_8R_FR30_10_IN_8R_FR30_9_PCRELR_FR30_12_PCRELR_FR30_GNU_VTINHERITR_FR30_GNU_VTENTRYR_EPIPHANY_NONER_EPIPHANY_8R_EPIPHANY_16R_EPIPHANY_32R_EPIPHANY_8_PCRELR_EPIPHANY_16_PCRELR_EPIPHANY_32_PCRELR_EPIPHANY_SIMM8R_EPIPHANY_SIMM24R_EPIPHANY_HIGHR_EPIPHANY_LOWR_EPIPHANY_SIMM11R_EPIPHANY_IMM11R_EPIPHANY_IMM8R_DLX_NONER_DLX_RELOC_8R_DLX_RELOC_16R_DLX_RELOC_32R_DLX_GNU_VTINHERITR_DLX_GNU_VTENTRYR_DLX_RELOC_16_HIR_DLX_RELOC_16_LOR_DLX_RELOC_16_PCRELR_DLX_RELOC_26_PCRELR_D30V_NONER_D30V_6R_D30V_9_PCRELR_D30V_9_PCREL_RR_D30V_15R_D30V_15_PCRELR_D30V_15_PCREL_RR_D30V_21R_D30V_21_PCRELR_D30V_21_PCREL_RR_D30V_32R_D30V_32_PCRELR_D30V_32_NORMALR_D10V_NONER_D10V_10_PCREL_RR_D10V_10_PCREL_LR_D10V_16R_D10V_18R_D10V_18_PCRELR_D10V_32R_D10V_GNU_VTINHERITR_D10V_GNU_VTENTRYR_CRX_NONER_CRX_REL4R_CRX_REL8R_CRX_REL8_CMPR_CRX_REL16R_CRX_REL24R_CRX_REL32R_CRX_REGREL12R_CRX_REGREL22R_CRX_REGREL28R_CRX_REGREL32R_CRX_ABS16R_CRX_ABS32R_CRX_NUM8R_CRX_NUM16R_CRX_NUM32R_CRX_IMM16R_CRX_IMM32R_CRX_SWITCH8R_CRX_SWITCH16R_CRX_SWITCH32R_CRIS_NONER_CRIS_8R_CRIS_16R_CRIS_32R_CRIS_8_PCRELR_CRIS_16_PCRELR_CRIS_32_PCRELR_CRIS_GNU_VTINHERITR_CRIS_GNU_VTENTRYR_CRIS_COPYR_CRIS_GLOB_DATR_CRIS_JUMP_SLOTR_CRIS_RELATIVER_CRIS_16_GOTR_CRIS_32_GOTR_CRIS_16_GOTPLTR_CRIS_32_GOTPLTR_CRIS_32_GOTRELR_CRIS_32_PLT_GOTRELR_CRIS_32_PLT_PCRELR_CRIS_32_GOT_GDR_CRIS_16_GOT_GDR_CRIS_32_GDR_CRIS_DTPR_CRIS_32_DTPRELR_CRIS_16_DTPRELR_CRIS_32_GOT_TPRELR_CRIS_16_GOT_TPRELR_CRIS_32_TPRELR_CRIS_16_TPRELR_CRIS_DTPMODR_CRIS_32_IER_CR16_NONER_CR16_NUM8R_CR16_NUM16R_CR16_NUM32R_CR16_NUM32aR_CR16_REGREL4R_CR16_REGREL4aR_CR16_REGREL14R_CR16_REGREL14aR_CR16_REGREL16R_CR16_REGREL20R_CR16_REGREL20aR_CR16_ABS20R_CR16_ABS24R_CR16_IMM4R_CR16_IMM8R_CR16_IMM16R_CR16_IMM20R_CR16_IMM24R_CR16_IMM32R_CR16_IMM32aR_CR16_DISP4R_CR16_DISP8R_CR16_DISP16R_CR16_DISP24R_CR16_DISP24aR_CR16_SWITCH8R_CR16_SWITCH16R_CR16_SWITCH32R_CR16_GOT_REGREL20R_CR16_GOTC_REGREL20R_CR16_GLOB_DATR_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_PLTPCR_BFIN_GOTR_BFIN_GNU_VTINHERITR_BFIN_GNU_VTENTRYR_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_AVR_NONER_AVR_32R_AVR_7_PCRELR_AVR_13_PCRELR_AVR_16R_AVR_16_PMR_AVR_LO8_LDIR_AVR_HI8_LDIR_AVR_HH8_LDIR_AVR_LO8_LDI_NEGR_AVR_HI8_LDI_NEGR_AVR_HH8_LDI_NEGR_AVR_LO8_LDI_PMR_AVR_HI8_LDI_PMR_AVR_HH8_LDI_PMR_AVR_LO8_LDI_PM_NEGR_AVR_HI8_LDI_PM_NEGR_AVR_HH8_LDI_PM_NEGR_AVR_CALLR_AVR_LDIR_AVR_6R_AVR_6_ADIWR_AVR_MS8_LDIR_AVR_MS8_LDI_NEGR_AVR_LO8_LDI_GSR_AVR_HI8_LDI_GSR_AVR_8R_AVR_8_LO8R_AVR_8_HI8R_AVR_8_HLO8R_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_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_IRELATIVER_ARM_RXPC25R_ARM_RSBREL32R_ARM_THM_RPC22R_ARM_RREL32R_ARM_RABS32R_ARM_RPC24R_ARM_RBASER_ARC_NONER_ARC_32R_ARC_B26R_ARC_B22_PCRELR_ALPHA_NONER_ALPHA_REFLONGR_ALPHA_REFQUADR_ALPHA_GPREL32R_ALPHA_LITERALR_ALPHA_GPDISPR_ALPHA_BRADDRR_ALPHA_HINTR_ALPHA_SREL16R_ALPHA_SREL32R_ALPHA_SREL64R_ALPHA_GPRELHIGHR_ALPHA_GPRELLOWR_ALPHA_GPREL16R_ALPHA_COPYR_ALPHA_GLOB_DATR_ALPHA_JMP_SLOTR_ALPHA_RELATIVER_ALPHA_BRSGPR_ALPHA_TLSGDR_ALPHA_TLSLDMR_ALPHA_DTPMOD64R_ALPHA_GOTDTPRELR_ALPHA_DTPREL64R_ALPHA_DTPRELHIR_ALPHA_DTPRELLOR_ALPHA_DTPREL16R_ALPHA_GOTTPRELR_ALPHA_TPREL64R_ALPHA_TPRELHIR_ALPHA_TPRELLOR_ALPHA_TPREL16HP_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_PROTECTEDEXCLUDEORDEREDCPU_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_usenodefaultsalso_compatible_withT2EE_useconformanceVirtualization_useMPextension_use_legacyNot AllowedTrustZoneVirtualization ExtensionsNot allowedIEEE 754Alternative Formatv6Prefer SpeedAggressive SpeedPrefer SizeAggressive SizePrefer AccuracyAggressive AccuracyPrefer DebugAggressive DebugAAPCSWMMX registerscustomVFP registersAs Tag_FP_archSP onlyDP onlySP and DPUnusedforced to intFiniteRTABINeededSign only??? 1GOT-indirectAbsolutePC-relativeSB-relativeV6Bare platformLinux applicationLinux DSOPalmOS 2004PalmOS (reserved)SymbianOS 2004SymbianOS (reserved)NoNEONv1NEONv1 with Fused-MACNEON for ARMv8WMMXv1WMMXv2VFPv1VFPv2VFPv3VFPv3-D16VFPv4VFPv4-D16FP for ARMv8Thumb-1Thumb-2YesPre-v4v4Tv5Tv5TEv5TEJv6KZv6T2v6Kv7v6-Mv6S-Mv7E-MA15B15B14B13B12B11B10A14A13A12A11A10[invalid reg 13][invalid reg 14][invalid reg 15]file-headerprogram-headershistogramsegmentssectionssection-headerssection-groupssection-detailsfull-section-namedyn-symsrelocsarch-specificversion-infouse-dynamicarchive-indexhex-dumprelocated-dumpstring-dumpdebug-dumpdwarf-depthdwarf-startdwarf-checkversionhelpreadelf/@/@0@/@/@[@x[@[@[@[@[@[@\@[@[@^@8]@@]@P]@ ^@ ^@`]@p]@]@]@]@]@]@]@]@]@^@І@@@@@@@@@@@@@@@@@@@@@@H@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@G@ @(@`@(@@(@ @(@@@(@@(@@(@0@(@@(@(@(@(@(@(@(@(@(@(@(@@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@@P@8@v@ @@v@@x@`@I@>@3@(@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@~@s@h@]@R@G@<@1@&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@v@k@`@@@@@@@@@@@U@J@?@4@)@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@y@n@c@X@M@B@7@,@!@@ @@@@@@@@@@@@@@|@q@@@@@@@@@@@@@f@@@@@@@@@@[@@P@E@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@:@/@@@@@@@@@@@@@@@@@@@@@@@@@$@@@@@@@@@@@@@@@@@@@@@@@@t@i@^@S@H@=@2@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'@@@@@@@@@oAAAAIAVA2AoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAKATAmAAAAAA,Al+A*A`*A*A)A)Au)A.)A(A{,AJAJAkJASJA;JA#JAgAgAgAgAgAgAgAgAgAgAgAgAgAgA JAIAIAgAgAgAgAgAgAgAIAIAIAIAxIAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgANIAhLAMAMAMAMAcLAMAMApgATASASASASAuSApgAaSAISA1SASA SARApgApgARARARARAyRAhRAWRAFRAQAkAkAkAkAkAkAkAa~AW~AM~AC~A~A~A~A~A~A~A`|A`|A`|A`|A`|A`|Au~Ak~A%~A~A9~A/~ATAYA8AYATAATATATAAATATATATA8ATATATATATAAB`B@BB BBBBBBBBBBBBB BH BA BBAAAA B BAAAA B B BA BAAA BA BA BA BAA BAAAAAAAAAAAAA BDD+MD2MDDcD6MD@MDFMDDDjD+DKMDUMDdMDsMDMDMDADMDMDMDMDMDMDMDMDNDNDND(ND5NDBNDONDYNDdNDqND~NDNDNDNDNDNDNDNDNDNDNDND ODOD(OD3ODBODROD^ODmODxODODODODODOD-NDODvNDODODOD PDPD)PD8PDDPDQPD]PDjPDyPDPDPDPDPDPDPDPDPDPDPD QDQD,QD8QDEDJQDSQDWQD`QDlQDvQDQDQDQDQDQDQDQDMDMDMDQDQD RDRD(RD8RDDRDRRD_RDpRDRDRDRDRDRDRDRD SD SD/SDBOD?SDUSDgSDzSDqNDSDSDSDSDSDSDTDTD"TD.TD9TDGTDSTDaTDsTDTDTDTDTDTDTDTDTDUDUD3UDBUDRUDbUDtUDUDUDUDUDUDUDUDVDVD)VDaDMaD]aDlaD|aDaDaDaDaDaDaDaDaDaDbDbD!bD-bD:bDDbDMbDebD}bDbDbDbDbDbDcDcD3cDQcDocDcDcDcDcDcDcDcDdDdD,dDDLDWD_DhDqDzDDDDDDÅD҅DDDDDD!D0D>DMD\DeDpD|DDDDD†DцDDDDDD,D;DLD]DlD{DDDDDчDDDDDD-D=DND_DoDxDDDDDÈD҈DDDDDD*D6DADMDYDcDnDyDDDDDȉDԉDDDDDD-D;DIDXDfDuDDDDDD͊DۊDDDD DDD*D5DGDYDjDwDDDDDDËD΋DًDDDDDD!D/D:DDDODZDeDsDDDDDDÌDьD݌DDD DD2DADPD^DlD}DDDDDύD܍DDDDDD,D9DMDaDtDDDDDDЎDێDDDDDD*D8DIDYDfDrDDDDDDƏDՏDDDDD)D8DODgDuDDDDDϐDDDDD D1DADQD_DmD~DDDDDԑDDDDD-DDD[DsDDDDDDϒDDDDD"D6DJD\DqDDDDDӓDDD D#D/D@DPDcDvDDDDDҔDDD D"D9DPDdD{DDDDڕDDD D;DSDkD~DDDÖDۖDDDD7DPDiDDDDDDҗDDDDD)D=DHDUDbDoDDDDDDטDDDDD$D3DBDQD`DkDzDDDDDęDЙDܙDDD DD'D5DFDWDhDuDDDDDDϚDݚDDDD"D1DCDXDmDDDDDӛDDDD$D7DMDcDyDDDDDʜDߜDDDD)D9DJD]DpDDDDDȝD؝DDDDD(D8DHDXDkDDDDǞDޞDDDD D/D>DRDdDpDzDDDDDʟDٟDDD DD"D,D5DBDPD`DsDDDDDD̠D٠DDDDDD/DDDYDmD{DDDDD͡DۡDDD DD-D>DODaDsDDDDD͢DڢDDDDD-DDLD[DrDDDDíD٭DDD DD)D9DGDUDeDvDDDD֮DDD DD.D?DSDgDyDDDDǯDܯDDDD0D@DSDgD}DDDDΰDDDD-DFDaD|DDDDDбDDD DD0DFD_DoDDDDDزDD D"D6DJD[DrDDDDȳDٳDDDD1DJDeD}DDDDDʹDߴDDDD#D4DEDVDcDpD}DDDDɵDݵDDDD,D=DNDdDsDDDDDDζD޶DDDD'DDPDbDqDDDDDDDDDD8DQDcDsDDDDDDDDDDD DD"D0D;DEDPD\DgDrD}DDDDDDDDDDDDDD1DCDUDfDwDDDDDDDDDDD"D3D;DGDSDxD`DkDwDDDDDDDDDDDDD)D9DLD_DqD|DDDDDDDDDD DD/DCDXDmDDDDDDDDDDDD(D;DRDfDwDDDDDDDDDD$D4DDDUDfDwDDDDDDDDD DD-D>DOD`DpDDDDDDDDDD#D5DHDXDfDuDDDDDDDDD DD)D8DHDWDhDuDDDDDDDDDDD DD'D4DDDTDdD0DtDDDDDDDDDD DD.D?DMD[DjD{DDDDDDDDDDdisplay_arm_attributedecode_tic6x_unwind_bytecodedecode_arm_unwind_bytecodearm_process_unwindia64_process_unwindhppa_process_unwind"D3DED[DhD tD@DDDDDDD D@DDDD3D:DQDYDbDqDDrODDDDDDDprocess_dynamic_sectionDDDDD D D D ID+D)D/D7D BD OD ZD eDuD DDprocess_objectDDDDDDD!DDDDDDDDD%DkDEDRenesas M32R (formerly Mitsubishi M32r)Renesas V850 (using RH850 ABI)Fujitsu 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 MC68HC12 MicrocontrollerMotorola MC68HC11 MicrocontrollerMotorola MC68HC08 MicrocontrollerMotorola MC68HC05 MicrocontrollerSTMicroelectronics ST19 8-bit microcontrollerAtmel AVR 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 formatARC International ARCompact processorNational Semiconductor CRX microprocessorUbicom IP2xxx 8-bit microcontrollersAlphamosaic VideoCore processorThompson Multimedia General Purpose ProcessorNational Semiconductor 32000 seriesSTMicroelectronics ST200 microcontrollerNational Semiconductor CompactRISCTexas Instruments msp430 microcontrollerMorpho Techologies MT processorS1C33 Family of Seiko Epson processorseXcess 16/32/64-bit configurable embedded CPUIcera Semiconductor Inc. Deep Execution 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 microprocessor familySTMicroeletronics STM8 8-bit microcontrollerTilera TILE64 multicore architecture familyTilera TILEPro multicore architecture familyTilera TILE-Gx multicore architecture familyMotorola XGATE embedded 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_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)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 Unable to read in dynamic data 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 -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 There are no sections to group in this file. Section headers are not available! There are no section groups in this file. Bad sh_link in group section `%s' Corrupt header in group section `%s' Bad sh_info in group section `%s' %sgroup section [%5u] `%s' [%s] contains %u sections: section [%5u] in group section [%5u] > maximum section [%5u] section [%5u] in group section [%5u] already in group section [%5u] section 0 in group section [%5u] Skipping unexpected relocation at offset 0x%lx Skipping unexpected relocation type %s Hard float (double precision) Hard float (single precision) Hard float (MIPS32r2 64-bit FPU) flag = %d, vendor = ERROR: Bad section length (%d > %d) ERROR: Bad subsection length (%d > %d) corrupt Tag_GNU_Power_ABI_Struct_Return Tag_GNU_Power_ABI_Struct_Return: 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 There are no unwind sections in this file. Could not find unwind info section for v%u, flags=0x%lx (%s%s), len=%lu bytes Out of memory allocating dump request table. 8-byte and up to %d-byte extended Unsupported architecture type %d encountered when processing unwind table Unwind table index '%s' at offset 0x%lx contains %lu entries: corrupt index table entry: %x Could not locate .ARM.extab section containing 0x%lx. 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: R_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_TLSGD_ADR_PAGE21R_AARCH64_P32_TLSGD_ADD_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_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_TLSDESC_LD64_LO12_NCDon'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 Section '%s' has no data to dump. Displaying notes found at file offset 0x%08lx with length 0x%08lx: Corrupt note: only %d bytes remain, not enough for a full note note with invalid namesz and/or descsz found at offset 0x%lx type: 0x%lx, namesize: 0x%08lx, descsize: 0x%08lx 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)PT_GETFPREGS (fpreg structure)NT_VMS_EIDC (consistency check)NT_VMS_GSTNAM (sym table name)NT_STAPSDT (SystemTap probe descriptors) Major id: %u, minor id: %u Global symbol table name: %s Malformed note - too short for header Malformed note - does not end with \0 Malformed note - too short for supplied file count Malformed note - filenames end too early Cannot interpret virtual addresses without program headers. Virtual address 0x%lx not located in any PT_LOAD segment. Section '.liblist' contains %lu entries: Library Time Stamp Checksum Version Flags 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 Section '.conflict' contains %lu entries: Num: Index Value Name Module pointer (GNU extension) %*s %10s %*s %*s %-7s %3s %s Not 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: , dynamic symbols use segment index, mapping symbols precede others, unknown v850 architecture variant, sh2a-nofpu-or-sh4-nommu-nofpu, no function descriptors, constant gp: unknown extra flag bits also present 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: %ldpossibly 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 more than one dynamic segment the .dynamic section is not contained within the dynamic segment the .dynamic section is not the first section in the dynamic segment. Unable to find program interpreter name Internal error: failed to create format string to display program interpreter Unable to read program interpreter name [Requesting program interpreter: %s] Section to Segment mapping: no .dynamic section in the dynamic segment Unhandled MSP430 reloc type found after SYM_DIFF relocUnhandled MN10300 reloc type found after SYM_DIFF relocMissing 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 Section '%s' was not dumped because it does not exist! NOTE: This section has relocations against it, but these have NOT been applied to this dump. 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! Unrecognized debug section: %s 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 Dynamic symbol information is not available for displaying symbols. Histogram for bucket list length (total of %lu buckets): Length Number %% of total Coverage %7lu %-10lu (%5.1f%%) %5.1f%% Histogram for `.gnu.hash' bucket list length (total of %lu buckets): possibly 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 %lx (Using the expected size of %d for the rest of this dump) File contains multiple dynamic string tables File contains multiple symtab shndx 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 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), l (large) I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown) O (extra OS processing required) o (OS specific), p (processor specific) Key to Flags: W (write), A (alloc), X (execute), M (merge), S (strings) I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown) O (extra OS processing required) o (OS specific), p (processor specific) No version information found in this file. Version definition section '%s' contains %u entries: Offset: %#08lx Link: %u (%s) Version definition past end of section %#06x: Parent %d, name index: %ld Version needs section '%s' contains %u entries: Missing Version Needs information Missing Version Needs auxillary information Version symbols section '%s' contains %d entries: invalid index into symbol array Version def aux past end of section 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 sizeof (Elf_External_Syminfo) == entry->d_un.d_val Tag Type Name/Value Dynamic section at offset 0x%lx contains %u entries: %04u-%02u-%02uT%02u:%02u:%02u num_dump_sects >= num_cmdline_dump_sects '%s' relocation section at offset 0x%lx contains %ld bytes: 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 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 No note segments present in the core file. Library list section '%s' contains %lu entries: Library Time Stamp Checksum Version Flags%s: Failed to read file header %s: unable to dump the index as none was found Index of archive %s: (%ld 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:Could 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. R_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_IETrustZone and Virtualization ExtensionsAllowed in Thumb-ISA, v7-R or v7-MAllowed in v7-A with integer division extensionY@(GNU Binutils) 2.23.52.20130918Copyright 2013 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. GNU %s %s bodyprologueR1 %s:%s(rlen=%lu) R3B1 %s:copy_state(label=%lu) %s:label_state(label=%lu) B2psp %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])P5,r%uR2 %s:br_mem(brmask=[%s]) %s:gr_mem(grmask=[%s]) %s:fr_mem(frmask=[%s]) f%ub%uX3X2 %s:restore(t=%lu,reg=%s) X4P7 %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) B4@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) %s:frgr_mem(grmask=[%s],frmask=[%s]) %s:prologue_gr(mask=[%s],grsave=%s,rlen=%lu) %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:spill_sprel(reg=%s,t=%lu,spoff=0x%lx) %s:spill_psprel(reg=%s,t=%lu,pspoff=0x10-0x%lx) %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) LBLBLBLBLBMBMB0MB@MBPMBXLBLB0^B7_BX_B^B^B_B(_B^B_B_B_B~_B_B_B_B,`B\B]B]B]B]B]B]B]B]B]B]B]B]B]B]B\BaB'aBaBaB}aBoaBaaBZaBOaBDaB=aB2aBaB`B`B`B`B`Bd`BC`B9F:F :FD]8F:F0wF:F:F*:F2:F::FB:FI:FO:FY:Fc:Fm:Fw:FGBGB0NBHB`PB0IBQB\BGBGB0NBHBHBHBHBbBDisplaying the debug contents of section %s is not yet supported. The line info appears to be corrupt - the section is too small Only DWARF version 2, 3 and 4 line info is currently supported. Invalid maximum operations per insn. DW_FORM_strp offset too big: %s 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. Section %s too small for %d hash table entries Section %s too small for shndx pool Internal error: out of space in the shndx pool. Section %s too small for offset and size tables Version: %d Number of columns: %d Number of used entries: %d Number of slots: %d [%3d] Signature: 0x%s Sections: 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 .debug_abbrev section not zero terminated DW_AT_MIPS_fde or DW_AT_HP_unmodifiableRaw dump of debug contents of section %s: Offset: 0x%lx 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 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! 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 constant %s to 0x%s[%d] Advance PC by fixed size amount %s to 0x%s Unknown opcode %d with operands: Decoded dump of debug contents of section %s: File name Line number Starting address [Use directory table entry %d] (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_implicit_pointer in frame info)DW_OP_GNU_implicit_pointer: <0x%s> %sDW_OP_GNU_regval_type: %s (%s)DW_OP_GNU_parameter_ref: <0x%s>Invalid length 0x%s in FDE at %#08lx Augmentation: "%s" %08lx %s %s FDE cie=%08lx pc= 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 at cfa%+ld DW_CFA_restore_extended: %s%s Mismatched DW_CFA_restore_state DW_CFA_def_cfa_register: %s DW_CFA_val_expression: %s%s ( DW_CFA_offset_extended_sf: %s%s at cfa%+ld DW_CFA_val_offset_sf: %s%s at 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 Invalid CIE pointer 0x%s in FDE at %#08lx Internal error: DWARF version is not 2, 3 or 4. (indirect string, offset: 0x%s): %sDW_FORM_GNU_str_index offset too big: %s DW_FORM_GNU_str_index indirect offset too big: %s (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 %lx is too big. Reserved length value (0x%s) found in section %s Corrupt unit length (0x%s) found in section %s Not enough memory for a debug info array of %u entries 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) CU at offset %s contains corrupt or unsupported version number: %d. Debug info is corrupted, abbrev offset (%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 DIE at offset %lx refers to abbreviation number %lu which does not exist <%d><%lx>: Abbrev Number: %luUnable to load/parse the .debug_info section, so cannot interpret the %s section. For compilation unit at offset 0x%s: No range lists in .debug_info section. Range lists in %s section start at 0x%lx There is a hole [0x%lx - 0x%lx] in %s section. There is an overlap [0x%lx - 0x%lx] in %s section. No location lists in .debug_info section! Location lists in %s section start at 0x%s 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. Location list starting at offset 0x%lx is not terminated. (base address selection entry) Unknown location list entry type 0x%x. There are %ld unused bytes at the end of section %s Only DWARF 2 and 3 pubnames are currently supported Length: %ld Version: %d Offset into .debug_info section: 0x%lx Size of area in .debug_info section: %ld .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 Only GNU extension to DWARF 4 of %s is currently supported. Version: %d Offset size: %d Offset into .debug_line: 0x%lx Extension opcode arguments: DW_MACRO_GNU_%02x has no arguments DW_MACRO_GNU_%02x arguments: Invalid extension opcode form %s .debug_macro section not zero terminated DW_MACRO_GNU_start_file used, but no .debug_line offset provided. DW_MACRO_GNU_start_file - lineno: %d filenum: %d DW_MACRO_GNU_start_file - lineno: %d filenum: %d filename: %s%s%s DW_MACRO_GNU_define - lineno : %d macro : %s DW_MACRO_GNU_undef - lineno : %d macro : %s DW_MACRO_GNU_define_indirect - lineno : %d macro : %s DW_MACRO_GNU_undef_indirect - lineno : %d macro : %s DW_MACRO_GNU_transparent_include - offset : 0x%lx DW_MACRO_GNU_define_indirect_alt - lineno : %d macro offset : 0x%lx DW_MACRO_GNU_undef_indirect_alt - lineno : %d macro offset : 0x%lx DW_MACRO_GNU_transparent_include_alt - offset : 0x%lx Unknown macro opcode %02x seen Unrecognized debug option '%s' The %s section is empty. Contents of the %s section: str_offr%d (%s)%%%s%s%16.16llx%llx%08llxContents 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] %s:%cT%lu%c%lu [no symbol information] [static type] [global type] [static variable] [global variable] [static function] [global function] [static other] [global other] [static unknown: %d] [global unknown: %d] %s byte block: .debug_tu_index LOC%-*s CFA ra %-5s %s%+d%-8s c%+dv%+d Offset table slot %-16s %8s Size table [%3d] 0x%s %8d Unsupported version DW_MACINFO_end_file DW_FORM value: 0DW_AT value: 0 Number TAG (0x%lx) has childrenno childrenUnknown TAG value: %lx %ld %s [%s] Unknown FORM value: %lxUnknown AT value: %lx %-18s %s .debug_line.dwo Opcodes: Opcode %d has %d args %d %s Entry Dir Time Size Name %s 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 [ %02x 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%sCU: %s: CU: %s/%s: UNKNOWN (%u): length %d [Use file table entry %d] ./%s:[++] %s/%s: Set ISA to %lu %-35s %11d %#18llx %-35s %11d %#18llx[%d] %s %11d %#18llx %s %11d %#18llx[%d] DW_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_uninitDW_OP_GNU_entry_value: (DW_OP_GNU_const_type: <0x%s> DW_OP_GNU_deref_type: %ldDW_OP_GNU_convert <0x%s>DW_OP_GNU_reinterpret <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(User defined location op)(Unknown location op); 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: %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 corrupt attribute %.*s (indexed string: 0x%s): %s signature: 0x%s (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)(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)(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-bitNo comp units in %s section ?Unable 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: %8.8lx (base address) Offset Begin End [%d]%*s %08x (base address) (start == end) (start > end) Offset Name %-6lx %s Address Length DW_MACRO_GNU_end_file DW_MACRO_GNU_%02x DW_MACRO_GNU_%02x -Rangesdecodedlineframesframes-interprawline.debug_abbrev.zdebug_abbrev.debug_aranges.zdebug_aranges.debug_frame.zdebug_frame.zdebug_info.debug_line.zdebug_line.debug_pubnames.zdebug_pubnames.debug_macinfo.zdebug_macinfo.debug_macro.zdebug_macro.debug_str.zdebug_str.debug_loc.zdebug_loc.debug_pubtypes.zdebug_pubtypes.debug_ranges.zdebug_ranges.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_indexraxrdxrcxrbxrsirdirbprspr8r9r10r11r12r13r15ripxmm0xmm1xmm2xmm3xmm4xmm5xmm6xmm7xmm8xmm9xmm10xmm11xmm12xmm13xmm14xmm15st0st1st2st3st5st6st7rflagsfs.basegs.baseldtrmxcsrfcwfswxmm16xmm17xmm18xmm19xmm20xmm21xmm22xmm23xmm24xmm25xmm26xmm27xmm28xmm29xmm30xmm31k0k3k5k6k7eaxecxedxebxespebpesiedieipeflagspfB`fBeBfBfB fB0fB@fBPfBxBhxBHxBwBxB0BB0BBЌBBBBBBBBBBЎBBBBBpBBBBpBطBpBBBpBpBhB7B(B BBCBBڢBB-BZBNBBBBBkBBIBBBBBBBBBBBBBvBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB-BB=BBCB1BBBBBBBBBBBBBBBBBB1BBBBBBB@BBB BB`BxBBBBpBPBBBBBBpBPB0BBBBBBpBB`B@BBBBB BBBBpB0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBBBBBpB0BBBPBBB0BBB0BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBpBPB0BBBBBBBBBBBB(BB B`BPB@BBPBBBpBBBPCCCP C@ C CC C` C CPCPCCCCXC C`CpCC C`C CPCPCPCPCPCPCXCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCCCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPC CCCCCpC(C@Ch C C`CCCpCCCCC8CPCCC CC!C!C!C!C!C!CC!C!C!C!C!C!C!C!C!C!C!C!C!C!C!CCCC!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C0C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!CC!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!C!CCXCXCXCjXCTXC>XC(XCXCWCWCWCWCWCWCxWCYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCFYCXCXCXC0YCYCbWCLWCSCCCC(C`CCCpC8CCpC0CxCC@CHC0C0C0C0C0CC0C0C0C0C0CC0C0C0C0C0C0C0C0C0C0C0C0C0C0CxC0C0C0C0CRC0C0C C0C0CCC0CCC0CCCC wFLdgyF0dgF4dg,yF dgzFddgwFHdgwF$dg%wF\dg|ED`dg"DdgwFHdgF,dgwFXdgqF(dgFTdg,F dg3wFHdgxFdgyFDdg&yF8dg yFPdgzFzFzFzFzFzFzFzFzFzFzFzFzFzF} DzFzFzFzFzF{F{F {F{F{F{F {F%{F+{F1{F7{F={FC{FI{FM{FQ{FU{FslFY{F]{Fa{FzFzFzF{F{F {F{F{Fe{FDDҹFCDF:FFl{Ft{F~{F|{F{F{F{F{F{F{F{F{F{F{F{F{F{F{F{F{F{F{F{F{F3FαF{FݱF{F{F{F{F|F|F |F|F|F|F|F|F"|FI{FM{FQ{FU{FslFY{F]{Fa{FzFzFzF{F{F {F{F{FzFzFzF{F{F {F{F{F{F{F{FDDҹFCDF:FF~{F|{F{F3FαF{FݱF{F{F{F%s: Error: Unhandled data length: %d %s: Warning: / /SYM64/ %s has no archive index // %s[%s(%s)]%s[%s]%s(%s)CpCxCCCCCXCC(CCC CC(C(C(CCCCCCCCCChCCPCXCpCCCC8CC CCCCCCCCC%s: failed to seek to first archive header %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 %ld entries of %d bytes, but the size is only %ld 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 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 %s: error: too many @-files encountered 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_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_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_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_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_upc_threads_scaledDW_AT_PGI_lbaseDW_AT_PGI_soffsetDW_AT_PGI_lstrideDW_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_MIPS_advance_loc8DW_CFA_GNU_args_sizeDW_CFA_hi_userDW_CFA_advance_locDW_CFA_offsetDW_CFA_restoreDW_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_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_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_GNU_push_tls_addressDW_OP_GNU_encoded_addrDW_OP_GNU_implicit_pointerDW_OP_GNU_entry_valueDW_OP_GNU_const_typeDW_OP_GNU_regval_typeDW_OP_GNU_deref_typeDW_OP_GNU_convertDW_OP_GNU_reinterpretDW_OP_GNU_parameter_refDW_OP_GNU_addr_indexDW_OP_GNU_const_indexDW_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_CFA_GNU_negative_offset_extendedoF*F9FMFaFuFFFFǿFnFnF׿FFFF.F@FZFlFFFFFFcoFFFFF!F/F>FJFYFhF}FFFFFFFFF!F5FKF`FkF}FFFFFFF)F?FXFpFFFFFFgFFFF F.FFIFTF_FjFuFFFFFFFFFFFFFFF&F2F>FJFVFbFnFzFFFFFFFFFFFF FF#F0F=FJFWFdFqF~FFFFFFFFFFF FF'F4F?FKFWFcFtFjFjFFFFkFkFFlkFZkFFRlFdlFwlFlFlFlFkFFF F F5FKF`FlFrFFFF  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~  !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~CBBBBQ00000000000000000000000000000000 %s%sout of memory allocating %lu bytes after a total of %lu bytes ;t2h6>x?HG(JL0LhhYx` 8ex f g0 hH i j r t@ Xv w xy( 8{ { }0hxHX؈((p8Xx@H؞ءXxX0xh(x80(Xh8%&X<[Hxxh8H-W(`xXcc d8XdXdx(eejl@hmhXohqs(xvxhxX~`xHXx(H 8 (!ȉ0!h`!H!!X!x""8"h#X#Ȭ##h8$X$H$$`%XH%x%%(%(&HX&&&&(&8'h8'P'8h'X''''((X(hH(h((h(X)(H)x))8)*0*8H**+P+8p+8+P,(,,80-x-(- . (.h@.HX.p....H..//( 0/ P/ p/!/X!/!/"0zRx 8*zRx $P,PFJ w?;*3$"D9\@AtD4EAX O A O A O A O A O a hF D} G  E y G k E T D \ D W I ` H { E G A C E @ H C E G A L D v J s E  I v J v J z F v J v J  A v J v J  A F J A G l D u C h H u K c E c E ] C c E ] K c E ] A W A X A X A c A n A ^ A F A F A F A F A F A F A F A R A F A F A A Q F A F A F A F A F A F A F A F A F A F A F A F A F A F A F A F A F A F A F A F A F A F A F A F A PnH G o A _ A f J t D t D j F J F ^ B a G ^ J a G ^ J p H ^ J a G S E F J F J F J F J F J F J F J F J F J F J F J F J F J F J F A n A L A i A w A { A N A R A S A F@WTIS T A W ] [ x H | T s U j V _ Y S U \ T _ Q M Q A Q A Q A Q A Q A Q A Q A Q A Q A Q A Q A Q A Q A Q A Q A Q A Q A Q A Q A Q A Q A Q A Q ALZKBBB B(A0D8DP 8D0A(B BBBB d$[BEB E(D0C8L@ 8A0A(B BBBK _ 8C0A(B BBBA p\ALh]+BBB B(D0A8DP8F0A(B BBB,H^ Cf G i G y W L$(_BBB B(A0A8GZ 8F0A(B BBBF $tfCn W  Z \Tg?BID D0  DABD j  DABG g  DABJ iWD D ljDZ B F J F J F J F J F J F J F J F J o A t D O A P A F A FHlDZ B F J F J F J F J F J F J F J F J F J F J F J F J F J F J h H Q G P A A Q A$xmD[ A t D x H L<nBBE E(A0A8G` 8A0A(B BBBB 4`oCn G o I Y G F A  G Lq/BBB B(A0A8G@u 8D0A(B BBBE L qBBB B(A0A8G` 8A0A(B BBBF Ld htBBB B(A0A8G` 8A0A(B BBBF d vBBB B(D0D8LP 8F0A(B BBBG T8C0A(B BBBd yABBE B(A0D8LP 8F0A(B BBBA 48C0A(B BBBD zRGB A(A0U (A BBBG L p}CBEB B(A0A8D 8A0A(B BBBF < pBEG G(I0q (D ABBH <\ PBBA A(GP (A ABBK d 0BBE E(D0D8Dp 8A0A(B BBGA T 8C0A(B BBBH , h)BKI  ABD ,4 hBKI  ABK Ld ȌBBA D(D07 (D ABBA  (D ABBA L xADG0R DAE w DAD g DAD _ DAD D ȐBDC G0b  DABG   DABC <L `BBD D(K0 (F ABBL \ BHF D(D@s (A ABBG Y (D ABBF w (F ABBF L BBB E(A0A8Dy 8F0A(B BBBA D<ADG@q AAA ] DAF \ DAG L8]BBE B(D0A8Ie 8A0A(B BBBH LHhBIB E(A0C8G 8A0A(B BBBB d$hpBDB B(A0C8DPq 8A0A(B BBBC b 8A0A(B BBBD Lp9BBB B(A0A8Gd 8A0A(B BBBA <`?BGA D(G@N (A ABBA L`BBB B(D0A8G 8A0A(B BBBE Tl`BFD G0c  AABF   DABB m  DABD LBBD A(G0 (D ABBC (C DBBLH* BBB B(A0D8G 8A0A(B BBBD Ld(BBA D(D0{ (D ABBG  (C ABBI L BBB B(F0I8O 8A0A(B BBBH Lh$BGB B(A0A8G 8A0A(B BBBH LTCJ(BBA A(D0m (A ABBC t (F ABBA ,kAAF \ AAJ Lq{BBB B(A0A8DU 8A0A(B BBBC L$H`BBB B(A0D8DR 8A0A(B BBBC LtXBBB B(A0A8GB 8A0A(B BBBA L(rBBB B(A0A8GK 8A0A(B BBBJ |XvBBB B(A0A8DPy 8F0A(B BBBJ O 8F0A(B BBBB \ 8C0A(B BBBH LXBBB B(A0A8Gn 8A0A(B BBBA LEBBB B(A0A8GR 8A0A(B BBBC L4\*BJB B(A0A8Ok 8A0A(B BBBJ L< BJB H(A0A8G 8A0A(B BBBK LD6BBB E(D0A8Ow 8A0A(B BBBH $G=Cy4Dx"BAA G)  AABA |pGdDGLGDGsAqXHFCe H UHXAVDHBBB A(D0Gn 0A(A BBBH <\M.BEE A(H (A ABBH $pOAG0 AA $OAQ AD DQ BHB A(A0D` 0A(A BBBD L4S^BBB B(A0A8H 8A0A(B BBBE LUBBB B(A0A8H 8A0A(B BBBK <WBHA A(DP (A ABBC ,YADD@ AAF tDh_ADD  AAC ] DAF U AAI U DAF I AAE D AAE _AA`"`'```/Amd<`BGB B(A0A8DP. 8F0A(B BBBA b8C0A(B BBBDaDe G I G I G I G I G I G I G I G m`b<Qj, b`AF BHED F <gD P D j,\ hAZDPr DAA ,hAZDPr DAA 4iBDC DP~  AABA ig4 jADG V DAI hDA,DhjAADPN AAJ dtXkBLB E(A0A8Dp= 8A0A(B BBBF z 8C0A(B BBBB <sB[D A(L` (A ABBA Lpt*BGB E(A0A8I 8A0A(B BBBG DlPzBBE D(A0D 0A(A BBBF L~ BGB E(A0A8I 8A0A(B BBBD <BLB A(A0 (A BBGF LDBBB D(A0q (A BBBA m (A BBDA L(BLB B(D0A8DP8F0A(B BBB,ȑ3AC Px A ,D*AC DHM C ,DLAP P F ,t;'AC DGK  D ,cAC HD6 A ,hxoJWeSL XyBBB B(A0A8Db 8A0A(B BBBF ,T (}_ AC Pv A , XAC HP F , AC DL F , hAH I7 G !H ,!@D!8 4\!0,AC DH D ] C !(!!ȹ!йb4!(AAF S CAA s DAH ,"#D"#\" #,t"8BAH AB<"BEA A(D0 (A ABBK ,"ؼJBAD Z ABD #,,#AAGAAD\#PD] O D D H P H X I g I o I w I  ,#AAGAA#D^ F #DV F D$xD] O D D H P I W I g I o I w I  ,\$uAf I P H J F M K $Pd$BBB E(D0A8G@W 8A0A(B BBBH l 8D0A(B BBBG L %`BEB E(D0D8Jp 8A0A(B BBBF L\% BBE A(A0$ (C BBBH d (C BBBC %BAv I At%BBF A(G@ (A ABBD m (C ABBK  (C ABBC Q (D ABBF dD&H\BBA A(G@ (A ABBD m (C ABBC ! (E ABBE d&@BBJ B(A0I8I`q 8D0A(B BBBG r 8A0A(B BBBA <'hBEB D(A0 (A BBBA 4T'GADD l DAF DAAL'=BBB B(A0A8G` 8D0A(B BBBA <'BBD A(D0n (A ABBG L(`BEE B(D0A8D 8A0A(B BBBA l(3(V( (g (@(H(P)X%,)pZD)%\)D t)/\R)nAFD0)@'DZ A ,)PHAAG a AAD )p:D_ E $*.AAG UGA$D*Jf@Xl*"@"@ @ Dggo@x @@ 5  g`@@@ oP@oo @g@@@@@&@6@F@V@f@v@@@@@@@@@@@&@6@F@V@f@v@@@@@@@@@@@&@6@F@V@f@v@@@@@@@@@@@&@6@F@V@f@v@@@@@@@@@@DDD`+gDD@+g D +g D*g D*g D*g D`*gD@*gD *g$D)g4D)gDD)gTD)gdD`)gtDP)gD@)gD )gDDD)gD(gD(gD(gD`(g%D (g ?D"MD(g$bD(g&rD'g*D'g,D'g@DADBD'gCDDD'gFD`'gDDD DDP6FDDx6F-D6FDDD9DBDDDDUDDXDeDvDDDDDXDeDvDDDDDDDDDDD DDD'DF8D.D'D @Fx @x 5No @ [oP@P`j@t@@@` ~@y@P@D D Ft F *ggggg g 8@"g@" :g:) 0:U-;pyelftools-0.24/test/run_all_unittests.py000077500000000000000000000016251275100256500207600ustar00rootroot00000000000000#!/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 try: import unittest2 as unittest except ImportError: import unittest 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.24/test/run_examples_test.py000077500000000000000000000052251275100256500207430ustar00rootroot00000000000000#!/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 setup_syspath; setup_syspath() from utils import run_exe, is_in_rootdir, dump_output_to_temp_files # 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.24/test/run_readelf_tests.py000077500000000000000000000201101275100256500207000ustar00rootroot00000000000000#!/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 os, sys, platform import re from difflib import SequenceMatcher from optparse import OptionParser import logging import platform from utils import setup_syspath; setup_syspath() from utils import run_exe, is_in_rootdir, dump_output_to_temp_files # 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']: if verbose: testlog.info("..option='%s'" % option) # 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))) rc, stdout = run_exe(exe_path, args) if rc != 0: testlog.error("@@ aborting - '%s' returned '%s'" % (exe_path, rc)) return False stdouts.append(stdout) if verbose: testlog.info('....comparing output...') rc, errmsg = compare_output(*stdouts) 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() != ''] def filter_readelf_lines(lines): filter_out = False for line in lines: if 'of the .eh_frame section' in line: filter_out = True elif 'of the .debug_frame section' in line or \ 'of the .zdebug_frame section' in line: filter_out = False if not filter_out: if not line.startswith('unknown: length'): yield line lines1 = prepare_lines(s1) lines2 = prepare_lines(s2) lines1 = list(filter_readelf_lines(lines1)) 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 optparser = OptionParser( usage='usage: %prog [options] [file] [file] ...', prog='run_readelf_tests.py') optparser.add_option('-V', '--verbose', action='store_true', dest='verbose', help='Verbose output') options, args = optparser.parse_args() if options.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) # If file names are given as command-line arguments, only these files # are taken as inputs. Otherwise, autodiscovery is performed. # if len(args) > 0: filenames = args else: filenames = list(discover_testfiles('test/testfiles_for_readelf')) success = True for filename in filenames: if success: success = success and run_test_on_file( filename, verbose=options.verbose) if success: testlog.info('\nConclusion: SUCCESS') return 0 else: testlog.info('\nConclusion: FAIL') return 1 if __name__ == '__main__': sys.exit(main()) pyelftools-0.24/test/test_arm_support.py000066400000000000000000000031771275100256500206150ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools tests # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- try: import unittest2 as unittest except ImportError: import unittest import os from utils import setup_syspath; setup_syspath() 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_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.24/test/test_callframe.py000066400000000000000000000146551275100256500201730ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools tests # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- try: import unittest2 as unittest except ImportError: import unittest from utils import setup_syspath; setup_syspath() from elftools.common.py3compat import BytesIO from elftools.dwarf.callframe import ( CallFrameInfo, CIE, FDE, instruction_name, CallFrameInstruction, RegisterRule) from elftools.dwarf.structs import DWARFStructs from elftools.dwarf.descriptions import (describe_CFI_instructions, set_global_machine_arch) 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), 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), 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')) if __name__ == '__main__': unittest.main() pyelftools-0.24/test/test_double_dynstr_section.py000066400000000000000000000037651275100256500226460ustar00rootroot00000000000000#------------------------------------------------------------------------------ # elftools tests # # Yann Rouillard (yann@pleiades.fr.eu.org) # This code is in the public domain #------------------------------------------------------------------------------ try: import unittest2 as unittest except ImportError: import unittest import os from utils import setup_syspath; setup_syspath() 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.24/test/test_dwarf_expr.py000066400000000000000000000045371275100256500204040ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools tests # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- try: import unittest2 as unittest except ImportError: import unittest from utils import setup_syspath; setup_syspath() 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.24/test/test_dwarf_lineprogram.py000066400000000000000000000102721275100256500217360ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools tests # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- try: import unittest2 as unittest except ImportError: import unittest from utils import setup_syspath; setup_syspath() 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.24/test/test_dwarf_range_lists.py000066400000000000000000000024631275100256500217340ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools tests # # Eli Bendersky (eliben@gmail.com), Santhosh Kumar Mani (santhoshmani@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- try: import unittest2 as unittest except ImportError: import unittest import os from utils import setup_syspath; setup_syspath() 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.24/test/test_dwarf_structs.py000066400000000000000000000033261275100256500211300ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools tests # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- try: import unittest2 as unittest except ImportError: import unittest from utils import setup_syspath; setup_syspath() 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.24/test/test_dynamic.py000066400000000000000000000041061275100256500176570ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools tests # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- try: import unittest2 as unittest except ImportError: import unittest import os from utils import setup_syspath setup_syspath() from elftools.elf.elffile import ELFFile from elftools.common.exceptions import ELFError from elftools.elf.dynamic import DynamicTag class TestDynamicTag(unittest.TestCase): """Tests for the DynamicTag class.""" def test_requires_stringtable(self): with self.assertRaises(ELFError): dt = DynamicTag('', None) 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.decode('utf-8')) exp = ['libc.so.6'] self.assertEqual(libs, exp) def test_reading_symbols(self): """Verify we can read symbol table without SymbolTableSection""" 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 symbol_names = [x.name for x in segment.iter_symbols()] exp = [b'', b'__libc_start_main', b'__gmon_start__', b'abort'] self.assertEqual(symbol_names, exp) if __name__ == '__main__': unittest.main() pyelftools-0.24/test/test_elffile.py000066400000000000000000000042021275100256500176360ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools tests # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- try: import unittest2 as unittest except ImportError: import unittest from utils import setup_syspath; setup_syspath() 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_vaddr=0x10200, p_filesz=0x200, p_offset=0x100), dict(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.24/test/test_get_symbol_by_name.py000066400000000000000000000051341275100256500220730ustar00rootroot00000000000000# Tests the functionality of the ELF file function `get_symbol_by_name`. try: import unittest2 as unittest except ImportError: import unittest import os from utils import setup_syspath; setup_syspath() 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.24/test/test_gnuversions.py000066400000000000000000000143111275100256500206140ustar00rootroot00000000000000#------------------------------------------------------------------------------ # elftools tests # # Yann Rouillard (yann@pleiades.fr.eu.org) # This code is in the public domain #------------------------------------------------------------------------------ try: import unittest2 as unittest except ImportError: import unittest import os from utils import setup_syspath setup_syspath() 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.24/test/test_mips_support.py000066400000000000000000000017611275100256500210030ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools tests # # Karl Vogel (karl.vogel@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- try: import unittest2 as unittest except ImportError: import unittest import os from utils import setup_syspath; setup_syspath() from elftools.elf.elffile import ELFFile class TestMIPSSupport(unittest.TestCase): def test_hello(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) if __name__ == '__main__': unittest.main() pyelftools-0.24/test/test_solaris_support.py000066400000000000000000000070611275100256500215060ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools tests # # Yann Rouillard (yann@pleiades.fr.eu.org) # This code is in the public domain #------------------------------------------------------------------------------- try: import unittest2 as unittest except ImportError: import unittest import os import copy from utils import setup_syspath; setup_syspath() 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.24/test/test_utils.py000066400000000000000000000042221275100256500173720ustar00rootroot00000000000000#------------------------------------------------------------------------------- # elftools tests # # Eli Bendersky (eliben@gmail.com) # This code is in the public domain #------------------------------------------------------------------------------- try: import unittest2 as unittest except ImportError: import unittest from random import randint from utils import setup_syspath; setup_syspath() from elftools.common.py3compat import int2byte, BytesIO from elftools.common.utils import (parse_cstring_from_stream, 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) if __name__ == '__main__': unittest.main() pyelftools-0.24/test/testfiles_for_readelf/000077500000000000000000000000001275100256500211535ustar00rootroot00000000000000pyelftools-0.24/test/testfiles_for_readelf/clang33-simple.o000066400000000000000000000061301275100256500240540ustar00rootroot00000000000000ELF>@@@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.24/test/testfiles_for_readelf/deleteme.out000066400000000000000000000000121275100256500234610ustar00rootroot00000000000000Test file pyelftools-0.24/test/testfiles_for_readelf/exe_compressed64.elf000066400000000000000000000260051275100256500250250ustar00rootroot00000000000000ELF>@@@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.24/test/testfiles_for_readelf/exe_simple32.elf000066400000000000000000000125641275100256500241520ustar00rootroot00000000000000ELF44 (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.24/test/testfiles_for_readelf/exe_simple64.elf000066400000000000000000000300551275100256500241520ustar00rootroot00000000000000ELF>@@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.24/test/testfiles_for_readelf/exe_stripped64.elf000066400000000000000000000144501275100256500245140ustar00rootroot00000000000000ELF>@@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.24/test/testfiles_for_readelf/gcc48-simple.o000066400000000000000000000063601275100256500235370ustar00rootroot00000000000000ELF> @@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.24/test/testfiles_for_readelf/gcc48-simple.src.c000066400000000000000000000006611275100256500243070ustar00rootroot00000000000000/* 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.24/test/testfiles_for_readelf/gcc_tailcall.o.elf000066400000000000000000000055501275100256500245060ustar00rootroot00000000000000ELF>`@@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.24/test/testfiles_for_readelf/hello.c000066400000000000000000000013571275100256500224300ustar00rootroot00000000000000/* 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.24/test/testfiles_for_readelf/hello.out000066400000000000000000000177651275100256500230270ustar00rootroot00000000000000ELF>@@ @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.24/test/testfiles_for_readelf/improved-dwarfv4.o.elf000066400000000000000000000067601275100256500253110ustar00rootroot00000000000000ELF>(@@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.24/test/testfiles_for_readelf/libelf0_8_13_32bit.so.elf000066400000000000000000013442231275100256500253460ustar00rootroot00000000000000ELF*4\4 (&#|+|+-==.>>$$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.24/test/testfiles_for_readelf/lineprogram.elf000066400000000000000000000016301275100256500241620ustar00rootroot00000000000000ELFX4 (.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.24/test/testfiles_for_readelf/obj_simple32.o.elf000066400000000000000000000012331275100256500243670ustar00rootroot00000000000000ELF4( 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.24/test/testfiles_for_readelf/penalty_32_gcc.o.elf000066400000000000000000002016341275100256500247020ustar00rootroot00000000000000ELF4(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.24/test/testfiles_for_readelf/penalty_64_clang.o.elf000066400000000000000000000313701275100256500252350ustar00rootroot00000000000000ELF>@@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.24/test/testfiles_for_readelf/penalty_64_gcc.o.elf000066400000000000000000002450201275100256500247040ustar00rootroot00000000000000ELF>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 % 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.24/test/testfiles_for_readelf/update32.o.elf000066400000000000000000000760701275100256500235410ustar00rootroot00000000000000ELF|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.24/test/testfiles_for_unittests/000077500000000000000000000000001275100256500216135ustar00rootroot00000000000000pyelftools-0.24/test/testfiles_for_unittests/aarch64_super_stripped.elf000077500000000000000000000100501275100256500266620ustar00rootroot00000000000000ELF@@@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.24/test/testfiles_for_unittests/arm_with_form_indirect.elf000066400000000000000000007113241275100256500270310ustar00rootroot00000000000000ELF(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.24/test/testfiles_for_unittests/exe_solaris32_cc.elf000066400000000000000000000145301275100256500254350ustar00rootroot00000000000000ELF44 (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.24/test/testfiles_for_unittests/exe_solaris32_cc.sparc.elf000066400000000000000000000127641275100256500265530ustar00rootroot00000000000000ELF4 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.24/test/testfiles_for_unittests/exe_solaris64_cc.elf000066400000000000000000000216501275100256500254430ustar00rootroot00000000000000ELF> @@@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.24/test/testfiles_for_unittests/exe_solaris64_cc.sparc.elf000066400000000000000000000172001275100256500265460ustar00rootroot00000000000000ELF+@@@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.24/test/testfiles_for_unittests/lib_versioned64.so.1.elf000066400000000000000000000207301275100256500260620ustar00rootroot00000000000000ELF>@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.24/test/testfiles_for_unittests/lib_with_two_dynstr_sections.so.1.elf000077500000000000000000000211401275100256500310670ustar00rootroot00000000000000ELF>@@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.24/test/testfiles_for_unittests/lib_with_two_dynstr_sections_reversed.so.1.elf000077500000000000000000100114201275100256500327670ustar00rootroot00000000000000ELF>@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.24/test/testfiles_for_unittests/sample_exe64.elf000066400000000000000000000300551275100256500246020ustar00rootroot00000000000000ELF>@@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.24/test/testfiles_for_unittests/simple_gcc.elf.arm000066400000000000000000001040131275100256500251650ustar00rootroot00000000000000ELF(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.24/test/testfiles_for_unittests/simple_gcc.elf.mips000066400000000000000000000053201275100256500253570ustar00rootroot00000000000000ELF4('Я,($ !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.24/test/utils.py000066400000000000000000000036271275100256500163430ustar00rootroot00000000000000#------------------------------------------------------------------------------- # 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 # This module should not import elftools before setup_syspath() is called! # See the Hacking Guide in the documentation for more details. def setup_syspath(): """ Setup sys.path so that tests pick up local pyelftools before the installed one when run from development directory. """ if sys.path[0] != '.': sys.path.insert(0, '.') 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) 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.24/tox.ini000066400000000000000000000002371275100256500151570ustar00rootroot00000000000000[tox] envlist = py27,py34 [testenv] commands = python test/run_all_unittests.py python test/run_examples_test.py python test/run_readelf_tests.py pyelftools-0.24/z.py000066400000000000000000000021531275100256500144660ustar00rootroot00000000000000#------------------------------------------------------------------------------- # 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))