Skip to content

Commit 7c7ec42

Browse files
committed
[SOL] Add v4 CPU type for SBF (#147)
1 parent 4a1c410 commit 7c7ec42

File tree

10 files changed

+37
-3
lines changed

10 files changed

+37
-3
lines changed

lldb/include/lldb/Utility/ArchSpec.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ class ArchSpec {
111111
eSBFSubType_sbfv1,
112112
eSBFSubType_sbfv2,
113113
eSBFSubType_sbfv3,
114+
eSBFSubType_sbfv4,
114115
};
115116

116117
enum RISCVSubType {
@@ -253,6 +254,7 @@ class ArchSpec {
253254
eCore_sbfv1,
254255
eCore_sbfv2,
255256
eCore_sbfv3,
257+
eCore_sbfv4,
256258

257259
kNumCores,
258260

lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,8 @@ static uint32_t sbfVariantFromElfFlags(const elf::ELFHeader &header) {
259259
return ArchSpec::eSBFSubType_sbfv2;
260260
case llvm::ELF::EF_SBF_V3:
261261
return ArchSpec::eSBFSubType_sbfv3;
262+
case llvm::ELF::EF_SBF_V4:
263+
return ArchSpec::eSBFSubType_sbfv4;
262264
default:
263265
return ArchSpec::eSBFSubType_sbfv0;
264266
}

lldb/source/Utility/ArchSpec.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,7 @@ static const CoreDefinition g_core_definitions[] = {
253253
{eByteOrderLittle, 8, 8, 8, llvm::Triple::sbf, ArchSpec::eCore_sbfv1, "sbfv1"},
254254
{eByteOrderLittle, 8, 8, 8, llvm::Triple::sbf, ArchSpec::eCore_sbfv2, "sbfv2"},
255255
{eByteOrderLittle, 8, 8, 8, llvm::Triple::sbf, ArchSpec::eCore_sbfv3, "sbfv3"},
256+
{eByteOrderLittle, 8, 8, 8, llvm::Triple::sbf, ArchSpec::eCore_sbfv4, "sbfv4"},
256257
};
257258

258259
// Ensure that we have an entry in the g_core_definitions for each core. If you
@@ -447,6 +448,8 @@ static const ArchDefinitionEntry g_elf_arch_entries[] = {
447448
0xFFFFFFFFu, 0xFFFFFFFFu}, // sbfv2
448449
{ArchSpec::eCore_sbfv3, llvm::ELF::EM_SBF, ArchSpec::eSBFSubType_sbfv3,
449450
0xFFFFFFFFu, 0xFFFFFFFFu}, // sbfv3
451+
{ArchSpec::eCore_sbfv4, llvm::ELF::EM_SBF, ArchSpec::eSBFSubType_sbfv4,
452+
0xFFFFFFFFu, 0xFFFFFFFFu}, // sbfv3
450453
};
451454

452455
static const ArchDefinition g_elf_arch_def = {

llvm/include/llvm/BinaryFormat/ELF.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -957,6 +957,7 @@ enum : unsigned {
957957
EF_SBF_V1 = 0x01,
958958
EF_SBF_V2 = 0x02,
959959
EF_SBF_V3 = 0x03,
960+
EF_SBF_V4 = 0x04,
960961
};
961962

962963
// ELF Relocation types for SBF.

llvm/lib/Target/SBF/MCTargetDesc/SBFMCTargetDesc.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ static MCStreamer *createSBFMCStreamer(const Triple &T, MCContext &Ctx,
7676
EFlag = llvm::ELF::EF_SBF_V2;
7777
} else if (CPU == "v3") {
7878
EFlag = llvm::ELF::EF_SBF_V3;
79+
} else if (CPU == "v4") {
80+
EFlag = llvm::ELF::EF_SBF_V4;
7981
}
8082
S->getWriter().setELFHeaderEFlags(EFlag);
8183

llvm/lib/Target/SBF/SBFSubtarget.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ void SBFSubtarget::initializeEnvironment(const Triple &TT) {
4343
assert(TT.getArch() == Triple::sbf && "expected Triple::sbf");
4444
UseDwarfRIS = false;
4545

46-
// SBFv2 features
46+
// New SBF features
4747
HasJmpExt = false;
4848
HasDynamicFrames = false;
4949
DisableNeg = false;
@@ -56,6 +56,7 @@ void SBFSubtarget::initializeEnvironment(const Triple &TT) {
5656
HasExplicitSignExt = false;
5757
NewMemEncoding = false;
5858
HasStaticSyscalls = false;
59+
IsAbiV2 = false;
5960
}
6061

6162
void SBFSubtarget::initSubtargetFeatures(StringRef CPU, StringRef FS) {

llvm/lib/Target/SBF/SBFSubtarget.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@ class SBFSubtarget : public SBFGenSubtargetInfo {
8888
// Whether we enable the new encoding for memory instructions
8989
bool NewMemEncoding;
9090

91+
// Whether we are using AbiV2
92+
bool IsAbiV2;
93+
9194
std::unique_ptr<CallLowering> CallLoweringInfo;
9295
std::unique_ptr<InstructionSelector> InstSelector;
9396
std::unique_ptr<LegalizerInfo> Legalizer;

llvm/lib/Target/SBF/SBFTargetFeatures.td

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,15 +52,26 @@ def FeatureNewMemEncoding : SubtargetFeature<"mem-encoding", "NewMemEncoding",
5252
def FeatureJumpExt : SubtargetFeature<"jmp-ext", "HasJmpExt",
5353
"true", "Enable jumps with less than and less than or equal">;
5454

55+
def FeatureAbiV2 : SubtargetFeature<"abi-v2", "IsAbiV2",
56+
"true", "Enables AbiV2 in SBF (no-op in LLVM)">;
57+
58+
5559
class Proc<string Name, list<SubtargetFeature> Features>
5660
: Processor<Name, NoItineraries, Features>;
5761

5862
def : Proc<"generic", []>;
5963

6064
def : Proc<"v1", [FeatureDynamicFrames, FeatureStoreImm, FeatureJumpExt]>;
65+
6166
def : Proc<"v2", [FeatureDynamicFrames, FeatureStoreImm, FeatureJumpExt, FeatureDisableLddw,
6267
FeatureNewMemEncoding, FeatureCallxRegSrc, FeaturePqrInstr, FeatureExplicitSext,
6368
FeatureDisableNeg, FeatureReverseSubImm, ALU32]>;
69+
6470
def : Proc<"v3", [FeatureDynamicFrames, FeatureStoreImm, FeatureJumpExt, FeatureDisableLddw,
6571
FeatureNewMemEncoding, FeatureCallxRegSrc, FeaturePqrInstr, FeatureExplicitSext,
66-
FeatureDisableNeg, FeatureReverseSubImm, ALU32, FeatureStaticSyscalls, FeatureRelocAbs64]>;
72+
FeatureDisableNeg, FeatureReverseSubImm, ALU32, FeatureStaticSyscalls, FeatureRelocAbs64]>;
73+
74+
def : Proc<"v4", [FeatureDynamicFrames, FeatureStoreImm, FeatureJumpExt, FeatureDisableLddw,
75+
FeatureNewMemEncoding, FeatureCallxRegSrc, FeaturePqrInstr, FeatureExplicitSext,
76+
FeatureDisableNeg, FeatureReverseSubImm, ALU32, FeatureStaticSyscalls, FeatureRelocAbs64,
77+
FeatureAbiV2]>;

llvm/test/MC/SBF/elf-flags.s

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@
2222
# RUN: llvm-mc -triple=sbpfv3-solana-solana -filetype=obj < %s \
2323
# RUN: | llvm-readobj --file-headers - \
2424
# RUN: | FileCheck -check-prefix=CHECK-SBFV3 %s
25-
25+
# RUN: llvm-mc -triple=sbf-solana-solana -mcpu=v4 -filetype=obj < %s \
26+
# RUN: | llvm-readobj --file-headers - \
27+
# RUN: | FileCheck -check-prefix=CHECK-SBFV4 %s
2628

2729
# CHECK-NONE: Flags [ (0x0)
2830
# CHECK-NONE-NEXT: ]
@@ -40,4 +42,8 @@
4042
# CHECK-SBFV3-NEXT: 0x2
4143
# CHECK-SBFV3-NEXT: ]
4244

45+
# CHECK-SBFV4: Flags [ (0x4)
46+
# CHECK-SBFV4-NEXT: 0x4
47+
# CHECK-SBFV4-NEXT: ]
48+
4349
mov64 r0, r0

llvm/tools/llvm-objdump/llvm-objdump.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2601,6 +2601,9 @@ static void disassembleObject(ObjectFile *Obj, bool InlineRelocs) {
26012601
case llvm::ELF::EF_SBF_V3:
26022602
MCPU = "v3";
26032603
break;
2604+
case llvm::ELF::EF_SBF_V4:
2605+
MCPU = "v4";
2606+
break;
26042607
default:
26052608
MCPU = "generic";
26062609
break;

0 commit comments

Comments
 (0)