diff options
-rw-r--r-- | ld/ChangeLog | 7 | ||||
-rw-r--r-- | ld/scripttempl/pru.sc | 6 | ||||
-rw-r--r-- | ld/testsuite/ld-pru/pru_irq_map-1.d | 17 | ||||
-rw-r--r-- | ld/testsuite/ld-pru/pru_irq_map-2.d | 10 | ||||
-rw-r--r-- | ld/testsuite/ld-pru/pru_irq_map.s | 20 |
5 files changed, 60 insertions, 0 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index cd73230..7795217 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,10 @@ +2021-11-30 Nick Clifton <nickc@redhat.com> + + * scripttempl/pru.sc (.pru_irq_map): Define output section. + * testsuite/ld-pru/pru_irq_map-1.d: New test. + * testsuite/ld-pru/pru_irq_map-2.d: New test. + * testsuite/ld-pru/pru_irq_map.s: New test. + 2021-11-17 Jeremy Drake <cygwin@jdrake.com> * emultempl/pep.em (DEFAULT_DLL_CHARACTERISTICS): Set to 0 for diff --git a/ld/scripttempl/pru.sc b/ld/scripttempl/pru.sc index 97d8be0..56d07be 100644 --- a/ld/scripttempl/pru.sc +++ b/ld/scripttempl/pru.sc @@ -183,6 +183,12 @@ SECTIONS ${RELOCATING+ . += __STACK_SIZE ; } } ${RELOCATING+ > dmem} + /* Remoteproc loader in Linux kernel 5.10 and later reads this section + to setup the PRUSS interrupt controller. The interrupt map section + is never referenced from PRU firmware, so there is no need to + place it in the target dmem memory. */ + .pru_irq_map 0 : { *(.pru_irq_map) } + /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } diff --git a/ld/testsuite/ld-pru/pru_irq_map-1.d b/ld/testsuite/ld-pru/pru_irq_map-1.d new file mode 100644 index 0000000..bbdf5b6 --- /dev/null +++ b/ld/testsuite/ld-pru/pru_irq_map-1.d @@ -0,0 +1,17 @@ +#name: pru_irq_map special section for host +#source: pru_irq_map.s +#ld: --defsym=__HEAP_SIZE=0 --defsym=__STACK_SIZE=0 +#readelf: -l --wide + +# Ensure that .pru_irq_map section is not loaded into target memory. + +#... +Program Headers: + +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg +Align + +LOAD +0x[0-9a-f]+ 0x0+ 0x0+ 0x0+8 0x0+8 RW 0x1 + +LOAD +0x[0-9a-f]+ 0x20+ 0x20+ 0x0+4 0x0+4 R E 0x1 + + Section to Segment mapping: + +Segment Sections... + +00 +.data[ ]* + +01 +.text[ ]* diff --git a/ld/testsuite/ld-pru/pru_irq_map-2.d b/ld/testsuite/ld-pru/pru_irq_map-2.d new file mode 100644 index 0000000..3166595 --- /dev/null +++ b/ld/testsuite/ld-pru/pru_irq_map-2.d @@ -0,0 +1,10 @@ +#name: pru_irq_map special section for host +#source: pru_irq_map.s +#ld: --defsym=__HEAP_SIZE=0 --defsym=__STACK_SIZE=0 +#readelf: -S --wide + +# Ensure that .pru_irq_map section is present. + +#... + +\[[ 0-9]+\] +.pru_irq_map +PROGBITS +0+ +[0-9a-f]+ +0+5 +00 +0 +0 +1 +#... diff --git a/ld/testsuite/ld-pru/pru_irq_map.s b/ld/testsuite/ld-pru/pru_irq_map.s new file mode 100644 index 0000000..b38d037 --- /dev/null +++ b/ld/testsuite/ld-pru/pru_irq_map.s @@ -0,0 +1,20 @@ + + .text + .global _start +_start: + nop + + .data +my_global_var: + .byte 10 + .byte 11 + .byte 12 + .byte 13 + + .section .pru_irq_map,"",@progbits +my_intc_map: + .byte 0 + .byte 1 + .byte 19 + .byte 1 + .byte 1 |