[clang] Switch to Default PIE on FreeBSD (#206139)
We have started to compile the binary in our base as PIE by defualt. It makes sense to compile the binary to PIE by default in toolchain as Linux now. Also, extended testcases to support default PIE and no-pie parameter in freebsd.c and hip-fpie-option.hip.
This commit is contained in:
parent
46858d55e8
commit
e6190fab2e
4 changed files with 100 additions and 30 deletions
|
|
@ -473,7 +473,11 @@ FreeBSD::getDefaultUnwindTableLevel(const ArgList &Args) const {
|
|||
}
|
||||
|
||||
bool FreeBSD::isPIEDefault(const llvm::opt::ArgList &Args) const {
|
||||
return getSanitizerArgs(Args).requiresPIE();
|
||||
// The FreeBSD base system builds with PIE by default since 13.1.
|
||||
VersionTuple OSVersion = getTriple().getOSVersion();
|
||||
if (OSVersion.getMajor() != 0 && OSVersion < VersionTuple(13, 1))
|
||||
return getSanitizerArgs(Args).requiresPIE();
|
||||
return true;
|
||||
}
|
||||
|
||||
SanitizerMask
|
||||
|
|
|
|||
|
|
@ -1,20 +1,40 @@
|
|||
// RUN: %clang -### --target=aarch64-pc-freebsd11 %s --sysroot=%S/Inputs/basic_freebsd64_tree 2>&1 | \
|
||||
// RUN: FileCheck --check-prefix=CHECK-ARM64 %s
|
||||
/// PIE is the default on FreeBSD >= 13.1 (and unversioned triples); earlier
|
||||
/// releases default to non-PIE.
|
||||
// RUN: %clang --target=aarch64-pc-freebsd14 %s --sysroot=%S/Inputs/basic_freebsd64_tree -### 2>&1 \
|
||||
// RUN: | FileCheck --check-prefix=CHECK-ARM64-PIE %s
|
||||
|
||||
// RUN: %clang --target=aarch64-pc-freebsd11 %s --sysroot=%S/Inputs/basic_freebsd64_tree -### 2>&1 \
|
||||
// RUN: | FileCheck --check-prefix=CHECK-ARM64 %s
|
||||
// CHECK-ARM64: "-cc1" "-triple" "aarch64-pc-freebsd11"
|
||||
// CHECK-ARM64: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]"
|
||||
// CHECK-ARM64: "--eh-frame-hdr" "-dynamic-linker" "{{.*}}ld-elf{{.*}}" "-o" "a.out" "{{.*}}crt1.o" "{{.*}}crti.o" "{{.*}}crtbegin.o" "-L[[SYSROOT]]/usr/lib" "{{.*}}.o" "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed" "-lc" "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed" "{{.*}}crtend.o" "{{.*}}crtn.o"
|
||||
|
||||
// RUN: %clang -### --target=powerpc-pc-freebsd12 %s --sysroot=%S/Inputs/basic_freebsd_tree 2>&1 | \
|
||||
// RUN: FileCheck --check-prefix=CHECK-PPC %s
|
||||
// CHECK-PPC: "-cc1" "-triple" "powerpc-pc-freebsd12"
|
||||
// CHECK-PPC: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]"
|
||||
// CHECK-PPC: "--eh-frame-hdr" "-m" "elf32ppc_fbsd" "-dynamic-linker" "{{.*}}ld-elf{{.*}}" "-o" "a.out" "{{.*}}crt1.o" "{{.*}}crti.o" "{{.*}}crtbegin.o" "-L[[SYSROOT]]/usr/lib" "{{.*}}.o" "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed" "-lc" "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed" "{{.*}}crtend.o" "{{.*}}crtn.o"
|
||||
// CHECK-ARM64-PIE: "-cc1" "-triple" "aarch64-pc-freebsd{{[0-9]+}}"
|
||||
// CHECK-ARM64-PIE: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]"
|
||||
// CHECK-ARM64-PIE: "--eh-frame-hdr" "-pie" "-dynamic-linker" "{{.*}}ld-elf{{.*}}" "-o" "a.out" "{{.*}}crt1.o" "{{.*}}crti.o" "{{.*}}crtbeginS.o" "-L[[SYSROOT]]/usr/lib" "{{.*}}.o" "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed" "-lc" "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed" "{{.*}}crtendS.o" "{{.*}}crtn.o"
|
||||
|
||||
// RUN: %clang -### --target=powerpc64-pc-freebsd12 %s --sysroot=%S/Inputs/basic_freebsd64_tree 2>&1 | \
|
||||
// RUN: FileCheck --check-prefix=CHECK-PPC64 %s
|
||||
// CHECK-PPC64: "-cc1" "-triple" "powerpc64-pc-freebsd12"
|
||||
// RUN: %clang -pie --target=aarch64-pc-freebsd11 %s --sysroot=%S/Inputs/basic_freebsd64_tree -### 2>&1 \
|
||||
// RUN: | FileCheck --check-prefix=CHECK-ARM64-PIE %s
|
||||
|
||||
// RUN: %clang -no-pie --target=aarch64-pc-freebsd11 %s --sysroot=%S/Inputs/basic_freebsd64_tree -### 2>&1 \
|
||||
// RUN: | FileCheck --check-prefix=CHECK-ARM64-NOPIE %s
|
||||
// CHECK-ARM64-NOPIE: "-cc1" "-triple" "aarch64-pc-freebsd11"
|
||||
// CHECK-ARM64-NOPIE: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]"
|
||||
// CHECK-ARM64-NOPIE: "--eh-frame-hdr" "-dynamic-linker" "{{.*}}ld-elf{{.*}}" "-o" "a.out" "{{.*}}crt1.o" "{{.*}}crti.o" "{{.*}}crtbegin.o" "-L[[SYSROOT]]/usr/lib" "{{.*}}.o" "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed" "-lc" "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed" "{{.*}}crtend.o" "{{.*}}crtn.o"
|
||||
|
||||
// RUN: %clang --target=powerpc-pc-freebsd %s --sysroot=%S/Inputs/basic_freebsd_tree -### 2>&1 \
|
||||
// RUN: | FileCheck --check-prefix=CHECK-PPC %s
|
||||
|
||||
// CHECK-PPC: "-cc1" "-triple" "powerpc-pc-freebsd"
|
||||
// CHECK-PPC: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]"
|
||||
// CHECK-PPC: "--eh-frame-hdr" "-m" "elf32ppc_fbsd" "-pie" "-dynamic-linker" "{{.*}}ld-elf{{.*}}" "-o" "a.out" "{{.*}}crt1.o" "{{.*}}crti.o" "{{.*}}crtbeginS.o" "-L[[SYSROOT]]/usr/lib" "{{.*}}.o" "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed" "-lc" "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed" "{{.*}}crtendS.o" "{{.*}}crtn.o"
|
||||
|
||||
// RUN: %clang --target=powerpc64-pc-freebsd %s --sysroot=%S/Inputs/basic_freebsd64_tree -### 2>&1 \
|
||||
// RUN: | FileCheck --check-prefix=CHECK-PPC64 %s
|
||||
|
||||
// CHECK-PPC64: "-cc1" "-triple" "powerpc64-pc-freebsd"
|
||||
// CHECK-PPC64: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]"
|
||||
// CHECK-PPC64: "--eh-frame-hdr" "-dynamic-linker" "{{.*}}ld-elf{{.*}}" "-o" "a.out" "{{.*}}crt1.o" "{{.*}}crti.o" "{{.*}}crtbegin.o" "-L[[SYSROOT]]/usr/lib" "{{.*}}.o" "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed" "-lc" "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed" "{{.*}}crtend.o" "{{.*}}crtn.o"
|
||||
// CHECK-PPC64: "--eh-frame-hdr" "-pie" "-dynamic-linker" "{{.*}}ld-elf{{.*}}" "-o" "a.out" "{{.*}}crt1.o" "{{.*}}crti.o" "{{.*}}crtbeginS.o" "-L[[SYSROOT]]/usr/lib" "{{.*}}.o" "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed" "-lc" "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed" "{{.*}}crtendS.o" "{{.*}}crtn.o"
|
||||
|
||||
// RUN: %clang -### --target=powerpc64le-unknown-freebsd13 %s --sysroot=%S/Inputs/basic_freebsd64_tree 2>&1 | \
|
||||
// RUN: FileCheck --check-prefix=CHECK-PPC64LE %s
|
||||
|
|
@ -139,6 +159,34 @@
|
|||
// CHECK-PIE: Scrt1.o
|
||||
// CHECK-PIE: crtbeginS.o
|
||||
|
||||
// RUN: %clang --target=x86_64-pc-freebsd %s \
|
||||
// RUN: --sysroot=%S/Inputs/multiarch_freebsd64_tree -### 2>&1 \
|
||||
// RUN: | FileCheck --check-prefix=CHECK-NORMAL-PIE %s
|
||||
// CHECK-NORMAL-PIE: Scrt1.o
|
||||
// CHECK-NORMAL-PIE: crtbeginS.o
|
||||
|
||||
// RUN: %clang --target=x86_64-pc-freebsd -no-pie %s \
|
||||
// RUN: --sysroot=%S/Inputs/multiarch_freebsd64_tree -### 2>&1 \
|
||||
// RUN: | FileCheck --check-prefix=CHECK-NORMAL-NOPIE %s
|
||||
// CHECK-NORMAL-NOPIE: crt1.o
|
||||
// CHECK-NORMAL-NOPIE: crtbegin.o
|
||||
|
||||
/// PIE is the default on FreeBSD >= 13.1 and on unversioned triples.
|
||||
// RUN: %clang -### --target=x86_64-unknown-freebsd %s 2>&1 \
|
||||
// RUN: | FileCheck --check-prefix=PIE2 %s
|
||||
// RUN: %clang -### --target=x86_64-unknown-freebsd13.1 %s 2>&1 \
|
||||
// RUN: | FileCheck --check-prefix=PIE2 %s
|
||||
|
||||
// PIE2: "-mrelocation-model" "pic" "-pic-level" "2" "-pic-is-pie"
|
||||
// PIE2: "-pie"
|
||||
|
||||
/// Releases before 13.1 default to non-PIE.
|
||||
// RUN: %clang -### --target=x86_64-unknown-freebsd13.0 %s 2>&1 \
|
||||
// RUN: | FileCheck --check-prefix=PIE2-OLD %s
|
||||
|
||||
// PIE2-OLD: "-mrelocation-model" "static"
|
||||
// PIE2-OLD-NOT: "-pic-is-pie"
|
||||
// PIE2-OLD-NOT: "-pie"
|
||||
// RUN: %clang -### --target=x86_64-pc-freebsd12 %s --sysroot=%S/Inputs/multiarch_freebsd64_tree 2>&1 | \
|
||||
// RUN: FileCheck --check-prefix=CHECK-NORMAL %s
|
||||
// CHECK-NORMAL: crt1.o
|
||||
|
|
|
|||
26
clang/test/Driver/hip-fpie-option-freebsd.hip
Normal file
26
clang/test/Driver/hip-fpie-option-freebsd.hip
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
// -fPIC and -fPIE only affects host relocation model.
|
||||
// device compilation always uses PIC.
|
||||
|
||||
// RUN: %clang -### --target=x86_64-unknown-freebsd \
|
||||
// RUN: --offload-arch=gfx906 %s -nogpulib -nogpuinc \
|
||||
// RUN: 2>&1 | FileCheck -check-prefixes=DEV,HOST-PIE %s
|
||||
|
||||
// RUN: %clang -### --target=x86_64-unknown-freebsd \
|
||||
// RUN: -fgpu-rdc --offload-arch=gfx906 %s -nogpulib -nogpuinc \
|
||||
// RUN: 2>&1 | FileCheck -check-prefixes=DEV,HOST-PIE %s
|
||||
|
||||
// RUN: %clang -### --target=x86_64-unknown-freebsd \
|
||||
// RUN: --offload-arch=gfx906 %s -nogpulib -nogpuinc \
|
||||
// RUN: -fPIC \
|
||||
// RUN: 2>&1 | FileCheck -check-prefixes=DEV,HOST-PIC %s
|
||||
|
||||
// RUN: %clang -### --target=x86_64-unknown-freebsd \
|
||||
// RUN: -fgpu-rdc --offload-arch=gfx906 %s -nogpulib -nogpuinc \
|
||||
// RUN: -fPIC \
|
||||
// RUN: 2>&1 | FileCheck -check-prefixes=DEV,HOST-PIC %s
|
||||
|
||||
// DEV-DAG: {{".*clang.*".* "-triple" "amdgcn-amd-amdhsa".* "-mrelocation-model" "pic" "-pic-level" "[1|2]".* "-mframe-pointer=all"}}
|
||||
// HOST-PIC-DAG: {{".*clang.*".* "-triple" "x86_64-unknown-freebsd".* "-mrelocation-model" "pic" "-pic-level" "2"}}
|
||||
// HOST-PIC-NOT: "-pic-is-pie"
|
||||
// HOST-PIE-DAG: {{".*clang.*".* "-triple" "x86_64-unknown-freebsd".* "-mrelocation-model" "pic" "-pic-level" "2" "-pic-is-pie"}}
|
||||
// DEV-NOT: {{".*clang.*".* "-triple" "amdgcn-amd-amdhsa".* "-pic-is-pie"}}
|
||||
|
|
@ -24,11 +24,11 @@
|
|||
! RUN: %flang -target x86_64-pc-linux-gnu -no-pie -### %s 2>&1 \
|
||||
! RUN: | FileCheck %s --check-prefix=NO-PIE
|
||||
!
|
||||
! Ensure that "-pie" is passed to the linker.
|
||||
! RUN: %flang -target i386-unknown-freebsd -pie -### %s 2>&1 \
|
||||
! RUN: | FileCheck %s --check-prefix=PIE
|
||||
! RUN: %flang -target aarch64-pc-linux-gnu -pie -### %s 2>&1 \
|
||||
! RUN: | FileCheck %s --check-prefix=PIE
|
||||
! Ensure that "-no-pie" suppresses "-pie".
|
||||
! RUN: %flang -target i386-unknown-freebsd -no-pie -### %s 2>&1 \
|
||||
! RUN: | FileCheck %s --check-prefix=NO-PIE
|
||||
! RUN: %flang -target aarch64-pc-linux-gnu -no-pie -### %s 2>&1 \
|
||||
! RUN: | FileCheck %s --check-prefix=NO-PIE
|
||||
!
|
||||
! On Musl Linux, PIE is enabled by default, but can be disabled.
|
||||
! RUN: %flang -target x86_64-linux-musl -### %s 2>&1 \
|
||||
|
|
@ -58,21 +58,13 @@
|
|||
! RUN: %flang -target i386-pc-openbsd -pie -### %s 2>&1 \
|
||||
! RUN: | FileCheck %s --check-prefix=PIE
|
||||
!
|
||||
! On FreeBSD, -pie is not passed to the linker, but can be forced.
|
||||
! On FreeBSD, -pie is passed to the linker by default, but can be disabled.
|
||||
! RUN: %flang -target amd64-pc-freebsd -### %s 2>&1 \
|
||||
! RUN: | FileCheck %s --check-prefix=NO-PIE
|
||||
! RUN: %flang -target i386-pc-freebsd -### %s 2>&1 \
|
||||
! RUN: | FileCheck %s --check-prefix=NO-PIE
|
||||
! RUN: %flang -target aarch64-unknown-freebsd -### %s 2>&1 \
|
||||
! RUN: | FileCheck %s --check-prefix=NO-PIE
|
||||
! RUN: %flang -target arm-unknown-freebsd -### %s 2>&1 \
|
||||
! RUN: | FileCheck %s --check-prefix=NO-PIE
|
||||
! RUN: %flang -target powerpc-unknown-freebsd -### %s 2>&1 \
|
||||
! RUN: | FileCheck %s --check-prefix=NO-PIE
|
||||
! RUN: %flang -target sparc64-unknown-freebsd -### %s 2>&1 \
|
||||
! RUN: | FileCheck %s --check-prefix=NO-PIE
|
||||
! RUN: %flang -target i386-pc-freebsd -pie -### %s 2>&1 \
|
||||
! RUN: | FileCheck %s --check-prefix=PIE
|
||||
! RUN: %flang -target aarch64-unknown-freebsd -### %s 2>&1 \
|
||||
! RUN: | FileCheck %s --check-prefix=PIE
|
||||
! RUN: %flang -target amd64-pc-freebsd -no-pie -### %s 2>&1 \
|
||||
! RUN: | FileCheck %s --check-prefix=NO-PIE
|
||||
!
|
||||
! On AIX, -pie is never passed to the linker.
|
||||
! RUN: %flang -target powerpc64-unknown-aix -### %s 2>&1 \
|
||||
|
|
|
|||
Loading…
Reference in a new issue