https://github.com/aokblast updated https://github.com/llvm/llvm-project/pull/206139
>From e27fa2c5bb6c91881208c057800c332c391ff1b5 Mon Sep 17 00:00:00 2001 From: ShengYi Hung <[email protected]> Date: Fri, 10 Jul 2026 16:07:46 +0800 Subject: [PATCH 1/4] [Clang] Switch to Default PIE on FreeBSD 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-pie.c, freebsd-mips-as-pie.c and hip-fpie-option-freebsd.hip. --- clang/CMakeLists.txt | 2 + clang/include/clang/Config/config.h.cmake | 3 + clang/lib/Driver/ToolChains/FreeBSD.cpp | 7 +- clang/test/CMakeLists.txt | 1 + clang/test/Driver/freebsd-default-pie.c | 7 + clang/test/Driver/freebsd-mips-as-pie.c | 94 ++++++ clang/test/Driver/freebsd-mips-as.c | 2 + clang/test/Driver/freebsd-pie.c | 275 ++++++++++++++++++ clang/test/Driver/freebsd.c | 2 + clang/test/Driver/hie-fpie-option-freebsd.hip | 38 +++ clang/test/lit.cfg.py | 3 + clang/test/lit.site.cfg.py.in | 1 + flang/test/Driver/linker-options.f90 | 22 +- flang/test/Driver/pic-flags.f90 | 1 + .../clang/include/clang/Config/BUILD.gn | 1 + llvm/utils/gn/secondary/clang/test/BUILD.gn | 1 + .../clang/include/clang/Config/config.h | 3 + 17 files changed, 448 insertions(+), 15 deletions(-) create mode 100644 clang/test/Driver/freebsd-default-pie.c create mode 100644 clang/test/Driver/freebsd-mips-as-pie.c create mode 100644 clang/test/Driver/freebsd-pie.c create mode 100644 clang/test/Driver/hie-fpie-option-freebsd.hip diff --git a/clang/CMakeLists.txt b/clang/CMakeLists.txt index 20276a034d50a..7617e21157903 100644 --- a/clang/CMakeLists.txt +++ b/clang/CMakeLists.txt @@ -286,6 +286,8 @@ set(PPC_LINUX_DEFAULT_IEEELONGDOUBLE OFF CACHE BOOL set(CLANG_SPAWN_CC1 OFF CACHE BOOL "Whether clang should use a new process for the CC1 invocation") +option(CLANG_DEFAULT_PIE_ON_FREEBSD "Default to -fPIE and -pie on freebsd" ON) + option(CLANG_DEFAULT_PIE_ON_LINUX "Default to -fPIE and -pie on linux-gnu" ON) set(CLANG_DEFAULT_LINKER "" CACHE STRING diff --git a/clang/include/clang/Config/config.h.cmake b/clang/include/clang/Config/config.h.cmake index 11b4096726f67..e92d449170908 100644 --- a/clang/include/clang/Config/config.h.cmake +++ b/clang/include/clang/Config/config.h.cmake @@ -8,6 +8,9 @@ /* Bug report URL. */ #define BUG_REPORT_URL "${BUG_REPORT_URL}" +/* Default to -fPIE and -pie on FreeBSD. */ +#cmakedefine01 CLANG_DEFAULT_PIE_ON_FREEBSD + /* Default to -fPIE and -pie on Linux. */ #cmakedefine01 CLANG_DEFAULT_PIE_ON_LINUX diff --git a/clang/lib/Driver/ToolChains/FreeBSD.cpp b/clang/lib/Driver/ToolChains/FreeBSD.cpp index c45ae14f4e643..638a28bf4d60e 100644 --- a/clang/lib/Driver/ToolChains/FreeBSD.cpp +++ b/clang/lib/Driver/ToolChains/FreeBSD.cpp @@ -134,9 +134,8 @@ void freebsd::Linker::ConstructJob(Compilation &C, const JobAction &JA, const Driver &D = ToolChain.getDriver(); const llvm::Triple &Triple = ToolChain.getTriple(); const llvm::Triple::ArchType Arch = ToolChain.getArch(); - const bool IsPIE = - !Args.hasArg(options::OPT_shared) && - (Args.hasArg(options::OPT_pie) || ToolChain.isPIEDefault(Args)); + const bool IsPIE = Args.hasFlag(options::OPT_pie, options::OPT_no_pie, + ToolChain.isPIEDefault(Args)); ArgStringList CmdArgs; // Silence warning for "clang -g foo.o -o foo" @@ -473,7 +472,7 @@ FreeBSD::getDefaultUnwindTableLevel(const ArgList &Args) const { } bool FreeBSD::isPIEDefault(const llvm::opt::ArgList &Args) const { - return getSanitizerArgs(Args).requiresPIE(); + return CLANG_DEFAULT_PIE_ON_FREEBSD || getSanitizerArgs(Args).requiresPIE(); } SanitizerMask diff --git a/clang/test/CMakeLists.txt b/clang/test/CMakeLists.txt index 15170bbc2d1ed..d99b9a1e0602f 100644 --- a/clang/test/CMakeLists.txt +++ b/clang/test/CMakeLists.txt @@ -5,6 +5,7 @@ llvm_canonicalize_cmake_booleans( BUILD_SHARED_LIBS CLANG_BUILD_EXAMPLES CLANG_BUILT_STANDALONE + CLANG_DEFAULT_PIE_ON_FREEBSD CLANG_DEFAULT_PIE_ON_LINUX CLANG_ENABLE_STATIC_ANALYZER CLANG_PLUGIN_SUPPORT diff --git a/clang/test/Driver/freebsd-default-pie.c b/clang/test/Driver/freebsd-default-pie.c new file mode 100644 index 0000000000000..58e7b3a0b0efe --- /dev/null +++ b/clang/test/Driver/freebsd-default-pie.c @@ -0,0 +1,7 @@ +// REQUIRES: default-pie-on-freebsd +/// Test -DCLANG_DEFAULT_PIE_ON_FREEBSD=on. + +// RUN: %clang -### --target=x86_64-unknown-freebsd %s 2>&1 | FileCheck %s --check-prefix=PIE2 + +// PIE2: "-mrelocation-model" "pic" "-pic-level" "2" "-pic-is-pie" +// PIE2: "-pie" diff --git a/clang/test/Driver/freebsd-mips-as-pie.c b/clang/test/Driver/freebsd-mips-as-pie.c new file mode 100644 index 0000000000000..86fb0bc6eecd5 --- /dev/null +++ b/clang/test/Driver/freebsd-mips-as-pie.c @@ -0,0 +1,94 @@ +// REQUIRES: default-pie-on-freebsd + +// Check passing options to the assembler for MIPS targets. +// +// RUN: %clang --target=mips-unknown-freebsd -### \ +// RUN: -no-integrated-as -fno-pic -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS32-EB-AS %s +// MIPS32-EB-AS: as{{(.exe)?}}" "-march" "mips2" "-mabi" "32" "-EB" +// MIPS32-EB-AS-NOT: "-KPIC" +// +// RUN: %clang --target=mips-unknown-freebsd -### \ +// RUN: -no-integrated-as -fPIC -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS32-EB-PIC %s +// MIPS32-EB-PIC: as{{(.exe)?}}" "-march" "mips2" "-mabi" "32" "-EB" +// MIPS32-EB-PIC: "-KPIC" +// +// RUN: %clang --target=mips-unknown-freebsd -### \ +// RUN: -no-integrated-as -fpic -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS32-EB-PIC-SMALL %s +// MIPS32-EB-PIC-SMALL: as{{(.exe)?}}" "-march" "mips2" "-mabi" "32" "-EB" +// MIPS32-EB-PIC-SMALL: "-KPIC" +// +// RUN: %clang --target=mips-unknown-freebsd -### \ +// RUN: -no-integrated-as -fPIE -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS32-EB-PIE %s +// MIPS32-EB-PIE: as{{(.exe)?}}" "-march" "mips2" "-mabi" "32" "-EB" +// MIPS32-EB-PIE: "-KPIC" +// +// RUN: %clang --target=mips-unknown-freebsd -### \ +// RUN: -no-integrated-as -fpie -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS32-EB-PIE-SMALL %s +// MIPS32-EB-PIE-SMALL: as{{(.exe)?}}" "-march" "mips2" "-mabi" "32" "-EB" +// MIPS32-EB-PIE-SMALL: "-KPIC" +// +// RUN: %clang --target=mipsel-unknown-freebsd -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS32-DEF-EL-AS %s +// MIPS32-DEF-EL-AS: as{{(.exe)?}}" "-march" "mips2" "-mabi" "32" "-EL" +// +// RUN: %clang --target=mips64-unknown-freebsd -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS64-EB-AS %s +// MIPS64-EB-AS: as{{(.exe)?}}" "-march" "mips3" "-mabi" "64" "-EB" +// +// RUN: %clang --target=mips64el-unknown-freebsd -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS64-DEF-EL-AS %s +// MIPS64-DEF-EL-AS: as{{(.exe)?}}" "-march" "mips3" "-mabi" "64" "-EL" +// +// RUN: %clang --target=mips64-unknown-freebsd -mabi=n32 -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS-N32 %s +// MIPS-N32: as{{(.exe)?}}" "-march" "mips3" "-mabi" "n32" "-EB" +// +// RUN: %clang --target=mipsel-unknown-freebsd -mabi=32 -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS32-EL-AS %s +// MIPS32-EL-AS: as{{(.exe)?}}" "-march" "mips2" "-mabi" "32" "-EL" +// +// RUN: %clang --target=mips64el-unknown-freebsd -mabi=64 -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS64-EL-AS %s +// MIPS64-EL-AS: as{{(.exe)?}}" "-march" "mips3" "-mabi" "64" "-EL" +// +// RUN: %clang --target=mips-linux-freebsd -march=mips32r2 -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS-32R2 %s +// MIPS-32R2: as{{(.exe)?}}" "-march" "mips32r2" "-mabi" "32" "-EB" +// +// RUN: %clang --target=mips-unknown-freebsd -mips32 -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS-ALIAS-32 %s +// MIPS-ALIAS-32: as{{(.exe)?}}" "-march" "mips32" "-mabi" "32" "-EB" +// +// RUN: %clang --target=mips-unknown-freebsd -mips32r2 -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS-ALIAS-32R2 %s +// MIPS-ALIAS-32R2: as{{(.exe)?}}" "-march" "mips32r2" "-mabi" "32" "-EB" +// +// RUN: %clang --target=mips64-unknown-freebsd -mips64 -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS-ALIAS-64 %s +// MIPS-ALIAS-64: as{{(.exe)?}}" "-march" "mips64" "-mabi" "64" "-EB" +// +// RUN: %clang --target=mips64-unknown-freebsd -mips64r2 -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS-ALIAS-64R2 %s +// MIPS-ALIAS-64R2: as{{(.exe)?}}" "-march" "mips64r2" "-mabi" "64" "-EB" +// +// RUN: %clang --target=mips-unknown-freebsd -### \ +// RUN: -no-integrated-as -fno-pic -G0 -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS32-EB-AS-G0 %s +// MIPS32-EB-AS-G0: as{{(.exe)?}}" "-march" "mips2" "-mabi" "32" "-EB" "-G0" +// MIPS32-EB-AS-G0-NOT: "-KPIC" diff --git a/clang/test/Driver/freebsd-mips-as.c b/clang/test/Driver/freebsd-mips-as.c index 428644ab78a9f..2bc5fc72428b9 100644 --- a/clang/test/Driver/freebsd-mips-as.c +++ b/clang/test/Driver/freebsd-mips-as.c @@ -1,3 +1,5 @@ +// REQUIRES: !default-pie-on-freebsd + // Check passing options to the assembler for MIPS targets. // // RUN: %clang --target=mips-unknown-freebsd -### \ diff --git a/clang/test/Driver/freebsd-pie.c b/clang/test/Driver/freebsd-pie.c new file mode 100644 index 0000000000000..d513617a08796 --- /dev/null +++ b/clang/test/Driver/freebsd-pie.c @@ -0,0 +1,275 @@ +// REQUIRES: default-pie-on-freebsd + +// RUN: %clang \ +// RUN: --target=aarch64-pc-freebsd11 %s \ +// RUN: --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:[^"]+]]" "-pie" +// CHECK-ARM64: "--eh-frame-hdr" "-dynamic-linker" "{{.*}}ld-elf{{.*}}" "--enable-new-dtags" "-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 -no-pie \ +// RUN: --target=aarch64-pc-freebsd11 %s \ +// RUN: --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 \ +// RUN: --target=powerpc-pc-freebsd %s \ +// RUN: --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" "-dynamic-linker" "{{.*}}ld-elf{{.*}}" "--enable-new-dtags" "-m" "elf32ppc_fbsd" "-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 -no-pie \ +// RUN: --target=powerpc-pc-freebsd %s \ +// RUN: --sysroot=%S/Inputs/basic_freebsd_tree -### 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-PPC-NOPIE %s +// CHECK-PPC-NOPIE: "-cc1" "-triple" "powerpc-pc-freebsd" +// CHECK-PPC-NOPIE: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" +// CHECK-PPC-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 \ +// RUN: --target=powerpc64-pc-freebsd %s \ +// RUN: --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{{.*}}" "--enable-new-dtags" "-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 -no-pie \ +// RUN: --target=powerpc64-pc-freebsd %s \ +// RUN: --sysroot=%S/Inputs/basic_freebsd64_tree -### 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-PPC64-NOPIE %s +// CHECK-PPC64-NOPIE: "-cc1" "-triple" "powerpc64-pc-freebsd" +// CHECK-PPC64-NOPIE: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" +// CHECK-PPC64-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 \ +// RUN: --target=powerpc64le-unknown-freebsd13 %s \ +// RUN: --sysroot=%S/Inputs/basic_freebsd64_tree -### 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-PPC64LE %s +// CHECK-PPC64LE: "-cc1" "-triple" "powerpc64le-unknown-freebsd13" +// CHECK-PPC64LE: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" +// CHECK-PPC64LE: "--eh-frame-hdr" "-dynamic-linker" "{{.*}}ld-elf{{.*}}" "--enable-new-dtags" "-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 -no-pie \ +// RUN: --target=powerpc64le-unknown-freebsd13 %s \ +// RUN: --sysroot=%S/Inputs/basic_freebsd64_tree -### 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-PPC64LE-NOPIE %s +// CHECK-PPC64LE-NOPIE: "-cc1" "-triple" "powerpc64le-unknown-freebsd13" +// CHECK-PPC64LE-NOPIE: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" +// CHECK-PPC64LE-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" + + +// +// Check that -m32 properly adjusts the toolchain flags. +// +// RUN: %clang --target=x86_64-pc-freebsd -m32 %s \ +// RUN: --sysroot=%S/Inputs/multiarch_freebsd64_tree -### 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-LIB32 %s +// CHECK-LIB32: "-cc1" "-triple" "i386-pc-freebsd" +// CHECK-LIB32: ld{{.*}}" {{.*}} "-m" "elf_i386_fbsd" +// +// RUN: %clang --target=x86_64-pc-freebsd -m32 %s 2>&1 \ +// RUN: --sysroot=%S/Inputs/multiarch_freebsd64_tree -print-search-dirs 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-LIB32PATHS %s +// CHECK-LIB32PATHS: libraries: ={{.*:?}}/usr/lib32 +// +// Check that O32 MIPS uses /usr/lib32 on a 64-bit tree. +// +// RUN: %clang --target=mips-freebsd12 %s \ +// RUN: --sysroot=%S/Inputs/multiarch_freebsd64_tree -print-search-dirs 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-LIB32PATHS %s +// +// Check that MIPS passes the correct linker emulation. +// +// RUN: %clang --target=mips-freebsd -### %s %s 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-MIPS-LD %s +// CHECK-MIPS-LD: ld{{.*}}" {{.*}} "-m" "elf32btsmip_fbsd" +// RUN: %clang --target=mipsel-freebsd -### %s %s 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-MIPSEL-LD %s +// CHECK-MIPSEL-LD: ld{{.*}}" {{.*}} "-m" "elf32ltsmip_fbsd" +// RUN: %clang --target=mips64-freebsd -### %s %s 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-MIPS64-LD %s +// CHECK-MIPS64-LD: ld{{.*}}" {{.*}} "-m" "elf64btsmip_fbsd" +// RUN: %clang --target=mips64el-freebsd -### %s %s 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-MIPS64EL-LD %s +// CHECK-MIPS64EL-LD: ld{{.*}}" {{.*}} "-m" "elf64ltsmip_fbsd" +// RUN: %clang --target=mips64-freebsd -mabi=n32 -### %s %s 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-MIPSN32-LD %s +// CHECK-MIPSN32-LD: ld{{.*}}" {{.*}} "-m" "elf32btsmipn32_fbsd" +// RUN: %clang --target=mips64el-freebsd -mabi=n32 -### %s %s 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-MIPSN32EL-LD %s +// CHECK-MIPSN32EL-LD: ld{{.*}}" {{.*}} "-m" "elf32ltsmipn32_fbsd" +// +// Check that RISC-V passes the correct linker emulation. +// +// RUN: %clang --target=riscv64-freebsd -### %s %s 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-RV64I-LD %s +// CHECK-RV64I-LD: ld{{.*}}" {{.*}} "-m" "elf64lriscv" +// +// Check that LoongArch passes the correct linker emulation. +// +// RUN: %clang --target=loongarch64-freebsd -### %s %s 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-LA64-LD %s +// CHECK-LA64-LD: ld{{.*}}" {{.*}} "-m" "elf64loongarch" +// +// Check options passed to the linker on LoongArch +// +// RUN: %clang --target=loongarch64-freebsd -mno-relax -### %s %s 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-LA64-LD-OPTS %s +// CHECK-LA64-LD-OPTS: ld{{.*}}" {{.*}} "-X" "--no-relax" +// +// Check that the new linker flags are passed to FreeBSD +// RUN: %clang --target=x86_64-pc-freebsd10.0 -m32 %s \ +// RUN: --sysroot=%S/Inputs/multiarch_freebsd64_tree -### 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-LDFLAGS_HASH %s +// RUN: %clang --target=x86_64-pc-freebsd -m32 %s \ +// RUN: --sysroot=%S/Inputs/multiarch_freebsd64_tree -### 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-LDFLAGS_HASH %s +// CHECK-LDFLAGS_HASH: --hash-style=both +// CHECK-LDFLAGS_HASH: --enable-new-dtags +// +// Check that we do not pass --hash-style=gnu and --hash-style=both to linker +// and provide correct path to the dynamic linker for MIPS platforms. +// Also verify that we tell the assembler to target the right ISA and ABI. +// RUN: %clang -### %s 2>&1 \ +// RUN: --target=mips-unknown-freebsd10.0 \ +// RUN: | FileCheck --check-prefix=CHECK-MIPS %s +// CHECK-MIPS: {{[/\\"]}}ld{{[^" ]*}}" +// CHECK-MIPS: "-dynamic-linker" "{{.*}}/libexec/ld-elf.so.1" +// CHECK-MIPS-NOT: "--hash-style={{gnu|both}}" +// RUN: %clang -### %s 2>&1 \ +// RUN: --target=mipsel-unknown-freebsd10.0 \ +// RUN: | FileCheck --check-prefix=CHECK-MIPSEL %s +// CHECK-MIPSEL: {{[/\\"]}}ld{{[^" ]*}}" +// CHECK-MIPSEL: "-dynamic-linker" "{{.*}}/libexec/ld-elf.so.1" +// CHECK-MIPSEL-NOT: "--hash-style={{gnu|both}}" +// RUN: %clang -### %s 2>&1 \ +// RUN: --target=mips64-unknown-freebsd10.0 \ +// RUN: | FileCheck --check-prefix=CHECK-MIPS64 %s +// CHECK-MIPS64: {{[/\\"]}}ld{{[^" ]*}}" +// CHECK-MIPS64: "-dynamic-linker" "{{.*}}/libexec/ld-elf.so.1" +// CHECK-MIPS64-NOT: "--hash-style={{gnu|both}}" +// RUN: %clang -### %s 2>&1 \ +// RUN: --target=mips64el-unknown-freebsd10.0 \ +// RUN: | FileCheck --check-prefix=CHECK-MIPS64EL %s +// CHECK-MIPS64EL: {{[/\\"]}}ld{{[^" ]*}}" +// CHECK-MIPS64EL: "-dynamic-linker" "{{.*}}/libexec/ld-elf.so.1" +// CHECK-MIPS64EL-NOT: "--hash-style={{gnu|both}}" + +// RUN: %clang --target=x86_64-pc-freebsd -static %s \ +// RUN: --sysroot=%S/Inputs/multiarch_freebsd64_tree -### 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-STATIC %s +// CHECK-STATIC: ld{{.*}}" "--eh-frame-hdr" "-Bstatic" +// CHECK-STATIC: crt1.o +// CHECK-STATIC: crtbeginT.o + +// RUN: %clang --target=x86_64-pc-freebsd -shared %s \ +// RUN: --sysroot=%S/Inputs/multiarch_freebsd64_tree -### 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-SHARED %s +// CHECK-SHARED: ld{{.*}}" "--eh-frame-hdr" "-shared" +// CHECK-SHARED: crti.o +// CHECK-SHARED: crtbeginS.o + +// RUN: %clang --target=x86_64-pc-freebsd -pie %s \ +// RUN: --sysroot=%S/Inputs/multiarch_freebsd64_tree -### 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-PIE %s +// CHECK-PIE: pie +// 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 %s +// CHECK-NORMAL: Scrt1.o +// CHECK-NORMAL: 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 + +// RUN: %clang -### %s --target=arm-unknown-freebsd10.0 -no-integrated-as 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-ARM %s +// CHECK-ARM-NOT: "-cc1"{{.*}}" "-exception-model=sjlj" +// CHECK-ARM: as{{.*}}" "-mfpu=softvfp"{{.*}}"-meabi=5" +// CHECK-ARM-NOT: as{{.*}}" "-mfpu=vfp" +// CHECK-ARM-NOT: as{{.*}}" "-matpcs" + +// RUN: %clang -### %s --target=arm-gnueabi-freebsd10.0 -no-integrated-as 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-ARM-EABI %s +// CHECK-ARM-EABI-NOT: "-cc1"{{.*}}" "-exception-model=sjlj" +// CHECK-ARM-EABI: as{{.*}}" "-mfpu=softvfp" "-meabi=5" +// CHECK-ARM-EABI-NOT: as{{.*}}" "-mfpu=vfp" +// CHECK-ARM-EABI-NOT: as{{.*}}" "-matpcs" + +// RUN: %clang -### %s --target=arm-gnueabihf-freebsd10.0 -no-integrated-as 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-ARM-EABIHF %s +// CHECK-ARM-EABIHF-NOT: "-cc1"{{.*}}" "-exception-model=sjlj" +// CHECK-ARM-EABIHF: as{{.*}}" "-mfpu=vfp" "-meabi=5" +// CHECK-ARM-EABIHF-NOT: as{{.*}}" "-mfpu=softvfp" +// CHECK-ARM-EABIHF-NOT: as{{.*}}" "-matpcs" + +// RUN: %clang --target=sparc64-unknown-freebsd -### %s -fpic -no-integrated-as 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-SPARC-PIC %s +// CHECK-SPARC-PIC: as{{.*}}" "-KPIC + +// RUN: %clang -mcpu=ultrasparc --target=sparc64-unknown-freebsd -### %s -no-integrated-as 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-SPARC-CPU %s +// CHECK-SPARC-CPU: cc1{{.*}}" "-target-cpu" "ultrasparc" +// CHECK-SPARC-CPU: as{{.*}}" "-Av9a + +// Check that -G flags are passed to the linker for mips +// RUN: %clang --target=mips-unknown-freebsd -### %s -G0 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-MIPS-G %s +// CHECK-MIPS-G: ld{{.*}}" "-G0" + +// Check CPU type for MIPS +// RUN: %clang --target=mips-unknown-freebsd -### -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-MIPS-CPU %s +// RUN: %clang --target=mipsel-unknown-freebsd -### -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-MIPS-CPU %s +// CHECK-MIPS-CPU: "-target-cpu" "mips2" + +// Check CPU type for MIPS64 +// RUN: %clang --target=mips64-unknown-freebsd -### -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-MIPS64-CPU %s +// RUN: %clang --target=mips64el-unknown-freebsd -### -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-MIPS64-CPU %s +// CHECK-MIPS64-CPU: "-target-cpu" "mips3" + +// RUN: %clang --target=ppc64-unknown-freebsd13.0 -### -S %s 2>&1 | \ +// RUN: FileCheck -check-prefix=PPC64-MUNWIND %s +// PPC64-MUNWIND: "-funwind-tables=2" + +/// -r suppresses -dynamic-linker, default -l and crt*.o like -nostdlib. +// RUN: %clang -### %s --target=aarch64-pc-freebsd11 -r \ +// RUN: --sysroot=%S/Inputs/basic_freebsd64_tree 2>&1 | FileCheck %s --check-prefix=RELOCATABLE +// RELOCATABLE: "-r" +// RELOCATABLE-NOT: "-dynamic-linker" +// RELOCATABLE-NOT: "-l +// RELOCATABLE-NOT: crt{{[^./\\]+}}.o + +// Check that the -X and --no-relax flags are passed to the linker on riscv64 +// RUN: %clang --target=riscv64-unknown-freebsd -mno-relax -### %s 2>&1 \ +// RUN: | FileCheck -check-prefix=RISCV64-FLAGS %s +// RISCV64-FLAGS: "-X" "--no-relax" + +/// -rdynamic becomes -export-dynamic; -s, -t, and -T are forwarded. +// RUN: %clang --target=x86_64-unknown-freebsd -rdynamic -s -t -T a.lds -### %s \ +// RUN: 2>&1 | FileCheck --check-prefix=PASS %s +// PASS: "--eh-frame-hdr" +// PASS-SAME: "-export-dynamic" +// PASS-SAME: "-s" "-t" "-T" "a.lds" + +// RUN: %clang -target riscv32be-unknown-freebsd -### -c %s 2>&1 | FileCheck %s --check-prefix=RV32BE +// RV32BE-NOT: elf32briscv diff --git a/clang/test/Driver/freebsd.c b/clang/test/Driver/freebsd.c index bb0558b9ceb3e..2c56e08382b6b 100644 --- a/clang/test/Driver/freebsd.c +++ b/clang/test/Driver/freebsd.c @@ -1,3 +1,5 @@ +// REQUIRES: !default-pie-on-freebsd + // RUN: %clang \ // RUN: --target=aarch64-pc-freebsd11 %s \ // RUN: --sysroot=%S/Inputs/basic_freebsd64_tree -### 2>&1 \ diff --git a/clang/test/Driver/hie-fpie-option-freebsd.hip b/clang/test/Driver/hie-fpie-option-freebsd.hip new file mode 100644 index 0000000000000..24dd3c4440062 --- /dev/null +++ b/clang/test/Driver/hie-fpie-option-freebsd.hip @@ -0,0 +1,38 @@ +// REQUIRES: default-pie-on-freebsd + +// -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 + +// RUN: %clang -### --target=x86_64-unknown-freebsd \ +// RUN: --offload-arch=gfx906 %s -nogpulib -nogpuinc \ +// RUN: -fPIE \ +// 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: -fPIE \ +// RUN: 2>&1 | FileCheck -check-prefixes=DEV,HOST-PIE %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"}} diff --git a/clang/test/lit.cfg.py b/clang/test/lit.cfg.py index 5a5e819c9b5a1..6013dfb6ad765 100644 --- a/clang/test/lit.cfg.py +++ b/clang/test/lit.cfg.py @@ -337,6 +337,9 @@ def have_host_clang_repl_cuda(): if config.has_plugins and config.llvm_plugin_ext: config.available_features.add("plugins") +if config.clang_default_pie_on_freebsd: + config.available_features.add("default-pie-on-freebsd") + if config.clang_default_pie_on_linux: config.available_features.add("default-pie-on-linux") diff --git a/clang/test/lit.site.cfg.py.in b/clang/test/lit.site.cfg.py.in index cb35118167d99..0ddca8452da23 100644 --- a/clang/test/lit.site.cfg.py.in +++ b/clang/test/lit.site.cfg.py.in @@ -21,6 +21,7 @@ config.llvm_use_sanitizer = "@LLVM_USE_SANITIZER@" config.have_zlib = @LLVM_ENABLE_ZLIB@ config.have_zstd = @LLVM_ENABLE_ZSTD@ config.clang_objc_rewriter = @CLANG_ENABLE_OBJC_REWRITER@ +config.clang_default_pie_on_freebsd = @CLANG_DEFAULT_PIE_ON_FREEBSD@ config.clang_default_pie_on_linux = @CLANG_DEFAULT_PIE_ON_LINUX@ config.clang_default_cxx_stdlib = "@CLANG_DEFAULT_CXX_STDLIB@" config.clang_staticanalyzer = @CLANG_ENABLE_STATIC_ANALYZER@ diff --git a/flang/test/Driver/linker-options.f90 b/flang/test/Driver/linker-options.f90 index 07f967b4bac5d..55909fe034394 100644 --- a/flang/test/Driver/linker-options.f90 +++ b/flang/test/Driver/linker-options.f90 @@ -25,10 +25,10 @@ ! 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 +! 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 \ @@ -60,19 +60,19 @@ ! ! On FreeBSD, -pie is not passed to the linker, but can be forced. ! RUN: %flang -target amd64-pc-freebsd -### %s 2>&1 \ -! RUN: | FileCheck %s --check-prefix=NO-PIE +! RUN: | FileCheck %s --check-prefix=PIE ! RUN: %flang -target i386-pc-freebsd -### %s 2>&1 \ -! RUN: | FileCheck %s --check-prefix=NO-PIE +! RUN: | FileCheck %s --check-prefix=PIE ! RUN: %flang -target aarch64-unknown-freebsd -### %s 2>&1 \ -! RUN: | FileCheck %s --check-prefix=NO-PIE +! RUN: | FileCheck %s --check-prefix=PIE ! RUN: %flang -target arm-unknown-freebsd -### %s 2>&1 \ -! RUN: | FileCheck %s --check-prefix=NO-PIE +! RUN: | FileCheck %s --check-prefix=PIE ! RUN: %flang -target powerpc-unknown-freebsd -### %s 2>&1 \ -! RUN: | FileCheck %s --check-prefix=NO-PIE +! RUN: | FileCheck %s --check-prefix=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 i386-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 \ diff --git a/flang/test/Driver/pic-flags.f90 b/flang/test/Driver/pic-flags.f90 index 5a06163c485cd..34a13ed228101 100644 --- a/flang/test/Driver/pic-flags.f90 +++ b/flang/test/Driver/pic-flags.f90 @@ -1,5 +1,6 @@ ! RUN: %if aarch64-registered-target %{ %flang -v -S -emit-llvm -o - %s --target=aarch64-linux-gnu -fno-pie 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-STATIC,CHECK-STATIC-IR %} +! RUN: %if x86_64-registered-target && clang_default_pie_on_freebsd %{ %flang -v -S -emit-llvm -o - %s --target=x86_64-unknown-freebsd 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-PIE-LEVEL2,CHECK-PIE-LEVEL2-IR %} ! RUN: %if aarch64-registered-target && clang_default_pie_on_linux %{ %flang -v -S -emit-llvm -o - %s --target=aarch64-linux-gnu 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-PIE-LEVEL2,CHECK-PIE-LEVEL2-IR %} ! RUN: %if aarch64-registered-target %{ %flang -v -S -emit-llvm -o - %s --target=aarch64-linux-gnu -fpie 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-PIE-LEVEL1,CHECK-PIE-LEVEL1-IR %} ! RUN: %if aarch64-registered-target %{ %flang -v -S -emit-llvm -o - %s --target=aarch64-linux-gnu -fPIE 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-PIE-LEVEL2,CHECK-PIE-LEVEL2-IR %} diff --git a/llvm/utils/gn/secondary/clang/include/clang/Config/BUILD.gn b/llvm/utils/gn/secondary/clang/include/clang/Config/BUILD.gn index f8196d1b248e5..c5b30e30fe76d 100644 --- a/llvm/utils/gn/secondary/clang/include/clang/Config/BUILD.gn +++ b/llvm/utils/gn/secondary/clang/include/clang/Config/BUILD.gn @@ -8,6 +8,7 @@ write_cmake_config("Config") { output = "$target_gen_dir/config.h" values = [ "BUG_REPORT_URL=https://github.com/llvm/llvm-project/issues/", + "CLANG_DEFAULT_PIE_ON_FREEBSD=1", "CLANG_DEFAULT_PIE_ON_LINUX=1", "CLANG_DEFAULT_LINKER=", "CLANG_DEFAULT_CXX_STDLIB=", diff --git a/llvm/utils/gn/secondary/clang/test/BUILD.gn b/llvm/utils/gn/secondary/clang/test/BUILD.gn index 73f3bd020a1e0..1da3a1a3062b2 100644 --- a/llvm/utils/gn/secondary/clang/test/BUILD.gn +++ b/llvm/utils/gn/secondary/clang/test/BUILD.gn @@ -52,6 +52,7 @@ write_lit_config("lit_site_cfg") { "CLANG_BUILD_EXAMPLES=0", "CLANG_BUILT_STANDALONE=0", "CLANG_DEFAULT_CXX_STDLIB=", # Empty string means "default value" here. + "CLANG_DEFAULT_PIE_ON_FREEBSD=0", "CLANG_DEFAULT_PIE_ON_LINUX=0", "CLANG_ENABLE_CIR=0", "CLANG_ENABLE_OBJC_REWRITER=0", diff --git a/utils/bazel/llvm-project-overlay/clang/include/clang/Config/config.h b/utils/bazel/llvm-project-overlay/clang/include/clang/Config/config.h index 7f7308f338966..0f01ac0e9ecbc 100644 --- a/utils/bazel/llvm-project-overlay/clang/include/clang/Config/config.h +++ b/utils/bazel/llvm-project-overlay/clang/include/clang/Config/config.h @@ -22,6 +22,9 @@ /* Bug report URL. */ #define BUG_REPORT_URL "https://github.com/llvm/llvm-project/issues/" +/* Default to -fPIE and -pie on FreeBSD. */ +#define CLANG_DEFAULT_PIE_ON_FREEBSD 1 + /* Default to -fPIE and -pie on Linux. */ #define CLANG_DEFAULT_PIE_ON_LINUX 1 >From ca4b04d4179b7f9e2517e2cd4e87571d164cc100 Mon Sep 17 00:00:00 2001 From: ShengYi Hung <[email protected]> Date: Wed, 15 Jul 2026 18:03:55 +0800 Subject: [PATCH 2/4] fixup! [Clang] Switch to Default PIE on FreeBSD --- clang/test/Driver/freebsd-default-pie.c | 7 - clang/test/Driver/freebsd-mips-as-pie.c | 94 -------- clang/test/Driver/freebsd-mips-as.c | 6 +- clang/test/Driver/freebsd-pie.c | 275 ------------------------ clang/test/Driver/freebsd.c | 108 +++++++++- 5 files changed, 103 insertions(+), 387 deletions(-) delete mode 100644 clang/test/Driver/freebsd-default-pie.c delete mode 100644 clang/test/Driver/freebsd-mips-as-pie.c delete mode 100644 clang/test/Driver/freebsd-pie.c diff --git a/clang/test/Driver/freebsd-default-pie.c b/clang/test/Driver/freebsd-default-pie.c deleted file mode 100644 index 58e7b3a0b0efe..0000000000000 --- a/clang/test/Driver/freebsd-default-pie.c +++ /dev/null @@ -1,7 +0,0 @@ -// REQUIRES: default-pie-on-freebsd -/// Test -DCLANG_DEFAULT_PIE_ON_FREEBSD=on. - -// RUN: %clang -### --target=x86_64-unknown-freebsd %s 2>&1 | FileCheck %s --check-prefix=PIE2 - -// PIE2: "-mrelocation-model" "pic" "-pic-level" "2" "-pic-is-pie" -// PIE2: "-pie" diff --git a/clang/test/Driver/freebsd-mips-as-pie.c b/clang/test/Driver/freebsd-mips-as-pie.c deleted file mode 100644 index 86fb0bc6eecd5..0000000000000 --- a/clang/test/Driver/freebsd-mips-as-pie.c +++ /dev/null @@ -1,94 +0,0 @@ -// REQUIRES: default-pie-on-freebsd - -// Check passing options to the assembler for MIPS targets. -// -// RUN: %clang --target=mips-unknown-freebsd -### \ -// RUN: -no-integrated-as -fno-pic -c %s 2>&1 \ -// RUN: | FileCheck -check-prefix=MIPS32-EB-AS %s -// MIPS32-EB-AS: as{{(.exe)?}}" "-march" "mips2" "-mabi" "32" "-EB" -// MIPS32-EB-AS-NOT: "-KPIC" -// -// RUN: %clang --target=mips-unknown-freebsd -### \ -// RUN: -no-integrated-as -fPIC -c %s 2>&1 \ -// RUN: | FileCheck -check-prefix=MIPS32-EB-PIC %s -// MIPS32-EB-PIC: as{{(.exe)?}}" "-march" "mips2" "-mabi" "32" "-EB" -// MIPS32-EB-PIC: "-KPIC" -// -// RUN: %clang --target=mips-unknown-freebsd -### \ -// RUN: -no-integrated-as -fpic -c %s 2>&1 \ -// RUN: | FileCheck -check-prefix=MIPS32-EB-PIC-SMALL %s -// MIPS32-EB-PIC-SMALL: as{{(.exe)?}}" "-march" "mips2" "-mabi" "32" "-EB" -// MIPS32-EB-PIC-SMALL: "-KPIC" -// -// RUN: %clang --target=mips-unknown-freebsd -### \ -// RUN: -no-integrated-as -fPIE -c %s 2>&1 \ -// RUN: | FileCheck -check-prefix=MIPS32-EB-PIE %s -// MIPS32-EB-PIE: as{{(.exe)?}}" "-march" "mips2" "-mabi" "32" "-EB" -// MIPS32-EB-PIE: "-KPIC" -// -// RUN: %clang --target=mips-unknown-freebsd -### \ -// RUN: -no-integrated-as -fpie -c %s 2>&1 \ -// RUN: | FileCheck -check-prefix=MIPS32-EB-PIE-SMALL %s -// MIPS32-EB-PIE-SMALL: as{{(.exe)?}}" "-march" "mips2" "-mabi" "32" "-EB" -// MIPS32-EB-PIE-SMALL: "-KPIC" -// -// RUN: %clang --target=mipsel-unknown-freebsd -### \ -// RUN: -no-integrated-as -c %s 2>&1 \ -// RUN: | FileCheck -check-prefix=MIPS32-DEF-EL-AS %s -// MIPS32-DEF-EL-AS: as{{(.exe)?}}" "-march" "mips2" "-mabi" "32" "-EL" -// -// RUN: %clang --target=mips64-unknown-freebsd -### \ -// RUN: -no-integrated-as -c %s 2>&1 \ -// RUN: | FileCheck -check-prefix=MIPS64-EB-AS %s -// MIPS64-EB-AS: as{{(.exe)?}}" "-march" "mips3" "-mabi" "64" "-EB" -// -// RUN: %clang --target=mips64el-unknown-freebsd -### \ -// RUN: -no-integrated-as -c %s 2>&1 \ -// RUN: | FileCheck -check-prefix=MIPS64-DEF-EL-AS %s -// MIPS64-DEF-EL-AS: as{{(.exe)?}}" "-march" "mips3" "-mabi" "64" "-EL" -// -// RUN: %clang --target=mips64-unknown-freebsd -mabi=n32 -### \ -// RUN: -no-integrated-as -c %s 2>&1 \ -// RUN: | FileCheck -check-prefix=MIPS-N32 %s -// MIPS-N32: as{{(.exe)?}}" "-march" "mips3" "-mabi" "n32" "-EB" -// -// RUN: %clang --target=mipsel-unknown-freebsd -mabi=32 -### \ -// RUN: -no-integrated-as -c %s 2>&1 \ -// RUN: | FileCheck -check-prefix=MIPS32-EL-AS %s -// MIPS32-EL-AS: as{{(.exe)?}}" "-march" "mips2" "-mabi" "32" "-EL" -// -// RUN: %clang --target=mips64el-unknown-freebsd -mabi=64 -### \ -// RUN: -no-integrated-as -c %s 2>&1 \ -// RUN: | FileCheck -check-prefix=MIPS64-EL-AS %s -// MIPS64-EL-AS: as{{(.exe)?}}" "-march" "mips3" "-mabi" "64" "-EL" -// -// RUN: %clang --target=mips-linux-freebsd -march=mips32r2 -### \ -// RUN: -no-integrated-as -c %s 2>&1 \ -// RUN: | FileCheck -check-prefix=MIPS-32R2 %s -// MIPS-32R2: as{{(.exe)?}}" "-march" "mips32r2" "-mabi" "32" "-EB" -// -// RUN: %clang --target=mips-unknown-freebsd -mips32 -### \ -// RUN: -no-integrated-as -c %s 2>&1 \ -// RUN: | FileCheck -check-prefix=MIPS-ALIAS-32 %s -// MIPS-ALIAS-32: as{{(.exe)?}}" "-march" "mips32" "-mabi" "32" "-EB" -// -// RUN: %clang --target=mips-unknown-freebsd -mips32r2 -### \ -// RUN: -no-integrated-as -c %s 2>&1 \ -// RUN: | FileCheck -check-prefix=MIPS-ALIAS-32R2 %s -// MIPS-ALIAS-32R2: as{{(.exe)?}}" "-march" "mips32r2" "-mabi" "32" "-EB" -// -// RUN: %clang --target=mips64-unknown-freebsd -mips64 -### \ -// RUN: -no-integrated-as -c %s 2>&1 \ -// RUN: | FileCheck -check-prefix=MIPS-ALIAS-64 %s -// MIPS-ALIAS-64: as{{(.exe)?}}" "-march" "mips64" "-mabi" "64" "-EB" -// -// RUN: %clang --target=mips64-unknown-freebsd -mips64r2 -### \ -// RUN: -no-integrated-as -c %s 2>&1 \ -// RUN: | FileCheck -check-prefix=MIPS-ALIAS-64R2 %s -// MIPS-ALIAS-64R2: as{{(.exe)?}}" "-march" "mips64r2" "-mabi" "64" "-EB" -// -// RUN: %clang --target=mips-unknown-freebsd -### \ -// RUN: -no-integrated-as -fno-pic -G0 -c %s 2>&1 \ -// RUN: | FileCheck -check-prefix=MIPS32-EB-AS-G0 %s -// MIPS32-EB-AS-G0: as{{(.exe)?}}" "-march" "mips2" "-mabi" "32" "-EB" "-G0" -// MIPS32-EB-AS-G0-NOT: "-KPIC" diff --git a/clang/test/Driver/freebsd-mips-as.c b/clang/test/Driver/freebsd-mips-as.c index 2bc5fc72428b9..a0872e49cb99d 100644 --- a/clang/test/Driver/freebsd-mips-as.c +++ b/clang/test/Driver/freebsd-mips-as.c @@ -1,9 +1,7 @@ -// REQUIRES: !default-pie-on-freebsd - // Check passing options to the assembler for MIPS targets. // // RUN: %clang --target=mips-unknown-freebsd -### \ -// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: -no-integrated-as %if default-pie-on-freebsd %{ -fno-pic %} -c %s 2>&1 \ // RUN: | FileCheck -check-prefix=MIPS32-EB-AS %s // MIPS32-EB-AS: as{{(.exe)?}}" "-march" "mips2" "-mabi" "32" "-EB" // MIPS32-EB-AS-NOT: "-KPIC" @@ -88,7 +86,7 @@ // MIPS-ALIAS-64R2: as{{(.exe)?}}" "-march" "mips64r2" "-mabi" "64" "-EB" // // RUN: %clang --target=mips-unknown-freebsd -### \ -// RUN: -no-integrated-as -G0 -c %s 2>&1 \ +// RUN: -no-integrated-as %if default-pie-on-freebsd %{ -fno-pic %} -G0 -c %s 2>&1 \ // RUN: | FileCheck -check-prefix=MIPS32-EB-AS-G0 %s // MIPS32-EB-AS-G0: as{{(.exe)?}}" "-march" "mips2" "-mabi" "32" "-EB" "-G0" // MIPS32-EB-AS-G0-NOT: "-KPIC" diff --git a/clang/test/Driver/freebsd-pie.c b/clang/test/Driver/freebsd-pie.c deleted file mode 100644 index d513617a08796..0000000000000 --- a/clang/test/Driver/freebsd-pie.c +++ /dev/null @@ -1,275 +0,0 @@ -// REQUIRES: default-pie-on-freebsd - -// RUN: %clang \ -// RUN: --target=aarch64-pc-freebsd11 %s \ -// RUN: --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:[^"]+]]" "-pie" -// CHECK-ARM64: "--eh-frame-hdr" "-dynamic-linker" "{{.*}}ld-elf{{.*}}" "--enable-new-dtags" "-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 -no-pie \ -// RUN: --target=aarch64-pc-freebsd11 %s \ -// RUN: --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 \ -// RUN: --target=powerpc-pc-freebsd %s \ -// RUN: --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" "-dynamic-linker" "{{.*}}ld-elf{{.*}}" "--enable-new-dtags" "-m" "elf32ppc_fbsd" "-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 -no-pie \ -// RUN: --target=powerpc-pc-freebsd %s \ -// RUN: --sysroot=%S/Inputs/basic_freebsd_tree -### 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-PPC-NOPIE %s -// CHECK-PPC-NOPIE: "-cc1" "-triple" "powerpc-pc-freebsd" -// CHECK-PPC-NOPIE: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" -// CHECK-PPC-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 \ -// RUN: --target=powerpc64-pc-freebsd %s \ -// RUN: --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{{.*}}" "--enable-new-dtags" "-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 -no-pie \ -// RUN: --target=powerpc64-pc-freebsd %s \ -// RUN: --sysroot=%S/Inputs/basic_freebsd64_tree -### 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-PPC64-NOPIE %s -// CHECK-PPC64-NOPIE: "-cc1" "-triple" "powerpc64-pc-freebsd" -// CHECK-PPC64-NOPIE: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" -// CHECK-PPC64-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 \ -// RUN: --target=powerpc64le-unknown-freebsd13 %s \ -// RUN: --sysroot=%S/Inputs/basic_freebsd64_tree -### 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-PPC64LE %s -// CHECK-PPC64LE: "-cc1" "-triple" "powerpc64le-unknown-freebsd13" -// CHECK-PPC64LE: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" -// CHECK-PPC64LE: "--eh-frame-hdr" "-dynamic-linker" "{{.*}}ld-elf{{.*}}" "--enable-new-dtags" "-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 -no-pie \ -// RUN: --target=powerpc64le-unknown-freebsd13 %s \ -// RUN: --sysroot=%S/Inputs/basic_freebsd64_tree -### 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-PPC64LE-NOPIE %s -// CHECK-PPC64LE-NOPIE: "-cc1" "-triple" "powerpc64le-unknown-freebsd13" -// CHECK-PPC64LE-NOPIE: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" -// CHECK-PPC64LE-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" - - -// -// Check that -m32 properly adjusts the toolchain flags. -// -// RUN: %clang --target=x86_64-pc-freebsd -m32 %s \ -// RUN: --sysroot=%S/Inputs/multiarch_freebsd64_tree -### 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-LIB32 %s -// CHECK-LIB32: "-cc1" "-triple" "i386-pc-freebsd" -// CHECK-LIB32: ld{{.*}}" {{.*}} "-m" "elf_i386_fbsd" -// -// RUN: %clang --target=x86_64-pc-freebsd -m32 %s 2>&1 \ -// RUN: --sysroot=%S/Inputs/multiarch_freebsd64_tree -print-search-dirs 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-LIB32PATHS %s -// CHECK-LIB32PATHS: libraries: ={{.*:?}}/usr/lib32 -// -// Check that O32 MIPS uses /usr/lib32 on a 64-bit tree. -// -// RUN: %clang --target=mips-freebsd12 %s \ -// RUN: --sysroot=%S/Inputs/multiarch_freebsd64_tree -print-search-dirs 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-LIB32PATHS %s -// -// Check that MIPS passes the correct linker emulation. -// -// RUN: %clang --target=mips-freebsd -### %s %s 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-MIPS-LD %s -// CHECK-MIPS-LD: ld{{.*}}" {{.*}} "-m" "elf32btsmip_fbsd" -// RUN: %clang --target=mipsel-freebsd -### %s %s 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-MIPSEL-LD %s -// CHECK-MIPSEL-LD: ld{{.*}}" {{.*}} "-m" "elf32ltsmip_fbsd" -// RUN: %clang --target=mips64-freebsd -### %s %s 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-MIPS64-LD %s -// CHECK-MIPS64-LD: ld{{.*}}" {{.*}} "-m" "elf64btsmip_fbsd" -// RUN: %clang --target=mips64el-freebsd -### %s %s 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-MIPS64EL-LD %s -// CHECK-MIPS64EL-LD: ld{{.*}}" {{.*}} "-m" "elf64ltsmip_fbsd" -// RUN: %clang --target=mips64-freebsd -mabi=n32 -### %s %s 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-MIPSN32-LD %s -// CHECK-MIPSN32-LD: ld{{.*}}" {{.*}} "-m" "elf32btsmipn32_fbsd" -// RUN: %clang --target=mips64el-freebsd -mabi=n32 -### %s %s 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-MIPSN32EL-LD %s -// CHECK-MIPSN32EL-LD: ld{{.*}}" {{.*}} "-m" "elf32ltsmipn32_fbsd" -// -// Check that RISC-V passes the correct linker emulation. -// -// RUN: %clang --target=riscv64-freebsd -### %s %s 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-RV64I-LD %s -// CHECK-RV64I-LD: ld{{.*}}" {{.*}} "-m" "elf64lriscv" -// -// Check that LoongArch passes the correct linker emulation. -// -// RUN: %clang --target=loongarch64-freebsd -### %s %s 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-LA64-LD %s -// CHECK-LA64-LD: ld{{.*}}" {{.*}} "-m" "elf64loongarch" -// -// Check options passed to the linker on LoongArch -// -// RUN: %clang --target=loongarch64-freebsd -mno-relax -### %s %s 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-LA64-LD-OPTS %s -// CHECK-LA64-LD-OPTS: ld{{.*}}" {{.*}} "-X" "--no-relax" -// -// Check that the new linker flags are passed to FreeBSD -// RUN: %clang --target=x86_64-pc-freebsd10.0 -m32 %s \ -// RUN: --sysroot=%S/Inputs/multiarch_freebsd64_tree -### 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-LDFLAGS_HASH %s -// RUN: %clang --target=x86_64-pc-freebsd -m32 %s \ -// RUN: --sysroot=%S/Inputs/multiarch_freebsd64_tree -### 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-LDFLAGS_HASH %s -// CHECK-LDFLAGS_HASH: --hash-style=both -// CHECK-LDFLAGS_HASH: --enable-new-dtags -// -// Check that we do not pass --hash-style=gnu and --hash-style=both to linker -// and provide correct path to the dynamic linker for MIPS platforms. -// Also verify that we tell the assembler to target the right ISA and ABI. -// RUN: %clang -### %s 2>&1 \ -// RUN: --target=mips-unknown-freebsd10.0 \ -// RUN: | FileCheck --check-prefix=CHECK-MIPS %s -// CHECK-MIPS: {{[/\\"]}}ld{{[^" ]*}}" -// CHECK-MIPS: "-dynamic-linker" "{{.*}}/libexec/ld-elf.so.1" -// CHECK-MIPS-NOT: "--hash-style={{gnu|both}}" -// RUN: %clang -### %s 2>&1 \ -// RUN: --target=mipsel-unknown-freebsd10.0 \ -// RUN: | FileCheck --check-prefix=CHECK-MIPSEL %s -// CHECK-MIPSEL: {{[/\\"]}}ld{{[^" ]*}}" -// CHECK-MIPSEL: "-dynamic-linker" "{{.*}}/libexec/ld-elf.so.1" -// CHECK-MIPSEL-NOT: "--hash-style={{gnu|both}}" -// RUN: %clang -### %s 2>&1 \ -// RUN: --target=mips64-unknown-freebsd10.0 \ -// RUN: | FileCheck --check-prefix=CHECK-MIPS64 %s -// CHECK-MIPS64: {{[/\\"]}}ld{{[^" ]*}}" -// CHECK-MIPS64: "-dynamic-linker" "{{.*}}/libexec/ld-elf.so.1" -// CHECK-MIPS64-NOT: "--hash-style={{gnu|both}}" -// RUN: %clang -### %s 2>&1 \ -// RUN: --target=mips64el-unknown-freebsd10.0 \ -// RUN: | FileCheck --check-prefix=CHECK-MIPS64EL %s -// CHECK-MIPS64EL: {{[/\\"]}}ld{{[^" ]*}}" -// CHECK-MIPS64EL: "-dynamic-linker" "{{.*}}/libexec/ld-elf.so.1" -// CHECK-MIPS64EL-NOT: "--hash-style={{gnu|both}}" - -// RUN: %clang --target=x86_64-pc-freebsd -static %s \ -// RUN: --sysroot=%S/Inputs/multiarch_freebsd64_tree -### 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-STATIC %s -// CHECK-STATIC: ld{{.*}}" "--eh-frame-hdr" "-Bstatic" -// CHECK-STATIC: crt1.o -// CHECK-STATIC: crtbeginT.o - -// RUN: %clang --target=x86_64-pc-freebsd -shared %s \ -// RUN: --sysroot=%S/Inputs/multiarch_freebsd64_tree -### 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-SHARED %s -// CHECK-SHARED: ld{{.*}}" "--eh-frame-hdr" "-shared" -// CHECK-SHARED: crti.o -// CHECK-SHARED: crtbeginS.o - -// RUN: %clang --target=x86_64-pc-freebsd -pie %s \ -// RUN: --sysroot=%S/Inputs/multiarch_freebsd64_tree -### 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-PIE %s -// CHECK-PIE: pie -// 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 %s -// CHECK-NORMAL: Scrt1.o -// CHECK-NORMAL: 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 - -// RUN: %clang -### %s --target=arm-unknown-freebsd10.0 -no-integrated-as 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-ARM %s -// CHECK-ARM-NOT: "-cc1"{{.*}}" "-exception-model=sjlj" -// CHECK-ARM: as{{.*}}" "-mfpu=softvfp"{{.*}}"-meabi=5" -// CHECK-ARM-NOT: as{{.*}}" "-mfpu=vfp" -// CHECK-ARM-NOT: as{{.*}}" "-matpcs" - -// RUN: %clang -### %s --target=arm-gnueabi-freebsd10.0 -no-integrated-as 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-ARM-EABI %s -// CHECK-ARM-EABI-NOT: "-cc1"{{.*}}" "-exception-model=sjlj" -// CHECK-ARM-EABI: as{{.*}}" "-mfpu=softvfp" "-meabi=5" -// CHECK-ARM-EABI-NOT: as{{.*}}" "-mfpu=vfp" -// CHECK-ARM-EABI-NOT: as{{.*}}" "-matpcs" - -// RUN: %clang -### %s --target=arm-gnueabihf-freebsd10.0 -no-integrated-as 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-ARM-EABIHF %s -// CHECK-ARM-EABIHF-NOT: "-cc1"{{.*}}" "-exception-model=sjlj" -// CHECK-ARM-EABIHF: as{{.*}}" "-mfpu=vfp" "-meabi=5" -// CHECK-ARM-EABIHF-NOT: as{{.*}}" "-mfpu=softvfp" -// CHECK-ARM-EABIHF-NOT: as{{.*}}" "-matpcs" - -// RUN: %clang --target=sparc64-unknown-freebsd -### %s -fpic -no-integrated-as 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-SPARC-PIC %s -// CHECK-SPARC-PIC: as{{.*}}" "-KPIC - -// RUN: %clang -mcpu=ultrasparc --target=sparc64-unknown-freebsd -### %s -no-integrated-as 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-SPARC-CPU %s -// CHECK-SPARC-CPU: cc1{{.*}}" "-target-cpu" "ultrasparc" -// CHECK-SPARC-CPU: as{{.*}}" "-Av9a - -// Check that -G flags are passed to the linker for mips -// RUN: %clang --target=mips-unknown-freebsd -### %s -G0 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-MIPS-G %s -// CHECK-MIPS-G: ld{{.*}}" "-G0" - -// Check CPU type for MIPS -// RUN: %clang --target=mips-unknown-freebsd -### -c %s 2>&1 \ -// RUN: | FileCheck -check-prefix=CHECK-MIPS-CPU %s -// RUN: %clang --target=mipsel-unknown-freebsd -### -c %s 2>&1 \ -// RUN: | FileCheck -check-prefix=CHECK-MIPS-CPU %s -// CHECK-MIPS-CPU: "-target-cpu" "mips2" - -// Check CPU type for MIPS64 -// RUN: %clang --target=mips64-unknown-freebsd -### -c %s 2>&1 \ -// RUN: | FileCheck -check-prefix=CHECK-MIPS64-CPU %s -// RUN: %clang --target=mips64el-unknown-freebsd -### -c %s 2>&1 \ -// RUN: | FileCheck -check-prefix=CHECK-MIPS64-CPU %s -// CHECK-MIPS64-CPU: "-target-cpu" "mips3" - -// RUN: %clang --target=ppc64-unknown-freebsd13.0 -### -S %s 2>&1 | \ -// RUN: FileCheck -check-prefix=PPC64-MUNWIND %s -// PPC64-MUNWIND: "-funwind-tables=2" - -/// -r suppresses -dynamic-linker, default -l and crt*.o like -nostdlib. -// RUN: %clang -### %s --target=aarch64-pc-freebsd11 -r \ -// RUN: --sysroot=%S/Inputs/basic_freebsd64_tree 2>&1 | FileCheck %s --check-prefix=RELOCATABLE -// RELOCATABLE: "-r" -// RELOCATABLE-NOT: "-dynamic-linker" -// RELOCATABLE-NOT: "-l -// RELOCATABLE-NOT: crt{{[^./\\]+}}.o - -// Check that the -X and --no-relax flags are passed to the linker on riscv64 -// RUN: %clang --target=riscv64-unknown-freebsd -mno-relax -### %s 2>&1 \ -// RUN: | FileCheck -check-prefix=RISCV64-FLAGS %s -// RISCV64-FLAGS: "-X" "--no-relax" - -/// -rdynamic becomes -export-dynamic; -s, -t, and -T are forwarded. -// RUN: %clang --target=x86_64-unknown-freebsd -rdynamic -s -t -T a.lds -### %s \ -// RUN: 2>&1 | FileCheck --check-prefix=PASS %s -// PASS: "--eh-frame-hdr" -// PASS-SAME: "-export-dynamic" -// PASS-SAME: "-s" "-t" "-T" "a.lds" - -// RUN: %clang -target riscv32be-unknown-freebsd -### -c %s 2>&1 | FileCheck %s --check-prefix=RV32BE -// RV32BE-NOT: elf32briscv diff --git a/clang/test/Driver/freebsd.c b/clang/test/Driver/freebsd.c index 2c56e08382b6b..0caff10ca5e6c 100644 --- a/clang/test/Driver/freebsd.c +++ b/clang/test/Driver/freebsd.c @@ -1,37 +1,109 @@ -// REQUIRES: !default-pie-on-freebsd - // RUN: %clang \ // RUN: --target=aarch64-pc-freebsd11 %s \ // RUN: --sysroot=%S/Inputs/basic_freebsd64_tree -### 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-ARM64 %s +// RUN: %if default-pie-on-freebsd %{ | FileCheck --check-prefix=CHECK-ARM64-PIE %s %} \ +// RUN: %else %{ | 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" + +// CHECK-ARM64-PIE: "-cc1" "-triple" "aarch64-pc-freebsd11" +// CHECK-ARM64-PIE: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" "-pie" +// CHECK-ARM64-PIE: "--eh-frame-hdr" "-dynamic-linker" "{{.*}}ld-elf{{.*}}" "--enable-new-dtags" "-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 -pie \ +// RUN: --target=aarch64-pc-freebsd11 %s \ +// RUN: --sysroot=%S/Inputs/basic_freebsd64_tree -### 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-ARM64-PIE %s + +// RUN: %clang -no-pie \ +// RUN: --target=aarch64-pc-freebsd11 %s \ +// RUN: --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 \ // RUN: --target=powerpc-pc-freebsd %s \ // RUN: --sysroot=%S/Inputs/basic_freebsd_tree -### 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-PPC %s +// RUN: %if default-pie-on-freebsd %{ | FileCheck --check-prefix=CHECK-PPC-PIE %s %} \ +// RUN: %else %{ | FileCheck --check-prefix=CHECK-PPC %s %} // CHECK-PPC: "-cc1" "-triple" "powerpc-pc-freebsd" // CHECK-PPC: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" // CHECK-PPC: "--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-PPC-PIE: "-cc1" "-triple" "powerpc-pc-freebsd" +// CHECK-PPC-PIE: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" "-pie" +// CHECK-PPC-PIE: "--eh-frame-hdr" "-dynamic-linker" "{{.*}}ld-elf{{.*}}" "--enable-new-dtags" "-m" "elf32ppc_fbsd" "-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 -pie \ +// RUN: --target=powerpc-pc-freebsd %s \ +// RUN: --sysroot=%S/Inputs/basic_freebsd_tree -### 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-PPC-PIE %s + +// RUN: %clang -no-pie \ +// RUN: --target=powerpc-pc-freebsd %s \ +// RUN: --sysroot=%S/Inputs/basic_freebsd_tree -### 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-PPC-NOPIE %s +// CHECK-PPC-NOPIE: "-cc1" "-triple" "powerpc-pc-freebsd" +// CHECK-PPC-NOPIE: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" +// CHECK-PPC-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 \ // RUN: --target=powerpc64-pc-freebsd %s \ // RUN: --sysroot=%S/Inputs/basic_freebsd64_tree -### 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-PPC64 %s +// RUN: %if default-pie-on-freebsd %{ | FileCheck --check-prefix=CHECK-PPC64-PIE %s %} \ +// RUN: %else %{ | 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-PIE: "-cc1" "-triple" "powerpc64-pc-freebsd" +// CHECK-PPC64-PIE: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" "-pie" +// CHECK-PPC64-PIE: "--eh-frame-hdr" "-dynamic-linker" "{{.*}}ld-elf{{.*}}" "--enable-new-dtags" "-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 -pie \ +// RUN: --target=powerpc64-pc-freebsd %s \ +// RUN: --sysroot=%S/Inputs/basic_freebsd64_tree -### 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-PPC64-PIE %s + +// RUN: %clang -no-pie \ +// RUN: --target=powerpc64-pc-freebsd %s \ +// RUN: --sysroot=%S/Inputs/basic_freebsd64_tree -### 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-PPC64-NOPIE %s +// CHECK-PPC64-NOPIE: "-cc1" "-triple" "powerpc64-pc-freebsd" +// CHECK-PPC64-NOPIE: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" +// CHECK-PPC64-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 \ // RUN: --target=powerpc64le-unknown-freebsd13 %s \ // RUN: --sysroot=%S/Inputs/basic_freebsd64_tree -### 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-PPC64LE %s +// RUN: %if default-pie-on-freebsd %{ | FileCheck --check-prefix=CHECK-PPC64LE-PIE %s %} \ +// RUN: %else %{ | FileCheck --check-prefix=CHECK-PPC64LE %s %} // CHECK-PPC64LE: "-cc1" "-triple" "powerpc64le-unknown-freebsd13" // CHECK-PPC64LE: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" // CHECK-PPC64LE: "--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-PPC64LE-PIE: "-cc1" "-triple" "powerpc64le-unknown-freebsd13" +// CHECK-PPC64LE-PIE: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" "-pie" +// CHECK-PPC64LE-PIE: "--eh-frame-hdr" "-dynamic-linker" "{{.*}}ld-elf{{.*}}" "--enable-new-dtags" "-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 -pie \ +// RUN: --target=powerpc64le-unknown-freebsd13 %s \ +// RUN: --sysroot=%S/Inputs/basic_freebsd64_tree -### 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-PPC64LE-PIE %s + +// RUN: %clang -no-pie \ +// RUN: --target=powerpc64le-unknown-freebsd13 %s \ +// RUN: --sysroot=%S/Inputs/basic_freebsd64_tree -### 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-PPC64LE-NOPIE %s +// CHECK-PPC64LE-NOPIE: "-cc1" "-triple" "powerpc64le-unknown-freebsd13" +// CHECK-PPC64LE-NOPIE: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" +// CHECK-PPC64LE-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" + // // Check that -m32 properly adjusts the toolchain flags. // @@ -152,10 +224,32 @@ // RUN: %clang --target=x86_64-pc-freebsd %s \ // RUN: --sysroot=%S/Inputs/multiarch_freebsd64_tree -### 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-NORMAL %s +// RUN: %if default-pie-on-freebsd %{ | FileCheck --check-prefix=CHECK-NORMAL-PIE %s %} \ +// RUN: %else %{ | FileCheck --check-prefix=CHECK-NORMAL %s %} // CHECK-NORMAL: crt1.o // CHECK-NORMAL: crtbegin.o +// 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 + +/// Test -DCLANG_DEFAULT_PIE_ON_FREEBSD=on. +// RUN: %clang -### --target=x86_64-unknown-freebsd %s 2>&1 \ +// RUN: %if default-pie-on-freebsd %{ | FileCheck --check-prefix=PIE2 %s %} \ +// RUN: %else %{ | FileCheck --check-prefix=PIE2-OFF %s %} + +// PIE2: "-mrelocation-model" "pic" "-pic-level" "2" "-pic-is-pie" +// PIE2: "-pie" + +// PIE2-OFF: "-mrelocation-model" "static" +// PIE2-OFF-NOT: "-pic-is-pie" +// PIE2-OFF-NOT: "-pie" + // RUN: %clang -### %s --target=arm-unknown-freebsd10.0 -no-integrated-as 2>&1 \ // RUN: | FileCheck --check-prefix=CHECK-ARM %s // CHECK-ARM-NOT: "-cc1"{{.*}}" "-exception-model=sjlj" >From 40be4f9dd9c4dc68553a02929023e60706c28bf5 Mon Sep 17 00:00:00 2001 From: ShengYi Hung <[email protected]> Date: Thu, 16 Jul 2026 13:47:45 +0800 Subject: [PATCH 3/4] fixup! [Clang] Switch to Default PIE on FreeBSD --- clang/CMakeLists.txt | 2 - clang/include/clang/Config/config.h.cmake | 3 - clang/lib/Driver/ToolChains/FreeBSD.cpp | 12 +++- clang/test/CMakeLists.txt | 1 - clang/test/Driver/freebsd-mips-as.c | 4 +- clang/test/Driver/freebsd.c | 56 +++++++++---------- ...reebsd.hip => hip-fpie-option-freebsd.hip} | 2 - clang/test/lit.cfg.py | 3 - clang/test/lit.site.cfg.py.in | 1 - flang/test/Driver/linker-options.f90 | 4 +- flang/test/Driver/pic-flags.f90 | 2 +- .../clang/include/clang/Config/BUILD.gn | 1 - llvm/utils/gn/secondary/clang/test/BUILD.gn | 1 - .../clang/include/clang/Config/config.h | 3 - 14 files changed, 41 insertions(+), 54 deletions(-) rename clang/test/Driver/{hie-fpie-option-freebsd.hip => hip-fpie-option-freebsd.hip} (97%) diff --git a/clang/CMakeLists.txt b/clang/CMakeLists.txt index 7617e21157903..20276a034d50a 100644 --- a/clang/CMakeLists.txt +++ b/clang/CMakeLists.txt @@ -286,8 +286,6 @@ set(PPC_LINUX_DEFAULT_IEEELONGDOUBLE OFF CACHE BOOL set(CLANG_SPAWN_CC1 OFF CACHE BOOL "Whether clang should use a new process for the CC1 invocation") -option(CLANG_DEFAULT_PIE_ON_FREEBSD "Default to -fPIE and -pie on freebsd" ON) - option(CLANG_DEFAULT_PIE_ON_LINUX "Default to -fPIE and -pie on linux-gnu" ON) set(CLANG_DEFAULT_LINKER "" CACHE STRING diff --git a/clang/include/clang/Config/config.h.cmake b/clang/include/clang/Config/config.h.cmake index e92d449170908..11b4096726f67 100644 --- a/clang/include/clang/Config/config.h.cmake +++ b/clang/include/clang/Config/config.h.cmake @@ -8,9 +8,6 @@ /* Bug report URL. */ #define BUG_REPORT_URL "${BUG_REPORT_URL}" -/* Default to -fPIE and -pie on FreeBSD. */ -#cmakedefine01 CLANG_DEFAULT_PIE_ON_FREEBSD - /* Default to -fPIE and -pie on Linux. */ #cmakedefine01 CLANG_DEFAULT_PIE_ON_LINUX diff --git a/clang/lib/Driver/ToolChains/FreeBSD.cpp b/clang/lib/Driver/ToolChains/FreeBSD.cpp index 638a28bf4d60e..c728ff4e20a57 100644 --- a/clang/lib/Driver/ToolChains/FreeBSD.cpp +++ b/clang/lib/Driver/ToolChains/FreeBSD.cpp @@ -134,8 +134,10 @@ void freebsd::Linker::ConstructJob(Compilation &C, const JobAction &JA, const Driver &D = ToolChain.getDriver(); const llvm::Triple &Triple = ToolChain.getTriple(); const llvm::Triple::ArchType Arch = ToolChain.getArch(); - const bool IsPIE = Args.hasFlag(options::OPT_pie, options::OPT_no_pie, - ToolChain.isPIEDefault(Args)); + const bool IsPIE = + !Args.hasArg(options::OPT_shared, options::OPT_static, options::OPT_r) && + Args.hasFlag(options::OPT_pie, options::OPT_no_pie, + ToolChain.isPIEDefault(Args)); ArgStringList CmdArgs; // Silence warning for "clang -g foo.o -o foo" @@ -472,7 +474,11 @@ FreeBSD::getDefaultUnwindTableLevel(const ArgList &Args) const { } bool FreeBSD::isPIEDefault(const llvm::opt::ArgList &Args) const { - return CLANG_DEFAULT_PIE_ON_FREEBSD || 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 diff --git a/clang/test/CMakeLists.txt b/clang/test/CMakeLists.txt index d99b9a1e0602f..15170bbc2d1ed 100644 --- a/clang/test/CMakeLists.txt +++ b/clang/test/CMakeLists.txt @@ -5,7 +5,6 @@ llvm_canonicalize_cmake_booleans( BUILD_SHARED_LIBS CLANG_BUILD_EXAMPLES CLANG_BUILT_STANDALONE - CLANG_DEFAULT_PIE_ON_FREEBSD CLANG_DEFAULT_PIE_ON_LINUX CLANG_ENABLE_STATIC_ANALYZER CLANG_PLUGIN_SUPPORT diff --git a/clang/test/Driver/freebsd-mips-as.c b/clang/test/Driver/freebsd-mips-as.c index a0872e49cb99d..8585d791460c9 100644 --- a/clang/test/Driver/freebsd-mips-as.c +++ b/clang/test/Driver/freebsd-mips-as.c @@ -1,7 +1,7 @@ // Check passing options to the assembler for MIPS targets. // // RUN: %clang --target=mips-unknown-freebsd -### \ -// RUN: -no-integrated-as %if default-pie-on-freebsd %{ -fno-pic %} -c %s 2>&1 \ +// RUN: -no-integrated-as -fno-pic -c %s 2>&1 \ // RUN: | FileCheck -check-prefix=MIPS32-EB-AS %s // MIPS32-EB-AS: as{{(.exe)?}}" "-march" "mips2" "-mabi" "32" "-EB" // MIPS32-EB-AS-NOT: "-KPIC" @@ -86,7 +86,7 @@ // MIPS-ALIAS-64R2: as{{(.exe)?}}" "-march" "mips64r2" "-mabi" "64" "-EB" // // RUN: %clang --target=mips-unknown-freebsd -### \ -// RUN: -no-integrated-as %if default-pie-on-freebsd %{ -fno-pic %} -G0 -c %s 2>&1 \ +// RUN: -no-integrated-as -fno-pic -G0 -c %s 2>&1 \ // RUN: | FileCheck -check-prefix=MIPS32-EB-AS-G0 %s // MIPS32-EB-AS-G0: as{{(.exe)?}}" "-march" "mips2" "-mabi" "32" "-EB" "-G0" // MIPS32-EB-AS-G0-NOT: "-KPIC" diff --git a/clang/test/Driver/freebsd.c b/clang/test/Driver/freebsd.c index 0caff10ca5e6c..001ac08fb8669 100644 --- a/clang/test/Driver/freebsd.c +++ b/clang/test/Driver/freebsd.c @@ -1,13 +1,19 @@ +/// PIE is the default on FreeBSD >= 13.1 (and unversioned triples); earlier +/// releases default to non-PIE. +// RUN: %clang \ +// RUN: --target=aarch64-pc-freebsd14 %s \ +// RUN: --sysroot=%S/Inputs/basic_freebsd64_tree -### 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-ARM64-PIE %s + // RUN: %clang \ // RUN: --target=aarch64-pc-freebsd11 %s \ // RUN: --sysroot=%S/Inputs/basic_freebsd64_tree -### 2>&1 \ -// RUN: %if default-pie-on-freebsd %{ | FileCheck --check-prefix=CHECK-ARM64-PIE %s %} \ -// RUN: %else %{ | FileCheck --check-prefix=CHECK-ARM64 %s %} +// 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" -// CHECK-ARM64-PIE: "-cc1" "-triple" "aarch64-pc-freebsd11" +// CHECK-ARM64-PIE: "-cc1" "-triple" "aarch64-pc-freebsd{{[0-9]+}}" // CHECK-ARM64-PIE: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" "-pie" // CHECK-ARM64-PIE: "--eh-frame-hdr" "-dynamic-linker" "{{.*}}ld-elf{{.*}}" "--enable-new-dtags" "-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" @@ -28,11 +34,7 @@ // RUN: %clang \ // RUN: --target=powerpc-pc-freebsd %s \ // RUN: --sysroot=%S/Inputs/basic_freebsd_tree -### 2>&1 \ -// RUN: %if default-pie-on-freebsd %{ | FileCheck --check-prefix=CHECK-PPC-PIE %s %} \ -// RUN: %else %{ | FileCheck --check-prefix=CHECK-PPC %s %} -// CHECK-PPC: "-cc1" "-triple" "powerpc-pc-freebsd" -// CHECK-PPC: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" -// CHECK-PPC: "--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: | FileCheck --check-prefix=CHECK-PPC-PIE %s // CHECK-PPC-PIE: "-cc1" "-triple" "powerpc-pc-freebsd" // CHECK-PPC-PIE: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" "-pie" @@ -55,11 +57,7 @@ // RUN: %clang \ // RUN: --target=powerpc64-pc-freebsd %s \ // RUN: --sysroot=%S/Inputs/basic_freebsd64_tree -### 2>&1 \ -// RUN: %if default-pie-on-freebsd %{ | FileCheck --check-prefix=CHECK-PPC64-PIE %s %} \ -// RUN: %else %{ | 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" +// RUN: | FileCheck --check-prefix=CHECK-PPC64-PIE %s // CHECK-PPC64-PIE: "-cc1" "-triple" "powerpc64-pc-freebsd" // CHECK-PPC64-PIE: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" "-pie" @@ -81,8 +79,7 @@ // RUN: %clang \ // RUN: --target=powerpc64le-unknown-freebsd13 %s \ // RUN: --sysroot=%S/Inputs/basic_freebsd64_tree -### 2>&1 \ -// RUN: %if default-pie-on-freebsd %{ | FileCheck --check-prefix=CHECK-PPC64LE-PIE %s %} \ -// RUN: %else %{ | FileCheck --check-prefix=CHECK-PPC64LE %s %} +// RUN: | FileCheck --check-prefix=CHECK-PPC64LE %s // CHECK-PPC64LE: "-cc1" "-triple" "powerpc64le-unknown-freebsd13" // CHECK-PPC64LE: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" // CHECK-PPC64LE: "--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" @@ -204,14 +201,14 @@ // RUN: %clang --target=x86_64-pc-freebsd -static %s \ // RUN: --sysroot=%S/Inputs/multiarch_freebsd64_tree -### 2>&1 \ // RUN: | FileCheck --check-prefix=CHECK-STATIC %s -// CHECK-STATIC: ld{{.*}}" "--eh-frame-hdr" "-Bstatic" -// CHECK-STATIC: crt1.o +// CHECK-STATIC: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" "--eh-frame-hdr" "-Bstatic" +// CHECK-STATIC: "[[SYSROOT]]/usr/lib/crt1.o" // CHECK-STATIC: crtbeginT.o // RUN: %clang --target=x86_64-pc-freebsd -shared %s \ // RUN: --sysroot=%S/Inputs/multiarch_freebsd64_tree -### 2>&1 \ // RUN: | FileCheck --check-prefix=CHECK-SHARED %s -// CHECK-SHARED: ld{{.*}}" "--eh-frame-hdr" "-shared" +// CHECK-SHARED: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" "--eh-frame-hdr" "-shared" // CHECK-SHARED: crti.o // CHECK-SHARED: crtbeginS.o @@ -224,11 +221,7 @@ // RUN: %clang --target=x86_64-pc-freebsd %s \ // RUN: --sysroot=%S/Inputs/multiarch_freebsd64_tree -### 2>&1 \ -// RUN: %if default-pie-on-freebsd %{ | FileCheck --check-prefix=CHECK-NORMAL-PIE %s %} \ -// RUN: %else %{ | FileCheck --check-prefix=CHECK-NORMAL %s %} -// CHECK-NORMAL: crt1.o -// CHECK-NORMAL: crtbegin.o - +// RUN: | FileCheck --check-prefix=CHECK-NORMAL-PIE %s // CHECK-NORMAL-PIE: Scrt1.o // CHECK-NORMAL-PIE: crtbeginS.o @@ -238,17 +231,22 @@ // CHECK-NORMAL-NOPIE: crt1.o // CHECK-NORMAL-NOPIE: crtbegin.o -/// Test -DCLANG_DEFAULT_PIE_ON_FREEBSD=on. +/// PIE is the default on FreeBSD >= 13.1 and on unversioned triples. // RUN: %clang -### --target=x86_64-unknown-freebsd %s 2>&1 \ -// RUN: %if default-pie-on-freebsd %{ | FileCheck --check-prefix=PIE2 %s %} \ -// RUN: %else %{ | FileCheck --check-prefix=PIE2-OFF %s %} +// 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" -// PIE2-OFF: "-mrelocation-model" "static" -// PIE2-OFF-NOT: "-pic-is-pie" -// PIE2-OFF-NOT: "-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 -### %s --target=arm-unknown-freebsd10.0 -no-integrated-as 2>&1 \ // RUN: | FileCheck --check-prefix=CHECK-ARM %s diff --git a/clang/test/Driver/hie-fpie-option-freebsd.hip b/clang/test/Driver/hip-fpie-option-freebsd.hip similarity index 97% rename from clang/test/Driver/hie-fpie-option-freebsd.hip rename to clang/test/Driver/hip-fpie-option-freebsd.hip index 24dd3c4440062..5168149778e8a 100644 --- a/clang/test/Driver/hie-fpie-option-freebsd.hip +++ b/clang/test/Driver/hip-fpie-option-freebsd.hip @@ -1,5 +1,3 @@ -// REQUIRES: default-pie-on-freebsd - // -fPIC and -fPIE only affects host relocation model. // device compilation always uses PIC. diff --git a/clang/test/lit.cfg.py b/clang/test/lit.cfg.py index 6013dfb6ad765..5a5e819c9b5a1 100644 --- a/clang/test/lit.cfg.py +++ b/clang/test/lit.cfg.py @@ -337,9 +337,6 @@ def have_host_clang_repl_cuda(): if config.has_plugins and config.llvm_plugin_ext: config.available_features.add("plugins") -if config.clang_default_pie_on_freebsd: - config.available_features.add("default-pie-on-freebsd") - if config.clang_default_pie_on_linux: config.available_features.add("default-pie-on-linux") diff --git a/clang/test/lit.site.cfg.py.in b/clang/test/lit.site.cfg.py.in index 0ddca8452da23..cb35118167d99 100644 --- a/clang/test/lit.site.cfg.py.in +++ b/clang/test/lit.site.cfg.py.in @@ -21,7 +21,6 @@ config.llvm_use_sanitizer = "@LLVM_USE_SANITIZER@" config.have_zlib = @LLVM_ENABLE_ZLIB@ config.have_zstd = @LLVM_ENABLE_ZSTD@ config.clang_objc_rewriter = @CLANG_ENABLE_OBJC_REWRITER@ -config.clang_default_pie_on_freebsd = @CLANG_DEFAULT_PIE_ON_FREEBSD@ config.clang_default_pie_on_linux = @CLANG_DEFAULT_PIE_ON_LINUX@ config.clang_default_cxx_stdlib = "@CLANG_DEFAULT_CXX_STDLIB@" config.clang_staticanalyzer = @CLANG_ENABLE_STATIC_ANALYZER@ diff --git a/flang/test/Driver/linker-options.f90 b/flang/test/Driver/linker-options.f90 index 55909fe034394..45ff2ab774a20 100644 --- a/flang/test/Driver/linker-options.f90 +++ b/flang/test/Driver/linker-options.f90 @@ -24,7 +24,7 @@ ! 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. +! 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 \ @@ -58,7 +58,7 @@ ! 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=PIE ! RUN: %flang -target i386-pc-freebsd -### %s 2>&1 \ diff --git a/flang/test/Driver/pic-flags.f90 b/flang/test/Driver/pic-flags.f90 index 34a13ed228101..618615af33c78 100644 --- a/flang/test/Driver/pic-flags.f90 +++ b/flang/test/Driver/pic-flags.f90 @@ -1,6 +1,6 @@ ! RUN: %if aarch64-registered-target %{ %flang -v -S -emit-llvm -o - %s --target=aarch64-linux-gnu -fno-pie 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-STATIC,CHECK-STATIC-IR %} -! RUN: %if x86_64-registered-target && clang_default_pie_on_freebsd %{ %flang -v -S -emit-llvm -o - %s --target=x86_64-unknown-freebsd 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-PIE-LEVEL2,CHECK-PIE-LEVEL2-IR %} +! RUN: %if x86_64-registered-target %{ %flang -v -S -emit-llvm -o - %s --target=x86_64-unknown-freebsd 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-PIE-LEVEL2,CHECK-PIE-LEVEL2-IR %} ! RUN: %if aarch64-registered-target && clang_default_pie_on_linux %{ %flang -v -S -emit-llvm -o - %s --target=aarch64-linux-gnu 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-PIE-LEVEL2,CHECK-PIE-LEVEL2-IR %} ! RUN: %if aarch64-registered-target %{ %flang -v -S -emit-llvm -o - %s --target=aarch64-linux-gnu -fpie 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-PIE-LEVEL1,CHECK-PIE-LEVEL1-IR %} ! RUN: %if aarch64-registered-target %{ %flang -v -S -emit-llvm -o - %s --target=aarch64-linux-gnu -fPIE 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-PIE-LEVEL2,CHECK-PIE-LEVEL2-IR %} diff --git a/llvm/utils/gn/secondary/clang/include/clang/Config/BUILD.gn b/llvm/utils/gn/secondary/clang/include/clang/Config/BUILD.gn index c5b30e30fe76d..f8196d1b248e5 100644 --- a/llvm/utils/gn/secondary/clang/include/clang/Config/BUILD.gn +++ b/llvm/utils/gn/secondary/clang/include/clang/Config/BUILD.gn @@ -8,7 +8,6 @@ write_cmake_config("Config") { output = "$target_gen_dir/config.h" values = [ "BUG_REPORT_URL=https://github.com/llvm/llvm-project/issues/", - "CLANG_DEFAULT_PIE_ON_FREEBSD=1", "CLANG_DEFAULT_PIE_ON_LINUX=1", "CLANG_DEFAULT_LINKER=", "CLANG_DEFAULT_CXX_STDLIB=", diff --git a/llvm/utils/gn/secondary/clang/test/BUILD.gn b/llvm/utils/gn/secondary/clang/test/BUILD.gn index 1da3a1a3062b2..73f3bd020a1e0 100644 --- a/llvm/utils/gn/secondary/clang/test/BUILD.gn +++ b/llvm/utils/gn/secondary/clang/test/BUILD.gn @@ -52,7 +52,6 @@ write_lit_config("lit_site_cfg") { "CLANG_BUILD_EXAMPLES=0", "CLANG_BUILT_STANDALONE=0", "CLANG_DEFAULT_CXX_STDLIB=", # Empty string means "default value" here. - "CLANG_DEFAULT_PIE_ON_FREEBSD=0", "CLANG_DEFAULT_PIE_ON_LINUX=0", "CLANG_ENABLE_CIR=0", "CLANG_ENABLE_OBJC_REWRITER=0", diff --git a/utils/bazel/llvm-project-overlay/clang/include/clang/Config/config.h b/utils/bazel/llvm-project-overlay/clang/include/clang/Config/config.h index 0f01ac0e9ecbc..7f7308f338966 100644 --- a/utils/bazel/llvm-project-overlay/clang/include/clang/Config/config.h +++ b/utils/bazel/llvm-project-overlay/clang/include/clang/Config/config.h @@ -22,9 +22,6 @@ /* Bug report URL. */ #define BUG_REPORT_URL "https://github.com/llvm/llvm-project/issues/" -/* Default to -fPIE and -pie on FreeBSD. */ -#define CLANG_DEFAULT_PIE_ON_FREEBSD 1 - /* Default to -fPIE and -pie on Linux. */ #define CLANG_DEFAULT_PIE_ON_LINUX 1 >From 666fb313efe720bcc5b6b8728dd8d0a1f9ef6e1f Mon Sep 17 00:00:00 2001 From: ShengYi Hung <[email protected]> Date: Mon, 20 Jul 2026 21:09:52 +0800 Subject: [PATCH 4/4] fixup! [Clang] Switch to Default PIE on FreeBSD --- clang/test/Driver/freebsd.c | 20 +++++++++---------- clang/test/Driver/hip-fpie-option-freebsd.hip | 10 ---------- 2 files changed, 10 insertions(+), 20 deletions(-) diff --git a/clang/test/Driver/freebsd.c b/clang/test/Driver/freebsd.c index d62dd6a6bb620..f8656db5f22e1 100644 --- a/clang/test/Driver/freebsd.c +++ b/clang/test/Driver/freebsd.c @@ -14,8 +14,8 @@ // 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" // CHECK-ARM64-PIE: "-cc1" "-triple" "aarch64-pc-freebsd{{[0-9]+}}" -// CHECK-ARM64-PIE: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" "-pie" -// CHECK-ARM64-PIE: "--eh-frame-hdr" "-dynamic-linker" "{{.*}}ld-elf{{.*}}" "--enable-new-dtags" "-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" +// 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 -pie \ // RUN: --target=aarch64-pc-freebsd11 %s \ @@ -37,8 +37,8 @@ // RUN: | FileCheck --check-prefix=CHECK-PPC-PIE %s // CHECK-PPC-PIE: "-cc1" "-triple" "powerpc-pc-freebsd" -// CHECK-PPC-PIE: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" "-pie" -// CHECK-PPC-PIE: "--eh-frame-hdr" "-dynamic-linker" "{{.*}}ld-elf{{.*}}" "--enable-new-dtags" "-m" "elf32ppc_fbsd" "-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" +// CHECK-PPC-PIE: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" +// CHECK-PPC-PIE: "--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 -pie \ // RUN: --target=powerpc-pc-freebsd %s \ @@ -51,7 +51,7 @@ // RUN: | FileCheck --check-prefix=CHECK-PPC-NOPIE %s // CHECK-PPC-NOPIE: "-cc1" "-triple" "powerpc-pc-freebsd" // CHECK-PPC-NOPIE: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" -// CHECK-PPC-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" +// CHECK-PPC-NOPIE: "--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" // // RUN: %clang \ @@ -60,8 +60,8 @@ // RUN: | FileCheck --check-prefix=CHECK-PPC64-PIE %s // CHECK-PPC64-PIE: "-cc1" "-triple" "powerpc64-pc-freebsd" -// CHECK-PPC64-PIE: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" "-pie" -// CHECK-PPC64-PIE: "--eh-frame-hdr" "-dynamic-linker" "{{.*}}ld-elf{{.*}}" "--enable-new-dtags" "-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" +// CHECK-PPC64-PIE: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" +// CHECK-PPC64-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 -pie \ // RUN: --target=powerpc64-pc-freebsd %s \ @@ -83,8 +83,8 @@ // CHECK-PPC64LE: "--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-PPC64LE-PIE: "-cc1" "-triple" "powerpc64le-unknown-freebsd13" -// CHECK-PPC64LE-PIE: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" "-pie" -// CHECK-PPC64LE-PIE: "--eh-frame-hdr" "-dynamic-linker" "{{.*}}ld-elf{{.*}}" "--enable-new-dtags" "-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" +// CHECK-PPC64LE-PIE: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" +// CHECK-PPC64LE-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 -pie \ // RUN: --target=powerpc64le-unknown-freebsd13 %s \ @@ -205,7 +205,7 @@ // RUN: %clang --target=x86_64-pc-freebsd -shared %s \ // RUN: --sysroot=%S/Inputs/multiarch_freebsd64_tree -### 2>&1 \ // RUN: | FileCheck --check-prefix=CHECK-SHARED %s -// CHECK-SHARED: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" "--eh-frame-hdr" "-shared" +// CHECK-SHARED: ld{{.*}}" "--eh-frame-hdr" "-shared" // CHECK-SHARED: crti.o // CHECK-SHARED: crtbeginS.o diff --git a/clang/test/Driver/hip-fpie-option-freebsd.hip b/clang/test/Driver/hip-fpie-option-freebsd.hip index 5168149778e8a..a1a0a45318481 100644 --- a/clang/test/Driver/hip-fpie-option-freebsd.hip +++ b/clang/test/Driver/hip-fpie-option-freebsd.hip @@ -19,16 +19,6 @@ // RUN: -fPIC \ // RUN: 2>&1 | FileCheck -check-prefixes=DEV,HOST-PIC %s -// RUN: %clang -### --target=x86_64-unknown-freebsd \ -// RUN: --offload-arch=gfx906 %s -nogpulib -nogpuinc \ -// RUN: -fPIE \ -// 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: -fPIE \ -// RUN: 2>&1 | FileCheck -check-prefixes=DEV,HOST-PIE %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" _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
