[PATCH] D69113: Expose __hwasan_tag_mismatch_stub
David Tellenbach via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 24 03:07:51 PDT 2019
This revision was automatically updated to reflect the committed changes.
Closed by commit rG612eadb7bc06: Expose __hwasan_tag_mismatch_stub (authored by tellenbach).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D69113/new/
https://reviews.llvm.org/D69113
Files:
compiler-rt/lib/hwasan/hwasan_interface_internal.h
compiler-rt/lib/hwasan/hwasan_linux.cpp
compiler-rt/lib/hwasan/hwasan_tag_mismatch_aarch64.S
Index: compiler-rt/lib/hwasan/hwasan_tag_mismatch_aarch64.S
===================================================================
--- compiler-rt/lib/hwasan/hwasan_tag_mismatch_aarch64.S
+++ compiler-rt/lib/hwasan/hwasan_tag_mismatch_aarch64.S
@@ -135,12 +135,12 @@
stp x4, x5, [sp, #32]
stp x2, x3, [sp, #16]
- // Pass the address of the frame to __hwasan_tag_mismatch_stub, so that it can
+ // Pass the address of the frame to __hwasan_tag_mismatch4, so that it can
// extract the saved registers from this frame without having to worry about
// finding this frame.
mov x2, sp
- bl __hwasan_tag_mismatch_stub
+ bl __hwasan_tag_mismatch4
CFI_ENDPROC
.Lfunc_end0:
Index: compiler-rt/lib/hwasan/hwasan_linux.cpp
===================================================================
--- compiler-rt/lib/hwasan/hwasan_linux.cpp
+++ compiler-rt/lib/hwasan/hwasan_linux.cpp
@@ -460,21 +460,6 @@
return true;
}
-// Entry point stub for interoperability between __hwasan_tag_mismatch (ASM) and
-// the rest of the mismatch handling code (C++).
-extern "C" void __hwasan_tag_mismatch_stub(uptr addr, uptr access_info,
- uptr *registers_frame) {
- AccessInfo ai;
- ai.is_store = access_info & 0x10;
- ai.recover = false;
- ai.addr = addr;
- ai.size = 1 << (access_info & 0xf);
-
- HandleTagMismatch(ai, (uptr)__builtin_return_address(0),
- (uptr)__builtin_frame_address(0), nullptr, registers_frame);
- __builtin_unreachable();
-}
-
static void OnStackUnwind(const SignalContext &sig, const void *,
BufferedStackTrace *stack) {
stack->Unwind(StackTrace::GetNextInstructionPc(sig.pc), sig.bp, sig.context,
@@ -493,4 +478,24 @@
} // namespace __hwasan
+// Entry point for interoperability between __hwasan_tag_mismatch (ASM) and the
+// rest of the mismatch handling code (C++).
+void __hwasan_tag_mismatch4(uptr addr, uptr access_info, uptr *registers_frame,
+ size_t outsize) {
+ __hwasan::AccessInfo ai;
+ ai.is_store = access_info & 0x10;
+ ai.is_load = !ai.is_store;
+ ai.recover = access_info & 0x20;
+ ai.addr = addr;
+ if ((access_info & 0xf) == 0xf)
+ ai.size = outsize;
+ else
+ ai.size = 1 << (access_info & 0xf);
+
+ __hwasan::HandleTagMismatch(ai, (uptr)__builtin_return_address(0),
+ (uptr)__builtin_frame_address(0), nullptr,
+ registers_frame);
+ __builtin_unreachable();
+}
+
#endif // SANITIZER_FREEBSD || SANITIZER_LINUX || SANITIZER_NETBSD
Index: compiler-rt/lib/hwasan/hwasan_interface_internal.h
===================================================================
--- compiler-rt/lib/hwasan/hwasan_interface_internal.h
+++ compiler-rt/lib/hwasan/hwasan_interface_internal.h
@@ -112,6 +112,10 @@
void __hwasan_tag_mismatch(uptr addr, u8 ts);
SANITIZER_INTERFACE_ATTRIBUTE
+void __hwasan_tag_mismatch4(uptr addr, uptr access_info, uptr *registers_frame,
+ size_t outsize);
+
+SANITIZER_INTERFACE_ATTRIBUTE
u8 __hwasan_generate_tag();
// Returns the offset of the first tag mismatch or -1 if the whole range is
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D69113.226219.patch
Type: text/x-patch
Size: 3202 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20191024/ec374a2b/attachment.bin>
More information about the llvm-commits
mailing list