forked from OSchip/llvm-project
Disable rosegment for old Android versions.
The unwinder used by the crash handler on versions of Android prior to API 29 did not correctly handle binaries built with rosegment, which is enabled by default for LLD. Android only supports LLD, so it's not an issue that this flag is not accepted by other linkers. Reviewed By: srhines Differential Revision: https://reviews.llvm.org/D95166
This commit is contained in:
parent
f3c9687a4f
commit
fae16fc0ee
|
@ -236,6 +236,15 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
|
|||
ExtraOpts.push_back("relro");
|
||||
}
|
||||
|
||||
if (Triple.isAndroid() && Triple.isAndroidVersionLT(29)) {
|
||||
// https://github.com/android/ndk/issues/1196
|
||||
// The unwinder used by the crash handler on versions of Android prior to
|
||||
// API 29 did not correctly handle binaries built with rosegment, which is
|
||||
// enabled by default for LLD. Android only supports LLD, so it's not an
|
||||
// issue that this flag is not accepted by other linkers.
|
||||
ExtraOpts.push_back("--no-rosegment");
|
||||
}
|
||||
|
||||
// Android ARM/AArch64 use max-page-size=4096 to reduce VMA usage. Note, lld
|
||||
// from 11 onwards default max-page-size to 65536 for both ARM and AArch64.
|
||||
if ((Triple.isARM() || Triple.isAArch64()) && Triple.isAndroid()) {
|
||||
|
|
|
@ -1089,6 +1089,20 @@
|
|||
// CHECK-ANDROID-HASH-STYLE-M: "{{.*}}ld{{(.exe)?}}"
|
||||
// CHECK-ANDROID-HASH-STYLE-M: "--hash-style=gnu"
|
||||
|
||||
// Check that we pass --no-rosegment for pre-29 Android versions and do not for
|
||||
// 29+.
|
||||
// RUN: %clang %s -### -o %t.o 2>&1 \
|
||||
// RUN: --target=armv7-linux-android28 \
|
||||
// RUN: | FileCheck --check-prefix=CHECK-ANDROID-ROSEGMENT-28 %s
|
||||
// CHECK-ANDROID-ROSEGMENT-28: "{{.*}}ld{{(.exe)?}}"
|
||||
// CHECK-ANDROID-ROSEGMENT-28: "--no-rosegment"
|
||||
//
|
||||
// RUN: %clang %s -### -o %t.o 2>&1 \
|
||||
// RUN: --target=armv7-linux-android29 \
|
||||
// RUN: | FileCheck --check-prefix=CHECK-ANDROID-ROSEGMENT-29 %s
|
||||
// CHECK-ANDROID-ROSEGMENT-29: "{{.*}}ld{{(.exe)?}}"
|
||||
// CHECK-ANDROID-ROSEGMENT-29-NOT: "--no-rosegment"
|
||||
|
||||
// RUN: %clang %s -### -o %t.o 2>&1 \
|
||||
// RUN: --target=armv7-linux-android21 \
|
||||
// RUN: | FileCheck --check-prefix=CHECK-ANDROID-NOEXECSTACK %s
|
||||
|
|
Loading…
Reference in New Issue