mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-14 02:27:39 -04:00
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
This commit is contained in:
parent
e8b1787296
commit
07c4254135
13 changed files with 70 additions and 24 deletions
|
@ -117,6 +117,8 @@ void a52_decode_data(uint8_t *start, uint8_t *end)
|
||||||
extern char iramcopy[];
|
extern char iramcopy[];
|
||||||
extern char iramstart[];
|
extern char iramstart[];
|
||||||
extern char iramend[];
|
extern char iramend[];
|
||||||
|
extern char iedata[];
|
||||||
|
extern char iend[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* this is the codec entry point */
|
/* this is the codec entry point */
|
||||||
|
@ -132,6 +134,7 @@ enum codec_status codec_start(struct codec_api *api)
|
||||||
|
|
||||||
#ifdef USE_IRAM
|
#ifdef USE_IRAM
|
||||||
ci->memcpy(iramstart, iramcopy, iramend - iramstart);
|
ci->memcpy(iramstart, iramcopy, iramend - iramstart);
|
||||||
|
ci->memset(iedata, 0, iend - iedata);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ci->configure(CODEC_DSP_ENABLE, (bool *)true);
|
ci->configure(CODEC_DSP_ENABLE, (bool *)true);
|
||||||
|
|
|
@ -21,10 +21,12 @@
|
||||||
#include "libm4a/m4a.h"
|
#include "libm4a/m4a.h"
|
||||||
#include "libalac/decomp.h"
|
#include "libalac/decomp.h"
|
||||||
|
|
||||||
#ifndef SIMULATOR
|
#ifdef USE_IRAM
|
||||||
extern char iramcopy[];
|
extern char iramcopy[];
|
||||||
extern char iramstart[];
|
extern char iramstart[];
|
||||||
extern char iramend[];
|
extern char iramend[];
|
||||||
|
extern char iedata[];
|
||||||
|
extern char iend[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int32_t outputbuffer[ALAC_MAX_CHANNELS][ALAC_BLOCKSIZE] IBSS_ATTR;
|
int32_t outputbuffer[ALAC_MAX_CHANNELS][ALAC_BLOCKSIZE] IBSS_ATTR;
|
||||||
|
@ -53,8 +55,9 @@ enum codec_status codec_start(struct codec_api* api)
|
||||||
rb = api;
|
rb = api;
|
||||||
ci = (struct codec_api*)api;
|
ci = (struct codec_api*)api;
|
||||||
|
|
||||||
#ifndef SIMULATOR
|
#ifdef USE_IRAM
|
||||||
rb->memcpy(iramstart, iramcopy, iramend-iramstart);
|
rb->memcpy(iramstart, iramcopy, iramend-iramstart);
|
||||||
|
rb->memset(iedata, 0, iend - iedata);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ci->configure(CODEC_SET_FILEBUF_WATERMARK, (int *)(1024*512));
|
ci->configure(CODEC_SET_FILEBUF_WATERMARK, (int *)(1024*512));
|
||||||
|
|
|
@ -20,10 +20,12 @@
|
||||||
#include "codeclib.h"
|
#include "codeclib.h"
|
||||||
#include <codecs/libffmpegFLAC/decoder.h>
|
#include <codecs/libffmpegFLAC/decoder.h>
|
||||||
|
|
||||||
#ifndef SIMULATOR
|
#ifdef USE_IRAM
|
||||||
extern char iramcopy[];
|
extern char iramcopy[];
|
||||||
extern char iramstart[];
|
extern char iramstart[];
|
||||||
extern char iramend[];
|
extern char iramend[];
|
||||||
|
extern char iedata[];
|
||||||
|
extern char iend[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct codec_api* rb;
|
struct codec_api* rb;
|
||||||
|
@ -229,8 +231,9 @@ enum codec_status codec_start(struct codec_api* api)
|
||||||
rb = api;
|
rb = api;
|
||||||
ci = (struct codec_api*)api;
|
ci = (struct codec_api*)api;
|
||||||
|
|
||||||
#ifndef SIMULATOR
|
#ifdef USE_IRAM
|
||||||
ci->memcpy(iramstart, iramcopy, iramend-iramstart);
|
ci->memcpy(iramstart, iramcopy, iramend-iramstart);
|
||||||
|
ci->memset(iedata, 0, iend - iedata);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ci->configure(CODEC_SET_FILEBUF_WATERMARK, (int *)(1024*512));
|
ci->configure(CODEC_SET_FILEBUF_WATERMARK, (int *)(1024*512));
|
||||||
|
|
|
@ -43,6 +43,8 @@ int mpeg_latency[3] = { 0, 481, 529 };
|
||||||
extern char iramcopy[];
|
extern char iramcopy[];
|
||||||
extern char iramstart[];
|
extern char iramstart[];
|
||||||
extern char iramend[];
|
extern char iramend[];
|
||||||
|
extern char iedata[];
|
||||||
|
extern char iend[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct codec_api *ci;
|
struct codec_api *ci;
|
||||||
|
@ -83,6 +85,7 @@ enum codec_status codec_start(struct codec_api *api)
|
||||||
|
|
||||||
#ifdef USE_IRAM
|
#ifdef USE_IRAM
|
||||||
ci->memcpy(iramstart, iramcopy, iramend - iramstart);
|
ci->memcpy(iramstart, iramcopy, iramend - iramstart);
|
||||||
|
ci->memset(iedata, 0, iend - iedata);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (codec_init(api))
|
if (codec_init(api))
|
||||||
|
|
|
@ -68,6 +68,8 @@ MPC_SAMPLE_FORMAT sample_buffer[MPC_FRAME_LENGTH*2] IBSS_ATTR;
|
||||||
extern char iramcopy[];
|
extern char iramcopy[];
|
||||||
extern char iramstart[];
|
extern char iramstart[];
|
||||||
extern char iramend[];
|
extern char iramend[];
|
||||||
|
extern char iedata[];
|
||||||
|
extern char iend[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* this is the codec entry point */
|
/* this is the codec entry point */
|
||||||
|
@ -83,6 +85,7 @@ enum codec_status codec_start(struct codec_api *api)
|
||||||
TEST_CODEC_API(api);
|
TEST_CODEC_API(api);
|
||||||
#ifdef USE_IRAM
|
#ifdef USE_IRAM
|
||||||
ci->memcpy(iramstart, iramcopy, iramend - iramstart);
|
ci->memcpy(iramstart, iramcopy, iramend - iramstart);
|
||||||
|
ci->memset(iedata, 0, iend - iedata);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ci->configure(CODEC_DSP_ENABLE, (bool *)true);
|
ci->configure(CODEC_DSP_ENABLE, (bool *)true);
|
||||||
|
|
|
@ -20,10 +20,12 @@
|
||||||
#include "codeclib.h"
|
#include "codeclib.h"
|
||||||
#include <codecs/libffmpegFLAC/shndec.h>
|
#include <codecs/libffmpegFLAC/shndec.h>
|
||||||
|
|
||||||
#ifndef SIMULATOR
|
#ifdef USE_IRAM
|
||||||
extern char iramcopy[];
|
extern char iramcopy[];
|
||||||
extern char iramstart[];
|
extern char iramstart[];
|
||||||
extern char iramend[];
|
extern char iramend[];
|
||||||
|
extern char iedata[];
|
||||||
|
extern char iend[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct codec_api* rb;
|
struct codec_api* rb;
|
||||||
|
@ -52,8 +54,9 @@ enum codec_status codec_start(struct codec_api* api)
|
||||||
rb = api;
|
rb = api;
|
||||||
ci = (struct codec_api*)api;
|
ci = (struct codec_api*)api;
|
||||||
|
|
||||||
#ifndef SIMULATOR
|
#ifdef USE_IRAM
|
||||||
ci->memcpy(iramstart, iramcopy, iramend-iramstart);
|
ci->memcpy(iramstart, iramcopy, iramend-iramstart);
|
||||||
|
ci->memset(iedata, 0, iend - iedata);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ci->configure(CODEC_SET_FILEBUF_WATERMARK, (int *)(1024*512));
|
ci->configure(CODEC_SET_FILEBUF_WATERMARK, (int *)(1024*512));
|
||||||
|
|
|
@ -101,6 +101,8 @@ bool vorbis_set_codec_parameters(OggVorbis_File *vf)
|
||||||
extern char iramcopy[];
|
extern char iramcopy[];
|
||||||
extern char iramstart[];
|
extern char iramstart[];
|
||||||
extern char iramend[];
|
extern char iramend[];
|
||||||
|
extern char iedata[];
|
||||||
|
extern char iend[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* this is the codec entry point */
|
/* this is the codec entry point */
|
||||||
|
@ -125,6 +127,7 @@ enum codec_status codec_start(struct codec_api *api)
|
||||||
|
|
||||||
#ifdef USE_IRAM
|
#ifdef USE_IRAM
|
||||||
rb->memcpy(iramstart, iramcopy, iramend - iramstart);
|
rb->memcpy(iramstart, iramcopy, iramend - iramstart);
|
||||||
|
rb->memset(iedata, 0, iend - iedata);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
rb->configure(CODEC_DSP_ENABLE, (bool *)true);
|
rb->configure(CODEC_DSP_ENABLE, (bool *)true);
|
||||||
|
|
|
@ -94,6 +94,8 @@ enum
|
||||||
extern char iramcopy[];
|
extern char iramcopy[];
|
||||||
extern char iramstart[];
|
extern char iramstart[];
|
||||||
extern char iramend[];
|
extern char iramend[];
|
||||||
|
extern char iedata[];
|
||||||
|
extern char iend[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Those are lookup tables, so they should be in the idata section
|
/* 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)
|
||||||
|
|
||||||
#ifdef USE_IRAM
|
#ifdef USE_IRAM
|
||||||
ci->memcpy(iramstart, iramcopy, iramend-iramstart);
|
ci->memcpy(iramstart, iramcopy, iramend-iramstart);
|
||||||
|
ci->memset(iedata, 0, iend - iedata);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ci->configure(CODEC_SET_FILEBUF_WATERMARK, (int *)(1024*512));
|
ci->configure(CODEC_SET_FILEBUF_WATERMARK, (int *)(1024*512));
|
||||||
|
|
|
@ -40,6 +40,8 @@ static long read_callback (void *buffer, long bytes)
|
||||||
extern char iramcopy[];
|
extern char iramcopy[];
|
||||||
extern char iramstart[];
|
extern char iramstart[];
|
||||||
extern char iramend[];
|
extern char iramend[];
|
||||||
|
extern char iedata[];
|
||||||
|
extern char iend[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* this is the codec entry point */
|
/* this is the codec entry point */
|
||||||
|
@ -56,6 +58,7 @@ enum codec_status codec_start(struct codec_api* api)
|
||||||
|
|
||||||
#ifdef USE_IRAM
|
#ifdef USE_IRAM
|
||||||
ci->memcpy(iramstart, iramcopy, iramend-iramstart);
|
ci->memcpy(iramstart, iramcopy, iramend-iramstart);
|
||||||
|
ci->memset(iedata, 0, iend - iedata);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ci->configure(CODEC_SET_FILEBUF_WATERMARK, (int *)(1024*512));
|
ci->configure(CODEC_SET_FILEBUF_WATERMARK, (int *)(1024*512));
|
||||||
|
|
|
@ -60,7 +60,8 @@ MEMORY
|
||||||
|
|
||||||
SECTIONS
|
SECTIONS
|
||||||
{
|
{
|
||||||
.text : {
|
.text :
|
||||||
|
{
|
||||||
KEEP(*(.entry))
|
KEEP(*(.entry))
|
||||||
*(.text*)
|
*(.text*)
|
||||||
#if CONFIG_CPU==PP5020
|
#if CONFIG_CPU==PP5020
|
||||||
|
@ -69,26 +70,25 @@ SECTIONS
|
||||||
#endif
|
#endif
|
||||||
} > PLUGIN_RAM
|
} > PLUGIN_RAM
|
||||||
|
|
||||||
.data : {
|
.rodata :
|
||||||
*(.data*)
|
{
|
||||||
} > PLUGIN_RAM
|
|
||||||
|
|
||||||
/DISCARD/ : {
|
|
||||||
*(.eh_frame)
|
|
||||||
}
|
|
||||||
|
|
||||||
.bss : {
|
|
||||||
*(.bss*)
|
|
||||||
} > PLUGIN_RAM
|
|
||||||
|
|
||||||
.rodata : {
|
|
||||||
*(.rodata*)
|
*(.rodata*)
|
||||||
. = ALIGN(0x4);
|
. = ALIGN(0x4);
|
||||||
|
} > PLUGIN_RAM
|
||||||
|
|
||||||
|
.data :
|
||||||
|
{
|
||||||
|
*(.data*)
|
||||||
#if defined(ARCH_IRIVER) || defined(ARCH_IPOD)
|
#if defined(ARCH_IRIVER) || defined(ARCH_IPOD)
|
||||||
iramcopy = .;
|
iramcopy = .;
|
||||||
#endif
|
#endif
|
||||||
} > PLUGIN_RAM
|
} > PLUGIN_RAM
|
||||||
|
|
||||||
|
/DISCARD/ :
|
||||||
|
{
|
||||||
|
*(.eh_frame)
|
||||||
|
}
|
||||||
|
|
||||||
#if defined(ARCH_IRIVER) || defined(ARCH_IPOD)
|
#if defined(ARCH_IRIVER) || defined(ARCH_IPOD)
|
||||||
.iram IRAMORIG : AT ( iramcopy)
|
.iram IRAMORIG : AT ( iramcopy)
|
||||||
{
|
{
|
||||||
|
@ -96,13 +96,29 @@ SECTIONS
|
||||||
*(.icode)
|
*(.icode)
|
||||||
*(.irodata)
|
*(.irodata)
|
||||||
*(.idata)
|
*(.idata)
|
||||||
*(.ibss)
|
|
||||||
iramend = .;
|
iramend = .;
|
||||||
} > PLUGIN_IRAM
|
} > PLUGIN_IRAM
|
||||||
|
|
||||||
|
.ibss (NOLOAD) :
|
||||||
|
{
|
||||||
|
iedata = .;
|
||||||
|
*(.ibss)
|
||||||
|
. = ALIGN(0x4);
|
||||||
|
iend = .;
|
||||||
|
} > PLUGIN_IRAM
|
||||||
|
|
||||||
|
.bss ADDR(.data) + SIZEOF(.data) + SIZEOF(.iram):
|
||||||
|
#else
|
||||||
|
.bss :
|
||||||
#endif
|
#endif
|
||||||
|
{
|
||||||
|
*(.bss*)
|
||||||
|
} > PLUGIN_RAM
|
||||||
|
|
||||||
/* Special trick to avoid a linker error when no other sections are
|
/* Special trick to avoid a linker error when no other sections are
|
||||||
left after garbage collection (plugin not for this platform) */
|
left after garbage collection (plugin not for this platform) */
|
||||||
.comment 0 : {
|
.comment 0 :
|
||||||
|
{
|
||||||
KEEP(*(.comment))
|
KEEP(*(.comment))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
struct cpu cpu IDATA_ATTR;
|
struct cpu cpu IBSS_ATTR;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
|
|
||||||
struct lcd lcd;
|
struct lcd lcd;
|
||||||
|
|
||||||
struct scan scan IDATA_ATTR;
|
struct scan scan IBSS_ATTR;
|
||||||
|
|
||||||
#define BG (scan.bg)
|
#define BG (scan.bg)
|
||||||
#define WND (scan.wnd)
|
#define WND (scan.wnd)
|
||||||
|
|
|
@ -42,6 +42,8 @@ const struct {
|
||||||
extern char iramcopy[];
|
extern char iramcopy[];
|
||||||
extern char iramstart[];
|
extern char iramstart[];
|
||||||
extern char iramend[];
|
extern char iramend[];
|
||||||
|
extern char iedata[];
|
||||||
|
extern char iend[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* here is a global api struct pointer. while not strictly necessary,
|
/* 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
|
#ifdef USE_IRAM
|
||||||
memcpy(iramstart, iramcopy, iramend-iramstart);
|
memcpy(iramstart, iramcopy, iramend-iramstart);
|
||||||
|
memset(iedata, 0, iend - iedata);
|
||||||
#endif
|
#endif
|
||||||
shut=0;
|
shut=0;
|
||||||
cleanshut=0;
|
cleanshut=0;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue