discard interrupt symbols from lto so that lto doesn't end up rebinding them (#1327)

This commit is contained in:
Scott Mabin 2024-03-21 15:38:07 +00:00 committed by GitHub
parent 0cb5e4e82d
commit 25f509ce74
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 132 additions and 139 deletions

View File

@ -1,35 +1,35 @@
PROVIDE(DefaultHandler = EspDefaultHandler);
PROVIDE(cpu_int_1_handler = DefaultHandler);
PROVIDE(cpu_int_2_handler = DefaultHandler);
PROVIDE(cpu_int_3_handler = DefaultHandler);
PROVIDE(cpu_int_4_handler = DefaultHandler);
PROVIDE(cpu_int_5_handler = DefaultHandler);
PROVIDE(cpu_int_6_handler = DefaultHandler);
PROVIDE(cpu_int_7_handler = DefaultHandler);
PROVIDE(cpu_int_8_handler = DefaultHandler);
PROVIDE(cpu_int_9_handler = DefaultHandler);
PROVIDE(cpu_int_10_handler = DefaultHandler);
PROVIDE(cpu_int_11_handler = DefaultHandler);
PROVIDE(cpu_int_12_handler = DefaultHandler);
PROVIDE(cpu_int_13_handler = DefaultHandler);
PROVIDE(cpu_int_14_handler = DefaultHandler);
PROVIDE(cpu_int_15_handler = DefaultHandler);
PROVIDE(cpu_int_16_handler = DefaultHandler);
PROVIDE(cpu_int_17_handler = DefaultHandler);
PROVIDE(cpu_int_18_handler = DefaultHandler);
PROVIDE(cpu_int_19_handler = DefaultHandler);
PROVIDE(cpu_int_20_handler = DefaultHandler);
PROVIDE(cpu_int_21_handler = DefaultHandler);
PROVIDE(cpu_int_22_handler = DefaultHandler);
PROVIDE(cpu_int_23_handler = DefaultHandler);
PROVIDE(cpu_int_24_handler = DefaultHandler);
PROVIDE(cpu_int_25_handler = DefaultHandler);
PROVIDE(cpu_int_26_handler = DefaultHandler);
PROVIDE(cpu_int_27_handler = DefaultHandler);
PROVIDE(cpu_int_28_handler = DefaultHandler);
PROVIDE(cpu_int_29_handler = DefaultHandler);
PROVIDE(cpu_int_30_handler = DefaultHandler);
PROVIDE(cpu_int_31_handler = DefaultHandler);
PROVIDE(interrupt1 = DefaultHandler);
PROVIDE(interrupt2 = DefaultHandler);
PROVIDE(interrupt3 = DefaultHandler);
PROVIDE(interrupt4 = DefaultHandler);
PROVIDE(interrupt5 = DefaultHandler);
PROVIDE(interrupt6 = DefaultHandler);
PROVIDE(interrupt7 = DefaultHandler);
PROVIDE(interrupt8 = DefaultHandler);
PROVIDE(interrupt9 = DefaultHandler);
PROVIDE(interrupt10 = DefaultHandler);
PROVIDE(interrupt11 = DefaultHandler);
PROVIDE(interrupt12 = DefaultHandler);
PROVIDE(interrupt13 = DefaultHandler);
PROVIDE(interrupt14 = DefaultHandler);
PROVIDE(interrupt15 = DefaultHandler);
PROVIDE(interrupt16 = DefaultHandler);
PROVIDE(interrupt17 = DefaultHandler);
PROVIDE(interrupt18 = DefaultHandler);
PROVIDE(interrupt19 = DefaultHandler);
PROVIDE(interrupt20 = DefaultHandler);
PROVIDE(interrupt21 = DefaultHandler);
PROVIDE(interrupt22 = DefaultHandler);
PROVIDE(interrupt23 = DefaultHandler);
PROVIDE(interrupt24 = DefaultHandler);
PROVIDE(interrupt25 = DefaultHandler);
PROVIDE(interrupt26 = DefaultHandler);
PROVIDE(interrupt27 = DefaultHandler);
PROVIDE(interrupt28 = DefaultHandler);
PROVIDE(interrupt29 = DefaultHandler);
PROVIDE(interrupt30 = DefaultHandler);
PROVIDE(interrupt31 = DefaultHandler);
INCLUDE "device.x"

View File

@ -439,119 +439,119 @@ mod vectored {
#[no_mangle]
#[ram]
unsafe fn cpu_int_1_handler(context: &mut TrapFrame) {
unsafe fn interrupt1(context: &mut TrapFrame) {
handle_interrupts(CpuInterrupt::Interrupt1, context)
}
#[no_mangle]
#[ram]
unsafe fn cpu_int_2_handler(context: &mut TrapFrame) {
unsafe fn interrupt2(context: &mut TrapFrame) {
handle_interrupts(CpuInterrupt::Interrupt2, context)
}
#[no_mangle]
#[ram]
unsafe fn cpu_int_3_handler(context: &mut TrapFrame) {
unsafe fn interrupt3(context: &mut TrapFrame) {
handle_interrupts(CpuInterrupt::Interrupt3, context)
}
#[no_mangle]
#[ram]
unsafe fn cpu_int_4_handler(context: &mut TrapFrame) {
unsafe fn interrupt4(context: &mut TrapFrame) {
handle_interrupts(CpuInterrupt::Interrupt4, context)
}
#[no_mangle]
#[ram]
unsafe fn cpu_int_5_handler(context: &mut TrapFrame) {
unsafe fn interrupt5(context: &mut TrapFrame) {
handle_interrupts(CpuInterrupt::Interrupt5, context)
}
#[no_mangle]
#[ram]
unsafe fn cpu_int_6_handler(context: &mut TrapFrame) {
unsafe fn interrupt6(context: &mut TrapFrame) {
handle_interrupts(CpuInterrupt::Interrupt6, context)
}
#[no_mangle]
#[ram]
unsafe fn cpu_int_7_handler(context: &mut TrapFrame) {
unsafe fn interrupt7(context: &mut TrapFrame) {
handle_interrupts(CpuInterrupt::Interrupt7, context)
}
#[no_mangle]
#[ram]
unsafe fn cpu_int_8_handler(context: &mut TrapFrame) {
unsafe fn interrupt8(context: &mut TrapFrame) {
handle_interrupts(CpuInterrupt::Interrupt8, context)
}
#[no_mangle]
#[ram]
unsafe fn cpu_int_9_handler(context: &mut TrapFrame) {
unsafe fn interrupt9(context: &mut TrapFrame) {
handle_interrupts(CpuInterrupt::Interrupt9, context)
}
#[no_mangle]
#[ram]
unsafe fn cpu_int_10_handler(context: &mut TrapFrame) {
unsafe fn interrupt10(context: &mut TrapFrame) {
handle_interrupts(CpuInterrupt::Interrupt10, context)
}
#[no_mangle]
#[ram]
unsafe fn cpu_int_11_handler(context: &mut TrapFrame) {
unsafe fn interrupt11(context: &mut TrapFrame) {
handle_interrupts(CpuInterrupt::Interrupt11, context)
}
#[no_mangle]
#[ram]
unsafe fn cpu_int_12_handler(context: &mut TrapFrame) {
unsafe fn interrupt12(context: &mut TrapFrame) {
handle_interrupts(CpuInterrupt::Interrupt12, context)
}
#[no_mangle]
#[ram]
unsafe fn cpu_int_13_handler(context: &mut TrapFrame) {
unsafe fn interrupt13(context: &mut TrapFrame) {
handle_interrupts(CpuInterrupt::Interrupt13, context)
}
#[no_mangle]
#[ram]
unsafe fn cpu_int_14_handler(context: &mut TrapFrame) {
unsafe fn interrupt14(context: &mut TrapFrame) {
handle_interrupts(CpuInterrupt::Interrupt14, context)
}
#[no_mangle]
#[ram]
unsafe fn cpu_int_15_handler(context: &mut TrapFrame) {
unsafe fn interrupt15(context: &mut TrapFrame) {
handle_interrupts(CpuInterrupt::Interrupt15, context)
}
#[cfg(plic)]
#[no_mangle]
#[ram]
unsafe fn cpu_int_16_handler(context: &mut TrapFrame) {
unsafe fn interrupt16(context: &mut TrapFrame) {
handle_interrupts(CpuInterrupt::Interrupt16, context)
}
#[cfg(plic)]
#[no_mangle]
#[ram]
unsafe fn cpu_int_17_handler(context: &mut TrapFrame) {
unsafe fn interrupt17(context: &mut TrapFrame) {
handle_interrupts(CpuInterrupt::Interrupt17, context)
}
#[cfg(plic)]
#[no_mangle]
#[ram]
unsafe fn cpu_int_18_handler(context: &mut TrapFrame) {
unsafe fn interrupt18(context: &mut TrapFrame) {
handle_interrupts(CpuInterrupt::Interrupt18, context)
}
#[cfg(plic)]
#[no_mangle]
#[ram]
unsafe fn cpu_int_19_handler(context: &mut TrapFrame) {
unsafe fn interrupt19(context: &mut TrapFrame) {
handle_interrupts(CpuInterrupt::Interrupt19, context)
}
}

View File

@ -512,157 +512,157 @@ r#"
_start_trap1:
addi sp, sp, -40*4
sw ra, 0(sp)
la ra, cpu_int_1_handler
la ra, interrupt1
j _start_trap_direct
_start_trap2:
addi sp, sp, -40*4
sw ra, 0(sp)
la ra, cpu_int_2_handler
la ra, interrupt2
j _start_trap_direct
_start_trap3:
addi sp, sp, -40*4
sw ra, 0(sp)
la ra, cpu_int_3_handler
la ra, interrupt3
j _start_trap_direct
_start_trap4:
addi sp, sp, -40*4
sw ra, 0(sp)
la ra, cpu_int_4_handler
la ra, interrupt4
j _start_trap_direct
_start_trap5:
addi sp, sp, -40*4
sw ra, 0(sp)
la ra, cpu_int_5_handler
la ra, interrupt5
j _start_trap_direct
_start_trap6:
addi sp, sp, -40*4
sw ra, 0(sp)
la ra, cpu_int_6_handler
la ra, interrupt6
j _start_trap_direct
_start_trap7:
addi sp, sp, -40*4
sw ra, 0(sp)
la ra, cpu_int_7_handler
la ra, interrupt7
j _start_trap_direct
_start_trap8:
addi sp, sp, -40*4
sw ra, 0(sp)
la ra, cpu_int_8_handler
la ra, interrupt8
j _start_trap_direct
_start_trap9:
addi sp, sp, -40*4
sw ra, 0(sp)
la ra, cpu_int_9_handler
la ra, interrupt9
j _start_trap_direct
_start_trap10:
addi sp, sp, -40*4
sw ra, 0(sp)
la ra, cpu_int_10_handler
la ra, interrupt10
j _start_trap_direct
_start_trap11:
addi sp, sp, -40*4
sw ra, 0(sp)
la ra, cpu_int_11_handler
la ra, interrupt11
j _start_trap_direct
_start_trap12:
addi sp, sp, -40*4
sw ra, 0(sp)
la ra, cpu_int_12_handler
la ra, interrupt12
j _start_trap_direct
_start_trap13:
addi sp, sp, -40*4
sw ra, 0(sp)
la ra, cpu_int_13_handler
la ra, interrupt13
j _start_trap_direct
_start_trap14:
addi sp, sp, -40*4
sw ra, 0(sp)
la ra, cpu_int_14_handler
la ra, interrupt14
j _start_trap_direct
_start_trap15:
addi sp, sp, -40*4
sw ra, 0(sp)
la ra, cpu_int_15_handler
la ra, interrupt15
j _start_trap_direct
_start_trap16:
addi sp, sp, -40*4
sw ra, 0(sp)
la ra, cpu_int_16_handler
la ra, interrupt16
j _start_trap_direct
_start_trap17:
addi sp, sp, -40*4
sw ra, 0(sp)
la ra, cpu_int_17_handler
la ra, interrupt17
j _start_trap_direct
_start_trap18:
addi sp, sp, -40*4
sw ra, 0(sp)
la ra, cpu_int_18_handler
la ra, interrupt18
j _start_trap_direct
_start_trap19:
addi sp, sp, -40*4
sw ra, 0(sp)
la ra, cpu_int_19_handler
la ra, interrupt19
j _start_trap_direct
_start_trap20:
addi sp, sp, -40*4
sw ra, 0(sp)
la ra, cpu_int_20_handler
la ra, interrupt20
j _start_trap_direct
_start_trap21:
addi sp, sp, -40*4
sw ra, 0(sp)
la ra, cpu_int_21_handler
la ra, interrupt21
j _start_trap_direct
_start_trap22:
addi sp, sp, -40*4
sw ra, 0(sp)
la ra, cpu_int_22_handler
la ra, interrupt22
j _start_trap_direct
_start_trap23:
addi sp, sp, -40*4
sw ra, 0(sp)
la ra, cpu_int_23_handler
la ra, interrupt23
j _start_trap_direct
_start_trap24:
addi sp, sp, -40*4
sw ra, 0(sp)
la ra, cpu_int_24_handler
la ra, interrupt24
j _start_trap_direct
_start_trap25:
addi sp, sp, -40*4
sw ra, 0(sp)
la ra, cpu_int_25_handler
la ra, interrupt25
j _start_trap_direct
_start_trap26:
addi sp, sp, -40*4
sw ra, 0(sp)
la ra, cpu_int_26_handler
la ra, interrupt26
j _start_trap_direct
_start_trap27:
addi sp, sp, -40*4
sw ra, 0(sp)
la ra, cpu_int_27_handler
la ra, interrupt27
j _start_trap_direct
_start_trap28:
addi sp, sp, -40*4
sw ra, 0(sp)
la ra, cpu_int_28_handler
la ra, interrupt28
j _start_trap_direct
_start_trap29:
addi sp, sp, -40*4
sw ra, 0(sp)
la ra, cpu_int_29_handler
la ra, interrupt29
j _start_trap_direct
_start_trap30:
addi sp, sp, -40*4
sw ra, 0(sp)
la ra, cpu_int_30_handler
la ra, interrupt30
j _start_trap_direct
_start_trap31:
addi sp, sp, -40*4
sw ra, 0(sp)
la ra, cpu_int_31_handler
la ra, interrupt31
j _start_trap_direct
la ra, _start_trap_rust_hal /* this runs on exception, use regular fault handler */
_start_trap_direct:
@ -829,36 +829,39 @@ _vector_table:
r#"
#this is required for the linking step, these symbols for in-use interrupts should always be overwritten by the user.
.section .trap, "ax"
.weak cpu_int_1_handler
.weak cpu_int_2_handler
.weak cpu_int_3_handler
.weak cpu_int_4_handler
.weak cpu_int_5_handler
.weak cpu_int_6_handler
.weak cpu_int_7_handler
.weak cpu_int_8_handler
.weak cpu_int_9_handler
.weak cpu_int_10_handler
.weak cpu_int_11_handler
.weak cpu_int_12_handler
.weak cpu_int_13_handler
.weak cpu_int_14_handler
.weak cpu_int_15_handler
.weak cpu_int_16_handler
.weak cpu_int_17_handler
.weak cpu_int_18_handler
.weak cpu_int_19_handler
.weak cpu_int_20_handler
.weak cpu_int_21_handler
.weak cpu_int_22_handler
.weak cpu_int_23_handler
.weak cpu_int_24_handler
.weak cpu_int_25_handler
.weak cpu_int_26_handler
.weak cpu_int_27_handler
.weak cpu_int_28_handler
.weak cpu_int_29_handler
.weak cpu_int_30_handler
.weak cpu_int_31_handler
// See https://github.com/esp-rs/esp-hal/issues/1326 and https://reviews.llvm.org/D98762
// and yes, this all has to go on one line... *sigh*.
.lto_discard interrupt1, interrupt2, interrupt3, interrupt4, interrupt5, interrupt6, interrupt7, interrupt8, interrupt9, interrupt10, interrupt11, interrupt12, interrupt13, interrupt14, interrupt15, interrupt16, interrupt17, interrupt18, interrupt19, interrupt20, interrupt21, interrupt22, interrupt23, interrupt24, interrupt25, interrupt26, interrupt27, interrupt28, interrupt29, interrupt30, interrupt31
.weak interrupt1
.weak interrupt2
.weak interrupt3
.weak interrupt4
.weak interrupt5
.weak interrupt6
.weak interrupt7
.weak interrupt8
.weak interrupt9
.weak interrupt10
.weak interrupt11
.weak interrupt12
.weak interrupt13
.weak interrupt14
.weak interrupt15
.weak interrupt16
.weak interrupt17
.weak interrupt18
.weak interrupt19
.weak interrupt20
.weak interrupt21
.weak interrupt22
.weak interrupt23
.weak interrupt24
.weak interrupt25
.weak interrupt26
.weak interrupt27
.weak interrupt28
.weak interrupt29
.weak interrupt30
.weak interrupt31
"#,
}

View File

@ -70,7 +70,13 @@ opsram-2m = ["esp-hal/opsram-2m"]
psram-2m = ["esp-hal/psram-2m"]
[profile.release]
debug = true
codegen-units = 1
debug = 2
debug-assertions = false
incremental = false
opt-level = 3
lto = 'fat'
overflow-checks = false
[patch.crates-io]
esp32 = { git = "https://github.com/esp-rs/esp-pacs", rev = "963c280621f0b7ec26546a5eff24a5032305437f" }

View File

@ -53,41 +53,25 @@ embassy-time-systick-16mhz = ["esp-hal?/embassy-time-systick-16mhz"]
embassy-time-systick-80mhz = ["esp-hal?/embassy-time-systick-80mhz"]
embassy-time-timg0 = ["esp-hal?/embassy-time-timg0"]
# cargo build/run
# https://doc.rust-lang.org/cargo/reference/profiles.html#test
# Test and bench profiles inherit from dev and release respectively.
[profile.dev]
codegen-units = 1
debug = 2
debug-assertions = true # <-
debug-assertions = true
incremental = false
opt-level = 'z' # <-
overflow-checks = true # <-
opt-level = 'z'
overflow-checks = true
# cargo test
[profile.test]
codegen-units = 1
debug = 2
debug-assertions = true # <-
incremental = false
opt-level = 3 # <-
overflow-checks = true # <-
# cargo build/run --release
[profile.release]
codegen-units = 1
debug = 2
debug-assertions = false # <-
debug-assertions = false
incremental = false
opt-level = 3 # <-
overflow-checks = false # <-
# cargo test --release
[profile.bench]
codegen-units = 1
debug = 2
debug-assertions = false # <-
incremental = false
opt-level = 3 # <-
overflow-checks = false # <-
opt-level = 3
lto = 'fat'
overflow-checks = false
[patch.crates-io]
semihosting = { git = "https://github.com/taiki-e/semihosting", rev = "c829c19" }