-
Notifications
You must be signed in to change notification settings - Fork 12k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[sanitizer_common][test] Fix InternalMmapWithOffset on 32-bit Linux/s… #101011
Conversation
…parc64 ``` SanitizerCommon-Unit :: ./Sanitizer-sparc-Test/SanitizerCommon/InternalMmapWithOffset ``` `FAIL`s on 32-bit Linux/sparc64: ``` projects/compiler-rt/lib/sanitizer_common/tests/./Sanitizer-sparc-Test --gtest_filter=SanitizerCommon.InternalMmapWithOffset -- compiler-rt/lib/sanitizer_common/tests/sanitizer_libc_test.cpp:335: Failure Expected equality of these values: 'A' Which is: 'A' (65, 0x41) p[0] Which is: '\0' ``` It turns out the `pgoffset` arg to `mmap2` is passed incorrectly in this case, unlike the 64-bit test. The caller, `MapWritableFileToMemory`, passes an `u64` arg, while `mmap2` expects an `off_t`. This patch casts the arg accordingly. Tested on `sparc64-unknown-linux-gnu` and `x86_64-pc-linux-gnu`.
@llvm/pr-subscribers-compiler-rt-sanitizer Author: Rainer Orth (rorth) Changes…parc64
It turns out the Tested on Full diff: https://github.com/llvm/llvm-project/pull/101011.diff 1 Files Affected:
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
index 2ea61b1cb424c..2de44197d16c0 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
@@ -220,7 +220,7 @@ uptr internal_mmap(void *addr, uptr length, int prot, int flags, int fd,
// mmap2 specifies file offset in 4096-byte units.
CHECK(IsAligned(offset, 4096));
return internal_syscall(SYSCALL(mmap2), addr, length, prot, flags, fd,
- offset / 4096);
+ (OFF_T)(offset / 4096));
# endif
}
# endif // !SANITIZER_S390
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this because of big-endian?
Yes indeed. |
/cherry-pick 1c25f2c |
llvm#101011) …parc64 ``` SanitizerCommon-Unit :: ./Sanitizer-sparc-Test/SanitizerCommon/InternalMmapWithOffset ``` `FAIL`s on 32-bit Linux/sparc64: ``` projects/compiler-rt/lib/sanitizer_common/tests/./Sanitizer-sparc-Test --gtest_filter=SanitizerCommon.InternalMmapWithOffset -- compiler-rt/lib/sanitizer_common/tests/sanitizer_libc_test.cpp:335: Failure Expected equality of these values: 'A' Which is: 'A' (65, 0x41) p[0] Which is: '\0' ``` It turns out the `pgoffset` arg to `mmap2` is passed incorrectly in this case, unlike the 64-bit test. The caller, `MapWritableFileToMemory`, passes an `u64` arg, while `mmap2` expects an `off_t`. This patch casts the arg accordingly. Tested on `sparc64-unknown-linux-gnu` and `x86_64-pc-linux-gnu`. (cherry picked from commit 1c25f2c)
/pull-request #101142 |
llvm#101011) …parc64 ``` SanitizerCommon-Unit :: ./Sanitizer-sparc-Test/SanitizerCommon/InternalMmapWithOffset ``` `FAIL`s on 32-bit Linux/sparc64: ``` projects/compiler-rt/lib/sanitizer_common/tests/./Sanitizer-sparc-Test --gtest_filter=SanitizerCommon.InternalMmapWithOffset -- compiler-rt/lib/sanitizer_common/tests/sanitizer_libc_test.cpp:335: Failure Expected equality of these values: 'A' Which is: 'A' (65, 0x41) p[0] Which is: '\0' ``` It turns out the `pgoffset` arg to `mmap2` is passed incorrectly in this case, unlike the 64-bit test. The caller, `MapWritableFileToMemory`, passes an `u64` arg, while `mmap2` expects an `off_t`. This patch casts the arg accordingly. Tested on `sparc64-unknown-linux-gnu` and `x86_64-pc-linux-gnu`. (cherry picked from commit 1c25f2c)
llvm#101011) …parc64 ``` SanitizerCommon-Unit :: ./Sanitizer-sparc-Test/SanitizerCommon/InternalMmapWithOffset ``` `FAIL`s on 32-bit Linux/sparc64: ``` projects/compiler-rt/lib/sanitizer_common/tests/./Sanitizer-sparc-Test --gtest_filter=SanitizerCommon.InternalMmapWithOffset -- compiler-rt/lib/sanitizer_common/tests/sanitizer_libc_test.cpp:335: Failure Expected equality of these values: 'A' Which is: 'A' (65, 0x41) p[0] Which is: '\0' ``` It turns out the `pgoffset` arg to `mmap2` is passed incorrectly in this case, unlike the 64-bit test. The caller, `MapWritableFileToMemory`, passes an `u64` arg, while `mmap2` expects an `off_t`. This patch casts the arg accordingly. Tested on `sparc64-unknown-linux-gnu` and `x86_64-pc-linux-gnu`.
…parc64
FAIL
s on 32-bit Linux/sparc64:It turns out the
pgoffset
arg tommap2
is passed incorrectly in this case, unlike the 64-bit test. The caller,MapWritableFileToMemory
, passes anu64
arg, whilemmap2
expects anoff_t
. This patch casts the arg accordingly.Tested on
sparc64-unknown-linux-gnu
andx86_64-pc-linux-gnu
.