Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

mixed-mode *nix support: 64-bit + 32-bit on *nix #1345

Open
derekbruening opened this issue Nov 28, 2014 · 2 comments
Open

mixed-mode *nix support: 64-bit + 32-bit on *nix #1345

derekbruening opened this issue Nov 28, 2014 · 2 comments

Comments

@derekbruening
Copy link
Contributor

From [email protected] on January 02, 2014 01:08:26

Xref issue #49 , issue #828 , issue #865 , etc. for Windows mixed-mode and for mixed-mode
client issues.

On both Mac and Linux, mixing libraries not officially supported. Also on
both, there's no WOW-like user-mode layer: 32-bit just talks directly to
the kernel. We have yet to see any app that mixes modes. For now we do
not plan to support mixed-mode except on Windows. We certainly don't plan
to support mixing 32-bit and 64-bit libraries: we are currently hardcoding
the ELF and Mach-O struct definitions for the current arch.

Original issue: http://code.google.com/p/dynamorio/issues/detail?id=1345

@derekbruening
Copy link
Contributor Author

From [email protected] on August 29, 2014 12:48:57

Xref issue #1532 for drsyms support

derekbruening added a commit that referenced this issue Jun 23, 2020
Adds architecture tags to raw traces, propagated to final traces in a
new marker type.  Adds reader support for the new type.

Adds a check for unhandled architectures to raw2trace.

Adds checks for unhandled architectures to the opcode_mix and view
tools.  To reach that point, relaxes the ELF header checks to allow
libraries of the same bitwidth but different architectures (i#1345
prevents allowing all libraries), so we can map in the other-arch
libraries.

Updates the existing aarch64 raw trace files to contain architecture
tags, and updates the x86 failure message.

Cross-architecture handling of these same files was tested manually
with a prototype which will be committed in the future.

Issue: #4318, #1345
derekbruening added a commit that referenced this issue Jun 24, 2020
Adds architecture tags to raw traces, propagated to final traces in a
new marker type.  Adds reader support for the new type.

Adds a check for unhandled architectures to raw2trace.

Adds checks for unhandled architectures to the opcode_mix and view
tools.  To reach that point, relaxes the ELF header checks to allow
libraries of the same bitwidth but different architectures (i#1345
prevents allowing all libraries), so we can map in the other-arch
libraries.

Updates the existing aarch64 raw trace files to contain architecture
tags, and updates the x86 failure message.

Cross-architecture handling of these same files was tested manually
with a prototype which will be committed in the future.

Issue: #4318, #1345
derekbruening added a commit that referenced this issue Jun 24, 2020
Adds architecture tags to raw traces, propagated to final traces in a
new marker type.  Adds reader support for the new type.

Adds a check for unhandled architectures to raw2trace.

Adds checks for unhandled architectures to the opcode_mix and view
tools.  To reach that point, relaxes the ELF header checks to allow
libraries of the same bitwidth but different architectures (i#1345
prevents allowing all libraries), so we can map in the other-arch
libraries.

Updates the existing aarch64 raw trace files to contain architecture
tags, and updates the x86 failure message.

Cross-architecture handling of these same files was tested manually
with a prototype which will be committed in the future.

Issue: #4318, #1345
derekbruening added a commit that referenced this issue Jun 24, 2020
+ Fix misc host==target build issues from prototype
+ Fix drsyms arch
+ Fix asm to properly define in all cases, which requires passing
  in client flags who have no configure.h, and squashing the same
  flags for api.* tests
+ Remove no-longer-necessary IF_HOST from ELF code
+ Avoid a64 double-def sigcxt
+ Add fatal error if host and target bitwidths don't match (i#1345),
  and properly set the target bitwidth (don't base on compiler).
+ Enable altbindir test as xarch test
+ Finalize test suite approach: enabled 6 tests; used macro to set up
  tests and then return() to avoid if() on the other ~350 test setup
  cmake code

Issue: #1345
@derekbruening
Copy link
Contributor Author

This is blocking cross-architecture support for drdecode and drcachesim, both for a single build with host!=target of a different bitwidth, and the future goal a single multi-arch build: #1684, #4318.

derekbruening added a commit that referenced this issue Jun 26, 2020
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant