summaryrefslogtreecommitdiff
path: root/apps/plugins
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 /apps/plugins
parente8b1787296dae2a69893bd0fe97b2361fb6180ba (diff)
downloadrockbox-07c4254135aecc6ae0964d6d6413a40251e8f6a8.zip
rockbox-07c4254135aecc6ae0964d6d6413a40251e8f6a8.tar.gz
rockbox-07c4254135aecc6ae0964d6d6413a40251e8f6a8.tar.bz2
rockbox-07c4254135aecc6ae0964d6d6413a40251e8f6a8.tar.xz
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
Diffstat (limited to 'apps/plugins')
-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
4 files changed, 37 insertions, 18 deletions
diff --git a/apps/plugins/plugin.lds b/apps/plugins/plugin.lds
index 83825b9..fc9d4d4 100644
--- a/apps/plugins/plugin.lds
+++ b/apps/plugins/plugin.lds
@@ -60,7 +60,8 @@ MEMORY
SECTIONS
{
- .text : {
+ .text :
+ {
KEEP(*(.entry))
*(.text*)
#if CONFIG_CPU==PP5020
@@ -69,26 +70,25 @@ SECTIONS
#endif
} > PLUGIN_RAM
- .data : {
- *(.data*)
- } > PLUGIN_RAM
-
- /DISCARD/ : {
- *(.eh_frame)
- }
-
- .bss : {
- *(.bss*)
- } > PLUGIN_RAM
-
- .rodata : {
+ .rodata :
+ {
*(.rodata*)
. = ALIGN(0x4);
+ } > PLUGIN_RAM
+
+ .data :
+ {
+ *(.data*)
#if defined(ARCH_IRIVER) || defined(ARCH_IPOD)
iramcopy = .;
#endif
} > PLUGIN_RAM
+ /DISCARD/ :
+ {
+ *(.eh_frame)
+ }
+
#if defined(ARCH_IRIVER) || defined(ARCH_IPOD)
.iram IRAMORIG : AT ( iramcopy)
{
@@ -96,13 +96,29 @@ SECTIONS
*(.icode)
*(.irodata)
*(.idata)
- *(.ibss)
iramend = .;
} > PLUGIN_IRAM
+
+ .ibss (NOLOAD) :
+ {
+ iedata = .;
+ *(.ibss)
+ . = ALIGN(0x4);
+ iend = .;
+ } > PLUGIN_IRAM
+
+ .bss ADDR(.data) + SIZEOF(.data) + SIZEOF(.iram):
+#else
+ .bss :
#endif
+ {
+ *(.bss*)
+ } > PLUGIN_RAM
+
/* Special trick to avoid a linker error when no other sections are
left after garbage collection (plugin not for this platform) */
- .comment 0 : {
+ .comment 0 :
+ {
KEEP(*(.comment))
}
}
diff --git a/apps/plugins/rockboy/cpu.c b/apps/plugins/rockboy/cpu.c
index 6118633..5c4abc5 100644
--- a/apps/plugins/rockboy/cpu.c
+++ b/apps/plugins/rockboy/cpu.c
@@ -17,7 +17,7 @@
#endif
-struct cpu cpu IDATA_ATTR;
+struct cpu cpu IBSS_ATTR;
diff --git a/apps/plugins/rockboy/lcd.c b/apps/plugins/rockboy/lcd.c
index a8f8c69..883c495 100644
--- a/apps/plugins/rockboy/lcd.c
+++ b/apps/plugins/rockboy/lcd.c
@@ -15,7 +15,7 @@
struct lcd lcd;
-struct scan scan IDATA_ATTR;
+struct scan scan IBSS_ATTR;
#define BG (scan.bg)
#define WND (scan.wnd)
diff --git a/apps/plugins/rockboy/rockboy.c b/apps/plugins/rockboy/rockboy.c
index 90452e5..5677387 100644
--- a/apps/plugins/rockboy/rockboy.c
+++ b/apps/plugins/rockboy/rockboy.c
@@ -42,6 +42,8 @@ const struct {
extern char iramcopy[];
extern char iramstart[];
extern char iramend[];
+extern char iedata[];
+extern char iend[];
#endif
/* 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)
#ifdef USE_IRAM
memcpy(iramstart, iramcopy, iramend-iramstart);
+ memset(iedata, 0, iend - iedata);
#endif
shut=0;
cleanshut=0;