Do some things to make -ffunction-sections work better.

* Add wildcards to various sections placements a la *(".text") => "*(.text*)"
* Remove hacky bits from those linker scripts (no problem encountered testing)
* Change section for asm functions from .<section> to .<section>.<function>
  so that -ffunction-sections works for those asm file too.


git-svn-id: svn://svn.rockbox.org/rockbox/trunk@31337 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Michael Sevakis 2011-12-17 01:43:32 +00:00
parent 8f92ab02e1
commit 28dec004c0
17 changed files with 79 additions and 104 deletions

View file

@ -22,7 +22,7 @@
/*************************************************************************** /***************************************************************************
* void bitmod32(volatile uint32_t *addr, uint32_t bits, uint32_t mask) * void bitmod32(volatile uint32_t *addr, uint32_t bits, uint32_t mask)
*/ */
.section .text, "ax", %progbits .section .text.bitmod32, "ax", %progbits
.align 2 .align 2
.global bitmod32 .global bitmod32
.type bitmod32, %function .type bitmod32, %function
@ -42,7 +42,7 @@ bitmod32:
/*************************************************************************** /***************************************************************************
* void bitset32(volatile uint32_t *addr, uint32_t mask) * void bitset32(volatile uint32_t *addr, uint32_t mask)
*/ */
.section .text, "ax", %progbits .section .text.bitset32, "ax", %progbits
.align 2 .align 2
.global bitset32 .global bitset32
.type bitset32, %function .type bitset32, %function
@ -61,7 +61,7 @@ bitset32:
/*************************************************************************** /***************************************************************************
* void bitclr32(volatile uint32_t *addr, uint32_t mask) * void bitclr32(volatile uint32_t *addr, uint32_t mask)
*/ */
.section .text, "ax", %progbits .section .text.bitclr32, "ax", %progbits
.align 2 .align 2
.global bitclr32 .global bitclr32
.type bitclr32, %function .type bitclr32, %function
@ -79,7 +79,7 @@ bitclr32:
/*************************************************************************** /***************************************************************************
* void bitmod16(volatile uint16_t *addr, uint16_t bits, uint16_t mask) * void bitmod16(volatile uint16_t *addr, uint16_t bits, uint16_t mask)
*/ */
.section .text, "ax", %progbits .section .text.bitmod16, "ax", %progbits
.align 2 .align 2
.global bitmod16 .global bitmod16
.type bitmod16, %function .type bitmod16, %function
@ -99,7 +99,7 @@ bitmod16:
/*************************************************************************** /***************************************************************************
* void bitset16(volatile uint16_t *addr, uint16_t mask) * void bitset16(volatile uint16_t *addr, uint16_t mask)
*/ */
.section .text, "ax", %progbits .section .text.bitset16, "ax", %progbits
.align 2 .align 2
.global bitset16 .global bitset16
.type bitset16, %function .type bitset16, %function
@ -118,7 +118,7 @@ bitset16:
/*************************************************************************** /***************************************************************************
* void bitclr16(volatile uint16_t *addr, uint16_t mask) * void bitclr16(volatile uint16_t *addr, uint16_t mask)
*/ */
.section .text, "ax", %progbits .section .text.bitclr16, "ax", %progbits
.align 2 .align 2
.global bitclr16 .global bitclr16
.type bitclr16, %function .type bitclr16, %function

View file

@ -22,7 +22,7 @@
/*************************************************************************** /***************************************************************************
* void bitmod32(volatile uint32_t *addr, uint32_t bits, uint32_t mask) * void bitmod32(volatile uint32_t *addr, uint32_t bits, uint32_t mask)
*/ */
.section .text, "ax", %progbits .section .text.bitmod32, "ax", %progbits
.align 2 .align 2
.global bitmod32 .global bitmod32
.type bitmod32, %function .type bitmod32, %function
@ -41,7 +41,7 @@ bitmod32:
/*************************************************************************** /***************************************************************************
* void bitset32(volatile uint32_t *addr, uint32_t mask) * void bitset32(volatile uint32_t *addr, uint32_t mask)
*/ */
.section .text, "ax", %progbits .section .text.bitset32, "ax", %progbits
.align 2 .align 2
.global bitset32 .global bitset32
.type bitset32, %function .type bitset32, %function
@ -59,7 +59,7 @@ bitset32:
/*************************************************************************** /***************************************************************************
* void bitclr32(volatile uint32_t *addr, uint32_t mask) * void bitclr32(volatile uint32_t *addr, uint32_t mask)
*/ */
.section .text, "ax", %progbits .section .text.bitclr32, "ax", %progbits
.align 2 .align 2
.global bitclr32 .global bitclr32
.type bitclr32, %function .type bitclr32, %function

View file

@ -39,10 +39,7 @@ SECTIONS
.rodata : .rodata :
{ {
*(.rodata) /* problems without this, dunno why */
*(.rodata*) *(.rodata*)
*(.rodata.str1.1)
*(.rodata.str1.4)
. = ALIGN(0x4); . = ALIGN(0x4);
} > DRAM } > DRAM
@ -73,7 +70,7 @@ SECTIONS
{ {
_iedata = .; _iedata = .;
*(.qharray) *(.qharray)
*(.ibss) *(.ibss*)
. = ALIGN(0x4); . = ALIGN(0x4);
_iend = .; _iend = .;
} > IRAM } > IRAM
@ -81,9 +78,9 @@ SECTIONS
.iram _iend : .iram _iend :
{ {
_iramstart = .; _iramstart = .;
*(.icode) *(.icode*)
*(.irodata) *(.irodata*)
*(.idata) *(.idata*)
_iramend = .; _iramend = .;
} > IRAM AT> DRAM } > IRAM AT> DRAM

View file

@ -52,9 +52,9 @@ SECTIONS
_iramstart = .; // always 0 _iramstart = .; // always 0
*(.vectors) *(.vectors)
KEEP(*(.vectors));// otherwise there are no references to it and the linker strip it KEEP(*(.vectors));// otherwise there are no references to it and the linker strip it
*(.icode) *(.icode*)
*(.irodata) *(.irodata*)
*(.idata) *(.idata*)
. = ALIGN(0x4); . = ALIGN(0x4);
_iramend = .; _iramend = .;
} > IRAM AT> DRAM } > IRAM AT> DRAM
@ -65,7 +65,7 @@ SECTIONS
{ {
_iedata = .; _iedata = .;
*(.qharray) *(.qharray)
*(.ibss) *(.ibss*)
. = ALIGN(0x4); . = ALIGN(0x4);
_iend = .; _iend = .;
} > IRAM } > IRAM

View file

@ -44,9 +44,9 @@ SECTIONS
_iramstart = .; // always 0 _iramstart = .; // always 0
*(.vectors) *(.vectors)
KEEP(*(.vectors));// otherwise there are no references to it and the linker strip it KEEP(*(.vectors));// otherwise there are no references to it and the linker strip it
*(.icode) *(.icode*)
*(.irodata) *(.irodata*)
*(.idata) *(.idata*)
. = ALIGN(0x4); . = ALIGN(0x4);
_iramend = .; _iramend = .;
} > IRAM AT> DRAM } > IRAM AT> DRAM
@ -62,7 +62,7 @@ SECTIONS
{ {
_iedata = .; _iedata = .;
*(.qharray) *(.qharray)
*(.ibss) *(.ibss*)
. = ALIGN(0x4); . = ALIGN(0x4);
_iend = .; _iend = .;
} > IRAM } > IRAM

View file

@ -46,7 +46,7 @@ SECTIONS
. = ALIGN(0x200); . = ALIGN(0x200);
*(.init.text) *(.init.text)
*(.text*) *(.text*)
*(.icode) *(.icode*)
*(.glue_7) *(.glue_7)
*(.glue_7t) *(.glue_7t)
. = ALIGN(0x4); . = ALIGN(0x4);
@ -54,18 +54,15 @@ SECTIONS
.rodata : .rodata :
{ {
*(.rodata) /* problems without this, dunno why */
*(.rodata*) *(.rodata*)
*(.rodata.str1.1) *(.irodata*)
*(.rodata.str1.4)
*(.irodata)
. = ALIGN(0x4); . = ALIGN(0x4);
} > DRAM } > DRAM
.data : .data :
{ {
*(.data*) *(.data*)
*(.idata) *(.idata*)
. = ALIGN(0x4); . = ALIGN(0x4);
} > DRAM } > DRAM
@ -102,8 +99,8 @@ SECTIONS
{ {
. = ALIGN(4); . = ALIGN(4);
_initstart = .; _initstart = .;
*(.init) *(.init*)
*(.initdata) *(.initdata*)
_initend = .; _initend = .;
} > INIT AT> DRAM } > INIT AT> DRAM
@ -122,7 +119,7 @@ SECTIONS
{ {
_edata = .; _edata = .;
*(.bss*) *(.bss*)
*(.ibss) *(.ibss*)
*(COMMON) *(COMMON)
. = ALIGN(0x4); . = ALIGN(0x4);
} > DRAM } > DRAM

View file

@ -30,7 +30,7 @@ SECTIONS
{ {
*(.init.text) *(.init.text)
*(.text*) *(.text*)
*(.icode) *(.icode*)
*(.glue_7) *(.glue_7)
*(.glue_7t) *(.glue_7t)
. = ALIGN(0x4); . = ALIGN(0x4);
@ -38,21 +38,17 @@ SECTIONS
.rodata : .rodata :
{ {
*(.rodata) /* problems without this, dunno why */
*(.rodata*) *(.rodata*)
*(.rodata.str1.1) *(.irodata*)
*(.rodata.str1.4)
. = ALIGN(0x4); . = ALIGN(0x4);
/* Pseudo-allocate the copies of the data sections */ /* Pseudo-allocate the copies of the data sections */
_datacopy = .; _datacopy = .;
} > DRAM } > DRAM
.data : .data :
{ {
*(.irodata)
*(.idata)
*(.data*) *(.data*)
*(.idata*)
_dataend = . ; _dataend = . ;
} > DRAM } > DRAM
@ -93,7 +89,7 @@ SECTIONS
{ {
_edata = .; _edata = .;
*(.bss*); *(.bss*);
*(.ibss); *(.ibss*);
*(COMMON) *(COMMON)
. = ALIGN(0x4); . = ALIGN(0x4);
} > DRAM } > DRAM

View file

@ -28,7 +28,7 @@
* void lcd_copy_buffer_rect(fb_data *dst, fb_data *src, int width, * void lcd_copy_buffer_rect(fb_data *dst, fb_data *src, int width,
* int height); * int height);
*/ */
.section .icode, "ax", %progbits .section .icode.lcd_copy_buffer_rect, "ax", %progbits
.align 2 .align 2
.global lcd_copy_buffer_rect .global lcd_copy_buffer_rect
.type lcd_copy_buffer_rect, %function .type lcd_copy_buffer_rect, %function
@ -123,7 +123,7 @@ lcd_copy_buffer_rect: @
* 1 3 + > down * 1 3 + > down
* 2 4 \/ left * 2 4 \/ left
*/ */
.section .icode, "ax", %progbits .section .icode.lcd_write_yuv420_lines, "ax", %progbits
.align 2 .align 2
.global lcd_write_yuv420_lines .global lcd_write_yuv420_lines
.type lcd_write_yuv420_lines, %function .type lcd_write_yuv420_lines, %function
@ -376,7 +376,7 @@ lcd_write_yuv420_lines:
* 4 2 5 3 | 3 7 2 6 | 3 5 7 1 2 4 6 0 col2 \/ * 4 2 5 3 | 3 7 2 6 | 3 5 7 1 2 4 6 0 col2 \/
* 0 6 1 7 5 1 4 0 * 0 6 1 7 5 1 4 0
*/ */
.section .icode, "ax", %progbits .section .icode.lcd_write_yuv420_lines_odither, "ax", %progbits
.align 2 .align 2
.global lcd_write_yuv420_lines_odither .global lcd_write_yuv420_lines_odither
.type lcd_write_yuv420_lines_odither, %function .type lcd_write_yuv420_lines_odither, %function

View file

@ -85,7 +85,7 @@
/* /*
* void ttb_init(void); * void ttb_init(void);
*/ */
.section .text, "ax", %progbits .section .text.ttb_init, "ax", %progbits
.align 2 .align 2
.global ttb_init .global ttb_init
.type ttb_init, %function .type ttb_init, %function
@ -100,7 +100,7 @@ ttb_init:
/* /*
* void map_section(unsigned int pa, unsigned int va, int mb, int flags); * void map_section(unsigned int pa, unsigned int va, int mb, int flags);
*/ */
.section .text, "ax", %progbits .section .text.map_section, "ax", %progbits
.align 2 .align 2
.global map_section .global map_section
.type map_section, %function .type map_section, %function
@ -148,7 +148,7 @@ map_section:
/* /*
* void enable_mmu(void); * void enable_mmu(void);
*/ */
.section .text, "ax", %progbits .section .text.enable_mmu, "ax", %progbits
.align 2 .align 2
.global enable_mmu .global enable_mmu
.type enable_mmu, %function .type enable_mmu, %function
@ -180,7 +180,7 @@ enable_mmu:
* from DCache afterwards * from DCache afterwards
* void commit_discard_dcache_range(const void *base, unsigned int size); * void commit_discard_dcache_range(const void *base, unsigned int size);
*/ */
.section .text, "ax", %progbits .section .text.commit_discard_dcache_range, "ax", %progbits
.align 2 .align 2
.global commit_discard_dcache_range .global commit_discard_dcache_range
.type commit_discard_dcache_range, %function .type commit_discard_dcache_range, %function
@ -228,7 +228,7 @@ invalidate_dcache_range:
* Write DCache back to RAM for the given range * Write DCache back to RAM for the given range
* void commit_dcache_range(const void *base, unsigned int size); * void commit_dcache_range(const void *base, unsigned int size);
*/ */
.section .text, "ax", %progbits .section .text.commit_dcache_range, "ax", %progbits
.align 2 .align 2
.global commit_dcache_range .global commit_dcache_range
.type commit_dcache_range, %function .type commit_dcache_range, %function
@ -277,7 +277,7 @@ clean_dcache_range:
* will *NOT* do write back except for buffer edges not on a line boundary * will *NOT* do write back except for buffer edges not on a line boundary
* void discard_dcache_range(const void *base, unsigned int size); * void discard_dcache_range(const void *base, unsigned int size);
*/ */
.section .text, "ax", %progbits .section .text.discard_dcache_range, "ax", %progbits
.align 2 .align 2
.global discard_dcache_range .global discard_dcache_range
.type discard_dcache_range, %function .type discard_dcache_range, %function
@ -335,7 +335,7 @@ dump_dcache_range:
* Write entire DCache back to RAM * Write entire DCache back to RAM
* void commit_dcache(void); * void commit_dcache(void);
*/ */
.section .text, "ax", %progbits .section .text.commit_dcache, "ax", %progbits
.align 2 .align 2
.global commit_dcache .global commit_dcache
.type commit_dcache, %function .type commit_dcache, %function
@ -372,7 +372,7 @@ cpucache_flush:
* Commit and discard entire DCache, will do writeback * Commit and discard entire DCache, will do writeback
* void commit_discard_dcache(void); * void commit_discard_dcache(void);
*/ */
.section .icode, "ax", %progbits .section .icode.commit_discard_dcache, "ax", %progbits
.align 2 .align 2
.global commit_discard_dcache .global commit_discard_dcache
.type commit_discard_dcache, %function .type commit_discard_dcache, %function
@ -405,7 +405,7 @@ invalidate_dcache:
* Discards the entire ICache, and commit+discards the entire DCache * Discards the entire ICache, and commit+discards the entire DCache
* void commit_discard_idcache(void); * void commit_discard_idcache(void);
*/ */
.section .icode, "ax", %progbits .section .icode.commit_discard_idcache, "ax", %progbits
.align 2 .align 2
.global commit_discard_idcache .global commit_discard_idcache
.type commit_discard_idcache, %function .type commit_discard_idcache, %function

View file

@ -32,7 +32,7 @@
* from DCache afterwards * from DCache afterwards
* void commit_discard_dcache_range(const void *base, unsigned int size); * void commit_discard_dcache_range(const void *base, unsigned int size);
*/ */
.section .text, "ax", %progbits .section .text.commit_discard_dcache_range, "ax", %progbits
.align 2 .align 2
.global commit_discard_dcache_range .global commit_discard_dcache_range
.type commit_discard_dcache_range, %function .type commit_discard_dcache_range, %function
@ -56,7 +56,7 @@ invalidate_dcache_range:
* Write DCache back to RAM for the given range * Write DCache back to RAM for the given range
* void commit_dcache_range(const void *base, unsigned int size); * void commit_dcache_range(const void *base, unsigned int size);
*/ */
.section .text, "ax", %progbits .section .text.commit_dcache_range, "ax", %progbits
.align 2 .align 2
.global commit_dcache_range .global commit_dcache_range
.type commit_dcache_range, %function .type commit_dcache_range, %function
@ -79,7 +79,7 @@ clean_dcache_range:
* will *NOT* do write back except for buffer edges not on a line boundary * will *NOT* do write back except for buffer edges not on a line boundary
* void discard_dcache_range(const void *base, unsigned int size); * void discard_dcache_range(const void *base, unsigned int size);
*/ */
.section .text, "ax", %progbits .section .text.discard_dcache_range, "ax", %progbits
.align 2 .align 2
.global discard_dcache_range .global discard_dcache_range
.type discard_dcache_range, %function .type discard_dcache_range, %function
@ -114,7 +114,7 @@ dump_dcache_range:
* Write entire DCache back to RAM * Write entire DCache back to RAM
* void commit_dcache(void); * void commit_dcache(void);
*/ */
.section .text, "ax", %progbits .section .text.commit_dcache, "ax", %progbits
.align 2 .align 2
.global commit_dcache .global commit_dcache
.type commit_dcache, %function .type commit_dcache, %function
@ -136,7 +136,7 @@ cpucache_flush:
* Clean and invalidate entire DCache, will do writeback * Clean and invalidate entire DCache, will do writeback
* void commit_discard_dcache(void); * void commit_discard_dcache(void);
*/ */
.section .icode, "ax", %progbits .section .icode.commit_discard_dcache, "ax", %progbits
.align 2 .align 2
.global commit_discard_dcache .global commit_discard_dcache
.type commit_discard_dcache, %function .type commit_discard_dcache, %function
@ -155,7 +155,7 @@ invalidate_dcache:
* Discards the entire ICache, and commit+discards the entire DCache * Discards the entire ICache, and commit+discards the entire DCache
* void cpucache_commit_discard(void); * void cpucache_commit_discard(void);
*/ */
.section .icode, "ax", %progbits .section .icode.cpucache_commit_discard, "ax", %progbits
.align 2 .align 2
.global cpucache_commit_discard .global cpucache_commit_discard
.type cpucache_commit_discard, %function .type cpucache_commit_discard, %function

View file

@ -43,9 +43,8 @@ SECTIONS
.text : .text :
{ {
_textstart = .; _textstart = .;
*(.text)
*(.text*) *(.text*)
*(.icode) *(.icode*)
*(.glue_7) *(.glue_7)
*(.glue_7t) *(.glue_7t)
. = ALIGN(0x4); . = ALIGN(0x4);
@ -55,10 +54,7 @@ SECTIONS
.rodata : .rodata :
{ {
*(.rodata) /* problems without this, dunno why */
*(.rodata*) *(.rodata*)
*(.rodata.str1.1)
*(.rodata.str1.4)
*(.irodata*) *(.irodata*)
. = ALIGN(0x4); . = ALIGN(0x4);
} > DRAM } > DRAM

View file

@ -31,9 +31,8 @@ SECTIONS
.text : .text :
{ {
_textstart = .; _textstart = .;
*(.text)
*(.text*) *(.text*)
*(.icode) *(.icode*)
*(.glue_7) *(.glue_7)
*(.glue_7t) *(.glue_7t)
. = ALIGN(0x4); . = ALIGN(0x4);
@ -43,18 +42,15 @@ SECTIONS
.rodata : .rodata :
{ {
*(.rodata) /* problems without this, dunno why */
*(.rodata*) *(.rodata*)
*(.rodata.str1.1) *(.irodata*)
*(.rodata.str1.4)
*(.irodata)
. = ALIGN(0x4); . = ALIGN(0x4);
} > DRAM } > DRAM
.data : .data :
{ {
*(.data*) *(.data*)
*(.idata) *(.idata*)
. = ALIGN(0x4); . = ALIGN(0x4);
} > DRAM } > DRAM
@ -77,7 +73,7 @@ SECTIONS
{ {
_edata = .; _edata = .;
*(.bss*) *(.bss*)
*(.ibss) *(.ibss*)
*(COMMON) *(COMMON)
. = ALIGN(0x4); . = ALIGN(0x4);
_end = .; _end = .;

View file

@ -51,10 +51,7 @@ SECTIONS
.rodata : .rodata :
{ {
*(.rodata) /* problems without this, dunno why */
*(.rodata*) *(.rodata*)
*(.rodata.str1.1)
*(.rodata.str1.4)
. = ALIGN(0x4); . = ALIGN(0x4);
} > DRAM } > DRAM
@ -95,7 +92,7 @@ SECTIONS
{ {
_iedata = .; _iedata = .;
*(.qharray) *(.qharray)
*(.ibss) *(.ibss*)
. = ALIGN(0x4); . = ALIGN(0x4);
_iend = .; _iend = .;
} > IRAM } > IRAM
@ -103,9 +100,9 @@ SECTIONS
.iram _iend : .iram _iend :
{ {
_iramstart = .; _iramstart = .;
*(.icode) *(.icode*)
*(.irodata) *(.irodata*)
*(.idata) *(.idata*)
. = ALIGN(0x4); . = ALIGN(0x4);
_iramend = .; _iramend = .;
} > IRAM AT> DRAM } > IRAM AT> DRAM

View file

@ -51,10 +51,7 @@ SECTIONS
.rodata : .rodata :
{ {
*(.rodata) /* problems without this, dunno why */
*(.rodata*) *(.rodata*)
*(.rodata.str1.1)
*(.rodata.str1.4)
. = ALIGN(0x4); . = ALIGN(0x4);
} > DRAM } > DRAM
@ -97,9 +94,9 @@ SECTIONS
.iram : .iram :
{ {
_iramstart = .; _iramstart = .;
*(.irodata) *(.irodata*)
*(.idata) *(.idata*)
*(.icode) *(.icode*)
. = ALIGN(0x4); . = ALIGN(0x4);
_iramend = .; _iramend = .;
} > SRAM AT> DRAM } > SRAM AT> DRAM
@ -109,7 +106,7 @@ SECTIONS
.ibss (NOLOAD) : .ibss (NOLOAD) :
{ {
_iedata = .; _iedata = .;
*(.ibss) *(.ibss*)
. = ALIGN(0x4); . = ALIGN(0x4);
_iend = .; _iend = .;
} > SRAM } > SRAM

View file

@ -27,16 +27,15 @@ SECTIONS
{ {
.text : { .text : {
*(.init.text) *(.init.text)
*(.text)
*(.text*) *(.text*)
*(.glue_7) *(.glue_7)
*(.glue_7t) *(.glue_7t)
} > DRAM } > DRAM
.data : { .data : {
*(.icode) *(.icode*)
*(.irodata) *(.irodata*)
*(.idata) *(.idata*)
*(.data*) *(.data*)
*(.rodata.*) *(.rodata.*)
. = ALIGN(0x4); . = ALIGN(0x4);
@ -55,7 +54,7 @@ SECTIONS
.bss (NOLOAD) : { .bss (NOLOAD) : {
_edata = .; _edata = .;
*(.bss*); *(.bss*);
*(.ibss); *(.ibss*);
*(COMMON) *(COMMON)
_end = .; _end = .;
} > DRAM } > DRAM

View file

@ -115,9 +115,9 @@ SECTIONS
{ {
. = ALIGN(0x4); . = ALIGN(0x4);
_iramstart = .; _iramstart = .;
*(.icode) *(.icode*)
*(.irodata) *(.irodata*)
*(.idata) *(.idata*)
_iramend = .; _iramend = .;
} > ITCM AT> DRAM } > ITCM AT> DRAM
@ -137,7 +137,7 @@ SECTIONS
{ {
. = ALIGN(0x4); . = ALIGN(0x4);
_ibss_start = .; _ibss_start = .;
*(.ibss) *(.ibss*)
_ibss_end = .; _ibss_end = .;
} > ITCM } > ITCM

View file

@ -136,9 +136,9 @@ SECTIONS
{ {
. = ALIGN(0x4); . = ALIGN(0x4);
_iramstart = .; _iramstart = .;
*(.icode) *(.icode*)
*(.irodata) *(.irodata*)
*(.idata) *(.idata*)
_iramend = .; _iramend = .;
} > IRAM AT> FLASH } > IRAM AT> FLASH
@ -148,7 +148,7 @@ SECTIONS
{ {
. = ALIGN(0x4); . = ALIGN(0x4);
_ibss_start = .; _ibss_start = .;
*(.ibss) *(.ibss*)
_ibss_end = .; _ibss_end = .;
} > IRAM } > IRAM