-
Notifications
You must be signed in to change notification settings - Fork 562
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
i#1684 xarch-IR: Support separate host and target arch (#4325)
Adds support for building with different host and target architectures. The goal is to support running drdisas, drdecode, drraw2trace, and drcachesim trace analyzers on one host machine while targeting recorded bytes or traces from a different type of machine: e.g., processing aarch64 traces on an x86_64 machine. The goal is *not* to turn DR into a cross-ISA binary translator: we only support standalone mode here, not full DR managed mode. Long-term it would be nicer to split out the DR standalone mode interfaces into separate libraries but that is beyond the scope of the current work. Adds a top-level CMake option variable "TARGET_ARCH" which defaults to CMAKE_SYSTEM_PROCESSOR but can be set to a different value. The regular arch variables/defines X86, AARCH64, and ARM are set from TARGET_ARCH, while new values DR_HOST_{X86,AARCH64,ARM} are set for the host. Uses a target-centric approach, where the bulk of the code is built targeting the TARGET_ARCH, with only assembly code and other limited code using the DR_HOST_* arch. This limits the scope of the code changes as compared to the opposite host-centric approach. A new define DR_HOST_NOT_TARGET is used to simply disable cases where the host and target are intertwined and difficult to easily separate, such as TLS handling and assembly code used for application execution (such as icache_op_isb_asm). The key code changed to use DR_HOST_* includes: + *.asm files + arch_exports.h inline asm for atomics and other key utilities + system call defines (we don't want to have our raw syscall wrappers running incorrect syscall numbers: we'll end up with fork bombs or other madness) + injection code + data section setup + drsyms libraries Code using built-in __*__ arch defines is changed to use our defines: + sigcontext.h, which is also augmented for some missing AArch64 types + x86_code_test.c Code reading ELF headers is relaxed to allow *any* arch of the same bitwdith (i#1345 prevents different bitwidth), since we need the host for standalone init code but the target for raw2trace module mapping. Nearly all tests are disabled not just from running but also from building for simplicity, to reduce code changes here. Some api.* decoder tests, drdisas, and the altbin test for drcachesim post-processing and analysis are enbabled in host!=target builds. Tests are disabled by using a macro to set up the tests and shifting all the setup code prior to the tests themselves, allowing a return() to skip over the bulk of the tests to avoid a giant if(). Only Linux host-x86_64-target-aarch64 is explicitly tested and enabled here. Adding the inverse, and adding host-i386-target-arm32, should not be much work, mostly with compiler flags, but will be done separately. Adding Windows support is also separated out as it requires a number of changes for compiler problems with aarch64 code. Adds a new host-x86_64-target-aarch64 build to runsuite.cmake, allocated to a new Travis job to avoid slowing down the current jobs. Issue: #1684, #4318, #1345
- Loading branch information
1 parent
8da4e78
commit 36856f3
Showing
30 changed files
with
599 additions
and
321 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.