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

i#3544 RV64: Implement return address handling for post wrappers #6736

Merged
merged 15 commits into from
Aug 16, 2024

Conversation

apach301
Copy link
Contributor

@apach301 apach301 commented Mar 27, 2024

Substitute value of return address register to enable post wrappers.

Partially enables drwrap-test for RISC-V:

  1. Add drwrap-test-callconv test to pipeline
  2. Partially supported drwrap-drreg-test: check for pre/post wrappers passes,
    but checks for clean_call and restore registers functionality are failing.

Issue: #3544

Copy link
Contributor

@ksco ksco left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I suppose this is covered by some tests, do these tests work now? If yes, maybe state that in the PR description and enable it in the RUN_ON_QEMU label for RISC-V so it can be checked by the CI.

@apach301
Copy link
Contributor Author

apach301 commented Mar 28, 2024

I suppose this is covered by some tests, do these tests work now? If yes, maybe state that in the PR description and enable it in the RUN_ON_QEMU label for RISC-V so it can be checked by the CI.

I tested it only on my DR client. I don't familiar with DynamoRIO test system, and all I found is

if (NOT RISCV64)
and
if (NOT RISCV64) # TODO i#3544: Port tests to RISC-V 64
that are disabling drwrap tests on RISC-V. Is it sufficient to just remove the guards to enable these tests?

Also, as much as I understand, the one failing test (ci-aarchxx) isn't related to these changes, and is failing on current master.

@ksco
Copy link
Contributor

ksco commented Mar 28, 2024

Yes, remove the guards should be enough for CMake to build the test, then add the test name into suite/tests/CMakeLists.txt#L6152 and run ctest -L RUNS_ON_QEMU see if the test passes.

@apach301
Copy link
Contributor Author

Yes, remove the guards should be enough for CMake to build the test, then add the test name into suite/tests/CMakeLists.txt#L6152 and run ctest -L RUNS_ON_QEMU see if the test passes.

The tests couldn't be compiled currently for RISCV64: it needs a platform-depend fixes in suite/tests/client-interface/drwrap-drreg-test.dll.c, which requires implementing some functions in core/ir/riscv64/instr_create_api.h.in.

@ksco
Copy link
Contributor

ksco commented Mar 29, 2024

I suppose you’re referring to XINST_CREATE_cmp() and XINST_CREATE_jmp_cond? There won’t be such thing on RISC-V since we don’t have eflags. You can use INSTR_CREATE_beq() to rewrite this part for RISC-V.

@apach301
Copy link
Contributor Author

apach301 commented Apr 2, 2024

I suppose you’re referring to XINST_CREATE_cmp() and XINST_CREATE_jmp_cond? There won’t be such thing on RISC-V since we don’t have eflags. You can use INSTR_CREATE_beq() to rewrite this part for RISC-V.

Finally being able to compile and run tests. Test drwrap-callconv seems to work, but with drwrap-drreg things more complicated. The part with pre/post wrappers passes, the part with drreg save/restore registers fails.

Moreover, for riscv default callconv is not working, it requires explicitly setup DRWRAP_CALLCONV_RISCV_LP64 | DRWRAP_REPLACE_RETADDR flags

core/ir/riscv64/instr_create_api.h.in Outdated Show resolved Hide resolved
core/arch/asm_defines.asm Show resolved Hide resolved
core/arch/asm_defines.asm Show resolved Hide resolved
@ksco ksco requested a review from derekbruening April 2, 2024 17:13
suite/tests/CMakeLists.txt Outdated Show resolved Hide resolved
suite/tests/CMakeLists.txt Outdated Show resolved Hide resolved
@apach301 apach301 force-pushed the i3544-fix-post-wrapper branch from 60340f8 to 59add87 Compare April 3, 2024 10:01
@ksco
Copy link
Contributor

ksco commented Apr 3, 2024

Please don't do force push, see: https://dynamorio.org/page_code_reviews.html.

@apach301
Copy link
Contributor Author

apach301 commented Aug 6, 2024

@derekbruening @ksco Disabled unimplemented drwrap-drreg-test, now CI for riscv passes.

@derekbruening
Copy link
Contributor

Please see https://dynamorio.org/page_code_reviews.html#autotoc_md118 "request a re-review...clicking the re-review button..."

@apach301 apach301 requested review from ksco and derekbruening August 6, 2024 15:49
@ksco
Copy link
Contributor

ksco commented Aug 6, 2024

Sorry still on vacation this week.

@apach301 apach301 requested a review from derekbruening August 14, 2024 14:20
@ksco ksco merged commit 30c3a9b into DynamoRIO:master Aug 16, 2024
17 checks passed
@apach301 apach301 deleted the i3544-fix-post-wrapper branch August 16, 2024 15:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants