1 // RUN: %clang \ 2 // RUN: --target=aarch64-pc-freebsd11 %s \ 3 // RUN: --sysroot=%S/Inputs/basic_freebsd64_tree -### 2>&1 \ 4 // RUN: | FileCheck --check-prefix=CHECK-ARM64 %s 5 // CHECK-ARM64: "-cc1" "-triple" "aarch64-pc-freebsd11" 6 // CHECK-ARM64: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" 7 // 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" 8 // 9 // RUN: %clang \ 10 // RUN: --target=powerpc-pc-freebsd %s \ 11 // RUN: --sysroot=%S/Inputs/basic_freebsd_tree -### 2>&1 \ 12 // RUN: | FileCheck --check-prefix=CHECK-PPC %s 13 // CHECK-PPC: "-cc1" "-triple" "powerpc-pc-freebsd" 14 // CHECK-PPC: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" 15 // 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" 16 // 17 // RUN: %clang \ 18 // RUN: --target=powerpc64-pc-freebsd %s \ 19 // RUN: --sysroot=%S/Inputs/basic_freebsd64_tree -### 2>&1 \ 20 // RUN: | FileCheck --check-prefix=CHECK-PPC64 %s 21 // CHECK-PPC64: "-cc1" "-triple" "powerpc64-pc-freebsd" 22 // CHECK-PPC64: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" 23 // 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" 24 25 // RUN: %clang \ 26 // RUN: --target=powerpc64le-unknown-freebsd13 %s \ 27 // RUN: --sysroot=%S/Inputs/basic_freebsd64_tree -### 2>&1 \ 28 // RUN: | FileCheck --check-prefix=CHECK-PPC64LE %s 29 // CHECK-PPC64LE: "-cc1" "-triple" "powerpc64le-unknown-freebsd13" 30 // CHECK-PPC64LE: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" 31 // 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" 32 33 // 34 // Check that -m32 properly adjusts the toolchain flags. 35 // 36 // RUN: %clang --target=x86_64-pc-freebsd -m32 %s \ 37 // RUN: --sysroot=%S/Inputs/multiarch_freebsd64_tree -### 2>&1 \ 38 // RUN: | FileCheck --check-prefix=CHECK-LIB32 %s 39 // CHECK-LIB32: "-cc1" "-triple" "i386-pc-freebsd" 40 // CHECK-LIB32: ld{{.*}}" {{.*}} "-m" "elf_i386_fbsd" 41 // 42 // RUN: %clang --target=x86_64-pc-freebsd -m32 %s 2>&1 \ 43 // RUN: --sysroot=%S/Inputs/multiarch_freebsd64_tree -print-search-dirs 2>&1 \ 44 // RUN: | FileCheck --check-prefix=CHECK-LIB32PATHS %s 45 // CHECK-LIB32PATHS: libraries: ={{.*:?}}/usr/lib32 46 // 47 // Check that O32 MIPS uses /usr/lib32 on a 64-bit tree. 48 // 49 // RUN: %clang --target=mips-freebsd12 %s \ 50 // RUN: --sysroot=%S/Inputs/multiarch_freebsd64_tree -print-search-dirs 2>&1 \ 51 // RUN: | FileCheck --check-prefix=CHECK-LIB32PATHS %s 52 // 53 // Check that MIPS passes the correct linker emulation. 54 // 55 // RUN: %clang --target=mips-freebsd -### %s %s 2>&1 \ 56 // RUN: | FileCheck --check-prefix=CHECK-MIPS-LD %s 57 // CHECK-MIPS-LD: ld{{.*}}" {{.*}} "-m" "elf32btsmip_fbsd" 58 // RUN: %clang --target=mipsel-freebsd -### %s %s 2>&1 \ 59 // RUN: | FileCheck --check-prefix=CHECK-MIPSEL-LD %s 60 // CHECK-MIPSEL-LD: ld{{.*}}" {{.*}} "-m" "elf32ltsmip_fbsd" 61 // RUN: %clang --target=mips64-freebsd -### %s %s 2>&1 \ 62 // RUN: | FileCheck --check-prefix=CHECK-MIPS64-LD %s 63 // CHECK-MIPS64-LD: ld{{.*}}" {{.*}} "-m" "elf64btsmip_fbsd" 64 // RUN: %clang --target=mips64el-freebsd -### %s %s 2>&1 \ 65 // RUN: | FileCheck --check-prefix=CHECK-MIPS64EL-LD %s 66 // CHECK-MIPS64EL-LD: ld{{.*}}" {{.*}} "-m" "elf64ltsmip_fbsd" 67 // RUN: %clang --target=mips64-freebsd -mabi=n32 -### %s %s 2>&1 \ 68 // RUN: | FileCheck --check-prefix=CHECK-MIPSN32-LD %s 69 // CHECK-MIPSN32-LD: ld{{.*}}" {{.*}} "-m" "elf32btsmipn32_fbsd" 70 // RUN: %clang --target=mips64el-freebsd -mabi=n32 -### %s %s 2>&1 \ 71 // RUN: | FileCheck --check-prefix=CHECK-MIPSN32EL-LD %s 72 // CHECK-MIPSN32EL-LD: ld{{.*}}" {{.*}} "-m" "elf32ltsmipn32_fbsd" 73 // 74 // Check that RISC-V passes the correct linker emulation. 75 // 76 // RUN: %clang --target=riscv64-freebsd -### %s %s 2>&1 \ 77 // RUN: | FileCheck --check-prefix=CHECK-RV64I-LD %s 78 // CHECK-RV64I-LD: ld{{.*}}" {{.*}} "-m" "elf64lriscv" 79 // 80 // Check that LoongArch passes the correct linker emulation. 81 // 82 // RUN: %clang --target=loongarch64-freebsd -### %s %s 2>&1 \ 83 // RUN: | FileCheck --check-prefix=CHECK-LA64-LD %s 84 // CHECK-LA64-LD: ld{{.*}}" {{.*}} "-m" "elf64loongarch" 85 // 86 // Check options passed to the linker on LoongArch 87 // 88 // RUN: %clang --target=loongarch64-freebsd -mno-relax -### %s %s 2>&1 \ 89 // RUN: | FileCheck --check-prefix=CHECK-LA64-LD-OPTS %s 90 // CHECK-LA64-LD-OPTS: ld{{.*}}" {{.*}} "-X" "--no-relax" 91 // 92 // Check that the new linker flags are passed to FreeBSD 93 // RUN: %clang --target=x86_64-pc-freebsd10.0 -m32 %s \ 94 // RUN: --sysroot=%S/Inputs/multiarch_freebsd64_tree -### 2>&1 \ 95 // RUN: | FileCheck --check-prefix=CHECK-LDFLAGS_HASH %s 96 // RUN: %clang --target=x86_64-pc-freebsd -m32 %s \ 97 // RUN: --sysroot=%S/Inputs/multiarch_freebsd64_tree -### 2>&1 \ 98 // RUN: | FileCheck --check-prefix=CHECK-LDFLAGS_HASH %s 99 // CHECK-LDFLAGS_HASH: --hash-style=both 100 // CHECK-LDFLAGS_HASH: --enable-new-dtags 101 // 102 // Check that we do not pass --hash-style=gnu and --hash-style=both to linker 103 // and provide correct path to the dynamic linker for MIPS platforms. 104 // Also verify that we tell the assembler to target the right ISA and ABI. 105 // RUN: %clang -### %s 2>&1 \ 106 // RUN: --target=mips-unknown-freebsd10.0 \ 107 // RUN: | FileCheck --check-prefix=CHECK-MIPS %s 108 // CHECK-MIPS: "{{[^" ]*}}ld{{[^" ]*}}" 109 // CHECK-MIPS: "-dynamic-linker" "{{.*}}/libexec/ld-elf.so.1" 110 // CHECK-MIPS-NOT: "--hash-style={{gnu|both}}" 111 // RUN: %clang -### %s 2>&1 \ 112 // RUN: --target=mipsel-unknown-freebsd10.0 \ 113 // RUN: | FileCheck --check-prefix=CHECK-MIPSEL %s 114 // CHECK-MIPSEL: "{{[^" ]*}}ld{{[^" ]*}}" 115 // CHECK-MIPSEL: "-dynamic-linker" "{{.*}}/libexec/ld-elf.so.1" 116 // CHECK-MIPSEL-NOT: "--hash-style={{gnu|both}}" 117 // RUN: %clang -### %s 2>&1 \ 118 // RUN: --target=mips64-unknown-freebsd10.0 \ 119 // RUN: | FileCheck --check-prefix=CHECK-MIPS64 %s 120 // CHECK-MIPS64: "{{[^" ]*}}ld{{[^" ]*}}" 121 // CHECK-MIPS64: "-dynamic-linker" "{{.*}}/libexec/ld-elf.so.1" 122 // CHECK-MIPS64-NOT: "--hash-style={{gnu|both}}" 123 // RUN: %clang -### %s 2>&1 \ 124 // RUN: --target=mips64el-unknown-freebsd10.0 \ 125 // RUN: | FileCheck --check-prefix=CHECK-MIPS64EL %s 126 // CHECK-MIPS64EL: "{{[^" ]*}}ld{{[^" ]*}}" 127 // CHECK-MIPS64EL: "-dynamic-linker" "{{.*}}/libexec/ld-elf.so.1" 128 // CHECK-MIPS64EL-NOT: "--hash-style={{gnu|both}}" 129 130 // RUN: %clang --target=x86_64-pc-freebsd -static %s \ 131 // RUN: --sysroot=%S/Inputs/multiarch_freebsd64_tree -### 2>&1 \ 132 // RUN: | FileCheck --check-prefix=CHECK-STATIC %s 133 // CHECK-STATIC: ld{{.*}}" "--eh-frame-hdr" "-Bstatic" 134 // CHECK-STATIC: crt1.o 135 // CHECK-STATIC: crtbeginT.o 136 137 // RUN: %clang --target=x86_64-pc-freebsd -shared %s \ 138 // RUN: --sysroot=%S/Inputs/multiarch_freebsd64_tree -### 2>&1 \ 139 // RUN: | FileCheck --check-prefix=CHECK-SHARED %s 140 // CHECK-SHARED: ld{{.*}}" "--eh-frame-hdr" "-shared" 141 // CHECK-SHARED: crti.o 142 // CHECK-SHARED: crtbeginS.o 143 144 // RUN: %clang --target=x86_64-pc-freebsd -pie %s \ 145 // RUN: --sysroot=%S/Inputs/multiarch_freebsd64_tree -### 2>&1 \ 146 // RUN: | FileCheck --check-prefix=CHECK-PIE %s 147 // CHECK-PIE: pie 148 // CHECK-PIE: Scrt1.o 149 // CHECK-PIE: crtbeginS.o 150 151 // RUN: %clang --target=x86_64-pc-freebsd %s \ 152 // RUN: --sysroot=%S/Inputs/multiarch_freebsd64_tree -### 2>&1 \ 153 // RUN: | FileCheck --check-prefix=CHECK-NORMAL %s 154 // CHECK-NORMAL: crt1.o 155 // CHECK-NORMAL: crtbegin.o 156 157 // RUN: %clang -### %s --target=arm-unknown-freebsd10.0 -no-integrated-as 2>&1 \ 158 // RUN: | FileCheck --check-prefix=CHECK-ARM %s 159 // CHECK-ARM-NOT: "-cc1"{{.*}}" "-exception-model=sjlj" 160 // CHECK-ARM: as{{.*}}" "-mfpu=softvfp"{{.*}}"-meabi=5" 161 // CHECK-ARM-NOT: as{{.*}}" "-mfpu=vfp" 162 // CHECK-ARM-NOT: as{{.*}}" "-matpcs" 163 164 // RUN: %clang -### %s --target=arm-gnueabi-freebsd10.0 -no-integrated-as 2>&1 \ 165 // RUN: | FileCheck --check-prefix=CHECK-ARM-EABI %s 166 // CHECK-ARM-EABI-NOT: "-cc1"{{.*}}" "-exception-model=sjlj" 167 // CHECK-ARM-EABI: as{{.*}}" "-mfpu=softvfp" "-meabi=5" 168 // CHECK-ARM-EABI-NOT: as{{.*}}" "-mfpu=vfp" 169 // CHECK-ARM-EABI-NOT: as{{.*}}" "-matpcs" 170 171 // RUN: %clang -### %s --target=arm-gnueabihf-freebsd10.0 -no-integrated-as 2>&1 \ 172 // RUN: | FileCheck --check-prefix=CHECK-ARM-EABIHF %s 173 // CHECK-ARM-EABIHF-NOT: "-cc1"{{.*}}" "-exception-model=sjlj" 174 // CHECK-ARM-EABIHF: as{{.*}}" "-mfpu=vfp" "-meabi=5" 175 // CHECK-ARM-EABIHF-NOT: as{{.*}}" "-mfpu=softvfp" 176 // CHECK-ARM-EABIHF-NOT: as{{.*}}" "-matpcs" 177 178 // RUN: %clang --target=sparc64-unknown-freebsd -### %s -fpic -no-integrated-as 2>&1 \ 179 // RUN: | FileCheck --check-prefix=CHECK-SPARC-PIC %s 180 // CHECK-SPARC-PIC: as{{.*}}" "-KPIC 181 182 // RUN: %clang -mcpu=ultrasparc --target=sparc64-unknown-freebsd -### %s -no-integrated-as 2>&1 \ 183 // RUN: | FileCheck --check-prefix=CHECK-SPARC-CPU %s 184 // CHECK-SPARC-CPU: cc1{{.*}}" "-target-cpu" "ultrasparc" 185 // CHECK-SPARC-CPU: as{{.*}}" "-Av9a 186 187 // Check that -G flags are passed to the linker for mips 188 // RUN: %clang --target=mips-unknown-freebsd -### %s -G0 2>&1 \ 189 // RUN: | FileCheck --check-prefix=CHECK-MIPS-G %s 190 // CHECK-MIPS-G: ld{{.*}}" "-G0" 191 192 // Check CPU type for MIPS 193 // RUN: %clang --target=mips-unknown-freebsd -### -c %s 2>&1 \ 194 // RUN: | FileCheck -check-prefix=CHECK-MIPS-CPU %s 195 // RUN: %clang --target=mipsel-unknown-freebsd -### -c %s 2>&1 \ 196 // RUN: | FileCheck -check-prefix=CHECK-MIPS-CPU %s 197 // CHECK-MIPS-CPU: "-target-cpu" "mips2" 198 199 // Check CPU type for MIPS64 200 // RUN: %clang --target=mips64-unknown-freebsd -### -c %s 2>&1 \ 201 // RUN: | FileCheck -check-prefix=CHECK-MIPS64-CPU %s 202 // RUN: %clang --target=mips64el-unknown-freebsd -### -c %s 2>&1 \ 203 // RUN: | FileCheck -check-prefix=CHECK-MIPS64-CPU %s 204 // CHECK-MIPS64-CPU: "-target-cpu" "mips3" 205 206 // RUN: %clang --target=ppc64-unknown-freebsd13.0 -### -S %s 2>&1 | \ 207 // RUN: FileCheck -check-prefix=PPC64-MUNWIND %s 208 // PPC64-MUNWIND: "-funwind-tables=2" 209 210 /// -r suppresses -dynamic-linker, default -l and crt*.o like -nostdlib. 211 // RUN: %clang -### %s --target=aarch64-pc-freebsd11 -r \ 212 // RUN: --sysroot=%S/Inputs/basic_freebsd64_tree 2>&1 | FileCheck %s --check-prefix=RELOCATABLE 213 // RELOCATABLE: "-r" 214 // RELOCATABLE-NOT: "-dynamic-linker" 215 // RELOCATABLE-NOT: "-l 216 // RELOCATABLE-NOT: crt{{[^./\\]+}}.o 217 218 // Check that the -X and --no-relax flags are passed to the linker on riscv64 219 // RUN: %clang --target=riscv64-unknown-freebsd -mno-relax -### %s 2>&1 \ 220 // RUN: | FileCheck -check-prefix=RISCV64-FLAGS %s 221 // RISCV64-FLAGS: "-X" "--no-relax" 222