-
Notifications
You must be signed in to change notification settings - Fork 8.1k
Labels
area: RISCVRISCV Architecture (32-bit & 64-bit)RISCV Architecture (32-bit & 64-bit)bugThe issue is a bug, or the PR is fixing a bugThe issue is a bug, or the PR is fixing a bugplatform: nRFNordic nRFxNordic nRFxpriority: lowLow impact/importance bugLow impact/importance bug
Description
Describe the bug
This option can be selected, indicating that it should be supported, but seemingly it does not appear to be. Partial output of map file with this Kconfig disabled (this is being tested with the hello_world
sample application, the vpr_launcher
image is included to allow it to boot):
.rel.plt 0x0000000000000000 0x0
*(SORT_BY_ALIGNMENT(.rel.plt))
[!provide] PROVIDE (__rel_iplt_start = .)
*(SORT_BY_ALIGNMENT(.rel.iplt))
[!provide] PROVIDE (__rel_iplt_end = .)
.rela.plt 0x0000000000000000 0x0
*(SORT_BY_ALIGNMENT(.rela.plt))
[!provide] PROVIDE (__rela_iplt_start = .)
*(SORT_BY_ALIGNMENT(.rela.iplt))
[!provide] PROVIDE (__rela_iplt_end = .)
.rel.dyn
*(SORT_BY_ALIGNMENT(.rel.*))
.rela.dyn 0x0000000020028000 0x0
*(SORT_BY_ALIGNMENT(.rela.*))
.rela.sdata._char_out
0x0000000020028000 0x0 zephyr/CMakeFiles/zephyr_final.dir/isr_tables.c.obj
.rela.vectors.__start
0x0000000020028000 0x0 zephyr/CMakeFiles/zephyr_final.dir/isr_tables.c.obj
...
.rela.rodata.levels.0
0x0000000020028000 0x0 zephyr/CMakeFiles/zephyr_final.dir/isr_tables.c.obj
.plt
*(SORT_BY_ALIGNMENT(.plt))
.iplt
*(SORT_BY_ALIGNMENT(.iplt))
0x0000000020028000 __rom_region_start = 0x20028000
rom_start 0x0000000020028000 0x57c
0x0000000020028000 . = ALIGN (0x10)
0x0000000020028000 __rom_start_address = .
FILL mask 0x00
0x0000000020028000 . = (. + (0x0 - (. - __rom_start_address)))
0x0000000020028000 . = ALIGN (0x4)
*(SORT_BY_ALIGNMENT(.vectors.*))
.vectors.__start
0x0000000020028000 0x2c zephyr/libzephyr.a(vector.S.obj)
0x0000000020028000 __start
0x0000000020028100 . = ALIGN (0x100)
*fill* 0x000000002002802c 0xd4 00
*(SORT_BY_ALIGNMENT(.gnu.linkonce.irq_vector_table*))
.gnu.linkonce.irq_vector_table
0x0000000020028100 0x47c zephyr/CMakeFiles/zephyr_final.dir/isr_tables.c.obj
0x0000000020028100 _irq_vector_table
0x000000002002857c _vector_end = .
reset 0x000000002002857c 0x4
*(SORT_BY_ALIGNMENT(.reset.*))
And with the option enabled:
.rel.plt 0x0000000000000000 0x0
*(SORT_BY_ALIGNMENT(.rel.plt))
[!provide] PROVIDE (__rel_iplt_start = .)
*(SORT_BY_ALIGNMENT(.rel.iplt))
[!provide] PROVIDE (__rel_iplt_end = .)
.rela.plt 0x0000000000000000 0x0
*(SORT_BY_ALIGNMENT(.rela.plt))
[!provide] PROVIDE (__rela_iplt_start = .)
*(SORT_BY_ALIGNMENT(.rela.iplt))
[!provide] PROVIDE (__rela_iplt_end = .)
.rel.dyn
*(SORT_BY_ALIGNMENT(.rel.*))
.rela.dyn 0x0000000020028000 0x0
*(SORT_BY_ALIGNMENT(.rela.*))
.rela.text.cbvprintf_package
0x0000000020028000 0x0 zephyr/CMakeFiles/zephyr_final.dir/isr_tables.c.obj
.rela.text.cbprintf_package_convert
0x0000000020028000 0x0 zephyr/CMakeFiles/zephyr_final.dir/isr_tables.c.obj
.....
.iplt
*(SORT_BY_ALIGNMENT(.iplt))
0x0000000020028000 __rom_region_start = 0x20028000
rom_start 0x0000000020028000 0x4a8
0x0000000020028000 . = ALIGN (0x10)
0x0000000020028000 __rom_start_address = .
FILL mask 0x00
0x0000000020028000 . = (. + (0x0 - (. - __rom_start_address)))
0x0000000020028000 . = ALIGN (0x4)
0x0000000020028000 _irq_vector_table = .
*(SORT_BY_ALIGNMENT(.irq_spurious.0x0))
.irq_spurious.0x0
0x0000000020028000 0x4 zephyr/CMakeFiles/zephyr_final.dir/isr_tables.c.obj
*(SORT_BY_ALIGNMENT(.irq_spurious.0x1))
.irq_spurious.0x1
0x0000000020028004 0x4 zephyr/CMakeFiles/zephyr_final.dir/isr_tables.c.obj
*(SORT_BY_ALIGNMENT(.irq_spurious.0x2))
.irq_spurious.0x2
0x0000000020028008 0x4 zephyr/CMakeFiles/zephyr_final.dir/isr_tables.c.obj
*(SORT_BY_ALIGNMENT(.irq_spurious.0x3))
.irq_spurious.0x3
0x000000002002800c 0x4 zephyr/CMakeFiles/zephyr_final.dir/isr_tables.c.obj
... (these spurious go on for ages...)
.irq_spurious.0x11e
0x0000000020028478 0x4 zephyr/CMakeFiles/zephyr_final.dir/isr_tables.c.obj
*(SORT_BY_ALIGNMENT(.vectors.__start))
.vectors.__start
0x000000002002847c 0x2c zephyr/libzephyr.a(vector.S.obj)
0x000000002002847c __start
0x00000000200284a8 _vector_end = .
reset 0x00000000200284a8 0x4
*(SORT_BY_ALIGNMENT(.reset.*))
.reset.__reset
0x00000000200284a8 0x4 zephyr/arch/arch/riscv/core/libarch__riscv__core.a(reset.S.obj)
0x00000000200284a8 __reset
I'm not a RISCV architectural person but to me the __start vector looks to be placed at a wholly garbage address for some reason when it should be right at the start?
Regression
- This is a regression.
Steps to reproduce
Build hello_world
for nrf54l15dk/nrf54l15/cpuflpr
with CONFIG_ISR_TABLES_LOCAL_DECLARATION
enabled
Relevant log output
Impact
Major – Severely degrades functionality; workaround is difficult or unavailable.
Environment
Commit: fd51dde
Additional Context
No response
Metadata
Metadata
Assignees
Labels
area: RISCVRISCV Architecture (32-bit & 64-bit)RISCV Architecture (32-bit & 64-bit)bugThe issue is a bug, or the PR is fixing a bugThe issue is a bug, or the PR is fixing a bugplatform: nRFNordic nRFxNordic nRFxpriority: lowLow impact/importance bugLow impact/importance bug
Type
Projects
Status
To triage