summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/plugins/Makefile2
-rw-r--r--apps/plugins/lib/Makefile5
-rw-r--r--apps/plugins/plugin.lds17
3 files changed, 16 insertions, 8 deletions
diff --git a/apps/plugins/Makefile b/apps/plugins/Makefile
index a59e33f5c6..1f1c309bd2 100644
--- a/apps/plugins/Makefile
+++ b/apps/plugins/Makefile
@@ -54,7 +54,7 @@ ifndef SIMVER
$(OBJDIR)/%.elf: $(OBJDIR)/%.o $(LINKFILE) $(BUILDDIR)/libplugin.a
$(SILENT)(file=`basename $@`; \
echo "LD $$file"; \
- $(CC) $(GCCOPTS) -O -nostdlib -o $@ $< -L$(BUILDDIR) $(CODECLIBS) -lplugin -lgcc -T$(LINKFILE) -Wl,-Map,$(OBJDIR)/$*.map)
+ $(CC) $(GCCOPTS) -O -nostdlib -o $@ $< -L$(BUILDDIR) $(CODECLIBS) -lplugin -lgcc -T$(LINKFILE) -Wl,--gc-sections -Wl,-Map,$(OBJDIR)/$*.map)
$(OBJDIR)/%.rock : $(OBJDIR)/%.elf
@echo "OBJCOPY "`basename $@`
diff --git a/apps/plugins/lib/Makefile b/apps/plugins/lib/Makefile
index 21dea571ae..7eddccddc5 100644
--- a/apps/plugins/lib/Makefile
+++ b/apps/plugins/lib/Makefile
@@ -20,6 +20,11 @@ endif
CFLAGS = $(GCCOPTS) \
$(INCLUDES) $(TARGET) $(EXTRA_DEFINES) -DMEM=${MEMORYSIZE} -DPLUGIN
+# Sectioned compilation for target
+ifndef SIMVER
+ CFLAGS += -ffunction-sections -fdata-sections
+endif
+
# This sets up 'SRC' based on the files mentioned in SOURCES
include $(TOOLSDIR)/makesrc.inc
diff --git a/apps/plugins/plugin.lds b/apps/plugins/plugin.lds
index 42f56e58bf..bf1057e332 100644
--- a/apps/plugins/plugin.lds
+++ b/apps/plugins/plugin.lds
@@ -51,12 +51,12 @@ MEMORY
SECTIONS
{
.text : {
- *(.entry)
- *(.text)
+ KEEP(*(.entry))
+ *(.text*)
} > PLUGIN_RAM
.data : {
- *(.data)
+ *(.data*)
} > PLUGIN_RAM
/DISCARD/ : {
@@ -64,13 +64,11 @@ SECTIONS
}
.bss : {
- *(.bss)
+ *(.bss*)
} > PLUGIN_RAM
.rodata : {
- *(.rodata)
- *(.rodata.str1.1)
- *(.rodata.str1.4)
+ *(.rodata*)
. = ALIGN(0x4);
#ifdef ARCH_IRIVER
iramcopy = .;
@@ -86,4 +84,9 @@ SECTIONS
iramend = .;
} > PLUGIN_IRAM
#endif
+ /* Special trick to avoid a linker error when no other sections are
+ left after garbage collection (plugin not for this platform) */
+ .comment 0 : {
+ KEEP(*(.comment))
+ }
}