[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