Skip to content

Commit 49f4e0e

Browse files
committed
backport sbpfv3 target
1 parent 70397c1 commit 49f4e0e

5 files changed

Lines changed: 62 additions & 7 deletions

File tree

build.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,4 @@ esac
2020
if [ "$1" == "--llvm" ]; then
2121
rm -f build/${HOST_TRIPLE}/llvm/llvm-finished-building;
2222
fi
23-
./x.py build --stage 1 --target ${HOST_TRIPLE},bpfel-unknown-unknown,sbf-solana-solana
23+
./x.py build --stage 1 --target ${HOST_TRIPLE},bpfel-unknown-unknown,sbf-solana-solana,sbpfv3-solana-solana

compiler/rustc_target/src/spec/base/sbf_base.rs

Lines changed: 58 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
use crate::abi::Endian;
22
use crate::spec::{Cc, cvs, LinkerFlavor, Lld, PanicStrategy, TargetOptions};
33

4-
pub fn opts() -> TargetOptions {
5-
let linker_script = r"
4+
const V0_LINKER_SCRIPT: &str = r"
65
PHDRS
76
{
87
text PT_LOAD ;
@@ -28,10 +27,64 @@ SECTIONS
2827
}
2928
}
3029
";
30+
31+
const V3_LINKER_SCRIPT: &str = r"
32+
SECTIONS
33+
{
34+
.rodata 0x000000000 : SUBALIGN(8) {
35+
BYTE(0);
36+
*(.rodata*)
37+
*(.data.rel.ro*)
38+
. = ALIGN(8);
39+
} :rodata
40+
.text 0x100000000 : {
41+
*(.text*)
42+
} :text
43+
/DISCARD/ : {
44+
*(.comment*)
45+
*(.eh_frame*)
46+
*(*hash*)
47+
*(.bss*)
48+
*(.data*)
49+
*(.rel.dyn*)
50+
*(.dynamic)
51+
*(.dynsym)
52+
*(.dynstr)
53+
}
54+
}
55+
56+
PHDRS
57+
{
58+
rodata PT_LOAD FLAGS(4);
59+
text PT_LOAD FLAGS(1);
60+
other PT_NULL FLAGS(0);
61+
}
62+
63+
";
64+
65+
pub(crate) fn opts(version: &'static str) -> TargetOptions {
66+
let mut linker_args = vec!["--threads=1", "notext"];
67+
let linker_script = if version == "v3" || version == "v4" {
68+
V3_LINKER_SCRIPT
69+
} else {
70+
linker_args.push("-z");
71+
linker_args.push("max-page-size=4096");
72+
V0_LINKER_SCRIPT
73+
};
3174
let pre_link_args = TargetOptions::link_args(
3275
LinkerFlavor::Gnu(Cc::No, Lld::No),
33-
&["--threads=1", "-z", "notext"],
76+
&linker_args,
3477
);
78+
let cpu = if version == "v0" {
79+
"generic"
80+
} else {
81+
version
82+
};
83+
let features = match version {
84+
"v4" => "+solana,+static-syscalls,+abi-v2",
85+
"v3" => "+solana,+static-syscalls",
86+
_ => "+solana,"
87+
};
3588

3689
TargetOptions {
3790
allow_asm: true,
@@ -44,7 +97,6 @@ SECTIONS
4497
endian: Endian::Little,
4598
env: "".into(),
4699
executables: true,
47-
features: "+solana".into(),
48100
families: cvs!["solana"],
49101
link_script: Some(linker_script.into()),
50102
linker: Some("rust-lld".into()),
@@ -61,6 +113,8 @@ SECTIONS
61113
singlethread: true,
62114
vendor: "solana".into(),
63115
c_enum_min_bits: Some(32),
116+
cpu: cpu.into(),
117+
features: features.into(),
64118
.. Default::default()
65119
}
66120
}

compiler/rustc_target/src/spec/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1693,6 +1693,7 @@ supported_targets! {
16931693
("bpfel-unknown-none", bpfel_unknown_none),
16941694
("bpfel-unknown-unknown", bpfel_unknown_unknown),
16951695
("sbf-solana-solana", sbf_solana_solana),
1696+
("sbpfv3-solana-solana", sbpfv3_solana_solana),
16961697

16971698
("armv6k-nintendo-3ds", armv6k_nintendo_3ds),
16981699

compiler/rustc_target/src/spec/targets/bpfel_unknown_unknown.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@ pub fn target() -> Target {
77
pointer_width: 64,
88
arch: "bpf".into(),
99
data_layout: "e-m:e-p:64:64-i64:64-n32:64-S128".into(),
10-
options: sbf_base::opts(),
10+
options: sbf_base::opts("v0"),
1111
}
1212
}

compiler/rustc_target/src/spec/targets/sbf_solana_solana.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@ pub fn target() -> Target {
77
pointer_width: 64,
88
arch: "sbf".into(),
99
data_layout: "e-m:e-p:64:64-i64:64-n32:64-S128".into(),
10-
options: sbf_base::opts(),
10+
options: sbf_base::opts("v0"),
1111
}
1212
}

0 commit comments

Comments
 (0)