objutils 0.10.18__tar.gz → 0.10.19__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {objutils-0.10.18 → objutils-0.10.19}/.idea/objutils@1.iml +1 -1
- {objutils-0.10.18 → objutils-0.10.19}/.pre-commit-config.yaml +1 -1
- {objutils-0.10.18 → objutils-0.10.19}/PKG-INFO +1 -1
- {objutils-0.10.18 → objutils-0.10.19}/objutils/__init__.py +1 -1
- {objutils-0.10.18 → objutils-0.10.19}/objutils/elf/__init__.py +8 -8
- {objutils-0.10.18 → objutils-0.10.19}/objutils/pecoff/__init__.py +52 -15
- {objutils-0.10.18 → objutils-0.10.19}/objutils/pecoff/defs.py +27 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/pecoff/pdb/__init__.py +1 -1
- {objutils-0.10.18 → objutils-0.10.19}/objutils/scripts/oj_coff_import.py +2 -1
- {objutils-0.10.18 → objutils-0.10.19}/objutils/scripts/oj_coff_info.py +23 -9
- {objutils-0.10.18 → objutils-0.10.19}/objutils/scripts/oj_coff_syms.py +23 -17
- {objutils-0.10.18 → objutils-0.10.19}/objutils/section.py +2 -6
- {objutils-0.10.18 → objutils-0.10.19}/objutils/tests/test_asam_alternate_modes.py +107 -18
- {objutils-0.10.18 → objutils-0.10.19}/objutils/version.py +1 -1
- {objutils-0.10.18 → objutils-0.10.19}/pyproject.toml +2 -2
- {objutils-0.10.18 → objutils-0.10.19}/.clang-format +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/.codacy.yml +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/.codeclimate.yml +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/.coveralls.yml +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/.github/FUNDING.yml +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/.github/ISSUE_TEMPLATE/documentation.yml +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/.github/ISSUE_TEMPLATE.md +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/.github/copilot-instructions.md +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/.github/workflows/pythonapp.yml +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/.gitignore +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/.idea/.gitignore +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/.idea/copilot.data.migration.ask2agent.xml +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/.idea/deployment.xml +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/.idea/inspectionProfiles/profiles_settings.xml +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/.idea/misc.xml +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/.idea/modules.xml +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/.idea/pyLspTools.xml +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/.idea/pyProjectModel.xml +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/.idea/vcs.xml +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/.pylintrc +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/.readthedocs.yml +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/.travis.yml +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/CMakeLists.txt +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/CODE_OF_CONDUCT.md +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/CONTRIBUTORS +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/LICENSE +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/MANIFEST.in +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/PULL_REQUEST_TEMPLATE.md +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/appveyor.yml +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/bandit.yml +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/Data_Formats.pdf +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/ELF_Format.pdf +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/KNOWN_GOOD_DWARF_REFERENCE.md +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/README.rst +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/apidoc.sh +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/conf.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/.buildinfo +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/.buildinfo.bak +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/.doctrees/README.doctree +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/.doctrees/environment.pickle +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/.doctrees/howto.doctree +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/.doctrees/index.doctree +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/.doctrees/installation.doctree +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/.doctrees/modules.doctree +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/.doctrees/objutils.doctree +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/.doctrees/objutils.elf.doctree +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/.doctrees/scripts.doctree +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/.doctrees/session.doctree +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/.doctrees/tutorial.doctree +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/README.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_images/objutils_basic.png +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_modules/index.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_modules/objutils/ash.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_modules/objutils/binfile.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_modules/objutils/checksums.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_modules/objutils/cosmac.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_modules/objutils/elf/defs.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_modules/objutils/elf.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_modules/objutils/emon52.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_modules/objutils/etek.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_modules/objutils/exceptions.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_modules/objutils/fpc.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_modules/objutils/hexdump.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_modules/objutils/hexfile.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_modules/objutils/ihex.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_modules/objutils/image.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_modules/objutils/logger.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_modules/objutils/mostec.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_modules/objutils/pickleif.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_modules/objutils/rca.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_modules/objutils/readers.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_modules/objutils/registry.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_modules/objutils/section.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_modules/objutils/sig.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_modules/objutils/srec.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_modules/objutils/tek.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_modules/objutils/titxt.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_modules/objutils/utils.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_modules/objutils.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_sources/README.rst.txt +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_sources/howto.rst.txt +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_sources/index.rst.txt +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_sources/installation.rst.txt +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_sources/modules.rst.txt +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_sources/objutils.elf.rst.txt +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_sources/objutils.rst.txt +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_sources/scripts.rst.txt +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_sources/session.rst.txt +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_sources/tutorial.rst.txt +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_static/alabaster.css +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_static/basic.css +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_static/check-solid.svg +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_static/clipboard.min.js +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_static/copy-button.svg +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_static/copybutton.css +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_static/copybutton.js +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_static/copybutton_funcs.js +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_static/custom.css +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_static/doctools.js +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_static/documentation_options.js +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_static/file.png +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_static/github-banner.svg +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_static/language_data.js +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_static/minus.png +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_static/plus.png +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_static/pygments.css +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_static/scripts/bootstrap.js +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_static/scripts/bootstrap.js.LICENSE.txt +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_static/scripts/fontawesome.js +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_static/scripts/fontawesome.js.LICENSE.txt +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_static/scripts/pydata-sphinx-theme.js +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_static/searchtools.js +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_static/sphinx_highlight.js +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_static/styles/pydata-sphinx-theme.css +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_static/styles/theme.css +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_static/vendor/fontawesome/webfonts/fa-brands-400.ttf +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_static/vendor/fontawesome/webfonts/fa-brands-400.woff2 +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_static/vendor/fontawesome/webfonts/fa-regular-400.ttf +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_static/vendor/fontawesome/webfonts/fa-regular-400.woff2 +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_static/vendor/fontawesome/webfonts/fa-solid-900.ttf +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_static/vendor/fontawesome/webfonts/fa-solid-900.woff2 +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/_static/webpack-macros.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/genindex.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/howto.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/index.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/installation.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/modules.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/objects.inv +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/objutils.elf.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/objutils.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/py-modindex.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/scripts.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/search.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/searchindex.js +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/session.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/docs/_build/html/tutorial.html +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/elf-64-gen.pdf +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/example0.srec +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/howto.rst +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/index.rst +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/installation.rst +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/make.bat +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/modules.rst +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/objutils.elf.rst +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/objutils.rst +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/objutils_banner.png +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/objutils_basic.png +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/objutils_dark.jpg +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/objutils_social.jpg +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/requirements.txt +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/scripts.rst +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/session.rst +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/tutorial.rst +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/docs/tutorial1.ipynb +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/.coveragerc +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/.vscode/launch.json +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/.vscode/settings.json +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/a2l_test.shf +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/ash.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/binfile.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/checksums.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/cosmac.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/dwarf/__init__.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/dwarf/attrparser.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/dwarf/c_generator.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/dwarf/constants.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/dwarf/encoding.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/dwarf/lineprog.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/dwarf/readers.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/dwarf/sm.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/dwarf/traverser.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/elf/arm/__init__.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/elf/arm/attributes.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/elf/defs.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/elf/model.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/emon52.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/etek.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/exceptions.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/extensions/__init__.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/extensions/ctre.hpp +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/extensions/difflib.h +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/extensions/elf_parser.cpp +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/extensions/elf_parser.hpp +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/extensions/exceptions.cpp +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/extensions/exceptions.hpp +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/extensions/hexfile.cpp +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/extensions/wrapper.cpp +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/fpc.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/hexdump.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/hexfile.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/ieee695.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/ihex.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/image.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/logger.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/mostec.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/objutils.code-workspace +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/oocdtxt.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/pecoff/model.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/pickleif.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/rca.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/readers.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/registry.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/scripts/arduino_build_artifacts.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/scripts/oj_cgen.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/scripts/oj_coff_extract.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/scripts/oj_dwarf_import.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/scripts/oj_dwarf_info.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/scripts/oj_elf_arm_attrs.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/scripts/oj_elf_extract.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/scripts/oj_elf_import.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/scripts/oj_elf_info.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/scripts/oj_elf_syms.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/scripts/oj_hex_info.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/scripts/oj_hex_merge.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/scripts/oj_hex_split.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/shf.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/sig.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/srec.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/symbols.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/tek.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/tests/__init__.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/tests/test_arm_attributes.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/tests/test_ash.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/tests/test_c_generator.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/tests/test_checksums.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/tests/test_cygpath.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/tests/test_diff_bin.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/tests/test_elf.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/tests/test_emon52.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/tests/test_etek.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/tests/test_examples_cgen.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/tests/test_extended.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/tests/test_fpc.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/tests/test_hexdump.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/tests/test_hexfile.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/tests/test_ihex.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/tests/test_image.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/tests/test_mostec.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/tests/test_oocdtxt.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/tests/test_pdb_typeinfo_dump.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/tests/test_probe_uniqueness.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/tests/test_readers.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/tests/test_registry.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/tests/test_repr.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/tests/test_section.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/tests/test_section_join.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/tests/test_shf.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/tests/test_sm.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/tests/test_srec.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/tests/test_tek.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/tests/test_titext.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/titxt.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/utils/__init__.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/utils/arduino.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/objutils/utils/diff.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/poetry.lock +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/requirements.txt +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/setup.cfg +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/setup.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/test_join_sections.py +0 -0
- {objutils-0.10.18 → objutils-0.10.19}/test_requirements.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: objutils
|
|
3
|
-
Version: 0.10.
|
|
3
|
+
Version: 0.10.19
|
|
4
4
|
Summary: Objectfile library for Python
|
|
5
5
|
Keywords: hex files,intel hex,s19,srec,srecords,object files,map files,embedded,microcontroller,ECU,shf,rfc4194
|
|
6
6
|
Author-Email: Christoph Schueler <cpu12.gems@googlemail.com>
|
|
@@ -667,9 +667,9 @@ class SymbolAPI(DBAPI):
|
|
|
667
667
|
Example:
|
|
668
668
|
>>> parser = ElfParser('firmware.elf')
|
|
669
669
|
>>> # Find any 'main' symbol
|
|
670
|
-
>>> main = parser.
|
|
670
|
+
>>> main = parser.coff_symbols.get('main')
|
|
671
671
|
>>> # Find 'main' in .text section specifically
|
|
672
|
-
>>> main_text = parser.
|
|
672
|
+
>>> main_text = parser.coff_symbols.get('main', section_name='.text')
|
|
673
673
|
"""
|
|
674
674
|
query = self.query(model.Elf_Symbol)
|
|
675
675
|
if section_name:
|
|
@@ -718,18 +718,18 @@ class SymbolAPI(DBAPI):
|
|
|
718
718
|
Example:
|
|
719
719
|
>>> parser = ElfParser('firmware.elf')
|
|
720
720
|
>>> # Get all global functions
|
|
721
|
-
>>> funcs = parser.
|
|
721
|
+
>>> funcs = parser.coff_symbols.fetch(
|
|
722
722
|
... bindings='g',
|
|
723
723
|
... types_str='func'
|
|
724
724
|
... )
|
|
725
725
|
>>> # Get symbols in .text section by address
|
|
726
|
-
>>> text_syms = parser.
|
|
726
|
+
>>> text_syms = parser.coff_symbols.fetch(
|
|
727
727
|
... sections='.text',
|
|
728
728
|
... order_by_value=True,
|
|
729
729
|
... group_by_section=False
|
|
730
730
|
... )
|
|
731
731
|
>>> # Get GCC special symbols
|
|
732
|
-
>>> special = parser.
|
|
732
|
+
>>> special = parser.coff_symbols.fetch(
|
|
733
733
|
... name_pattern=r'^_'
|
|
734
734
|
... )
|
|
735
735
|
"""
|
|
@@ -815,7 +815,7 @@ class SymbolAPI(DBAPI):
|
|
|
815
815
|
|
|
816
816
|
Example:
|
|
817
817
|
>>> parser = ElfParser('firmware.elf')
|
|
818
|
-
>>> special_syms = parser.
|
|
818
|
+
>>> special_syms = parser.coff_symbols.fetch_gcc_special_symbols()
|
|
819
819
|
>>> for sym in special_syms:
|
|
820
820
|
... print(f"{sym.symbol_name}: 0x{sym.st_value:08x}")
|
|
821
821
|
"""
|
|
@@ -878,7 +878,7 @@ class ElfParser:
|
|
|
878
878
|
>>> parser = ElfParser('firmware.elf')
|
|
879
879
|
>>> print(f"Machine: {parser.e_machine}")
|
|
880
880
|
>>> text = parser.sections.get('.text')
|
|
881
|
-
>>> main = parser.
|
|
881
|
+
>>> main = parser.coff_symbols.get('main')
|
|
882
882
|
>>> image = parser.create_image()
|
|
883
883
|
|
|
884
884
|
>>> # No .prgdb file written to disk
|
|
@@ -926,7 +926,7 @@ class ElfParser:
|
|
|
926
926
|
),
|
|
927
927
|
)
|
|
928
928
|
|
|
929
|
-
def __init__(self, filename: str, in_memory: bool = False) -> None:
|
|
929
|
+
def __init__(self, filename: str | Path, in_memory: bool = False) -> None:
|
|
930
930
|
"""Initialize ElfParser with an ELF file.
|
|
931
931
|
|
|
932
932
|
Creates or opens the associated .prgdb database file and parses the ELF
|
|
@@ -137,6 +137,7 @@ See Also:
|
|
|
137
137
|
"""
|
|
138
138
|
|
|
139
139
|
import io
|
|
140
|
+
from dataclasses import dataclass
|
|
140
141
|
import os
|
|
141
142
|
import typing
|
|
142
143
|
from pathlib import Path
|
|
@@ -147,6 +148,7 @@ from objutils import Image, Section
|
|
|
147
148
|
from objutils.utils import create_memorymapped_fileview
|
|
148
149
|
|
|
149
150
|
from . import defs, model
|
|
151
|
+
from ..symbols import VariableType
|
|
150
152
|
|
|
151
153
|
try:
|
|
152
154
|
from .pdb import pdb_symbols_for_pe # type: ignore
|
|
@@ -220,6 +222,16 @@ CoffSymbol = Struct(
|
|
|
220
222
|
)
|
|
221
223
|
|
|
222
224
|
|
|
225
|
+
@dataclass(slots=True)
|
|
226
|
+
class Symbol:
|
|
227
|
+
name: str
|
|
228
|
+
value: int
|
|
229
|
+
section_number: int
|
|
230
|
+
type: int
|
|
231
|
+
storage_class: int
|
|
232
|
+
location: int
|
|
233
|
+
|
|
234
|
+
|
|
223
235
|
class PeParser:
|
|
224
236
|
"""Parser for PE/COFF executables and object files.
|
|
225
237
|
|
|
@@ -238,7 +250,7 @@ class PeParser:
|
|
|
238
250
|
coff_header: COFF header dictionary (machine, sections, characteristics)
|
|
239
251
|
optional_header: Optional header dictionary (image_base, entry_point, alignments)
|
|
240
252
|
sections: List of section dictionaries (name, vaddr, size, characteristics)
|
|
241
|
-
|
|
253
|
+
coff_symbols: List of symbol dictionaries (name, value, section, type)
|
|
242
254
|
db: Optional SQLAlchemy database model for querying
|
|
243
255
|
|
|
244
256
|
Example:
|
|
@@ -297,7 +309,8 @@ class PeParser:
|
|
|
297
309
|
self.coff_header: dict[str, int] | None = None
|
|
298
310
|
self.optional_header: dict[str, int] | None = None
|
|
299
311
|
self.sections: list[dict[str, typing.Any]] = []
|
|
300
|
-
self.
|
|
312
|
+
self.coff_symbols: list[Symbol] = []
|
|
313
|
+
self.pdb_symbols: list[VariableType] = []
|
|
301
314
|
|
|
302
315
|
# DB model
|
|
303
316
|
self.db: model.Model | None = None
|
|
@@ -423,6 +436,7 @@ class PeParser:
|
|
|
423
436
|
|
|
424
437
|
# Section table
|
|
425
438
|
self.sections = []
|
|
439
|
+
self.section_start_addresses = []
|
|
426
440
|
for i in range(number_of_sections):
|
|
427
441
|
section_hdr = SectionHeader.parse_stream(f)
|
|
428
442
|
# name may be slash + offset into string table for long names in OBJ; in PE, usually inline
|
|
@@ -437,21 +451,26 @@ class PeParser:
|
|
|
437
451
|
"characteristics": section_hdr.characteristics,
|
|
438
452
|
}
|
|
439
453
|
)
|
|
454
|
+
self.section_start_addresses.append(section_hdr.virtual_address)
|
|
440
455
|
|
|
441
456
|
# Symbols (COFF symbol table) if present
|
|
442
|
-
self.
|
|
457
|
+
self.coff_symbols = []
|
|
443
458
|
if self.coff_header["pointer_to_symbol_table"] and self.coff_header["number_of_symbols"]:
|
|
444
459
|
self._parse_coff_symbols()
|
|
445
460
|
# If no COFF symbols, try PDB symbols via dbghelp (best effort)
|
|
446
|
-
if not self.
|
|
461
|
+
if not self.coff_symbols and pdb_symbols_for_pe:
|
|
447
462
|
try:
|
|
448
|
-
|
|
449
|
-
# self.symbols = pdb_symbols_for_pe(pdb_file) # type: ignore[misc]
|
|
450
|
-
self.symbols = pdb_symbols_for_pe(self._path, self._pdb_path) # type: ignore[misc]
|
|
463
|
+
self.pdb_symbols = pdb_symbols_for_pe(self._path, self._pdb_path) # type: ignore[misc]
|
|
451
464
|
except (OSError, RuntimeError, ValueError) as e:
|
|
452
465
|
# Best-effort only; ignore if PDB not available
|
|
453
466
|
print(f"Failed to retrieve PDB symbols: {e}")
|
|
454
467
|
|
|
468
|
+
def symbol_addresses(self, symbol_names: list[str]) -> dict[str | int]:
|
|
469
|
+
if self.coff_symbols:
|
|
470
|
+
return {sym.name: sym.location for sym in self.coff_symbols if sym.name in symbol_names}
|
|
471
|
+
elif self.pdb_symbols:
|
|
472
|
+
return {sym.name: sym.location for sym in self.pdb_symbols if sym.name in symbol_names}
|
|
473
|
+
|
|
455
474
|
def _parse_coff_symbols(self) -> None:
|
|
456
475
|
"""Parse COFF symbol table and string table.
|
|
457
476
|
|
|
@@ -503,6 +522,7 @@ class PeParser:
|
|
|
503
522
|
|
|
504
523
|
f.seek(start_symtab)
|
|
505
524
|
i = 0
|
|
525
|
+
MAX_SECTIONS = len(self.sections)
|
|
506
526
|
while i < count:
|
|
507
527
|
rec = f.read(symrec_size)
|
|
508
528
|
if len(rec) < symrec_size:
|
|
@@ -510,14 +530,31 @@ class PeParser:
|
|
|
510
530
|
symbol = CoffSymbol.parse(rec)
|
|
511
531
|
name8 = symbol.name_raw
|
|
512
532
|
name = get_name(name8)
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
533
|
+
if symbol.storage_class in (2, 3) and symbol.section_number <= MAX_SECTIONS:
|
|
534
|
+
try:
|
|
535
|
+
address_base = self.section_start_addresses[symbol.section_number - 1] + symbol.value
|
|
536
|
+
except IndexError:
|
|
537
|
+
address_base = None
|
|
538
|
+
else:
|
|
539
|
+
address_base = None
|
|
540
|
+
"""
|
|
541
|
+
class Symbol:
|
|
542
|
+
name: str
|
|
543
|
+
value: int
|
|
544
|
+
section_number: int
|
|
545
|
+
type: int
|
|
546
|
+
storage_class: int
|
|
547
|
+
location: int
|
|
548
|
+
"""
|
|
549
|
+
self.coff_symbols.append(
|
|
550
|
+
Symbol(
|
|
551
|
+
name=name,
|
|
552
|
+
value=symbol.value,
|
|
553
|
+
section_number=symbol.section_number,
|
|
554
|
+
type=symbol.type,
|
|
555
|
+
storage_class=symbol.storage_class,
|
|
556
|
+
location=address_base,
|
|
557
|
+
)
|
|
521
558
|
)
|
|
522
559
|
# Skip aux records
|
|
523
560
|
if symbol.number_of_aux_symbols:
|
|
@@ -79,6 +79,8 @@ See Also:
|
|
|
79
79
|
https://docs.microsoft.com/windows/win32/debug/pe-format
|
|
80
80
|
"""
|
|
81
81
|
|
|
82
|
+
from enum import IntEnum
|
|
83
|
+
|
|
82
84
|
# PE file signature (follows DOS header at offset 0x3C)
|
|
83
85
|
PE_SIGNATURE = b"PE\x00\x00"
|
|
84
86
|
|
|
@@ -165,6 +167,31 @@ IMAGE_SYM_CLASS_EXTERNAL = 2 # External (public) symbol
|
|
|
165
167
|
IMAGE_SYM_CLASS_STATIC = 3 # Static (private) symbol
|
|
166
168
|
|
|
167
169
|
|
|
170
|
+
# ============================================================================
|
|
171
|
+
# Symbol Types (IMAGE_SYM_TYPE_*)
|
|
172
|
+
# ============================================================================
|
|
173
|
+
# Microsoft COFF Symbol Base Types.
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
class ImageSym(IntEnum):
|
|
177
|
+
IMAGE_SYM_TYPE_NULL = 0 # No type information or unknown base type. Microsoft tools use this setting
|
|
178
|
+
IMAGE_SYM_TYPE_VOID = 1 # No valid type; used with void pointers and functions
|
|
179
|
+
IMAGE_SYM_TYPE_CHAR = 2 # A character (signed byte)
|
|
180
|
+
IMAGE_SYM_TYPE_SHORT = 3 # A 2-byte signed integer
|
|
181
|
+
IMAGE_SYM_TYPE_INT = 4 # A natural integer type (normally 4 bytes in Windows)
|
|
182
|
+
IMAGE_SYM_TYPE_LONG = 5 # A 4-byte signed integer
|
|
183
|
+
IMAGE_SYM_TYPE_FLOAT = 6 # A 4-byte floating-point number
|
|
184
|
+
IMAGE_SYM_TYPE_DOUBLE = 7 # An 8-byte floating-point number
|
|
185
|
+
IMAGE_SYM_TYPE_STRUCT = 8 # A structure
|
|
186
|
+
IMAGE_SYM_TYPE_UNION = 9 # A union
|
|
187
|
+
IMAGE_SYM_TYPE_ENUM = 10 # An enumerated type
|
|
188
|
+
IMAGE_SYM_TYPE_MOE = 11 # A member of enumeration (a specific value)
|
|
189
|
+
IMAGE_SYM_TYPE_BYTE = 12 # A byte; unsigned 1-byte integer
|
|
190
|
+
IMAGE_SYM_TYPE_WORD = 13 # A word; unsigned 2-byte integer
|
|
191
|
+
IMAGE_SYM_TYPE_UINT = 14 # An unsigned integer of natural size (normally, 4 bytes)
|
|
192
|
+
IMAGE_SYM_TYPE_DWORD = 15 # An unsigned 4-byte integer
|
|
193
|
+
|
|
194
|
+
|
|
168
195
|
def decode_characteristics(characteristics: int) -> list[str]:
|
|
169
196
|
"""Decode COFF header characteristics flags into readable strings.
|
|
170
197
|
|
|
@@ -1421,7 +1421,7 @@ def pdb_symbols_for_pe(pe_path: str, symbol_path: str | None = None) -> list[dic
|
|
|
1421
1421
|
continue
|
|
1422
1422
|
ti = session.type_info(mod_base, sym.TypeIndex)
|
|
1423
1423
|
# print(f"{sym.tag:15}", sym.Name, hex(sym.Address - mod_base), sym.Size, sym.decode_flags(), "==>", ti)
|
|
1424
|
-
result.append(symbols.VariableType(sym.Name, ti, sym.Address - mod_base, sym.Size))
|
|
1424
|
+
result.append(symbols.VariableType(sym.Name.decode("utf8"), ti, sym.Address - mod_base, sym.Size))
|
|
1425
1425
|
return result
|
|
1426
1426
|
"""
|
|
1427
1427
|
Name: Symbol name (null-terminated char array)
|
|
@@ -54,15 +54,29 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
54
54
|
f"0x{s['size_of_raw_data']:06X} 0x{s['virtual_size']:06X}"
|
|
55
55
|
)
|
|
56
56
|
|
|
57
|
-
if
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
57
|
+
if args.symbols:
|
|
58
|
+
if pp.pdb_symbols:
|
|
59
|
+
coff_symbols = sorted(pp.pdb_symbols, key=lambda s: s.location)
|
|
60
|
+
|
|
61
|
+
print_header("Symbols (PDB)")
|
|
62
|
+
print("Name Value Size")
|
|
63
|
+
print("-" * 80)
|
|
64
|
+
for sym in coff_symbols:
|
|
65
|
+
print(f"{sym.name:<50} 0x{sym.location:016X} {sym.size}")
|
|
66
|
+
elif pp.coff_symbols:
|
|
67
|
+
|
|
68
|
+
def pe_sorter(s: dict):
|
|
69
|
+
return 0 if s.location is None else s.location
|
|
70
|
+
|
|
71
|
+
coff_symbols = sorted(pp.coff_symbols, key=pe_sorter)
|
|
72
|
+
|
|
73
|
+
print_header("Symbols (COFF)")
|
|
74
|
+
print("Name Value")
|
|
75
|
+
print("-" * 80)
|
|
76
|
+
for sym in coff_symbols:
|
|
77
|
+
if sym.storage_class not in (2, 3) or sym.location is None:
|
|
78
|
+
continue
|
|
79
|
+
print(f"{sym.name:<50} 0x{int(sym.location):016X}")
|
|
66
80
|
return 0
|
|
67
81
|
|
|
68
82
|
|
|
@@ -36,23 +36,29 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
36
36
|
|
|
37
37
|
# Fetch via SymbolAPI to ensure DB is created/reused
|
|
38
38
|
# syms = SymbolAPI(pp).fetch(name_pattern=args.pattern)
|
|
39
|
-
syms = pp.
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
39
|
+
syms = pp.coff_symbols
|
|
40
|
+
if syms:
|
|
41
|
+
if args.order_by == "N":
|
|
42
|
+
syms = sorted(syms, key=lambda s: getattr(s, "name", getattr(s, "symbol_name", "")))
|
|
43
|
+
|
|
44
|
+
print("Name")
|
|
45
|
+
print("Value")
|
|
46
|
+
print("-" * 79)
|
|
47
|
+
for sym in syms:
|
|
48
|
+
if not sym.storage_class in (2, 3) or sym.location is None:
|
|
49
|
+
continue
|
|
50
|
+
name = sym.name
|
|
51
|
+
value = sym.value
|
|
52
|
+
address = sym.location
|
|
53
|
+
print(f"{name:40}\n0x{int(value):016X} 0x{int(address):016X}\n")
|
|
54
|
+
syms = pp.pdb_symbols
|
|
55
|
+
if syms:
|
|
56
|
+
syms = sorted(syms, key=lambda s: getattr(s, "name", ""))
|
|
57
|
+
for sym in syms:
|
|
58
|
+
name = sym.name
|
|
59
|
+
name = name.decode("utf-8") if isinstance(name, bytes) else name
|
|
60
|
+
location = sym.location
|
|
61
|
+
print(f"{name:40}\n0x{location:016X}\n")
|
|
56
62
|
|
|
57
63
|
return 0
|
|
58
64
|
|
|
@@ -1326,8 +1326,7 @@ class Section:
|
|
|
1326
1326
|
# axis breakpoint. This is identical to C-order (ROW_DIR) for a 2-D array.
|
|
1327
1327
|
if typed_array.ndim != 2:
|
|
1328
1328
|
raise ValueError(
|
|
1329
|
-
"ALTERNATE_CURVES requires a 2-D array with shape "
|
|
1330
|
-
"(num_axis_points, num_curves) in numpy convention"
|
|
1329
|
+
"ALTERNATE_CURVES requires a 2-D array with shape " "(num_axis_points, num_curves) in numpy convention"
|
|
1331
1330
|
)
|
|
1332
1331
|
raw_data = typed_array.tobytes() # C-order = AoS
|
|
1333
1332
|
permuted = self._permute_asam_buffer(raw_data, internal_dtype, asam_byte_order)
|
|
@@ -1422,10 +1421,7 @@ class Section:
|
|
|
1422
1421
|
# --- ALTERNATE_CURVES --------------------------------------------------
|
|
1423
1422
|
if index_mode == "ALTERNATE_CURVES":
|
|
1424
1423
|
if numpy_shape is None or len(numpy_shape) != 2:
|
|
1425
|
-
raise ValueError(
|
|
1426
|
-
"ALTERNATE_CURVES requires a 2-D shape (num_curves, num_axis_points) "
|
|
1427
|
-
"in ASAM convention"
|
|
1428
|
-
)
|
|
1424
|
+
raise ValueError("ALTERNATE_CURVES requires a 2-D shape (num_curves, num_axis_points) " "in ASAM convention")
|
|
1429
1425
|
type_name = internal_dtype.split("_")[0]
|
|
1430
1426
|
type_size = TYPE_SIZES[type_name]
|
|
1431
1427
|
byte_count = length * type_size
|
|
@@ -731,21 +731,96 @@ def test_column_dir_still_works():
|
|
|
731
731
|
# Das Beispiel-Array aus der Spezifikation: 5 Achsbreakpoints × 4 Kurven
|
|
732
732
|
VXP_TYPE_DATA = np.array(
|
|
733
733
|
[
|
|
734
|
-
[10, 3, 4, 8],
|
|
735
|
-
[12, 2, 4, 6],
|
|
736
|
-
[17, 9, 5, 8],
|
|
737
|
-
[10, 1, 4, 8],
|
|
738
|
-
[18, 3, 8, 8],
|
|
734
|
+
[10, 3, 4, 8], # Breakpoint 0
|
|
735
|
+
[12, 2, 4, 6], # Breakpoint 1
|
|
736
|
+
[17, 9, 5, 8], # Breakpoint 2
|
|
737
|
+
[10, 1, 4, 8], # Breakpoint 3
|
|
738
|
+
[18, 3, 8, 8], # Breakpoint 4
|
|
739
739
|
],
|
|
740
740
|
dtype=np.int32,
|
|
741
741
|
)
|
|
742
742
|
|
|
743
743
|
VXP_FLAT_LE = [
|
|
744
|
-
10,
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
744
|
+
10,
|
|
745
|
+
0,
|
|
746
|
+
0,
|
|
747
|
+
0,
|
|
748
|
+
3,
|
|
749
|
+
0,
|
|
750
|
+
0,
|
|
751
|
+
0,
|
|
752
|
+
4,
|
|
753
|
+
0,
|
|
754
|
+
0,
|
|
755
|
+
0,
|
|
756
|
+
8,
|
|
757
|
+
0,
|
|
758
|
+
0,
|
|
759
|
+
0,
|
|
760
|
+
12,
|
|
761
|
+
0,
|
|
762
|
+
0,
|
|
763
|
+
0,
|
|
764
|
+
2,
|
|
765
|
+
0,
|
|
766
|
+
0,
|
|
767
|
+
0,
|
|
768
|
+
4,
|
|
769
|
+
0,
|
|
770
|
+
0,
|
|
771
|
+
0,
|
|
772
|
+
6,
|
|
773
|
+
0,
|
|
774
|
+
0,
|
|
775
|
+
0,
|
|
776
|
+
17,
|
|
777
|
+
0,
|
|
778
|
+
0,
|
|
779
|
+
0,
|
|
780
|
+
9,
|
|
781
|
+
0,
|
|
782
|
+
0,
|
|
783
|
+
0,
|
|
784
|
+
5,
|
|
785
|
+
0,
|
|
786
|
+
0,
|
|
787
|
+
0,
|
|
788
|
+
8,
|
|
789
|
+
0,
|
|
790
|
+
0,
|
|
791
|
+
0,
|
|
792
|
+
10,
|
|
793
|
+
0,
|
|
794
|
+
0,
|
|
795
|
+
0,
|
|
796
|
+
1,
|
|
797
|
+
0,
|
|
798
|
+
0,
|
|
799
|
+
0,
|
|
800
|
+
4,
|
|
801
|
+
0,
|
|
802
|
+
0,
|
|
803
|
+
0,
|
|
804
|
+
8,
|
|
805
|
+
0,
|
|
806
|
+
0,
|
|
807
|
+
0,
|
|
808
|
+
18,
|
|
809
|
+
0,
|
|
810
|
+
0,
|
|
811
|
+
0,
|
|
812
|
+
3,
|
|
813
|
+
0,
|
|
814
|
+
0,
|
|
815
|
+
0,
|
|
816
|
+
8,
|
|
817
|
+
0,
|
|
818
|
+
0,
|
|
819
|
+
0,
|
|
820
|
+
8,
|
|
821
|
+
0,
|
|
822
|
+
0,
|
|
823
|
+
0,
|
|
749
824
|
] # 5 * 4 * 4 = 80 Bytes (SLONG, LE)
|
|
750
825
|
|
|
751
826
|
|
|
@@ -758,11 +833,26 @@ def test_alternate_curves_memory_layout_ubyte():
|
|
|
758
833
|
"""
|
|
759
834
|
arr = VXP_TYPE_DATA.astype(np.uint8)
|
|
760
835
|
expected = [
|
|
761
|
-
10,
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
836
|
+
10,
|
|
837
|
+
3,
|
|
838
|
+
4,
|
|
839
|
+
8,
|
|
840
|
+
12,
|
|
841
|
+
2,
|
|
842
|
+
4,
|
|
843
|
+
6,
|
|
844
|
+
17,
|
|
845
|
+
9,
|
|
846
|
+
5,
|
|
847
|
+
8,
|
|
848
|
+
10,
|
|
849
|
+
1,
|
|
850
|
+
4,
|
|
851
|
+
8,
|
|
852
|
+
18,
|
|
853
|
+
3,
|
|
854
|
+
8,
|
|
855
|
+
8,
|
|
766
856
|
]
|
|
767
857
|
total_bytes = 5 * 4 # num_axis_points * num_curves
|
|
768
858
|
sec = Section(start_address=0x1000, data=bytearray(total_bytes + 8))
|
|
@@ -860,8 +950,7 @@ def test_alternate_curves_layout_equals_row_dir():
|
|
|
860
950
|
"""ALTERNATE_CURVES und ROW_DIR erzeugen identisches Speicher-Layout."""
|
|
861
951
|
arr = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.uint8)
|
|
862
952
|
sec_curves = Section(start_address=0, data=bytearray(16))
|
|
863
|
-
sec_row
|
|
953
|
+
sec_row = Section(start_address=0, data=bytearray(16))
|
|
864
954
|
sec_curves.write_asam_ndarray(0, arr, "UBYTE", byte_order="MSB_LAST", index_mode="ALTERNATE_CURVES")
|
|
865
|
-
sec_row.write_asam_ndarray(
|
|
955
|
+
sec_row.write_asam_ndarray(0, arr, "UBYTE", byte_order="MSB_LAST", index_mode="ROW_DIR")
|
|
866
956
|
assert sec_curves.read(0, 6) == sec_row.read(0, 6)
|
|
867
|
-
|
|
@@ -4,7 +4,7 @@ build-backend = "scikit_build_core.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "objutils"
|
|
7
|
-
version = "0.10.
|
|
7
|
+
version = "0.10.19"
|
|
8
8
|
description = "Objectfile library for Python"
|
|
9
9
|
authors = [
|
|
10
10
|
{name = "Christoph Schueler", email = "cpu12.gems@googlemail.com"}
|
|
@@ -126,7 +126,7 @@ skip = ["*_i686", "*-musllinux*"]
|
|
|
126
126
|
build-frontend = "build"
|
|
127
127
|
|
|
128
128
|
[tool.bumpver]
|
|
129
|
-
current_version = "0.10.
|
|
129
|
+
current_version = "0.10.19"
|
|
130
130
|
version_pattern = "MAJOR.MINOR.PATCH"
|
|
131
131
|
commit_message = "bump version {old_version} -> {new_version}"
|
|
132
132
|
commit = true
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|