mirror of
https://github.com/asmjit/asmjit.git
synced 2025-12-16 20:17:05 +03:00
bb47dc3ede31a56893b48cbd0cb18f61ee2df983
LLVM's UBSAN (version 17) started using bytes below a function as metadata for the sanitizer. It adds code to read this metadata when performing an indirect function call, which means that if the function itself is placed at a beginning of a mapped page, the application would crash, because the previous page doesn't have to be accessible. Unfortunately, LLVM exposes users to this implementation detail now, and to make it possible to instrument software that links to asmjit, a workaround had to be added. In addition, it's not just possible to add this workaround to UBSAN builds, because asmjit can be installed via a package and third party code that uses UBSAN can just link to it. This means that we have to add padding to each block that provides consecutive memory. This behavior is now the default, however, an option exist: asmjit::JitAllocatorOptions::kDisableInitialPadding With this option it's possible to control the behavior and to disable the artificial padding used as a workaround.
AsmJit
AsmJit is a lightweight library for machine code generation written in C++ language.
- Official Home Page (asmjit.com)
- Official Repository (asmjit/asmjit)
- Public Chat Channel
- Zlib License
See asmjit.com page for more details, examples, and documentation.
Documentation
Breaking Changes
Breaking the API is sometimes inevitable, what to do?
- See Breaking Changes Guide, which is now part of AsmJit documentation.
- See asmjit tests, they always compile and provide implementation of many use-cases:
- asmjit_test_emitters.cpp - Tests that demonstrate the purpose of emitters.
- asmjit_test_assembler_x86.cpp - Tests targeting AsmJit's Assembler (x86/x64).
- asmjit_test_compiler_x86.cpp - Tests targeting AsmJit's Compiler (x86/x64).
- asmjit_test_instinfo.cpp - Tests that query instruction information.
- asmjit_test_x86_sections.cpp - Multiple sections test.
- Visit our Official Chat if you need a quick help.
Project Organization
/- Project root.- src - Source code.
- asmjit - Source code and headers (always point include path in here).
- core - Core API, backend independent except relocations.
- arm - ARM specific API, used only by ARM and AArch64 backends.
- x86 - X86 specific API, used only by X86 and X64 backends.
- asmjit - Source code and headers (always point include path in here).
- test - Unit and integration tests (don't embed in your project).
- tools - Tools used for configuring, documenting, and generating files.
- src - Source code.
TODO
- Core:
- Add support for user external buffers in CodeBuffer / CodeHolder.
- Ports:
- 32-bit ARM/Thumb port.
- 64-bit ARM (AArch64) port.
- RISC-V port.
Support
- AsmJit project has both community and commercial support, see AsmJit's Support Page
- You can help the development and maintenance through Petr Kobalicek's GitHub sponsors Profile
Notable Donors List:
Authors & Maintainers
- Petr Kobalicek kobalicek.petr@gmail.com
Languages
C++
93.2%
JavaScript
3.3%
C
3.2%
CMake
0.3%