Skip to content

Commit 7035a26

Browse files
committed
[CHERIoT] Rename cheri calling conventions to cheriot, as CHERI upstream does not use them.
1 parent 45c6166 commit 7035a26

File tree

57 files changed

+341
-650
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+341
-650
lines changed

clang/lib/CodeGen/CGCall.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,11 @@ unsigned CodeGenTypes::ClangCallConvToLLVMCallConv(CallingConv CC) {
5555
return llvm::CallingConv::C;
5656
case CC_CHERICCall:
5757
case CC_CHERICCallback:
58-
return llvm::CallingConv::CHERI_CCall;
58+
return llvm::CallingConv::CHERIoT_CompartmentCall;
5959
case CC_CHERILibCall:
60-
return llvm::CallingConv::CHERI_LibCall;
61-
case CC_CHERICCallee: return llvm::CallingConv::CHERI_CCallee;
60+
return llvm::CallingConv::CHERIoT_LibraryCall;
61+
case CC_CHERICCallee:
62+
return llvm::CallingConv::CHERIoT_CompartmentCallee;
6263
case CC_X86StdCall:
6364
return llvm::CallingConv::X86_StdCall;
6465
case CC_X86FastCall:
@@ -6011,7 +6012,7 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
60116012
// Set tail call kind if necessary.
60126013
if (llvm::CallInst *Call = dyn_cast<llvm::CallInst>(CI)) {
60136014
if ((TargetDecl && TargetDecl->hasAttr<NotTailCalledAttr>()) ||
6014-
((CallingConv == llvm::CallingConv::CHERI_CCall) &&
6015+
((CallingConv == llvm::CallingConv::CHERIoT_CompartmentCall) &&
60156016
(getContext().getTargetInfo().cheriCallbackKind() ==
60166017
TargetInfo::CCB_ImportTable)))
60176018
Call->setTailCallKind(llvm::CallInst::TCK_NoTail);

clang/lib/CodeGen/Targets/Mips.cpp

Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ class MipsABIInfo : public ABIInfo {
4242

4343
ABIArgInfo classifyReturnType(QualType RetTy) const;
4444
ABIArgInfo classifyArgumentType(QualType RetTy, bool IsFixed,
45-
uint64_t &Offset, bool &HasV0) const;
45+
uint64_t &Offset) const;
4646
void computeInfo(CGFunctionInfo &FI) const override;
4747
RValue EmitVAArg(CodeGenFunction &CGF, Address VAListAddr, QualType Ty,
4848
AggValueSlot Slot) const override;
@@ -321,9 +321,8 @@ llvm::Type *MipsABIInfo::getPaddingType(uint64_t OrigOffset,
321321
return llvm::IntegerType::get(getVMContext(), (Offset - OrigOffset) * 8);
322322
}
323323

324-
ABIArgInfo
325-
MipsABIInfo::classifyArgumentType(QualType Ty, bool IsFixed,
326-
uint64_t &Offset, bool &HasV0) const {
324+
ABIArgInfo MipsABIInfo::classifyArgumentType(QualType Ty, bool IsFixed,
325+
uint64_t &Offset) const {
327326
Ty = useFirstFieldIfTransparentUnion(Ty);
328327

329328
uint64_t OrigOffset = Offset;
@@ -393,22 +392,6 @@ MipsABIInfo::classifyArgumentType(QualType Ty, bool IsFixed,
393392
// All integral types are promoted to the GPR width.
394393
if (Ty->isIntegralOrEnumerationType() &&
395394
!Ty->isCHERICapabilityType(getContext())) {
396-
if (HasV0) {
397-
// This is the special method number argument; don't count it as a
398-
// parameter slot. otherwise we risk inserting padding directly after
399-
// this argument if we next see an aggregate, which disagrees with the
400-
// non-CCall calling convention when dropping the object and method, but
401-
// the two must match to allow cheri_invoke and the libcheri CCall
402-
// vectors to act as trampolines.
403-
//
404-
// TODO: This is insufficient if the first integral type comes as part of
405-
// an aggregate above. Ideally the front-end would enforce that
406-
// CCall functions have sane arguments (two capabilities and an
407-
// integer (up to one machine word) before anything else, with the
408-
// capabilities possibly in a struct).
409-
HasV0 = false;
410-
Offset = OrigOffset;
411-
}
412395
return extendType(Ty);
413396
}
414397

@@ -607,13 +590,12 @@ void MipsABIInfo::computeInfo(CGFunctionInfo &FI) const {
607590

608591
// Check if a pointer to an aggregate is passed as a hidden argument.
609592
uint64_t Offset = RetInfo.isIndirect() ? MinABIStackAlignInBytes : 0;
610-
bool HasV0 = FI.getCallingConvention() == llvm::CallingConv::CHERI_CCall;
611-
int NumFixedArgs = FI.getNumRequiredArgs();
612593

594+
int NumFixedArgs = FI.getNumRequiredArgs();
613595
int ArgNum = 0;
614596
for (auto &I : FI.arguments()) {
615597
bool IsFixed = ArgNum < NumFixedArgs;
616-
I.info = classifyArgumentType(I.type, IsFixed, Offset, HasV0);
598+
I.info = classifyArgumentType(I.type, IsFixed, Offset);
617599
ArgNum++;
618600
}
619601
}

clang/lib/CodeGen/Targets/RISCV.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ class RISCVABIInfo : public DefaultABIInfo {
7676
NumArgFPRs(FLen != 0 ? 8 : 0), EABI(EABI) {
7777
if (CGT.getTarget().getABI() == "cheriot") {
7878
// NB: not for "cheriot-baremetal"
79-
RuntimeCC = llvm::CallingConv::CHERI_LibCall;
79+
RuntimeCC = llvm::CallingConv::CHERIoT_LibraryCall;
8080
AtomicsCC = CallingConv::CC_CHERILibCall;
8181
}
8282
}

clang/test/CodeGen/cheri/cheri-ccall-attrs.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ void bar(int a, int b)
3434
{
3535
// CHECK-LABEL: define dso_local void @bar(i32
3636
// CHECK: load i64, ptr @__cheri_method.cls.foo, align 8, [[$INVARIANT_LOAD:!invariant.load ![0-9]+]]
37-
// CHECK: call chericcallcc void @cheri_invoke(ptr addrspace(200) inreg %{{.*}}, ptr addrspace(200) inreg %{{.*}}, i64 noundef zeroext %{{.*}}, i32 noundef signext %{{.*}}, i32 noundef signext %{{.*}})
37+
// CHECK: call cheriot_compartmentcallcc void @cheri_invoke(ptr addrspace(200) inreg %{{.*}}, ptr addrspace(200) inreg %{{.*}}, i64 noundef zeroext %{{.*}}, i32 noundef signext %{{.*}}, i32 noundef signext %{{.*}})
3838
foo_cap(other, a, b);
39-
// CHECK: call chericcallcc void @cheri_invoke(ptr addrspace(200) noundef %{{.*}}, ptr addrspace(200) noundef %{{.*}}, i64 noundef zeroext %{{.*}}, i32 noundef signext %{{.*}}, i32 noundef signext %{{.*}})
39+
// CHECK: call cheriot_compartmentcallcc void @cheri_invoke(ptr addrspace(200) noundef %{{.*}}, ptr addrspace(200) noundef %{{.*}}, i64 noundef zeroext %{{.*}}, i32 noundef signext %{{.*}}, i32 noundef signext %{{.*}})
4040
foo(a,b);
4141
}
4242

@@ -45,7 +45,7 @@ __attribute__((cheri_method_class(cls)))
4545
__attribute__((cheri_method_suffix("_cap")))
4646
void fish(void)
4747
{
48-
// CHECK-LABEL: define dso_local chericcallee void @fish()
48+
// CHECK-LABEL: define dso_local cheriot_compartmentcalleecc void @fish()
4949
}
5050

5151
__attribute__((cheri_method_suffix("_cap")))
@@ -55,17 +55,17 @@ void flibble(void);
5555
// CHECK-LABEL: define dso_local void @call()
5656
void call(void)
5757
{
58-
// CHECK: call chericcallee void @fish()
58+
// CHECK: call cheriot_compartmentcalleecc void @fish()
5959
fish();
6060
// Check that we get a ccall to cheri_invoke with the correct method number
6161
// CHECK: load i64, ptr @__cheri_method.cls.fish, align 8, [[$INVARIANT_LOAD]]
62-
// CHECK: call chericcallcc void
62+
// CHECK: call cheriot_compartmentcallcc void
6363
// CHECK: @cheri_invoke
6464
fish_cap(other);
6565
// CHECK: call void @flibble()
6666
flibble();
6767
// CHECK: load i64, ptr @__cheri_method.cls.flibble, align 8, [[$INVARIANT_LOAD]]
68-
// CHECK: call chericcallcc void
68+
// CHECK: call cheriot_compartmentcallcc void
6969
// CHECK: @cheri_invoke
7070
flibble_cap(other);
7171
}

clang/test/CodeGen/cheri/cheri-ccall-struct-arg.c

Lines changed: 0 additions & 79 deletions
This file was deleted.

clang/test/CodeGen/cheri/cheri-ccall.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@ b(__capability void*a1, __capability void*a2, __capability void *a3, __capabilit
66
void a(__capability void *a1, __capability void *a2)
77
{
88
// CHECK: a(
9-
// CHECK: call chericcallcc void @b
9+
// CHECK: call cheriot_compartmentcallcc void @b
1010
b(a1, a2, a1, a2);
1111
}

clang/test/CodeGen/cheri/cheri-mcu-call-libcall.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ int foo(void);
99

1010
// CHECK: define dso_local i32 @callFromNotLibcall() local_unnamed_addr addrspace(200) #0 {
1111
int callFromNotLibcall(void) {
12-
// CHECK: call cherilibcallcc i32 @_Z3addii(i32 noundef 1, i32 noundef 2) #2
13-
// CHECK: call cherilibcallcc i32 @_Z3foov() #2
12+
// CHECK: call cheriot_librarycallcc i32 @_Z3addii(i32 noundef 1, i32 noundef 2) #2
13+
// CHECK: call cheriot_librarycallcc i32 @_Z3foov() #2
1414
return add(1, 2) + foo();
1515
}
1616

17-
// CHECK: declare cherilibcallcc i32 @_Z3addii(i32 noundef, i32 noundef) local_unnamed_addr addrspace(200) #1
18-
// CHECK: declare cherilibcallcc i32 @_Z3foov() local_unnamed_addr addrspace(200) #1
17+
// CHECK: declare cheriot_librarycallcc i32 @_Z3addii(i32 noundef, i32 noundef) local_unnamed_addr addrspace(200) #1
18+
// CHECK: declare cheriot_librarycallcc i32 @_Z3foov() local_unnamed_addr addrspace(200) #1
1919

2020
// CHECK: attributes #0
2121
// CHECK-SAME: "cheri-compartment"="example"

clang/test/CodeGen/cheri/cheri-mcu-ccall.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// RUN: %clang_cc1 %s -o - "-triple" "riscv32cheriot-unknown-cheriotrtos" "-emit-llvm" "-mframe-pointer=none" "-mcmodel=small" "-target-abi" "cheriot" "-target-feature" "+xcheriot" "-Oz" "-Werror" "-cheri-compartment=example" | FileCheck %s
22

3-
// CHECK: define dso_local chericcallee i32 @_Z5test2ii(i32 noundef %a0, i32 noundef %a1) local_unnamed_addr addrspace(200) #0
3+
// CHECK: define dso_local cheriot_compartmentcalleecc i32 @_Z5test2ii(i32 noundef %a0, i32 noundef %a1) local_unnamed_addr addrspace(200) #0
44
__attribute__((cheriot_compartment("example"))) int test2(int a0, int a1) {
55
return a0 + a1;
66
}
@@ -10,7 +10,7 @@ __attribute__((cheriot_compartment("other"))) int test6callee(int *a0, int *a1,
1010
int testcall6() {
1111
static int stack_arg;
1212
int args[8];
13-
// CHECK: call chericcallcc i32 @_Z11test6calleePiS_S_S_S_S_
13+
// CHECK: call cheriot_compartmentcallcc i32 @_Z11test6calleePiS_S_S_S_S_
1414
return test6callee(
1515
&args[0],
1616
&args[1],
@@ -20,7 +20,7 @@ int testcall6() {
2020
&stack_arg);
2121
}
2222

23-
// CHECK: declare chericcallcc i32 @_Z11test6calleePiS_S_S_S_S_(ptr addrspace(200) noundef, ptr addrspace(200) noundef, ptr addrspace(200) noundef, ptr addrspace(200) noundef, ptr addrspace(200) noundef, ptr addrspace(200) noundef) local_unnamed_addr addrspace(200) #3
23+
// CHECK: declare cheriot_compartmentcallcc i32 @_Z11test6calleePiS_S_S_S_S_(ptr addrspace(200) noundef, ptr addrspace(200) noundef, ptr addrspace(200) noundef, ptr addrspace(200) noundef, ptr addrspace(200) noundef, ptr addrspace(200) noundef) local_unnamed_addr addrspace(200) #3
2424

2525
// CHECK: attributes #0 = {
2626
// CHECK-SAME: "cheri-compartment"="example"

clang/test/CodeGen/cheri/cheri-mcu-interrupts.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,20 +24,20 @@ int inherit(void)
2424

2525
// The default for exported functions should be interrupts enabled
2626
//
27-
// CHECK: define dso_local chericcallee noundef i32 @_Z21default_enable_calleev() local_unnamed_addr addrspace(200) #[[DEFEN:[0-9]]]
27+
// CHECK: define dso_local cheriot_compartmentcalleecc noundef i32 @_Z21default_enable_calleev() local_unnamed_addr addrspace(200) #[[DEFEN:[0-9]]]
2828
__attribute__((cheri_compartment("example")))
2929
int default_enable_callee(void)
3030
{
3131
return 0;
3232
}
3333

34-
// CHECK: define dso_local chericcallcc void @default_enable_callback() local_unnamed_addr addrspace(200) #[[DEFEN]]
34+
// CHECK: define dso_local cheriot_compartmentcallcc void @default_enable_callback() local_unnamed_addr addrspace(200) #[[DEFEN]]
3535
__attribute__((cheri_ccallback))
3636
void default_enable_callback(void)
3737
{
3838
}
3939

40-
// CHECK: define dso_local chericcallcc void @default_enable_callback2() local_unnamed_addr addrspace(200) #[[DEFEN]]
40+
// CHECK: define dso_local cheriot_compartmentcallcc void @default_enable_callback2() local_unnamed_addr addrspace(200) #[[DEFEN]]
4141
__attribute__((cheriot_ccallback))
4242
void default_enable_callback2(void)
4343
{
@@ -46,15 +46,15 @@ void default_enable_callback2(void)
4646

4747
// Explicitly setting interrupt status should override the default
4848

49-
// CHECK: define dso_local chericcallee noundef i32 @_Z23explicit_disable_calleev() local_unnamed_addr addrspace(200) #[[EXPDIS:[0-9]]]
49+
// CHECK: define dso_local cheriot_compartmentcalleecc noundef i32 @_Z23explicit_disable_calleev() local_unnamed_addr addrspace(200) #[[EXPDIS:[0-9]]]
5050
__attribute__((cheriot_interrupt_state(disabled)))
5151
__attribute__((cheri_compartment("example")))
5252
int explicit_disable_callee(void)
5353
{
5454
return 0;
5555
}
5656

57-
// CHECK: define dso_local chericcallcc void @explicit_disable_callback() local_unnamed_addr addrspace(200) #[[EXPDIS]]
57+
// CHECK: define dso_local cheriot_compartmentcallcc void @explicit_disable_callback() local_unnamed_addr addrspace(200) #[[EXPDIS]]
5858
__attribute__((cheriot_interrupt_state(disabled)))
5959
__attribute__((cheri_ccallback))
6060
void explicit_disable_callback(void)
@@ -84,15 +84,15 @@ int inherit1(void)
8484
return foo();
8585
}
8686

87-
// CHECK: define dso_local chericcallee noundef i32 @_Z24explicit_disable_callee1v() local_unnamed_addr addrspace(200) #[[EXPDIS]]
87+
// CHECK: define dso_local cheriot_compartmentcalleecc noundef i32 @_Z24explicit_disable_callee1v() local_unnamed_addr addrspace(200) #[[EXPDIS]]
8888
__attribute__((cheri_interrupt_state(disabled)))
8989
__attribute__((cheri_compartment("example")))
9090
int explicit_disable_callee1(void)
9191
{
9292
return 0;
9393
}
9494

95-
// CHECK: define dso_local chericcallcc void @explicit_disable_callback1() local_unnamed_addr addrspace(200) #[[EXPDIS]]
95+
// CHECK: define dso_local cheriot_compartmentcallcc void @explicit_disable_callback1() local_unnamed_addr addrspace(200) #[[EXPDIS]]
9696
__attribute__((cheri_interrupt_state(disabled)))
9797
__attribute__((cheri_ccallback))
9898
void explicit_disable_callback1(void)

clang/test/CodeGen/cheri/cheri-pointer-interpretation-call.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,15 @@ void *baz(void*, void*);
3434
// CHECK-NEXT: [[TMP2:%.*]] = load i64, ptr @__cheri_method.def.baz, align 8, !invariant.load !2
3535
// CHECK-NEXT: [[TMP3:%.*]] = load ptr addrspace(200), ptr @def, align 16
3636
// CHECK-NEXT: [[TMP4:%.*]] = load ptr addrspace(200), ptr getelementptr inbounds nuw ([[STRUCT_CHERI_CLASS:%.*]], ptr @def, i32 0, i32 1), align 16
37-
// CHECK-NEXT: [[CALL:%.*]] = call chericcallcc ptr @cheri_invoke(ptr addrspace(200) noundef [[TMP3]], ptr addrspace(200) noundef [[TMP4]], i64 noundef zeroext [[TMP2]], ptr noundef [[TMP0]], ptr noundef [[TMP1]])
37+
// CHECK-NEXT: [[CALL:%.*]] = call cheriot_compartmentcallcc ptr @cheri_invoke(ptr addrspace(200) noundef [[TMP3]], ptr addrspace(200) noundef [[TMP4]], i64 noundef zeroext [[TMP2]], ptr noundef [[TMP0]], ptr noundef [[TMP1]])
3838
// CHECK-NEXT: [[TMP5:%.*]] = load ptr, ptr [[A_ADDR]], align 8
3939
// CHECK-NEXT: [[TMP6:%.*]] = addrspacecast ptr [[TMP5]] to ptr addrspace(200)
4040
// CHECK-NEXT: [[TMP7:%.*]] = load ptr, ptr [[B_ADDR]], align 8
4141
// CHECK-NEXT: [[TMP8:%.*]] = addrspacecast ptr [[TMP7]] to ptr addrspace(200)
4242
// CHECK-NEXT: [[TMP9:%.*]] = load i64, ptr @__cheri_method.def.foo, align 8, !invariant.load !2
4343
// CHECK-NEXT: [[TMP10:%.*]] = load ptr addrspace(200), ptr @def, align 16
4444
// CHECK-NEXT: [[TMP11:%.*]] = load ptr addrspace(200), ptr getelementptr inbounds nuw ([[STRUCT_CHERI_CLASS]], ptr @def, i32 0, i32 1), align 16
45-
// CHECK-NEXT: [[CALL1:%.*]] = call chericcallcc ptr addrspace(200) @cheri_invoke(ptr addrspace(200) noundef [[TMP10]], ptr addrspace(200) noundef [[TMP11]], i64 noundef zeroext [[TMP9]], ptr addrspace(200) noundef [[TMP6]], ptr addrspace(200) noundef [[TMP8]])
45+
// CHECK-NEXT: [[CALL1:%.*]] = call cheriot_compartmentcallcc ptr addrspace(200) @cheri_invoke(ptr addrspace(200) noundef [[TMP10]], ptr addrspace(200) noundef [[TMP11]], i64 noundef zeroext [[TMP9]], ptr addrspace(200) noundef [[TMP6]], ptr addrspace(200) noundef [[TMP8]])
4646
// CHECK-NEXT: [[CALL1_ASCAST:%.*]] = addrspacecast ptr addrspace(200) [[CALL1]] to ptr
4747
// CHECK-NEXT: ret ptr [[CALL1_ASCAST]]
4848
//

0 commit comments

Comments
 (0)