[compiler-rt] [compiler-rt] Fixed Android 8.1 `getauxval(AT_PAGESZ)` crashes if called from `.preinit_array`. (#113427) (PR #116121)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Dec 13 04:22:48 PST 2024
================
@@ -1219,17 +1213,11 @@ uptr GetPageSize() {
int rv = internal_sysctl(mib, 2, &pz, &pzl, nullptr, 0);
CHECK_EQ(rv, 0);
return (uptr)pz;
+# elif SANITIZER_ANDROID
+ // Using `getpagesize` because calling `getauxval` or `sysconf` from the
+ // `.preinit_array` can cause crashes on some older API levels.
+ return getpagesize();
----------------
funsafe-ptr wrote:
HI. I don't know how `PAGE_SIZE` could become undefined?
It also seems to be hardcoded to `1 << 12`, which is `4096`.
https://cs.android.com/android/platform/superproject/main/+/main:prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.17-4.8/sysroot/usr/include/x86_64-linux-gnu/sys/user.h;drc=047082e7ae4aa2c0a066819b5f3a8307e2c52f0e;l=175
Anyway, in my device, it simply returns `PAGE_SIZE`.
```fish
libc.so`getpagesize:
-> 0x7fb7cc8458 <+0>: orr w0, wzr, #0x1000
0x7fb7cc845c <+4>: ret
```
https://github.com/llvm/llvm-project/pull/116121
More information about the llvm-commits
mailing list