From e7ad8ce7a18b0246401e62da538374c00523e0ee Mon Sep 17 00:00:00 2001 From: bjoernQ Date: Thu, 24 Feb 2022 09:33:42 +0100 Subject: [PATCH] Depend on the published riscv-rt --- esp32c3-hal/Cargo.toml | 6 +- esp32c3-hal/asm.S | 93 ++++++++++++++++++ .../bin/asm_riscv32i-unknown-none-elf.a | Bin 6334 -> 10146 bytes esp32c3-hal/ld/bl-riscv-link.x | 3 + esp32c3-hal/ld/db-riscv-link.x | 3 + 5 files changed, 100 insertions(+), 5 deletions(-) diff --git a/esp32c3-hal/Cargo.toml b/esp32c3-hal/Cargo.toml index 50dab48a8..bfa608264 100644 --- a/esp32c3-hal/Cargo.toml +++ b/esp32c3-hal/Cargo.toml @@ -31,6 +31,7 @@ bare-metal = "1.0" embedded-hal = { version = "0.2", features = ["unproven"] } nb = "1.0" riscv = "0.7" +riscv-rt = { version = "0.8.1", optional = true } void = { version = "1.0", default-features = false } r0 = "1.0.0" @@ -38,11 +39,6 @@ r0 = "1.0.0" path = "../esp-hal-common" features = ["esp32c3"] -[dependencies.riscv-rt] -git = "https://github.com/MabezDev/riscv-rt" -rev = "6b55e4aa3895924e31bcd151f2f0ab840836fa07" -optional = true - [build-dependencies] riscv-target = "0.1.2" diff --git a/esp32c3-hal/asm.S b/esp32c3-hal/asm.S index 0bd061f6b..3a2e76bf4 100644 --- a/esp32c3-hal/asm.S +++ b/esp32c3-hal/asm.S @@ -3,6 +3,99 @@ #define LOG_REGBYTES 2 #define REGBYTES (1 << LOG_REGBYTES) + +/* + Entry point of all programs (_start). + It initializes DWARF call frame information, the stack pointer, the + frame pointer (needed for closures to work in start_rust) and the global + pointer. Then it calls _start_rust. +*/ + +.section .init, "ax" +.global _start + +_start_hal: + /* Jump to the absolute address defined by the linker script. */ + lui ra, %hi(_abs_start_hal) + jr %lo(_abs_start_hal)(ra) + +_abs_start_hal: + .cfi_startproc + .cfi_undefined ra + + // unsupported on ESP32C3 + // csrw mie, 0 + // csrw mip, 0 + + li x1, 0 + li x2, 0 + li x3, 0 + li x4, 0 + li x5, 0 + li x6, 0 + li x7, 0 + li x8, 0 + li x9, 0 + li x10,0 + li x11,0 + li x12,0 + li x13,0 + li x14,0 + li x15,0 + li x16,0 + li x17,0 + li x18,0 + li x19,0 + li x20,0 + li x21,0 + li x22,0 + li x23,0 + li x24,0 + li x25,0 + li x26,0 + li x27,0 + li x28,0 + li x29,0 + li x30,0 + li x31,0 + + .option push + .option norelax + la gp, __global_pointer$ + .option pop + + // Check hart id + csrr a2, mhartid + lui t0, %hi(_max_hart_id) + add t0, t0, %lo(_max_hart_id) + bgtu a2, t0, abort + + // Allocate stacks + la sp, _stack_start + lui t0, %hi(_hart_stack_size) + add t0, t0, %lo(_hart_stack_size) +#ifdef __riscv_mul + mul t0, a2, t0 +#else + beqz a2, 2f // Jump if single-hart + mv t1, a2 + mv t2, t0 +1: + add t0, t0, t2 + addi t1, t1, -1 + bnez t1, 1b +2: +#endif + sub sp, sp, t0 + + // Set frame pointer + add s0, sp, zero + + jal zero, _start_rust + + .cfi_endproc + + /* Trap entry point (_start_trap) Saves registers and calls _start_trap_rust_hal, diff --git a/esp32c3-hal/bin/asm_riscv32i-unknown-none-elf.a b/esp32c3-hal/bin/asm_riscv32i-unknown-none-elf.a index 42d00c2901effe5cd8ecb1da769f406e0ab9313c..21de372b019f8aec07b06bf499a420bdee71b47e 100644 GIT binary patch literal 10146 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 M@83_u5cgs3-_p1XZU6uP literal 6334 zcmd^@eTZCF8OG0Eh;Kh6w*LN!3qWi6)L*4e?$_KdLa?zuP36RR}xV{o2ZyEQP50A;b)UkZXgxWXe!E= zQqj=SR8**>qT<;UkN5C+Pn5gd6Va8PC_kExhDzxzN!=S2n(6VBR)1Q(^p{qkRVyqh z6E#&UT2ZE`b*os?X1J+a!zL((V~@v*{MxyXUUj+)3ov{#^iLel`AF9 zU^CeoTuGWCooWr0Qf5~()!Ma^G6kJ(6-sHdyP0n7UP-qGbdL#3J!YWUQ&+*r7QUqa zZ?(9ZeR*-U-CkV1#8u|Xa)?8(-ELZy)>udiF=lXem*p1rGS6=JC_1(;Uycn>n6&93Z_AyUkDN?3i zo5W2#Wb_-VcR%y%@f+(eGV%G}gr1A9TF8BTja1TIzH!yMO)u+=>Q86%W^MXz>)X+{ zCDk3n9U%L6Js0e~aPOTbmuib2DE#5$2b?CtpLFrg9Rvh0`995;; zd6wFIefGT4xZhK?^W$UlV@o5dS8v$p9^pnd>)u4TPwgk{Bn>-mGb-urVRf<_vbxvP zn>^j`>8+mL=4qTe+wA;7N6P2Pc{=auf~QA3ZQs2x?fm<^@kvkb_w)fzANKT=r;m90 zxThcT^hr-od-{~8=RCdO=_OA$Jbl5_7d^e~>5qH*lb(Lu)1UG5=RN(Tr@!p!r#$_% zr@!XuXFUB)Pk-Cf-}Usfp8lbypZD}tPyg7{KlSv_Jblg6FM0Z9Pyfc#zw`9(J-zDb zKYRK$PygN1Ym0z9|J@Z)o_|lTEh~2XVt1KIc4r0{)w?!zJaS{cJ9RwH?^E8UV@7B7 zkfXcEU=+UeuQlWB3D>Cg3#Q@u+-6kYx;^@Ny?C<|=x5#qEq~u;9#_SwkwD$>`@;FX zQ9D;}{EHtQJPn?s%zH5*H=Z+d!eY|lUWYe1-0$#KhqpPr-QmFDoWpsC3l5JsJmK&@ zhbJB0@9+VK4?8^N@DYcPJN%HtCmo)4_>{wQ4lg*oDKZJA7>8bMgx=h zcfjxAjvJUHa}RUa3s)&HN#-DPh_4jfz$BUbnM1if!6ccZ@a47ylVsipe-n4yz$BUX zGlz29f=M#7@cX#q1}4eOGl#dpRSHa!S!51zLvsU@WX>^%@)H$Il6e&VX70FwNit35 z5MNBVfk`rtF^5~>Dg`FVJi#2wZ(=Y>=5z4nVFQz7z6k$T?zn+TGMAXcZE%$WlVrZa z9KHpvQecwI*O|k&!c_`PlDWbh-Ue4GFiGY+%;9#pN`Xl--)9c-os1ipB=a0|_%^so zfk`qyVh*!#l>(Dwe!?6E+;IbwWPZ*Z4!~6kOaVx#7rDYP#+XSm*WpLj2a{xe3qNOl zFiGYQ@OM}rOp0 zY#vOKxfOoF`e2gG?eKS7A54;o;1{hACdmxKAGSW2Br^8%pUlo)(4Yh?t(vN zeK1L;1b^K6V3N!s_!HI#lVl!%zsLGulFTvqd#w*9$vh1I?bZjAWXkaOSszT2slva* z`e2gGhv467eK1MpEd0By4<^Zc82+U7!6ccF!heVL!6ca${JX6WCdqsX{yo+QlVm;( zf4}v?B$+S3FIgW z2Q3HS_gIeSe79wPo=E1woI7QHRjhyH5&oAaZyPnco$FAedZD3;rz(w#D$dmFs#vQo zREqeAso<&V%(>I$h50kpb;kUe4=nP2@nB_UrdB<_Zn#pboH1=|J#>4nETdXu1 zwfUKI4IcbY8aVLqIP&U_CuclKdaf8_Z%+HIY&1$H`&!CwAQ0YDn&L_5vp z9`_C%E|ZFU2Nz)0~snYHT5chHWAy+bwf$ ong13%D<`<{nZP%3xt9|cNtQ<*S^FC^UhWzGJD!Xaw(A`CpRI=6J^%m! diff --git a/esp32c3-hal/ld/bl-riscv-link.x b/esp32c3-hal/ld/bl-riscv-link.x index ed74d0384..a32a85404 100644 --- a/esp32c3-hal/ld/bl-riscv-link.x +++ b/esp32c3-hal/ld/bl-riscv-link.x @@ -1,3 +1,6 @@ +ENTRY(_start_hal) +PROVIDE(_start_trap = _start_trap_hal); + PROVIDE(_stext = ORIGIN(REGION_TEXT)); PROVIDE(_stack_start = ORIGIN(REGION_STACK) + LENGTH(REGION_STACK)); PROVIDE(_max_hart_id = 0); diff --git a/esp32c3-hal/ld/db-riscv-link.x b/esp32c3-hal/ld/db-riscv-link.x index 54209d169..7e061153d 100644 --- a/esp32c3-hal/ld/db-riscv-link.x +++ b/esp32c3-hal/ld/db-riscv-link.x @@ -1,3 +1,6 @@ +ENTRY(_start_hal) +PROVIDE(_start_trap = _start_trap_hal); + PROVIDE(_stext = ORIGIN(REGION_TEXT)); PROVIDE(_stack_start = ORIGIN(REGION_STACK) + LENGTH(REGION_STACK)); PROVIDE(_max_hart_id = 0);