From 64ded5aecc960fcc0d233e1d244264e54c2cbc6d Mon Sep 17 00:00:00 2001 From: Mariano Alvira Date: Sat, 5 Jan 2013 17:08:59 -0500 Subject: [PATCH] run the linker script through CPP so that the stack sizes can be changed using CONF parameters via DEFINES (e.g. SYS_CONF_STACK_SIZE 4096) --- cpu/mc1322x/Makefile.mc1322x | 10 ++-- cpu/mc1322x/{mc1322x.lds => mc1322x.lds.S} | 56 ++++++++++++++++++---- 2 files changed, 55 insertions(+), 11 deletions(-) rename cpu/mc1322x/{mc1322x.lds => mc1322x.lds.S} (90%) diff --git a/cpu/mc1322x/Makefile.mc1322x b/cpu/mc1322x/Makefile.mc1322x index 443c26f8f..185077562 100644 --- a/cpu/mc1322x/Makefile.mc1322x +++ b/cpu/mc1322x/Makefile.mc1322x @@ -40,7 +40,7 @@ PROJECT_OBJECTFILES += ${addprefix $(OBJECTDIR)/,$(CONTIKI_TARGET_MAIN:.c=.o)} TEXT_BASE = 0x00400000 export TEXT_BASE -LINKERSCRIPT = $(CONTIKI_CPU)/mc1322x.lds +LINKERSCRIPT = $(OBJECTDIR)/mc1322x.lds STARTUP=$(OBJECTDIR)/start.o @@ -70,6 +70,8 @@ CUSTOM_RULE_C_TO_OBJECTDIR_O=yes CUSTOM_RULE_C_TO_O=yes CFLAGS += -I$(OBJECTDIR) -I$(CONTIKI_CPU)/board -DBOARD=$(TARGET) +CPPFLAGS += -P -C ${addprefix -D,${subst $(COMMA), ,$(DEFINES)}} + $(OBJECTDIR)/board.h: $(OBJECTDIR) ifeq ($(HOST_OS),Windows) @@ -78,6 +80,8 @@ else ln -sf ../$(CONTIKI_CPU)/board/board.h $(OBJECTDIR)/board.h endif +$(OBJECTDIR)/%.lds: $(CONTIKI_CPU)/%.lds.S + $(CPP) $(CPPFLAGS) $< > $@ $(OBJECTDIR)/isr.o: $(CONTIKI_CPU)/src/isr.c $(CC) $(CFLAGS) $(ARM_FLAGS) $< -c -o $@ @@ -109,7 +113,7 @@ CUSTOM_RULE_C_TO_CO=yes %.$(TARGET): %_$(TARGET).bin @ -%.elf: $(OBJECTDIR)/board.h %.co $(PROJECT_OBJECTFILES) contiki-$(TARGET).a $(STARTUP) - $(CC) $(LDFLAGS) $(CFLAGS) -nostartfiles -o $@ $(filter-out %.a,$^) $(filter %.a,$^) $(filter %.a,$^) +%.elf: $(OBJECTDIR)/board.h %.co $(PROJECT_OBJECTFILES) contiki-$(TARGET).a $(STARTUP) $(OBJECTDIR)/mc1322x.lds + $(CC) $(LDFLAGS) $(CFLAGS) -nostartfiles -o $@ $(filter-out %.a %.lds,$^) $(filter %.a,$^) $(filter %.a,$^) diff --git a/cpu/mc1322x/mc1322x.lds b/cpu/mc1322x/mc1322x.lds.S similarity index 90% rename from cpu/mc1322x/mc1322x.lds rename to cpu/mc1322x/mc1322x.lds.S index 95fcb2665..baf458ae4 100644 --- a/cpu/mc1322x/mc1322x.lds +++ b/cpu/mc1322x/mc1322x.lds.S @@ -1,3 +1,45 @@ +#ifndef SYS_CONF_STACK_SIZE +#define SYS_STACK_SIZE 2048 +#else +#define SYS_STACK_SIZE SYS_CONF_STACK_SIZE +#endif + +#ifndef IRQ_CONF_STACK_SIZE +#define IRQ_STACK_SIZE 128 +#else +#define IRQ_STACK_SIZE IRQ_CONF_STACK_SIZE +#endif + +#ifndef FIQ_CONF_STACK_SIZE +#define FIQ_STACK_SIZE 128 +#else +#define FIQ_STACK_SIZE FIQ_CONF_STACK_SIZE +#endif + +#ifndef SVC_CONF_STACK_SIZE +#define SVC_STACK_SIZE 16 +#else +#define SVC_STACK_SIZE SVC_CONF_STACK_SIZE +#endif + +#ifndef ABT_CONF_STACK_SIZE +#define ABT_STACK_SIZE 16 +#else +#define ABT_STACK_SIZE ABT_CONF_STACK_SIZE +#endif + +#ifndef UND_CONF_STACK_SIZE +#define UND_STACK_SIZE 16 +#else +#define UND_STACK_SIZE UND_CONF_STACK_SIZE +#endif + +#ifndef HEAP_CONF_SIZE +#define HEAP_SIZE 16 +#else +#define HEAP_SIZE HEAP_CONF_SIZE +#endif + /* Script for -z combreloc: combine and sort reloc sections */ OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm") @@ -12,14 +54,6 @@ MEMORY SECTIONS { -SYS_STACK_SIZE = 1024; -IRQ_STACK_SIZE = 256; -FIQ_STACK_SIZE = 256; -SVC_STACK_SIZE = 256; -ABT_STACK_SIZE = 16; -UND_STACK_SIZE = 16; -HEAP_SIZE = 4096; - /* Read-only sections, merged into text segment: */ PROVIDE (__executable_start = 0x00400000); . = 0x00400000; .text : @@ -169,26 +203,32 @@ HEAP_SIZE = 4096; .stack : { __stack_start__ = . ; + /* IRQ_STACK */ . += IRQ_STACK_SIZE; . = ALIGN (4); __irq_stack_top__ = . ; + /* FIQ_STACK */ . += FIQ_STACK_SIZE; . = ALIGN (4); __fiq_stack_top__ = . ; + /* SVC_STACK */ . += SVC_STACK_SIZE; . = ALIGN (4); __svc_stack_top__ = . ; + /* ABT_STACK */ . += ABT_STACK_SIZE; . = ALIGN (4); __abt_stack_top__ = . ; + /* UND_STACK */ . += UND_STACK_SIZE; . = ALIGN (4); __und_stack_top__ = . ; + /* SYS_STACK */ . += SYS_STACK_SIZE; . = ALIGN (4); __sys_stack_top__ = . ;