On Tue, Aug 25, 2020 at 12:39 PM Jim Wilson <j...@sifive.com> wrote: > On Wed, Aug 19, 2020 at 1:02 AM Joshua via Gcc-patches > <gcc-patches@gcc.gnu.org> wrote: > > * config/riscv/riscv.c (asan_shadow_offset): Implement the offset > > of asan shadow memory for risc-v. > > (asan_shadow_offset): new macro definition. > > When I try the patch, I get asan errors complaining about memory mappings.
I tried looking at this again today. I spent a few hours debugging sanitizer code to see what is going on, and managed to convince myself that the patch can't possibly work for riscv64-linux. There are at least two changes missing. It also can't possibly work for riscv32-linux. There is at least one change missing. libsanitizer/configure.tgt only supports riscv64-linux, so nothing gets built for riscv32-linux. I have no idea how you got this working. Maybe you forgot to send the entire patch? If there is a way to get it working, it would be good if you could describe in detail how you got it working. For riscv64-linux with these additional patches hifiveu017:1192$ more tmp.file diff --git a/libsanitizer/asan/asan_mapping.h b/libsanitizer/asan/asan_mapping.h index 09be904270c..906fb1eebc8 100644 --- a/libsanitizer/asan/asan_mapping.h +++ b/libsanitizer/asan/asan_mapping.h @@ -164,6 +164,7 @@ static const u64 kAArch64_ShadowOffset64 = 1ULL << 36; static const u64 kMIPS32_ShadowOffset32 = 0x0aaa0000; static const u64 kMIPS64_ShadowOffset64 = 1ULL << 37; static const u64 kPPC64_ShadowOffset64 = 1ULL << 41; +static const u64 kRISCV64_ShadowOffset64 = 1ULL << 36; static const u64 kSystemZ_ShadowOffset64 = 1ULL << 52; static const u64 kSPARC64_ShadowOffset64 = 1ULL << 43; // 0x80000000000 static const u64 kFreeBSD_ShadowOffset32 = 1ULL << 30; // 0x40000000 @@ -210,6 +211,8 @@ static const u64 kMyriadCacheBitMask32 = 0x40000000ULL; # define SHADOW_OFFSET kAArch64_ShadowOffset64 # elif defined(__powerpc64__) # define SHADOW_OFFSET kPPC64_ShadowOffset64 +# elif defined(__riscv) && (__riscv_xlen == 64) +# define SHADOW_OFFSET kRISCV64_ShadowOffset64 # elif defined(__s390x__) # define SHADOW_OFFSET kSystemZ_ShadowOffset64 # elif SANITIZER_FREEBSD diff --git a/libsanitizer/sanitizer_common/sanitizer_linux.cpp b/libsanitizer/sa nitizer_common/sanitizer_linux.cpp index 11c03e286dc..962df07772e 100644 --- a/libsanitizer/sanitizer_common/sanitizer_linux.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_linux.cpp @@ -1048,6 +1048,8 @@ uptr GetMaxVirtualAddress() { return (1ULL << (MostSignificantSetBitIndex(GET_CURRENT_FRAME()) + 1)) - 1; # elif defined(__mips64) return (1ULL << 40) - 1; // 0x000000ffffffffffUL; +# elif defined(__riscv) && (__riscv_xlen == 64) + return (1ULL << 39) - 1; // 0x0000008000000000UL; # elif defined(__s390x__) return (1ULL << 53) - 1; // 0x001fffffffffffffUL; #elif defined(__sparc__) hifiveu017:1193$ I now get ==2936470==AddressSanitizer CHECK failed: ../../../../gcc-git/libsanitizer/sanitizer_common/sanitizer_allocator_primary64.h:76 "((kSpaceBeg)) == ((address_range.Init(TotalSpaceSize, PrimaryAllocatorName, kSpaceBeg)))" (0x600000000000, 0xffffffffffffffff) <empty stack> so there is still something missing but I think I am closer. Jim