Tags: tomgond/dynamorio
Tags
i#4998: Fix incorrectly nested signals (DynamoRIO#5008) Fixes a bug where DR delivers a signal while an app is inside its signal handler for that same signal and has blocked such self-nesting. The fix is to undo some of the sigsuspend-handling changes that cause this regression by moving the sigsuspend state restore to actual delivery rather than at pending signal time. The ignoring of the current blocked signal set does have to remain in some form to handle pselect and signals like it where we can't move the post-syscall action to after the signal delivery. Improves the linux.signest test to reproduce the original bug and verify the fix. Also adds a test case to ensure that signals are nested when not blocked. Fixes DynamoRIO#4998
i#4984 view tool: Fix stale prefix on 2-line-disasm bug (DynamoRIO#4997) Moves the TID prefix outside of the cached disassembly to avoid a stale prefix in drcachesim's view tool. Tested manually: -------------------------------------------------- $ bin64/drrun -t drcachesim -offline -- suite/tests/bin/drmemtrace.signal_invariants $ bin64/drrun -t drcachesim -indir drmemtrace.drm*[0-9]*.dir -simulator_type view 2>&1 | less -------------------------------------------------- Before: -------------------------------------------------- T480221 0x00007ff86d0c4648 48 89 94 24 50 02 00 mov %rdx, 0x00000250(%rsp) T480218 00 T480221 write 8 byte(s) @ 0x7ff86c96fd50 T480221 0x00007ff86d0c4650 48 89 94 24 58 02 00 mov %rdx, 0x00000258(%rsp) T480218 00 T480221 write 8 byte(s) @ 0x7ff86c96fd58 T480221 0x00007ff86d0c4658 48 89 94 24 60 02 00 mov %rdx, 0x00000260(%rsp) T480218 00 T480221 write 8 byte(s) @ 0x7ff86c96fd60 T480221 0x00007ff86d0c4660 48 89 94 24 68 02 00 mov %rdx, 0x00000268(%rsp) T480218 00 T480221 write 8 byte(s) @ 0x7ff86c96fd68 -------------------------------------------------- After: -------------------------------------------------- T480221 0x00007ff86d0c4648 48 89 94 24 50 02 00 mov %rdx, 0x00000250(%rsp) T480221 00 T480221 write 8 byte(s) @ 0x7ff86c96fd50 T480221 0x00007ff86d0c4650 48 89 94 24 58 02 00 mov %rdx, 0x00000258(%rsp) T480221 00 T480221 write 8 byte(s) @ 0x7ff86c96fd58 T480221 0x00007ff86d0c4658 48 89 94 24 60 02 00 mov %rdx, 0x00000260(%rsp) T480221 00 T480221 write 8 byte(s) @ 0x7ff86c96fd60 T480221 0x00007ff86d0c4660 48 89 94 24 68 02 00 mov %rdx, 0x00000268(%rsp) T480221 00 T480221 write 8 byte(s) @ 0x7ff86c96fd68 -------------------------------------------------- Issue: DynamoRIO#4984
i#2626: AArch64 v8.0 Decode: Add misc SIMD instructions (DynamoRIO#4993) Adds the following instructions to the codec: - CNT - TRN1, TRN2 - UXTL, UXTL2 (USHLL alias) - UZP, UZP2 - XTN, XTN2 Issue: DynamoRIO#2626
i#2626 AArch64 Decode: Fix imm5 decode bits (DynamoRIO#4968) Change imm5 bitsize from 6 to 5 Issue: DynamoRIO#2626
i#3823 multi-phase drreg: Remove slot id labels. (DynamoRIO#4949) Modifies free spill slot selection logic to use is_our_spill_or_restore instead of the labels with spill slot use information added for this purpose. We do not need the extra information in the latter and can simply use the former routine. Removes the extra spill slot use metadata added in form of labels from the instrlist. Also adds documentation about possibility of DR slot conflicts if DR APIs are mixed with drreg ones. Issue: DynamoRIO#3823
i#4865 emul: Refactor drmgr callback list management (DynamoRIO#4945) The drmgr_bb_cb_add() and drmgr_bb_cb_remove() functions had become unwieldy over time, with very long lists of parameters and complex conditionals. This makes it difficult to add new callbacks. Here we refactor them to take in helpers to set key fields while sharing all of the other code. A new has_pair field is also added. This fixes a bug where drmgr_register_opcode_instrumentation_event() incorrectly increased the pair count. Issue: DynamoRIO#4865
i#4848: AArch64 v8.0 GPR decode: Add DUP to codec (DynamoRIO#4934) Add DUP to the codec with decoder tests Issue: DynamoRIO#4848, DynamoRIO#2626
i#3823 multi-phase drreg: Delay slot id label (DynamoRIO#4925) Moves label that contains slot id for register spill/restore instrs to after the instr instead of before. The free spill slot selection logic that makes use of these labels scans instrs after the given one, so we may miss the label if it is placed before. Fixes order of app val spill and tool val restore instrs after an instr that reads and writes a spilled reg. This was to take into account the label which is now after the tool val restore instr. Adds test to verify restoration of reg that was reserved in multiple phases on a fault, for X86 and AARCHXX. Also adds AARCHXX variant of the multi-phase slot conflict test, and extends it to also check proper restoration of app val (under normal operation, as opposed to under a fault which is done by the above test). The existing test only verified whether the slot used in different phases is different. Sets a new signal handler for the part of drreg-test that doesn't expect any signal. It adds a log message in case a signal is seen due to some test failure. Adds a note to the label instrs added by drreg-test to mark instrumentation locations. This is to avoid conflicts with other label instrs. Issue: DynamoRIO#3823, DynamoRIO#2985
i#4847 AArch64 v8.0 memory decode: Expand GPR LDR and STR tests (Dyna… …moRIO#4900) Add IR and disassembly tests for the GPR versions of LDR and STR Failed encodings discovered: - LDR literal (32/64bit variant) Issue: DynamoRIO#2626, DynamoRIO#4847
i#2985 scatter-gather: Fix scratch mask restoration on fault during s… …catter (DynamoRIO#4909) Adds a missing state transition in drx_avx512_scatter_sequence_state_machine used in drx_event_restore_state. This was causing restoration of the wrong value to scratch mask k0, resulting in a "ERROR: expected k0 == 0xffff, but is 0xd360" error in the drx-scattergather app. Postpones updating trace buffer ptr in the memval_simple sample client to post-write. This is to mitigate cases when the write buffer doesn't get written to due to the app write segfaulting, which results in no matching entry in the write buffer for the trace buffer entry. This causes an assert failure later for "write_base <= write_ptr" in trace_fault. A more efficient solution would be to handle this rare app-write-fail corner case in a fault handler instead. But we skip adding additional complexity in this sample client. Added an XXX comment for now. Adds a test that runs the drx-scattergather app under the memval_simple client to verify the above two fixes. Enables client.memval-test on 64-bit Linux. Issue: DynamoRIO#2985
PreviousNext