summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2011-12-17 01:43:32 +0000
committerMichael Sevakis <jethead71@rockbox.org>2011-12-17 01:43:32 +0000
commit28dec004c0782e81661d9803ddf51a19b58dc469 (patch)
treea2651e48ceac9f3b448f361ef13e610316902ab8
parent8f92ab02e16c4d2b613214559651269843da96a8 (diff)
downloadrockbox-28dec004c0782e81661d9803ddf51a19b58dc469.tar.gz
rockbox-28dec004c0782e81661d9803ddf51a19b58dc469.zip
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
-rw-r--r--firmware/target/arm/bits-armv4.S12
-rw-r--r--firmware/target/arm/bits-armv6.S6
-rw-r--r--firmware/target/arm/boot-pp502x-bl-usb.lds11
-rw-r--r--firmware/target/arm/imx233/app.lds8
-rw-r--r--firmware/target/arm/imx233/boot.lds8
-rw-r--r--firmware/target/arm/imx31/app.lds15
-rw-r--r--firmware/target/arm/imx31/boot.lds12
-rw-r--r--firmware/target/arm/lcd-as-memframe.S12
-rw-r--r--firmware/target/arm/mmu-arm.S18
-rw-r--r--firmware/target/arm/mmu-armv6.S16
-rw-r--r--firmware/target/arm/s3c2440/app.lds6
-rw-r--r--firmware/target/arm/s3c2440/boot.lds12
-rw-r--r--firmware/target/arm/sandisk/app.lds11
-rw-r--r--firmware/target/arm/tcc780x/app.lds11
-rw-r--r--firmware/target/arm/tcc780x/boot.lds9
-rw-r--r--firmware/target/arm/tms320dm320/app.lds8
-rw-r--r--firmware/target/arm/tms320dm320/boot.lds8
17 files changed, 79 insertions, 104 deletions
diff --git a/firmware/target/arm/bits-armv4.S b/firmware/target/arm/bits-armv4.S
index 542e362f77..fdfc9f3227 100644
--- a/firmware/target/arm/bits-armv4.S
+++ b/firmware/target/arm/bits-armv4.S
@@ -22,7 +22,7 @@
22/*************************************************************************** 22/***************************************************************************
23 * void bitmod32(volatile uint32_t *addr, uint32_t bits, uint32_t mask) 23 * void bitmod32(volatile uint32_t *addr, uint32_t bits, uint32_t mask)
24 */ 24 */
25 .section .text, "ax", %progbits 25 .section .text.bitmod32, "ax", %progbits
26 .align 2 26 .align 2
27 .global bitmod32 27 .global bitmod32
28 .type bitmod32, %function 28 .type bitmod32, %function
@@ -42,7 +42,7 @@ bitmod32:
42/*************************************************************************** 42/***************************************************************************
43 * void bitset32(volatile uint32_t *addr, uint32_t mask) 43 * void bitset32(volatile uint32_t *addr, uint32_t mask)
44 */ 44 */
45 .section .text, "ax", %progbits 45 .section .text.bitset32, "ax", %progbits
46 .align 2 46 .align 2
47 .global bitset32 47 .global bitset32
48 .type bitset32, %function 48 .type bitset32, %function
@@ -61,7 +61,7 @@ bitset32:
61/*************************************************************************** 61/***************************************************************************
62 * void bitclr32(volatile uint32_t *addr, uint32_t mask) 62 * void bitclr32(volatile uint32_t *addr, uint32_t mask)
63 */ 63 */
64 .section .text, "ax", %progbits 64 .section .text.bitclr32, "ax", %progbits
65 .align 2 65 .align 2
66 .global bitclr32 66 .global bitclr32
67 .type bitclr32, %function 67 .type bitclr32, %function
@@ -79,7 +79,7 @@ bitclr32:
79/*************************************************************************** 79/***************************************************************************
80 * void bitmod16(volatile uint16_t *addr, uint16_t bits, uint16_t mask) 80 * void bitmod16(volatile uint16_t *addr, uint16_t bits, uint16_t mask)
81 */ 81 */
82 .section .text, "ax", %progbits 82 .section .text.bitmod16, "ax", %progbits
83 .align 2 83 .align 2
84 .global bitmod16 84 .global bitmod16
85 .type bitmod16, %function 85 .type bitmod16, %function
@@ -99,7 +99,7 @@ bitmod16:
99/*************************************************************************** 99/***************************************************************************
100 * void bitset16(volatile uint16_t *addr, uint16_t mask) 100 * void bitset16(volatile uint16_t *addr, uint16_t mask)
101 */ 101 */
102 .section .text, "ax", %progbits 102 .section .text.bitset16, "ax", %progbits
103 .align 2 103 .align 2
104 .global bitset16 104 .global bitset16
105 .type bitset16, %function 105 .type bitset16, %function
@@ -118,7 +118,7 @@ bitset16:
118/*************************************************************************** 118/***************************************************************************
119 * void bitclr16(volatile uint16_t *addr, uint16_t mask) 119 * void bitclr16(volatile uint16_t *addr, uint16_t mask)
120 */ 120 */
121 .section .text, "ax", %progbits 121 .section .text.bitclr16, "ax", %progbits
122 .align 2 122 .align 2
123 .global bitclr16 123 .global bitclr16
124 .type bitclr16, %function 124 .type bitclr16, %function
diff --git a/firmware/target/arm/bits-armv6.S b/firmware/target/arm/bits-armv6.S
index 0a15805f87..fbac7f9cf9 100644
--- a/firmware/target/arm/bits-armv6.S
+++ b/firmware/target/arm/bits-armv6.S
@@ -22,7 +22,7 @@
22/*************************************************************************** 22/***************************************************************************
23 * void bitmod32(volatile uint32_t *addr, uint32_t bits, uint32_t mask) 23 * void bitmod32(volatile uint32_t *addr, uint32_t bits, uint32_t mask)
24 */ 24 */
25 .section .text, "ax", %progbits 25 .section .text.bitmod32, "ax", %progbits
26 .align 2 26 .align 2
27 .global bitmod32 27 .global bitmod32
28 .type bitmod32, %function 28 .type bitmod32, %function
@@ -41,7 +41,7 @@ bitmod32:
41/*************************************************************************** 41/***************************************************************************
42 * void bitset32(volatile uint32_t *addr, uint32_t mask) 42 * void bitset32(volatile uint32_t *addr, uint32_t mask)
43 */ 43 */
44 .section .text, "ax", %progbits 44 .section .text.bitset32, "ax", %progbits
45 .align 2 45 .align 2
46 .global bitset32 46 .global bitset32
47 .type bitset32, %function 47 .type bitset32, %function
@@ -59,7 +59,7 @@ bitset32:
59/*************************************************************************** 59/***************************************************************************
60 * void bitclr32(volatile uint32_t *addr, uint32_t mask) 60 * void bitclr32(volatile uint32_t *addr, uint32_t mask)
61 */ 61 */
62 .section .text, "ax", %progbits 62 .section .text.bitclr32, "ax", %progbits
63 .align 2 63 .align 2
64 .global bitclr32 64 .global bitclr32
65 .type bitclr32, %function 65 .type bitclr32, %function
diff --git a/firmware/target/arm/boot-pp502x-bl-usb.lds b/firmware/target/arm/boot-pp502x-bl-usb.lds
index 30a8c0e716..e721991c5a 100644
--- a/firmware/target/arm/boot-pp502x-bl-usb.lds
+++ b/firmware/target/arm/boot-pp502x-bl-usb.lds
@@ -39,10 +39,7 @@ SECTIONS
39 39
40 .rodata : 40 .rodata :
41 { 41 {
42 *(.rodata) /* problems without this, dunno why */
43 *(.rodata*) 42 *(.rodata*)
44 *(.rodata.str1.1)
45 *(.rodata.str1.4)
46 . = ALIGN(0x4); 43 . = ALIGN(0x4);
47 } > DRAM 44 } > DRAM
48 45
@@ -73,7 +70,7 @@ SECTIONS
73 { 70 {
74 _iedata = .; 71 _iedata = .;
75 *(.qharray) 72 *(.qharray)
76 *(.ibss) 73 *(.ibss*)
77 . = ALIGN(0x4); 74 . = ALIGN(0x4);
78 _iend = .; 75 _iend = .;
79 } > IRAM 76 } > IRAM
@@ -81,9 +78,9 @@ SECTIONS
81 .iram _iend : 78 .iram _iend :
82 { 79 {
83 _iramstart = .; 80 _iramstart = .;
84 *(.icode) 81 *(.icode*)
85 *(.irodata) 82 *(.irodata*)
86 *(.idata) 83 *(.idata*)
87 _iramend = .; 84 _iramend = .;
88 } > IRAM AT> DRAM 85 } > IRAM AT> DRAM
89 86
diff --git a/firmware/target/arm/imx233/app.lds b/firmware/target/arm/imx233/app.lds
index 0eeecc1ab8..1dc929c778 100644
--- a/firmware/target/arm/imx233/app.lds
+++ b/firmware/target/arm/imx233/app.lds
@@ -52,9 +52,9 @@ SECTIONS
52 _iramstart = .; // always 0 52 _iramstart = .; // always 0
53 *(.vectors) 53 *(.vectors)
54 KEEP(*(.vectors));// otherwise there are no references to it and the linker strip it 54 KEEP(*(.vectors));// otherwise there are no references to it and the linker strip it
55 *(.icode) 55 *(.icode*)
56 *(.irodata) 56 *(.irodata*)
57 *(.idata) 57 *(.idata*)
58 . = ALIGN(0x4); 58 . = ALIGN(0x4);
59 _iramend = .; 59 _iramend = .;
60 } > IRAM AT> DRAM 60 } > IRAM AT> DRAM
@@ -65,7 +65,7 @@ SECTIONS
65 { 65 {
66 _iedata = .; 66 _iedata = .;
67 *(.qharray) 67 *(.qharray)
68 *(.ibss) 68 *(.ibss*)
69 . = ALIGN(0x4); 69 . = ALIGN(0x4);
70 _iend = .; 70 _iend = .;
71 } > IRAM 71 } > IRAM
diff --git a/firmware/target/arm/imx233/boot.lds b/firmware/target/arm/imx233/boot.lds
index d909b9fbd1..ac1209a475 100644
--- a/firmware/target/arm/imx233/boot.lds
+++ b/firmware/target/arm/imx233/boot.lds
@@ -44,9 +44,9 @@ SECTIONS
44 _iramstart = .; // always 0 44 _iramstart = .; // always 0
45 *(.vectors) 45 *(.vectors)
46 KEEP(*(.vectors));// otherwise there are no references to it and the linker strip it 46 KEEP(*(.vectors));// otherwise there are no references to it and the linker strip it
47 *(.icode) 47 *(.icode*)
48 *(.irodata) 48 *(.irodata*)
49 *(.idata) 49 *(.idata*)
50 . = ALIGN(0x4); 50 . = ALIGN(0x4);
51 _iramend = .; 51 _iramend = .;
52 } > IRAM AT> DRAM 52 } > IRAM AT> DRAM
@@ -62,7 +62,7 @@ SECTIONS
62 { 62 {
63 _iedata = .; 63 _iedata = .;
64 *(.qharray) 64 *(.qharray)
65 *(.ibss) 65 *(.ibss*)
66 . = ALIGN(0x4); 66 . = ALIGN(0x4);
67 _iend = .; 67 _iend = .;
68 } > IRAM 68 } > IRAM
diff --git a/firmware/target/arm/imx31/app.lds b/firmware/target/arm/imx31/app.lds
index 60187fe433..ac91ffd767 100644
--- a/firmware/target/arm/imx31/app.lds
+++ b/firmware/target/arm/imx31/app.lds
@@ -46,7 +46,7 @@ SECTIONS
46 . = ALIGN(0x200); 46 . = ALIGN(0x200);
47 *(.init.text) 47 *(.init.text)
48 *(.text*) 48 *(.text*)
49 *(.icode) 49 *(.icode*)
50 *(.glue_7) 50 *(.glue_7)
51 *(.glue_7t) 51 *(.glue_7t)
52 . = ALIGN(0x4); 52 . = ALIGN(0x4);
@@ -54,18 +54,15 @@ SECTIONS
54 54
55 .rodata : 55 .rodata :
56 { 56 {
57 *(.rodata) /* problems without this, dunno why */
58 *(.rodata*) 57 *(.rodata*)
59 *(.rodata.str1.1) 58 *(.irodata*)
60 *(.rodata.str1.4)
61 *(.irodata)
62 . = ALIGN(0x4); 59 . = ALIGN(0x4);
63 } > DRAM 60 } > DRAM
64 61
65 .data : 62 .data :
66 { 63 {
67 *(.data*) 64 *(.data*)
68 *(.idata) 65 *(.idata*)
69 . = ALIGN(0x4); 66 . = ALIGN(0x4);
70 } > DRAM 67 } > DRAM
71 68
@@ -102,8 +99,8 @@ SECTIONS
102 { 99 {
103 . = ALIGN(4); 100 . = ALIGN(4);
104 _initstart = .; 101 _initstart = .;
105 *(.init) 102 *(.init*)
106 *(.initdata) 103 *(.initdata*)
107 _initend = .; 104 _initend = .;
108 } > INIT AT> DRAM 105 } > INIT AT> DRAM
109 106
@@ -122,7 +119,7 @@ SECTIONS
122 { 119 {
123 _edata = .; 120 _edata = .;
124 *(.bss*) 121 *(.bss*)
125 *(.ibss) 122 *(.ibss*)
126 *(COMMON) 123 *(COMMON)
127 . = ALIGN(0x4); 124 . = ALIGN(0x4);
128 } > DRAM 125 } > DRAM
diff --git a/firmware/target/arm/imx31/boot.lds b/firmware/target/arm/imx31/boot.lds
index 03b92c8dea..be1d98e507 100644
--- a/firmware/target/arm/imx31/boot.lds
+++ b/firmware/target/arm/imx31/boot.lds
@@ -30,7 +30,7 @@ SECTIONS
30 { 30 {
31 *(.init.text) 31 *(.init.text)
32 *(.text*) 32 *(.text*)
33 *(.icode) 33 *(.icode*)
34 *(.glue_7) 34 *(.glue_7)
35 *(.glue_7t) 35 *(.glue_7t)
36 . = ALIGN(0x4); 36 . = ALIGN(0x4);
@@ -38,21 +38,17 @@ SECTIONS
38 38
39 .rodata : 39 .rodata :
40 { 40 {
41 *(.rodata) /* problems without this, dunno why */
42 *(.rodata*) 41 *(.rodata*)
43 *(.rodata.str1.1) 42 *(.irodata*)
44 *(.rodata.str1.4)
45 . = ALIGN(0x4); 43 . = ALIGN(0x4);
46
47 /* Pseudo-allocate the copies of the data sections */ 44 /* Pseudo-allocate the copies of the data sections */
48 _datacopy = .; 45 _datacopy = .;
49 } > DRAM 46 } > DRAM
50 47
51 .data : 48 .data :
52 { 49 {
53 *(.irodata)
54 *(.idata)
55 *(.data*) 50 *(.data*)
51 *(.idata*)
56 _dataend = . ; 52 _dataend = . ;
57 } > DRAM 53 } > DRAM
58 54
@@ -93,7 +89,7 @@ SECTIONS
93 { 89 {
94 _edata = .; 90 _edata = .;
95 *(.bss*); 91 *(.bss*);
96 *(.ibss); 92 *(.ibss*);
97 *(COMMON) 93 *(COMMON)
98 . = ALIGN(0x4); 94 . = ALIGN(0x4);
99 } > DRAM 95 } > DRAM
diff --git a/firmware/target/arm/lcd-as-memframe.S b/firmware/target/arm/lcd-as-memframe.S
index 87cbb611ca..dccc947649 100644
--- a/firmware/target/arm/lcd-as-memframe.S
+++ b/firmware/target/arm/lcd-as-memframe.S
@@ -28,7 +28,7 @@
28 * void lcd_copy_buffer_rect(fb_data *dst, fb_data *src, int width, 28 * void lcd_copy_buffer_rect(fb_data *dst, fb_data *src, int width,
29 * int height); 29 * int height);
30 */ 30 */
31 .section .icode, "ax", %progbits 31 .section .icode.lcd_copy_buffer_rect, "ax", %progbits
32 .align 2 32 .align 2
33 .global lcd_copy_buffer_rect 33 .global lcd_copy_buffer_rect
34 .type lcd_copy_buffer_rect, %function 34 .type lcd_copy_buffer_rect, %function
@@ -55,7 +55,7 @@ lcd_copy_buffer_rect: @
55 @ align (rw) 55 @ align (rw)
56 and r14, r14, #0xe @ r14 = 0 (16), 2, 4, 6, 8, 10, 12, 14 56 and r14, r14, #0xe @ r14 = 0 (16), 2, 4, 6, 8, 10, 12, 14
57 add pc, pc, r14, lsl #3 @ branch to 32-byte align 57 add pc, pc, r14, lsl #3 @ branch to 32-byte align
58 nop @ 58 nop @
59 b 30f @ rw % 16 = 0 or 1? use octword loop 59 b 30f @ rw % 16 = 0 or 1? use octword loop
60 nop @ 60 nop @
61 nop @ 61 nop @
@@ -93,7 +93,7 @@ lcd_copy_buffer_rect: @
93 ldmia r1!, { r6-r12, r14 } @ 93 ldmia r1!, { r6-r12, r14 } @
94 subs r2, r2, #16 @ 94 subs r2, r2, #16 @
95 stmia r0!, { r6-r12, r14 } @ 95 stmia r0!, { r6-r12, r14 } @
96 bgt 30b @ octword loop @ 96 bgt 30b @ octword loop @
9740: @ finish line @ 9740: @ finish line @
98 ldreqh r6, [r1], #2 @ finish last halfword if eq ... 98 ldreqh r6, [r1], #2 @ finish last halfword if eq ...
99 add r1, r1, r4, lsl #1 @ 99 add r1, r1, r4, lsl #1 @
@@ -123,7 +123,7 @@ lcd_copy_buffer_rect: @
123 * 1 3 + > down 123 * 1 3 + > down
124 * 2 4 \/ left 124 * 2 4 \/ left
125 */ 125 */
126 .section .icode, "ax", %progbits 126 .section .icode.lcd_write_yuv420_lines, "ax", %progbits
127 .align 2 127 .align 2
128 .global lcd_write_yuv420_lines 128 .global lcd_write_yuv420_lines
129 .type lcd_write_yuv420_lines, %function 129 .type lcd_write_yuv420_lines, %function
@@ -376,7 +376,7 @@ lcd_write_yuv420_lines:
376 * 4 2 5 3 | 3 7 2 6 | 3 5 7 1 2 4 6 0 col2 \/ 376 * 4 2 5 3 | 3 7 2 6 | 3 5 7 1 2 4 6 0 col2 \/
377 * 0 6 1 7 5 1 4 0 377 * 0 6 1 7 5 1 4 0
378 */ 378 */
379 .section .icode, "ax", %progbits 379 .section .icode.lcd_write_yuv420_lines_odither, "ax", %progbits
380 .align 2 380 .align 2
381 .global lcd_write_yuv420_lines_odither 381 .global lcd_write_yuv420_lines_odither
382 .type lcd_write_yuv420_lines_odither, %function 382 .type lcd_write_yuv420_lines_odither, %function
@@ -410,7 +410,7 @@ lcd_write_yuv420_lines_odither:
410 add r12, r7, r7, asl #2 @ 410 add r12, r7, r7, asl #2 @
411 add r12, r12, r12, asl #4 @ 411 add r12, r12, r12, asl #4 @
412 add r7, r12, r7, asl #6 @ 412 add r7, r12, r7, asl #6 @
413 @ 413 @
414 sub r8, r8, #128 @ Cb -= 128 414 sub r8, r8, #128 @ Cb -= 128
415 sub r9, r9, #128 @ Cr -= 128 415 sub r9, r9, #128 @ Cr -= 128
416 @ 416 @
diff --git a/firmware/target/arm/mmu-arm.S b/firmware/target/arm/mmu-arm.S
index 39f0edbfce..88f9095d2f 100644
--- a/firmware/target/arm/mmu-arm.S
+++ b/firmware/target/arm/mmu-arm.S
@@ -85,7 +85,7 @@
85/* 85/*
86 * void ttb_init(void); 86 * void ttb_init(void);
87 */ 87 */
88 .section .text, "ax", %progbits 88 .section .text.ttb_init, "ax", %progbits
89 .align 2 89 .align 2
90 .global ttb_init 90 .global ttb_init
91 .type ttb_init, %function 91 .type ttb_init, %function
@@ -100,7 +100,7 @@ ttb_init:
100/* 100/*
101 * void map_section(unsigned int pa, unsigned int va, int mb, int flags); 101 * void map_section(unsigned int pa, unsigned int va, int mb, int flags);
102 */ 102 */
103 .section .text, "ax", %progbits 103 .section .text.map_section, "ax", %progbits
104 .align 2 104 .align 2
105 .global map_section 105 .global map_section
106 .type map_section, %function 106 .type map_section, %function
@@ -148,7 +148,7 @@ map_section:
148/* 148/*
149 * void enable_mmu(void); 149 * void enable_mmu(void);
150 */ 150 */
151 .section .text, "ax", %progbits 151 .section .text.enable_mmu, "ax", %progbits
152 .align 2 152 .align 2
153 .global enable_mmu 153 .global enable_mmu
154 .type enable_mmu, %function 154 .type enable_mmu, %function
@@ -180,7 +180,7 @@ enable_mmu:
180 * from DCache afterwards 180 * from DCache afterwards
181 * void commit_discard_dcache_range(const void *base, unsigned int size); 181 * void commit_discard_dcache_range(const void *base, unsigned int size);
182 */ 182 */
183 .section .text, "ax", %progbits 183 .section .text.commit_discard_dcache_range, "ax", %progbits
184 .align 2 184 .align 2
185 .global commit_discard_dcache_range 185 .global commit_discard_dcache_range
186 .type commit_discard_dcache_range, %function 186 .type commit_discard_dcache_range, %function
@@ -228,7 +228,7 @@ invalidate_dcache_range:
228 * Write DCache back to RAM for the given range 228 * Write DCache back to RAM for the given range
229 * void commit_dcache_range(const void *base, unsigned int size); 229 * void commit_dcache_range(const void *base, unsigned int size);
230 */ 230 */
231 .section .text, "ax", %progbits 231 .section .text.commit_dcache_range, "ax", %progbits
232 .align 2 232 .align 2
233 .global commit_dcache_range 233 .global commit_dcache_range
234 .type commit_dcache_range, %function 234 .type commit_dcache_range, %function
@@ -277,7 +277,7 @@ clean_dcache_range:
277 * will *NOT* do write back except for buffer edges not on a line boundary 277 * will *NOT* do write back except for buffer edges not on a line boundary
278 * void discard_dcache_range(const void *base, unsigned int size); 278 * void discard_dcache_range(const void *base, unsigned int size);
279 */ 279 */
280 .section .text, "ax", %progbits 280 .section .text.discard_dcache_range, "ax", %progbits
281 .align 2 281 .align 2
282 .global discard_dcache_range 282 .global discard_dcache_range
283 .type discard_dcache_range, %function 283 .type discard_dcache_range, %function
@@ -335,7 +335,7 @@ dump_dcache_range:
335 * Write entire DCache back to RAM 335 * Write entire DCache back to RAM
336 * void commit_dcache(void); 336 * void commit_dcache(void);
337 */ 337 */
338 .section .text, "ax", %progbits 338 .section .text.commit_dcache, "ax", %progbits
339 .align 2 339 .align 2
340 .global commit_dcache 340 .global commit_dcache
341 .type commit_dcache, %function 341 .type commit_dcache, %function
@@ -372,7 +372,7 @@ cpucache_flush:
372 * Commit and discard entire DCache, will do writeback 372 * Commit and discard entire DCache, will do writeback
373 * void commit_discard_dcache(void); 373 * void commit_discard_dcache(void);
374 */ 374 */
375 .section .icode, "ax", %progbits 375 .section .icode.commit_discard_dcache, "ax", %progbits
376 .align 2 376 .align 2
377 .global commit_discard_dcache 377 .global commit_discard_dcache
378 .type commit_discard_dcache, %function 378 .type commit_discard_dcache, %function
@@ -405,7 +405,7 @@ invalidate_dcache:
405 * Discards the entire ICache, and commit+discards the entire DCache 405 * Discards the entire ICache, and commit+discards the entire DCache
406 * void commit_discard_idcache(void); 406 * void commit_discard_idcache(void);
407 */ 407 */
408 .section .icode, "ax", %progbits 408 .section .icode.commit_discard_idcache, "ax", %progbits
409 .align 2 409 .align 2
410 .global commit_discard_idcache 410 .global commit_discard_idcache
411 .type commit_discard_idcache, %function 411 .type commit_discard_idcache, %function
diff --git a/firmware/target/arm/mmu-armv6.S b/firmware/target/arm/mmu-armv6.S
index 12381adf8b..c4cb49ea26 100644
--- a/firmware/target/arm/mmu-armv6.S
+++ b/firmware/target/arm/mmu-armv6.S
@@ -32,7 +32,7 @@
32 * from DCache afterwards 32 * from DCache afterwards
33 * void commit_discard_dcache_range(const void *base, unsigned int size); 33 * void commit_discard_dcache_range(const void *base, unsigned int size);
34 */ 34 */
35 .section .text, "ax", %progbits 35 .section .text.commit_discard_dcache_range, "ax", %progbits
36 .align 2 36 .align 2
37 .global commit_discard_dcache_range 37 .global commit_discard_dcache_range
38 .type commit_discard_dcache_range, %function 38 .type commit_discard_dcache_range, %function
@@ -56,7 +56,7 @@ invalidate_dcache_range:
56 * Write DCache back to RAM for the given range 56 * Write DCache back to RAM for the given range
57 * void commit_dcache_range(const void *base, unsigned int size); 57 * void commit_dcache_range(const void *base, unsigned int size);
58 */ 58 */
59 .section .text, "ax", %progbits 59 .section .text.commit_dcache_range, "ax", %progbits
60 .align 2 60 .align 2
61 .global commit_dcache_range 61 .global commit_dcache_range
62 .type commit_dcache_range, %function 62 .type commit_dcache_range, %function
@@ -79,7 +79,7 @@ clean_dcache_range:
79 * will *NOT* do write back except for buffer edges not on a line boundary 79 * will *NOT* do write back except for buffer edges not on a line boundary
80 * void discard_dcache_range(const void *base, unsigned int size); 80 * void discard_dcache_range(const void *base, unsigned int size);
81 */ 81 */
82 .section .text, "ax", %progbits 82 .section .text.discard_dcache_range, "ax", %progbits
83 .align 2 83 .align 2
84 .global discard_dcache_range 84 .global discard_dcache_range
85 .type discard_dcache_range, %function 85 .type discard_dcache_range, %function
@@ -90,7 +90,7 @@ discard_dcache_range:
90dump_dcache_range: 90dump_dcache_range:
91 add r1, r0, r1 @ size -> end 91 add r1, r0, r1 @ size -> end
92 cmp r1, r0 @ end <= start? 92 cmp r1, r0 @ end <= start?
93 bxls lr @ 93 bxls lr @
94 tst r0, #31 @ Check first line for bits set 94 tst r0, #31 @ Check first line for bits set
95 bicne r0, r0, #31 @ Clear low five bits (down) 95 bicne r0, r0, #31 @ Clear low five bits (down)
96 mcrne p15, 0, r0, c7, c14, 1 @ Clean and invalidate line by MVA 96 mcrne p15, 0, r0, c7, c14, 1 @ Clean and invalidate line by MVA
@@ -114,7 +114,7 @@ dump_dcache_range:
114 * Write entire DCache back to RAM 114 * Write entire DCache back to RAM
115 * void commit_dcache(void); 115 * void commit_dcache(void);
116 */ 116 */
117 .section .text, "ax", %progbits 117 .section .text.commit_dcache, "ax", %progbits
118 .align 2 118 .align 2
119 .global commit_dcache 119 .global commit_dcache
120 .type commit_dcache, %function 120 .type commit_dcache, %function
@@ -136,7 +136,7 @@ cpucache_flush:
136 * Clean and invalidate entire DCache, will do writeback 136 * Clean and invalidate entire DCache, will do writeback
137 * void commit_discard_dcache(void); 137 * void commit_discard_dcache(void);
138 */ 138 */
139 .section .icode, "ax", %progbits 139 .section .icode.commit_discard_dcache, "ax", %progbits
140 .align 2 140 .align 2
141 .global commit_discard_dcache 141 .global commit_discard_dcache
142 .type commit_discard_dcache, %function 142 .type commit_discard_dcache, %function
@@ -149,13 +149,13 @@ invalidate_dcache:
149 mcr p15, 0, r0, c7, c10, 4 @ Data synchronization barrier 149 mcr p15, 0, r0, c7, c10, 4 @ Data synchronization barrier
150 bx lr @ 150 bx lr @
151 .size commit_discard_dcache, .-commit_discard_dcache 151 .size commit_discard_dcache, .-commit_discard_dcache
152 152
153 153
154/* 154/*
155 * Discards the entire ICache, and commit+discards the entire DCache 155 * Discards the entire ICache, and commit+discards the entire DCache
156 * void cpucache_commit_discard(void); 156 * void cpucache_commit_discard(void);
157 */ 157 */
158 .section .icode, "ax", %progbits 158 .section .icode.cpucache_commit_discard, "ax", %progbits
159 .align 2 159 .align 2
160 .global cpucache_commit_discard 160 .global cpucache_commit_discard
161 .type cpucache_commit_discard, %function 161 .type cpucache_commit_discard, %function
diff --git a/firmware/target/arm/s3c2440/app.lds b/firmware/target/arm/s3c2440/app.lds
index bfd672d1a3..bdc7380a54 100644
--- a/firmware/target/arm/s3c2440/app.lds
+++ b/firmware/target/arm/s3c2440/app.lds
@@ -43,9 +43,8 @@ SECTIONS
43 .text : 43 .text :
44 { 44 {
45 _textstart = .; 45 _textstart = .;
46 *(.text)
47 *(.text*) 46 *(.text*)
48 *(.icode) 47 *(.icode*)
49 *(.glue_7) 48 *(.glue_7)
50 *(.glue_7t) 49 *(.glue_7t)
51 . = ALIGN(0x4); 50 . = ALIGN(0x4);
@@ -55,10 +54,7 @@ SECTIONS
55 54
56 .rodata : 55 .rodata :
57 { 56 {
58 *(.rodata) /* problems without this, dunno why */
59 *(.rodata*) 57 *(.rodata*)
60 *(.rodata.str1.1)
61 *(.rodata.str1.4)
62 *(.irodata*) 58 *(.irodata*)
63 . = ALIGN(0x4); 59 . = ALIGN(0x4);
64 } > DRAM 60 } > DRAM
diff --git a/firmware/target/arm/s3c2440/boot.lds b/firmware/target/arm/s3c2440/boot.lds
index 731201fbb7..13b6344afb 100644
--- a/firmware/target/arm/s3c2440/boot.lds
+++ b/firmware/target/arm/s3c2440/boot.lds
@@ -31,9 +31,8 @@ SECTIONS
31 .text : 31 .text :
32 { 32 {
33 _textstart = .; 33 _textstart = .;
34 *(.text)
35 *(.text*) 34 *(.text*)
36 *(.icode) 35 *(.icode*)
37 *(.glue_7) 36 *(.glue_7)
38 *(.glue_7t) 37 *(.glue_7t)
39 . = ALIGN(0x4); 38 . = ALIGN(0x4);
@@ -43,18 +42,15 @@ SECTIONS
43 42
44 .rodata : 43 .rodata :
45 { 44 {
46 *(.rodata) /* problems without this, dunno why */
47 *(.rodata*) 45 *(.rodata*)
48 *(.rodata.str1.1) 46 *(.irodata*)
49 *(.rodata.str1.4)
50 *(.irodata)
51 . = ALIGN(0x4); 47 . = ALIGN(0x4);
52 } > DRAM 48 } > DRAM
53 49
54 .data : 50 .data :
55 { 51 {
56 *(.data*) 52 *(.data*)
57 *(.idata) 53 *(.idata*)
58 . = ALIGN(0x4); 54 . = ALIGN(0x4);
59 } > DRAM 55 } > DRAM
60 56
@@ -77,7 +73,7 @@ SECTIONS
77 { 73 {
78 _edata = .; 74 _edata = .;
79 *(.bss*) 75 *(.bss*)
80 *(.ibss) 76 *(.ibss*)
81 *(COMMON) 77 *(COMMON)
82 . = ALIGN(0x4); 78 . = ALIGN(0x4);
83 _end = .; 79 _end = .;
diff --git a/firmware/target/arm/sandisk/app.lds b/firmware/target/arm/sandisk/app.lds
index a98f33dd9f..57e1d4f256 100644
--- a/firmware/target/arm/sandisk/app.lds
+++ b/firmware/target/arm/sandisk/app.lds
@@ -51,10 +51,7 @@ SECTIONS
51 51
52 .rodata : 52 .rodata :
53 { 53 {
54 *(.rodata) /* problems without this, dunno why */
55 *(.rodata*) 54 *(.rodata*)
56 *(.rodata.str1.1)
57 *(.rodata.str1.4)
58 . = ALIGN(0x4); 55 . = ALIGN(0x4);
59 } > DRAM 56 } > DRAM
60 57
@@ -95,7 +92,7 @@ SECTIONS
95 { 92 {
96 _iedata = .; 93 _iedata = .;
97 *(.qharray) 94 *(.qharray)
98 *(.ibss) 95 *(.ibss*)
99 . = ALIGN(0x4); 96 . = ALIGN(0x4);
100 _iend = .; 97 _iend = .;
101 } > IRAM 98 } > IRAM
@@ -103,9 +100,9 @@ SECTIONS
103 .iram _iend : 100 .iram _iend :
104 { 101 {
105 _iramstart = .; 102 _iramstart = .;
106 *(.icode) 103 *(.icode*)
107 *(.irodata) 104 *(.irodata*)
108 *(.idata) 105 *(.idata*)
109 . = ALIGN(0x4); 106 . = ALIGN(0x4);
110 _iramend = .; 107 _iramend = .;
111 } > IRAM AT> DRAM 108 } > IRAM AT> DRAM
diff --git a/firmware/target/arm/tcc780x/app.lds b/firmware/target/arm/tcc780x/app.lds
index e84ea05de7..e56c7f5cb7 100644
--- a/firmware/target/arm/tcc780x/app.lds
+++ b/firmware/target/arm/tcc780x/app.lds
@@ -51,10 +51,7 @@ SECTIONS
51 51
52 .rodata : 52 .rodata :
53 { 53 {
54 *(.rodata) /* problems without this, dunno why */
55 *(.rodata*) 54 *(.rodata*)
56 *(.rodata.str1.1)
57 *(.rodata.str1.4)
58 . = ALIGN(0x4); 55 . = ALIGN(0x4);
59 } > DRAM 56 } > DRAM
60 57
@@ -97,9 +94,9 @@ SECTIONS
97 .iram : 94 .iram :
98 { 95 {
99 _iramstart = .; 96 _iramstart = .;
100 *(.irodata) 97 *(.irodata*)
101 *(.idata) 98 *(.idata*)
102 *(.icode) 99 *(.icode*)
103 . = ALIGN(0x4); 100 . = ALIGN(0x4);
104 _iramend = .; 101 _iramend = .;
105 } > SRAM AT> DRAM 102 } > SRAM AT> DRAM
@@ -109,7 +106,7 @@ SECTIONS
109 .ibss (NOLOAD) : 106 .ibss (NOLOAD) :
110 { 107 {
111 _iedata = .; 108 _iedata = .;
112 *(.ibss) 109 *(.ibss*)
113 . = ALIGN(0x4); 110 . = ALIGN(0x4);
114 _iend = .; 111 _iend = .;
115 } > SRAM 112 } > SRAM
diff --git a/firmware/target/arm/tcc780x/boot.lds b/firmware/target/arm/tcc780x/boot.lds
index 82b4619819..e54e09f91e 100644
--- a/firmware/target/arm/tcc780x/boot.lds
+++ b/firmware/target/arm/tcc780x/boot.lds
@@ -27,16 +27,15 @@ SECTIONS
27{ 27{
28 .text : { 28 .text : {
29 *(.init.text) 29 *(.init.text)
30 *(.text)
31 *(.text*) 30 *(.text*)
32 *(.glue_7) 31 *(.glue_7)
33 *(.glue_7t) 32 *(.glue_7t)
34 } > DRAM 33 } > DRAM
35 34
36 .data : { 35 .data : {
37 *(.icode) 36 *(.icode*)
38 *(.irodata) 37 *(.irodata*)
39 *(.idata) 38 *(.idata*)
40 *(.data*) 39 *(.data*)
41 *(.rodata.*) 40 *(.rodata.*)
42 . = ALIGN(0x4); 41 . = ALIGN(0x4);
@@ -55,7 +54,7 @@ SECTIONS
55 .bss (NOLOAD) : { 54 .bss (NOLOAD) : {
56 _edata = .; 55 _edata = .;
57 *(.bss*); 56 *(.bss*);
58 *(.ibss); 57 *(.ibss*);
59 *(COMMON) 58 *(COMMON)
60 _end = .; 59 _end = .;
61 } > DRAM 60 } > DRAM
diff --git a/firmware/target/arm/tms320dm320/app.lds b/firmware/target/arm/tms320dm320/app.lds
index a1b29dda6f..a3dadb64ed 100644
--- a/firmware/target/arm/tms320dm320/app.lds
+++ b/firmware/target/arm/tms320dm320/app.lds
@@ -115,9 +115,9 @@ SECTIONS
115 { 115 {
116 . = ALIGN(0x4); 116 . = ALIGN(0x4);
117 _iramstart = .; 117 _iramstart = .;
118 *(.icode) 118 *(.icode*)
119 *(.irodata) 119 *(.irodata*)
120 *(.idata) 120 *(.idata*)
121 _iramend = .; 121 _iramend = .;
122 } > ITCM AT> DRAM 122 } > ITCM AT> DRAM
123 123
@@ -137,7 +137,7 @@ SECTIONS
137 { 137 {
138 . = ALIGN(0x4); 138 . = ALIGN(0x4);
139 _ibss_start = .; 139 _ibss_start = .;
140 *(.ibss) 140 *(.ibss*)
141 _ibss_end = .; 141 _ibss_end = .;
142 } > ITCM 142 } > ITCM
143 143
diff --git a/firmware/target/arm/tms320dm320/boot.lds b/firmware/target/arm/tms320dm320/boot.lds
index 65649d7268..43ed6486e9 100644
--- a/firmware/target/arm/tms320dm320/boot.lds
+++ b/firmware/target/arm/tms320dm320/boot.lds
@@ -136,9 +136,9 @@ SECTIONS
136 { 136 {
137 . = ALIGN(0x4); 137 . = ALIGN(0x4);
138 _iramstart = .; 138 _iramstart = .;
139 *(.icode) 139 *(.icode*)
140 *(.irodata) 140 *(.irodata*)
141 *(.idata) 141 *(.idata*)
142 _iramend = .; 142 _iramend = .;
143 } > IRAM AT> FLASH 143 } > IRAM AT> FLASH
144 144
@@ -148,7 +148,7 @@ SECTIONS
148 { 148 {
149 . = ALIGN(0x4); 149 . = ALIGN(0x4);
150 _ibss_start = .; 150 _ibss_start = .;
151 *(.ibss) 151 *(.ibss*)
152 _ibss_end = .; 152 _ibss_end = .;
153 } > IRAM 153 } > IRAM
154 154