summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Arnold <amiconn@rockbox.org>2006-01-08 22:50:14 +0000
committerJens Arnold <amiconn@rockbox.org>2006-01-08 22:50:14 +0000
commit07c4254135aecc6ae0964d6d6413a40251e8f6a8 (patch)
treedac473efeb9f49cb6fefeb43c053f2dd0dc1b6cc
parente8b1787296dae2a69893bd0fe97b2361fb6180ba (diff)
downloadrockbox-07c4254135aecc6ae0964d6d6413a40251e8f6a8.tar.gz
rockbox-07c4254135aecc6ae0964d6d6413a40251e8f6a8.zip
Don't include the .bss and .ibss sections in the binary image for codecs and plugins. Saves quite some disk space (and buffer space in case of codec changes during playback).
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8308 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/codecs/a52.c3
-rw-r--r--apps/codecs/alac.c7
-rw-r--r--apps/codecs/flac.c7
-rw-r--r--apps/codecs/mpa.c3
-rw-r--r--apps/codecs/mpc.c3
-rw-r--r--apps/codecs/shorten.c7
-rw-r--r--apps/codecs/vorbis.c3
-rw-r--r--apps/codecs/wav.c3
-rw-r--r--apps/codecs/wavpack.c3
-rw-r--r--apps/plugins/plugin.lds48
-rw-r--r--apps/plugins/rockboy/cpu.c2
-rw-r--r--apps/plugins/rockboy/lcd.c2
-rw-r--r--apps/plugins/rockboy/rockboy.c3
13 files changed, 70 insertions, 24 deletions
diff --git a/apps/codecs/a52.c b/apps/codecs/a52.c
index ee80f66892..dd504e83fd 100644
--- a/apps/codecs/a52.c
+++ b/apps/codecs/a52.c
@@ -117,6 +117,8 @@ void a52_decode_data(uint8_t *start, uint8_t *end)
117extern char iramcopy[]; 117extern char iramcopy[];
118extern char iramstart[]; 118extern char iramstart[];
119extern char iramend[]; 119extern char iramend[];
120extern char iedata[];
121extern char iend[];
120#endif 122#endif
121 123
122/* this is the codec entry point */ 124/* this is the codec entry point */
@@ -132,6 +134,7 @@ enum codec_status codec_start(struct codec_api *api)
132 134
133 #ifdef USE_IRAM 135 #ifdef USE_IRAM
134 ci->memcpy(iramstart, iramcopy, iramend - iramstart); 136 ci->memcpy(iramstart, iramcopy, iramend - iramstart);
137 ci->memset(iedata, 0, iend - iedata);
135 #endif 138 #endif
136 139
137 ci->configure(CODEC_DSP_ENABLE, (bool *)true); 140 ci->configure(CODEC_DSP_ENABLE, (bool *)true);
diff --git a/apps/codecs/alac.c b/apps/codecs/alac.c
index 58ab111755..30c1ada555 100644
--- a/apps/codecs/alac.c
+++ b/apps/codecs/alac.c
@@ -21,10 +21,12 @@
21#include "libm4a/m4a.h" 21#include "libm4a/m4a.h"
22#include "libalac/decomp.h" 22#include "libalac/decomp.h"
23 23
24#ifndef SIMULATOR 24#ifdef USE_IRAM
25extern char iramcopy[]; 25extern char iramcopy[];
26extern char iramstart[]; 26extern char iramstart[];
27extern char iramend[]; 27extern char iramend[];
28extern char iedata[];
29extern char iend[];
28#endif 30#endif
29 31
30int32_t outputbuffer[ALAC_MAX_CHANNELS][ALAC_BLOCKSIZE] IBSS_ATTR; 32int32_t outputbuffer[ALAC_MAX_CHANNELS][ALAC_BLOCKSIZE] IBSS_ATTR;
@@ -53,8 +55,9 @@ enum codec_status codec_start(struct codec_api* api)
53 rb = api; 55 rb = api;
54 ci = (struct codec_api*)api; 56 ci = (struct codec_api*)api;
55 57
56#ifndef SIMULATOR 58#ifdef USE_IRAM
57 rb->memcpy(iramstart, iramcopy, iramend-iramstart); 59 rb->memcpy(iramstart, iramcopy, iramend-iramstart);
60 rb->memset(iedata, 0, iend - iedata);
58#endif 61#endif
59 62
60 ci->configure(CODEC_SET_FILEBUF_WATERMARK, (int *)(1024*512)); 63 ci->configure(CODEC_SET_FILEBUF_WATERMARK, (int *)(1024*512));
diff --git a/apps/codecs/flac.c b/apps/codecs/flac.c
index 7639b9a352..ae05b0f2aa 100644
--- a/apps/codecs/flac.c
+++ b/apps/codecs/flac.c
@@ -20,10 +20,12 @@
20#include "codeclib.h" 20#include "codeclib.h"
21#include <codecs/libffmpegFLAC/decoder.h> 21#include <codecs/libffmpegFLAC/decoder.h>
22 22
23#ifndef SIMULATOR 23#ifdef USE_IRAM
24extern char iramcopy[]; 24extern char iramcopy[];
25extern char iramstart[]; 25extern char iramstart[];
26extern char iramend[]; 26extern char iramend[];
27extern char iedata[];
28extern char iend[];
27#endif 29#endif
28 30
29struct codec_api* rb; 31struct codec_api* rb;
@@ -229,8 +231,9 @@ enum codec_status codec_start(struct codec_api* api)
229 rb = api; 231 rb = api;
230 ci = (struct codec_api*)api; 232 ci = (struct codec_api*)api;
231 233
232#ifndef SIMULATOR 234#ifdef USE_IRAM
233 ci->memcpy(iramstart, iramcopy, iramend-iramstart); 235 ci->memcpy(iramstart, iramcopy, iramend-iramstart);
236 ci->memset(iedata, 0, iend - iedata);
234#endif 237#endif
235 238
236 ci->configure(CODEC_SET_FILEBUF_WATERMARK, (int *)(1024*512)); 239 ci->configure(CODEC_SET_FILEBUF_WATERMARK, (int *)(1024*512));
diff --git a/apps/codecs/mpa.c b/apps/codecs/mpa.c
index 3e6a0455ff..3d824d9b39 100644
--- a/apps/codecs/mpa.c
+++ b/apps/codecs/mpa.c
@@ -43,6 +43,8 @@ int mpeg_latency[3] = { 0, 481, 529 };
43extern char iramcopy[]; 43extern char iramcopy[];
44extern char iramstart[]; 44extern char iramstart[];
45extern char iramend[]; 45extern char iramend[];
46extern char iedata[];
47extern char iend[];
46#endif 48#endif
47 49
48struct codec_api *ci; 50struct codec_api *ci;
@@ -83,6 +85,7 @@ enum codec_status codec_start(struct codec_api *api)
83 85
84#ifdef USE_IRAM 86#ifdef USE_IRAM
85 ci->memcpy(iramstart, iramcopy, iramend - iramstart); 87 ci->memcpy(iramstart, iramcopy, iramend - iramstart);
88 ci->memset(iedata, 0, iend - iedata);
86#endif 89#endif
87 90
88 if (codec_init(api)) 91 if (codec_init(api))
diff --git a/apps/codecs/mpc.c b/apps/codecs/mpc.c
index db2501525e..207a63ce97 100644
--- a/apps/codecs/mpc.c
+++ b/apps/codecs/mpc.c
@@ -68,6 +68,8 @@ MPC_SAMPLE_FORMAT sample_buffer[MPC_FRAME_LENGTH*2] IBSS_ATTR;
68extern char iramcopy[]; 68extern char iramcopy[];
69extern char iramstart[]; 69extern char iramstart[];
70extern char iramend[]; 70extern char iramend[];
71extern char iedata[];
72extern char iend[];
71#endif 73#endif
72 74
73/* this is the codec entry point */ 75/* this is the codec entry point */
@@ -83,6 +85,7 @@ enum codec_status codec_start(struct codec_api *api)
83 TEST_CODEC_API(api); 85 TEST_CODEC_API(api);
84 #ifdef USE_IRAM 86 #ifdef USE_IRAM
85 ci->memcpy(iramstart, iramcopy, iramend - iramstart); 87 ci->memcpy(iramstart, iramcopy, iramend - iramstart);
88 ci->memset(iedata, 0, iend - iedata);
86 #endif 89 #endif
87 90
88 ci->configure(CODEC_DSP_ENABLE, (bool *)true); 91 ci->configure(CODEC_DSP_ENABLE, (bool *)true);
diff --git a/apps/codecs/shorten.c b/apps/codecs/shorten.c
index c58b009ab1..9e679f5ea7 100644
--- a/apps/codecs/shorten.c
+++ b/apps/codecs/shorten.c
@@ -20,10 +20,12 @@
20#include "codeclib.h" 20#include "codeclib.h"
21#include <codecs/libffmpegFLAC/shndec.h> 21#include <codecs/libffmpegFLAC/shndec.h>
22 22
23#ifndef SIMULATOR 23#ifdef USE_IRAM
24extern char iramcopy[]; 24extern char iramcopy[];
25extern char iramstart[]; 25extern char iramstart[];
26extern char iramend[]; 26extern char iramend[];
27extern char iedata[];
28extern char iend[];
27#endif 29#endif
28 30
29struct codec_api* rb; 31struct codec_api* rb;
@@ -52,8 +54,9 @@ enum codec_status codec_start(struct codec_api* api)
52 rb = api; 54 rb = api;
53 ci = (struct codec_api*)api; 55 ci = (struct codec_api*)api;
54 56
55#ifndef SIMULATOR 57#ifdef USE_IRAM
56 ci->memcpy(iramstart, iramcopy, iramend-iramstart); 58 ci->memcpy(iramstart, iramcopy, iramend-iramstart);
59 ci->memset(iedata, 0, iend - iedata);
57#endif 60#endif
58 61
59 ci->configure(CODEC_SET_FILEBUF_WATERMARK, (int *)(1024*512)); 62 ci->configure(CODEC_SET_FILEBUF_WATERMARK, (int *)(1024*512));
diff --git a/apps/codecs/vorbis.c b/apps/codecs/vorbis.c
index 69eba24bb8..795e689e7d 100644
--- a/apps/codecs/vorbis.c
+++ b/apps/codecs/vorbis.c
@@ -101,6 +101,8 @@ bool vorbis_set_codec_parameters(OggVorbis_File *vf)
101extern char iramcopy[]; 101extern char iramcopy[];
102extern char iramstart[]; 102extern char iramstart[];
103extern char iramend[]; 103extern char iramend[];
104extern char iedata[];
105extern char iend[];
104#endif 106#endif
105 107
106/* this is the codec entry point */ 108/* this is the codec entry point */
@@ -125,6 +127,7 @@ enum codec_status codec_start(struct codec_api *api)
125 127
126 #ifdef USE_IRAM 128 #ifdef USE_IRAM
127 rb->memcpy(iramstart, iramcopy, iramend - iramstart); 129 rb->memcpy(iramstart, iramcopy, iramend - iramstart);
130 rb->memset(iedata, 0, iend - iedata);
128 #endif 131 #endif
129 132
130 rb->configure(CODEC_DSP_ENABLE, (bool *)true); 133 rb->configure(CODEC_DSP_ENABLE, (bool *)true);
diff --git a/apps/codecs/wav.c b/apps/codecs/wav.c
index 85e24124ab..e86b559caa 100644
--- a/apps/codecs/wav.c
+++ b/apps/codecs/wav.c
@@ -94,6 +94,8 @@ enum
94extern char iramcopy[]; 94extern char iramcopy[];
95extern char iramstart[]; 95extern char iramstart[];
96extern char iramend[]; 96extern char iramend[];
97extern char iedata[];
98extern char iend[];
97#endif 99#endif
98 100
99/* Those are lookup tables, so they should be in the idata section 101/* Those are lookup tables, so they should be in the idata section
@@ -235,6 +237,7 @@ enum codec_status codec_start(struct codec_api* api)
235 237
236#ifdef USE_IRAM 238#ifdef USE_IRAM
237 ci->memcpy(iramstart, iramcopy, iramend-iramstart); 239 ci->memcpy(iramstart, iramcopy, iramend-iramstart);
240 ci->memset(iedata, 0, iend - iedata);
238#endif 241#endif
239 242
240 ci->configure(CODEC_SET_FILEBUF_WATERMARK, (int *)(1024*512)); 243 ci->configure(CODEC_SET_FILEBUF_WATERMARK, (int *)(1024*512));
diff --git a/apps/codecs/wavpack.c b/apps/codecs/wavpack.c
index 21c194773b..ff890ba805 100644
--- a/apps/codecs/wavpack.c
+++ b/apps/codecs/wavpack.c
@@ -40,6 +40,8 @@ static long read_callback (void *buffer, long bytes)
40extern char iramcopy[]; 40extern char iramcopy[];
41extern char iramstart[]; 41extern char iramstart[];
42extern char iramend[]; 42extern char iramend[];
43extern char iedata[];
44extern char iend[];
43#endif 45#endif
44 46
45/* this is the codec entry point */ 47/* this is the codec entry point */
@@ -56,6 +58,7 @@ enum codec_status codec_start(struct codec_api* api)
56 58
57#ifdef USE_IRAM 59#ifdef USE_IRAM
58 ci->memcpy(iramstart, iramcopy, iramend-iramstart); 60 ci->memcpy(iramstart, iramcopy, iramend-iramstart);
61 ci->memset(iedata, 0, iend - iedata);
59#endif 62#endif
60 63
61 ci->configure(CODEC_SET_FILEBUF_WATERMARK, (int *)(1024*512)); 64 ci->configure(CODEC_SET_FILEBUF_WATERMARK, (int *)(1024*512));
diff --git a/apps/plugins/plugin.lds b/apps/plugins/plugin.lds
index 83825b9035..fc9d4d4efe 100644
--- a/apps/plugins/plugin.lds
+++ b/apps/plugins/plugin.lds
@@ -60,7 +60,8 @@ MEMORY
60 60
61SECTIONS 61SECTIONS
62{ 62{
63 .text : { 63 .text :
64 {
64 KEEP(*(.entry)) 65 KEEP(*(.entry))
65 *(.text*) 66 *(.text*)
66#if CONFIG_CPU==PP5020 67#if CONFIG_CPU==PP5020
@@ -69,26 +70,25 @@ SECTIONS
69#endif 70#endif
70 } > PLUGIN_RAM 71 } > PLUGIN_RAM
71 72
72 .data : { 73 .rodata :
73 *(.data*) 74 {
74 } > PLUGIN_RAM
75
76 /DISCARD/ : {
77 *(.eh_frame)
78 }
79
80 .bss : {
81 *(.bss*)
82 } > PLUGIN_RAM
83
84 .rodata : {
85 *(.rodata*) 75 *(.rodata*)
86 . = ALIGN(0x4); 76 . = ALIGN(0x4);
77 } > PLUGIN_RAM
78
79 .data :
80 {
81 *(.data*)
87#if defined(ARCH_IRIVER) || defined(ARCH_IPOD) 82#if defined(ARCH_IRIVER) || defined(ARCH_IPOD)
88 iramcopy = .; 83 iramcopy = .;
89#endif 84#endif
90 } > PLUGIN_RAM 85 } > PLUGIN_RAM
91 86
87 /DISCARD/ :
88 {
89 *(.eh_frame)
90 }
91
92#if defined(ARCH_IRIVER) || defined(ARCH_IPOD) 92#if defined(ARCH_IRIVER) || defined(ARCH_IPOD)
93 .iram IRAMORIG : AT ( iramcopy) 93 .iram IRAMORIG : AT ( iramcopy)
94 { 94 {
@@ -96,13 +96,29 @@ SECTIONS
96 *(.icode) 96 *(.icode)
97 *(.irodata) 97 *(.irodata)
98 *(.idata) 98 *(.idata)
99 *(.ibss)
100 iramend = .; 99 iramend = .;
101 } > PLUGIN_IRAM 100 } > PLUGIN_IRAM
101
102 .ibss (NOLOAD) :
103 {
104 iedata = .;
105 *(.ibss)
106 . = ALIGN(0x4);
107 iend = .;
108 } > PLUGIN_IRAM
109
110 .bss ADDR(.data) + SIZEOF(.data) + SIZEOF(.iram):
111#else
112 .bss :
102#endif 113#endif
114 {
115 *(.bss*)
116 } > PLUGIN_RAM
117
103 /* Special trick to avoid a linker error when no other sections are 118 /* Special trick to avoid a linker error when no other sections are
104 left after garbage collection (plugin not for this platform) */ 119 left after garbage collection (plugin not for this platform) */
105 .comment 0 : { 120 .comment 0 :
121 {
106 KEEP(*(.comment)) 122 KEEP(*(.comment))
107 } 123 }
108} 124}
diff --git a/apps/plugins/rockboy/cpu.c b/apps/plugins/rockboy/cpu.c
index 6118633899..5c4abc519f 100644
--- a/apps/plugins/rockboy/cpu.c
+++ b/apps/plugins/rockboy/cpu.c
@@ -17,7 +17,7 @@
17#endif 17#endif
18 18
19 19
20struct cpu cpu IDATA_ATTR; 20struct cpu cpu IBSS_ATTR;
21 21
22 22
23 23
diff --git a/apps/plugins/rockboy/lcd.c b/apps/plugins/rockboy/lcd.c
index a8f8c695da..883c4952fc 100644
--- a/apps/plugins/rockboy/lcd.c
+++ b/apps/plugins/rockboy/lcd.c
@@ -15,7 +15,7 @@
15 15
16struct lcd lcd; 16struct lcd lcd;
17 17
18struct scan scan IDATA_ATTR; 18struct scan scan IBSS_ATTR;
19 19
20#define BG (scan.bg) 20#define BG (scan.bg)
21#define WND (scan.wnd) 21#define WND (scan.wnd)
diff --git a/apps/plugins/rockboy/rockboy.c b/apps/plugins/rockboy/rockboy.c
index 90452e55d6..56773879fa 100644
--- a/apps/plugins/rockboy/rockboy.c
+++ b/apps/plugins/rockboy/rockboy.c
@@ -42,6 +42,8 @@ const struct {
42extern char iramcopy[]; 42extern char iramcopy[];
43extern char iramstart[]; 43extern char iramstart[];
44extern char iramend[]; 44extern char iramend[];
45extern char iedata[];
46extern char iend[];
45#endif 47#endif
46 48
47/* here is a global api struct pointer. while not strictly necessary, 49/* here is a global api struct pointer. while not strictly necessary,
@@ -116,6 +118,7 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
116 118
117#ifdef USE_IRAM 119#ifdef USE_IRAM
118 memcpy(iramstart, iramcopy, iramend-iramstart); 120 memcpy(iramstart, iramcopy, iramend-iramstart);
121 memset(iedata, 0, iend - iedata);
119#endif 122#endif
120 shut=0; 123 shut=0;
121 cleanshut=0; 124 cleanshut=0;