From 6e69ffe3694f23f731751ee665a80b6c58083197 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Mei=C3=9Fner?= Date: Thu, 24 Oct 2024 16:37:33 +0100 Subject: [PATCH] Adds new linker script and test ELF. --- tests/elfs/elf.ld | 35 ++++++++++++++++++++--------------- tests/elfs/elf_sbpfv1.ld | 26 ++++++++++++++++++++++++++ tests/elfs/elfs.sh | 9 ++++++--- tests/elfs/strict_header.rs | 13 +++++++++++++ tests/elfs/strict_header.so | Bin 0 -> 13688 bytes 5 files changed, 65 insertions(+), 18 deletions(-) create mode 100644 tests/elfs/elf_sbpfv1.ld create mode 100644 tests/elfs/strict_header.rs create mode 100644 tests/elfs/strict_header.so diff --git a/tests/elfs/elf.ld b/tests/elfs/elf.ld index e01debd2..d57647af 100644 --- a/tests/elfs/elf.ld +++ b/tests/elfs/elf.ld @@ -1,26 +1,31 @@ PHDRS { - text PT_LOAD ; + text PT_LOAD ; rodata PT_LOAD ; - data PT_LOAD ; - dynamic PT_DYNAMIC ; + stack PT_GNU_STACK ; + heap PT_LOAD ; + dynsym PT_LOAD ; + other PT_NULL ; } SECTIONS { - . = SIZEOF_HEADERS; - .text : { *(.text*) } :text - .rodata : { *(.rodata*) } :rodata - .data.rel.ro : { *(.data.rel.ro*) } :rodata - .dynamic : { *(.dynamic) } :dynamic - .dynsym : { *(.dynsym) } :data - .dynstr : { *(.dynstr) } :data - .rel.dyn : { *(.rel.dyn) } :data - .data : { *(.data*) } :data - .bss : { *(.bss*) } :data + .text 0x000000000 : { *(.text*) } :text + .rodata 0x100000000 : { *(.rodata*) } :rodata + .bss.stack 0x200000000 : { *(.bss.stack*) } :stack + .bss.heap 0x300000000 : { *(.bss.heap*) } :heap + .dynsym 0xFFFFFFFF00000000 : { *(.dynsym) } :dynsym + .dynstr : { *(.dynstr) } :other + .dynamic : { *(.dynamic) } :other + .symtab : { *(.symtab) } :other + .shstrtab : { *(.shstrtab) } :other + .strtab : { *(.strtab) } :other /DISCARD/ : { + *(.comment*) *(.eh_frame*) - *(.gnu.hash*) - *(.hash*) + *(*hash*) + *(.bss*) + *(.data*) + *(.rel.dyn*) } } diff --git a/tests/elfs/elf_sbpfv1.ld b/tests/elfs/elf_sbpfv1.ld new file mode 100644 index 00000000..859ab669 --- /dev/null +++ b/tests/elfs/elf_sbpfv1.ld @@ -0,0 +1,26 @@ +PHDRS +{ + text PT_LOAD ; + rodata PT_LOAD ; + data PT_LOAD ; + dynamic PT_DYNAMIC ; +} + +SECTIONS +{ + . = SIZEOF_HEADERS; + .text : { *(.text*) } :text + .rodata : { *(.rodata*) } :rodata + .data.rel.ro : { *(.data.rel.ro*) } :rodata + .dynamic : { *(.dynamic) } :dynamic + .dynsym : { *(.dynsym) } :data + .dynstr : { *(.dynstr) } :data + .rel.dyn : { *(.rel.dyn) } :data + .data : { *(.data*) } :data + .bss : { *(.bss*) } :data + /DISCARD/ : { + *(.eh_frame*) + *(.gnu.hash*) + *(.hash*) + } +} diff --git a/tests/elfs/elfs.sh b/tests/elfs/elfs.sh index 5f02e69b..f8cfc974 100755 --- a/tests/elfs/elfs.sh +++ b/tests/elfs/elfs.sh @@ -7,9 +7,12 @@ TOOLCHAIN=../../../agave/sdk/sbf/dependencies/platform-tools RC_COMMON="$TOOLCHAIN/rust/bin/rustc --target sbf-solana-solana --crate-type lib -C panic=abort -C opt-level=2" RC="$RC_COMMON -C target_cpu=sbfv2" RC_V1="$RC_COMMON -C target_cpu=generic" -LD_COMMON="$TOOLCHAIN/llvm/bin/ld.lld -z notext -shared --Bdynamic -entry entrypoint --script elf.ld" -LD="$LD_COMMON --section-start=.text=0x100000000" -LD_V1=$LD_COMMON +LD_COMMON="$TOOLCHAIN/llvm/bin/ld.lld -z notext -shared --Bdynamic -entry entrypoint" +LD="$LD_COMMON --script elf.ld" +LD_V1="$LD_COMMON --script elf_sbpfv1.ld" + +$RC -o strict_header.o strict_header.rs +$LD -o strict_header.so strict_header.o $RC_V1 -o relative_call.o relative_call.rs $LD_V1 -o relative_call_sbpfv1.so relative_call.o diff --git a/tests/elfs/strict_header.rs b/tests/elfs/strict_header.rs new file mode 100644 index 00000000..e90dd8b6 --- /dev/null +++ b/tests/elfs/strict_header.rs @@ -0,0 +1,13 @@ +#[link_section = ".bss.stack"] +pub static _STACK: [u8; 0x1000] = [0; 0x1000]; +#[link_section = ".bss.heap"] +pub static _HEAP: [u8; 0x1000] = [0; 0x1000]; + +static _VAL_A: u64 = 41; +static VAL_B: u64 = 42; +static _VAL_C: u64 = 43; + +#[no_mangle] +pub fn entrypoint() -> u64 { + return unsafe { core::ptr::read_volatile(&VAL_B) }; +} diff --git a/tests/elfs/strict_header.so b/tests/elfs/strict_header.so new file mode 100644 index 0000000000000000000000000000000000000000..02051c6e92ea5d4550e374a6ff971682be87f265 GIT binary patch literal 13688 zcmeHOL2DCH5PnT-qgJq15b+>6hzHSSvq?6|K}f6-#afk$q6fn!n>9h2mShEc67QZo zdCV zOp6!31kNcDv`oXy)3{)c8Dt*8(jtc4R$@v};*d9owVefH_X35rqj1OsCGYy5tz}MXLTjI0N zOH(yfKow90Q~^~$6;K6K0aZX1Pz6*0Rp7uC_{{$x|0aa{e$kcqaNw16LsdW(Pz6*0 zRX`O`1yli5Kow90Q~^~$6*w#fE*(~3t*Z*C0;+&2pbDr0s(>n>3aA3AfGVI0r~-$s z0L}s|*%JY-m6CKc7^jo1&5hAGwaj_u?HPIUPe~l(5+ffgFsF0#Kik_Ip!gVqJEPAr zI48fr{#izQ*MNLEPk)^G6O3mV{})hy&iu0H`m?zgX)OXhxa1d=8FWwqY zx7Hn|6N}OMsBb)C)2K%{oTd}!IW#mM_0ulp$AgJit2HW7(kw?wzgMZo^(*~nFFfCL zpRATE|3uavwpY5>%JpG0s8-{!nbaFW5{E(3F_|yK?!2(O_Mp9dn-Ux4APEz{Q4PX4 ztVcm-uPWV}o%THnP6h)%DOW1Zsvib^)TH3+k5}7wZY^8U4q(8$#K+zV$?nJRtCZ!) zm-jAoksRdnH4aN-Zc5hO6`#*PNnzmR4hpic*Ur5b?gKo`?(JMVo})3JZ};*!XrKHG z6o%hcwtxG*6aWAK literal 0 HcmV?d00001