diff --git a/compiler-rt/lib/scudo/standalone/memtag.h b/compiler-rt/lib/scudo/standalone/memtag.h index b1b62065ed72c..07f08e1060dfa 100644 --- a/compiler-rt/lib/scudo/standalone/memtag.h +++ b/compiler-rt/lib/scudo/standalone/memtag.h @@ -88,11 +88,11 @@ inline bool systemDetectsMemoryTagFaultsTestOnly() { return false; } #endif // SCUDO_LINUX inline void disableMemoryTagChecksTestOnly() { - __asm__ __volatile__(".arch_extension mte; msr tco, #1"); + __asm__ __volatile__(".arch_extension memtag; msr tco, #1"); } inline void enableMemoryTagChecksTestOnly() { - __asm__ __volatile__(".arch_extension mte; msr tco, #0"); + __asm__ __volatile__(".arch_extension memtag; msr tco, #0"); } class ScopedDisableMemoryTagChecks { @@ -100,19 +100,21 @@ class ScopedDisableMemoryTagChecks { public: ScopedDisableMemoryTagChecks() { - __asm__ __volatile__(".arch_extension mte; mrs %0, tco; msr tco, #1" + __asm__ __volatile__(".arch_extension memtag; mrs %0, tco; msr tco, #1" : "=r"(PrevTCO)); } ~ScopedDisableMemoryTagChecks() { - __asm__ __volatile__(".arch_extension mte; msr tco, %0" : : "r"(PrevTCO)); + __asm__ __volatile__(".arch_extension memtag; msr tco, %0" + : + : "r"(PrevTCO)); } }; inline uptr selectRandomTag(uptr Ptr, uptr ExcludeMask) { uptr TaggedPtr; __asm__ __volatile__( - ".arch_extension mte; irg %[TaggedPtr], %[Ptr], %[ExcludeMask]" + ".arch_extension memtag; irg %[TaggedPtr], %[Ptr], %[ExcludeMask]" : [TaggedPtr] "=r"(TaggedPtr) : [Ptr] "r"(Ptr), [ExcludeMask] "r"(ExcludeMask)); return TaggedPtr; @@ -123,7 +125,7 @@ inline uptr storeTags(uptr Begin, uptr End) { if (Begin != End) { __asm__ __volatile__( R"( - .arch_extension mte + .arch_extension memtag 1: stzg %[Cur], [%[Cur]], #16 @@ -144,7 +146,7 @@ inline void *prepareTaggedChunk(void *Ptr, uptr Size, uptr ExcludeMask, // chunk holding a low alignment allocation is reused for a higher alignment // allocation, the chunk may already have a non-zero tag from the previous // allocation. - __asm__ __volatile__(".arch_extension mte; stg %0, [%0, #-16]" + __asm__ __volatile__(".arch_extension memtag; stg %0, [%0, #-16]" : : "r"(Ptr) : "memory"); @@ -161,7 +163,7 @@ inline void *prepareTaggedChunk(void *Ptr, uptr Size, uptr ExcludeMask, // purpose of catching linear overflows in this case. uptr UntaggedEnd = untagPointer(TaggedEnd); if (UntaggedEnd != BlockEnd) - __asm__ __volatile__(".arch_extension mte; stg %0, [%0]" + __asm__ __volatile__(".arch_extension memtag; stg %0, [%0]" : : "r"(UntaggedEnd) : "memory"); @@ -175,7 +177,7 @@ inline void resizeTaggedChunk(uptr OldPtr, uptr NewPtr, uptr BlockEnd) { // of the allocation to 0. See explanation in prepareTaggedChunk above. uptr RoundNewPtr = untagPointer(roundUpTo(NewPtr, 16)); if (RoundNewPtr != BlockEnd) - __asm__ __volatile__(".arch_extension mte; stg %0, [%0]" + __asm__ __volatile__(".arch_extension memtag; stg %0, [%0]" : : "r"(RoundNewPtr) : "memory"); @@ -183,7 +185,7 @@ inline void resizeTaggedChunk(uptr OldPtr, uptr NewPtr, uptr BlockEnd) { } __asm__ __volatile__(R"( - .arch_extension mte + .arch_extension memtag // Set the memory tag of the region // [roundUpTo(OldPtr, 16), roundUpTo(NewPtr, 16)) @@ -208,7 +210,7 @@ inline void resizeTaggedChunk(uptr OldPtr, uptr NewPtr, uptr BlockEnd) { inline uptr loadTag(uptr Ptr) { uptr TaggedPtr = Ptr; - __asm__ __volatile__(".arch_extension mte; ldg %0, [%0]" + __asm__ __volatile__(".arch_extension memtag; ldg %0, [%0]" : "+r"(TaggedPtr) : : "memory");