mzh updated this revision to Diff 300588. Repository: rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION https://reviews.llvm.org/D90130/new/ https://reviews.llvm.org/D90130 Files: compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp compiler-rt/lib/sanitizer_common/sanitizer_platform.h compiler-rt/lib/tsan/go/buildgo.sh compiler-rt/lib/tsan/rtl/tsan_platform.h
Index: compiler-rt/lib/tsan/rtl/tsan_platform.h =================================================================== --- compiler-rt/lib/tsan/rtl/tsan_platform.h +++ compiler-rt/lib/tsan/rtl/tsan_platform.h @@ -488,6 +488,30 @@ // Indicates the runtime will define the memory regions at runtime. #define TSAN_RUNTIME_VMA 1 +#elif SANITIZER_GO && defined(__mips64) +/* +Go on linux/mips64 (47-bit VMA) +0000 0000 1000 - 0000 1000 0000: executable +0000 1000 0000 - 00c0 0000 0000: - +00c0 0000 0000 - 00e0 0000 0000: heap +00e0 0000 0000 - 2000 0000 0000: - +2000 0000 0000 - 3000 0000 0000: shadow +3000 0000 0000 - 3000 0000 0000: - +3000 0000 0000 - 4000 0000 0000: metainfo (memory blocks and sync objects) +4000 0000 0000 - 6000 0000 0000: - +6000 0000 0000 - 6200 0000 0000: traces +6200 0000 0000 - 8000 0000 0000: - +*/ +struct Mapping { + static const uptr kMetaShadowBeg = 0x300000000000ull; + static const uptr kMetaShadowEnd = 0x400000000000ull; + static const uptr kTraceMemBeg = 0x600000000000ull; + static const uptr kTraceMemEnd = 0x620000000000ull; + static const uptr kShadowBeg = 0x200000000000ull; + static const uptr kShadowEnd = 0x300000000000ull; + static const uptr kAppMemBeg = 0x000000001000ull; + static const uptr kAppMemEnd = 0x00e000000000ull; +}; #else # error "Unknown platform" #endif Index: compiler-rt/lib/tsan/go/buildgo.sh =================================================================== --- compiler-rt/lib/tsan/go/buildgo.sh +++ compiler-rt/lib/tsan/go/buildgo.sh @@ -64,6 +64,14 @@ elif [ "`uname -a | grep aarch64`" != "" ]; then SUFFIX="linux_arm64" ARCHCFLAGS="" + elif [ "`uname -a | grep -i mips64`" != "" ]; then + if [ "`lscpu | grep -i Little`" != "" ]; then + SUFFIX="linux_mips64le" + ARCHCFLAGS="-mips64 -EL" + else + SUFFIX="linux_mips64" + ARCHCFLAGS="-mips64 -EB" + fi fi elif [ "`uname -a | grep FreeBSD`" != "" ]; then # The resulting object still depends on libc. Index: compiler-rt/lib/sanitizer_common/sanitizer_platform.h =================================================================== --- compiler-rt/lib/sanitizer_common/sanitizer_platform.h +++ compiler-rt/lib/sanitizer_common/sanitizer_platform.h @@ -238,7 +238,11 @@ // FIXME: this value should be different on different platforms. Larger values // will still work but will consume more memory for TwoLevelByteMap. #if defined(__mips__) +#if SANITIZER_GO && defined(__mips64) +#define SANITIZER_MMAP_RANGE_SIZE FIRST_32_SECOND_64(1ULL << 32, 1ULL << 47) +#else # define SANITIZER_MMAP_RANGE_SIZE FIRST_32_SECOND_64(1ULL << 32, 1ULL << 40) +#endif #elif SANITIZER_RISCV64 #define SANITIZER_MMAP_RANGE_SIZE FIRST_32_SECOND_64(1ULL << 32, 1ULL << 38) #elif defined(__aarch64__) Index: compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp =================================================================== --- compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp +++ compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp @@ -38,6 +38,14 @@ #include <asm/unistd.h> #include <sys/types.h> #define stat kernel_stat +#if SANITIZER_GO +#undef st_atime +#undef st_mtime +#undef st_ctime +#define st_atime st_atim +#define st_mtime st_mtim +#define st_ctime st_ctim +#endif #include <asm/stat.h> #undef stat #endif @@ -248,9 +256,11 @@ // Undefine compatibility macros from <sys/stat.h> // so that they would not clash with the kernel_stat // st_[a|m|c]time fields +#if !SANITIZER_GO #undef st_atime #undef st_mtime #undef st_ctime +#endif #if defined(SANITIZER_ANDROID) // Bionic sys/stat.h defines additional macros // for compatibility with the old NDKs and
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits