1-
2- # RUN: llvm-mc -triple=mips64-unknown-freebsd -mcpu=cheri256 -target-abi purecap -position-independent -filetype=obj %s -o %t-cheri256-main.o
31# RUN: llvm-mc -triple=mips64-unknown-freebsd -mcpu=cheri128 -target-abi purecap -position-independent -filetype=obj %s -o %t-cheri128-main.o
4- # RUN: llvm-mc -triple=mips64-unknown-freebsd -mcpu=cheri256 -target-abi n64 -position-independent -filetype=obj %s -o %t-cheri256-hybrid-main.o
52# RUN: llvm-mc -triple=mips64-unknown-freebsd -mcpu=cheri128 -target-abi n64 -position-independent -filetype=obj %s -o %t-cheri128-hybrid-main.o
63# RUN: llvm-mc -triple=mips64-unknown-freebsd -mcpu=beri -target-abi n64 -position-independent -filetype=obj %s -o %t-beri-main.o
7- # RUN: llvm-mc -triple=mips64-unknown-freebsd -mcpu=cheri256 -target-abi purecap -position-independent -filetype=obj %S/../Inputs/mips-dynamic.s -o %t-cheri256-lib.o
84# RUN: llvm-mc -triple=mips64-unknown-freebsd -mcpu=cheri128 -target-abi purecap -position-independent -filetype=obj %S/../Inputs/mips-dynamic.s -o %t-cheri128-lib.o
9- # RUN: llvm-mc -triple=mips64-unknown-freebsd -mcpu=cheri256 -target-abi n64 -position-independent -filetype=obj %S/../Inputs/mips-dynamic.s -o %t-cheri256-hybrid-lib.o
105# RUN: llvm-mc -triple=mips64-unknown-freebsd -mcpu=cheri128 -target-abi n64 -position-independent -filetype=obj %S/../Inputs/mips-dynamic.s -o %t-cheri128-hybrid-lib.o
116# RUN: llvm-readobj -h %t-cheri128-main.o | FileCheck --check-prefix=CHERI128-FLAGS %s
12- # RUN: llvm-readobj -h %t-cheri256-main.o | FileCheck --check-prefix=CHERI256-FLAGS %s
137# RUN: llvm-readobj -h %t-cheri128-hybrid-main.o | FileCheck --check-prefix=CHERI128-HYBRID-FLAGS %s
14- # RUN: llvm-readobj -h %t-cheri256-hybrid-main.o | FileCheck --check-prefix=CHERI256-HYBRID-FLAGS %s
158
169
1710# Check that setting an explicit CHERI emulation overrides the target ABI from the first .o:
3427# RUN: %S/../Inputs/mips-dynamic.s -mcpu=mips4 -o %t-mips4.o
3528# RUN: llvm-mc -filetype=obj -triple=mips64-unknown-freebsd \
3629# RUN: %S/../Inputs/mips-dynamic.s -mcpu=beri -o %t-beri.o
37- # RUN: not ld.lld %t-cheri256-main.o %t-mips64.o -o %t.exe 2>&1 | FileCheck -check-prefix=CHERI256-vs-MIPS %s
3830# RUN: not ld.lld %t-cheri128-main.o %t-mips64.o -o %t.exe 2>&1 | FileCheck -check-prefix=CHERI128-vs-MIPS %s
39- # RUN: not ld.lld %t-cheri256-main.o %t-cheri128-lib.o -o %t.exe 2>&1 | FileCheck -check-prefix=CHERI256-vs-CHERI128 %s
40- # RUN: not ld.lld %t-cheri128-main.o %t-cheri256-lib.o -o %t.exe 2>&1 | FileCheck -check-prefix=CHERI128-vs-CHERI256 %s
41- # RUN: not ld.lld %t-cheri256-main.o %t-cheri256-hybrid-lib.o -o %t.exe 2>&1 | FileCheck -check-prefix=CHERI256-vs-CHERI256-HYBRID %s
4231# RUN: not ld.lld %t-cheri128-main.o %t-cheri128-hybrid-lib.o -o %t.exe 2>&1 | FileCheck -check-prefix=CHERI128-vs-CHERI128-HYBRID %s
4332
4433# linking plain mips with hybrid results in a hybrid binary:
45- # RUN: ld.lld %t-cheri256-hybrid-main.o %t-mips4.o -o %t.exe
46- # RUN: llvm-readobj -h %t.exe | FileCheck --check-prefix=CHERI256-HYBRID-FLAGS %s
4734# RUN: ld.lld %t-cheri128-hybrid-main.o %t-mips4.o -o %t.exe
4835# RUN: llvm-readobj -h %t.exe | FileCheck --check-prefix=CHERI128-HYBRID-FLAGS %s
4936# Same for -mcpu=beri
5037# RUN: ld.lld %t-cheri128-hybrid-main.o %t-beri.o -o %t.exe
5138# RUN: llvm-readobj -h %t.exe | FileCheck --check-prefix=CHERI128-HYBRID-FLAGS %s
52- # RUN: ld.lld %t-cheri256-hybrid-main.o %t-beri.o -o %t.exe
53- # RUN: llvm-readobj -h %t.exe | FileCheck --check-prefix=CHERI256-HYBRID-FLAGS %s
5439
5540
5641# Should be able to link beri with MIPS4
6550
6651# but not if the plain MIPS arch is a superset of the cheri arch
6752# RUN: not ld.lld %t-cheri128-hybrid-main.o %t-mips64.o -o %t.exe 2>&1 | FileCheck -DCHERI_TYPE=cheri128 -check-prefix CHERI-MIPS4-vs-MIPS64 %s
68- # RUN: not ld.lld %t-cheri256-hybrid-main.o %t-mips64.o -o %t.exe 2>&1 | FileCheck -DCHERI_TYPE=cheri256 -check-prefix CHERI-MIPS4-vs-MIPS64 %s
6953# CHERI-MIPS4-vs-MIPS64: incompatible target ISA:
7054# CHERI-MIPS4-vs-MIPS64-NEXT: {{.+}}-[[CHERI_TYPE]]-hybrid-main.o: mips4 ([[CHERI_TYPE]])
7155# CHERI-MIPS4-vs-MIPS64-NEXT: {{.+}}-mips64.o: mips64
7559# because -mcpu=mips4 doesn't schedule loads sensibly
7660# RUN: not ld.lld --fatal-warnings %t-beri-main.o %t-mips4.o -o /dev/null 2>&1 | FileCheck %s -check-prefix BERI-NON-BERI -DARCH=beri
7761# RUN: not ld.lld --fatal-warnings %t-cheri128-hybrid-main.o %t-mips4.o -o /dev/null 2>&1 | FileCheck %s -check-prefix BERI-NON-BERI -DARCH=cheri128
78- # RUN: not ld.lld --fatal-warnings %t-cheri256-hybrid-main.o %t-mips4.o -o /dev/null 2>&1 | FileCheck %s -check-prefix BERI-NON-BERI -DARCH=cheri256
7962
8063// BERI-NON-BERI: ld.lld: error: linking files compiled for BERI/CHERI and non-BERI/CHERI can result in surprising performance:
8164// BERI-NON-BERI-NEXT: >>> {{.+}}cheri-elf-flags-err.s.tmp-{{.+}}-main.o: mips4 ([[ARCH]])
@@ -96,13 +79,6 @@ __start:
9679# BERI-FLAGS-NEXT: EF_MIPS_CPIC (0x4)
9780# BERI-FLAGS-NEXT: EF_MIPS_MACH_BERI (0xBE0000)
9881# BERI-FLAGS-NEXT: ]
99- # CHERI256-FLAGS: Machine: EM_MIPS (0x8)
100- # CHERI256-FLAGS: Flags [
101- # CHERI256-FLAGS-NEXT: EF_MIPS_ABI_CHERIABI (0xC000)
102- # CHERI256-FLAGS-NEXT: EF_MIPS_ARCH_4 (0x30000000)
103- # CHERI256-FLAGS-NEXT: EF_MIPS_CPIC (0x4)
104- # CHERI256-FLAGS-NEXT: EF_MIPS_MACH_CHERI256 (0xC20000)
105- # CHERI256-FLAGS-NEXT: ]
10682# CHERI128-FLAGS: Machine: EM_MIPS (0x8)
10783# CHERI128-FLAGS: Flags [
10884# CHERI128-FLAGS-NEXT: EF_MIPS_ABI_CHERIABI (0xC000)
@@ -111,31 +87,16 @@ __start:
11187# CHERI128-FLAGS-NEXT: EF_MIPS_MACH_CHERI128 (0xC10000)
11288# CHERI128-FLAGS-NEXT: ]
11389
114- # CHERI256-HYBRID-FLAGS: Machine: EM_MIPS (0x8)
115- # CHERI256-HYBRID-FLAGS: Flags [
116- # CHERI256-HYBRID-FLAGS-NEXT: EF_MIPS_ARCH_4 (0x30000000)
117- # CHERI256-HYBRID-FLAGS-NEXT: EF_MIPS_CPIC (0x4)
118- # CHERI256-HYBRID-FLAGS-NEXT: EF_MIPS_MACH_CHERI256 (0xC20000)
119- # CHERI256-HYBRID-FLAGS-NEXT: ]
12090# CHERI128-HYBRID-FLAGS: Machine: EM_MIPS (0x8)
12191# CHERI128-HYBRID-FLAGS: Flags [
12292# CHERI128-HYBRID-FLAGS-NEXT: EF_MIPS_ARCH_4 (0x30000000)
12393# CHERI128-HYBRID-FLAGS-NEXT: EF_MIPS_CPIC (0x4)
12494# CHERI128-HYBRID-FLAGS-NEXT: EF_MIPS_MACH_CHERI128 (0xC10000)
12595# CHERI128-HYBRID-FLAGS-NEXT: ]
12696
127- # CHERI256-vs-MIPS: {{.*}}/cheri-elf-flags-err.s.tmp-mips64.o: ABI 'n64' is incompatible with target ABI 'purecap'
12897# CHERI128-vs-MIPS: {{.*}}/cheri-elf-flags-err.s.tmp-mips64.o: ABI 'n64' is incompatible with target ABI 'purecap'
129- # CHERI256-vs-CHERI128: incompatible target ISA:
130- # CHERI256-vs-CHERI128-NEXT: {{.+}}-cheri256-main.o: mips4 (cheri256)
131- # CHERI256-vs-CHERI128-NEXT: {{.+}}-cheri128-lib.o: mips4 (cheri128)
132- # CHERI128-vs-CHERI256: incompatible target ISA:
133- # CHERI128-vs-CHERI256-NEXT: {{.+}}-cheri128-main.o: mips4 (cheri128)
134- # CHERI128-vs-CHERI256-NEXT: {{.+}}-cheri256-lib.o: mips4 (cheri256)
135- # CHERI256-vs-CHERI256-HYBRID: {{.*}}/cheri-elf-flags-err.s.tmp-cheri256-hybrid-lib.o: ABI 'n64' is incompatible with target ABI 'purecap'
13698# CHERI128-vs-CHERI128-HYBRID: {{.*}}/cheri-elf-flags-err.s.tmp-cheri128-hybrid-lib.o: ABI 'n64' is incompatible with target ABI 'purecap'
13799
138100# TODO: should those files actually link?
139- # CHERI256-HYBRID-vs-MIPS: target ISA 'cheri256' is incompatible with 'mips64': {{.*}}/cheri-elf-flags-err.s.tmp-mips64.o
140101# CHERI128-HYBRID-vs-MIPS: target ISA 'cheri128' is incompatible with 'mips64': {{.*}}/cheri-elf-flags-err.s.tmp-mips64.o
141102
0 commit comments