From da305e6b61efab8c16d324723859b318fb1979a9 Mon Sep 17 00:00:00 2001 From: Kevin O'Connor Date: Fri, 10 Jun 2016 21:11:04 -0400 Subject: [PATCH] build: Update declfuncs.lds.S to only use progmem sections on AVR On non-avr platforms the declfunc stuff still needs to be in the binary in a rodata section. Signed-off-by: Kevin O'Connor --- Makefile | 4 ++-- src/declfunc.lds.S | 19 +++++++++++++++---- src/sched.h | 2 +- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index 4149f879..a9f21aa5 100644 --- a/Makefile +++ b/Makefile @@ -39,7 +39,7 @@ CFLAGS-y += -flto -fwhole-program LDFLAGS-y := -Wl,--gc-sections -CPPFLAGS = -P -MD -MT $@ +CPPFLAGS = -I$(OUT) -P -MD -MT $@ CFLAGS = $(CFLAGS-y) LDFLAGS = $(LDFLAGS-y) @@ -87,7 +87,7 @@ $(OUT)klipper.o: $(patsubst %.c, $(OUT)src/%.o,$(src-y)) $(OUT)declfunc.lds $(OUT)compile_time_request.o: $(OUT)klipper.o ./scripts/buildcommands.py @echo " Building $@" - $(Q)$(OBJCOPY) -j '.compile_time_request' -O binary $< $(OUT)klipper.o.compile_time_request + $(Q)$(OBJCOPY) --dump-section '.compile_time_request'=$(OUT)klipper.o.compile_time_request $< $(Q)$(PYTHON) ./scripts/buildcommands.py $(OUT)klipper.o.compile_time_request $(OUT)autoconf.h $(OUT)compile_time_request.c $(Q)$(CC) $(CFLAGS) -c $(OUT)compile_time_request.c -o $@ diff --git a/src/declfunc.lds.S b/src/declfunc.lds.S index 9bb5c8ad..2226300c 100644 --- a/src/declfunc.lds.S +++ b/src/declfunc.lds.S @@ -1,13 +1,21 @@ // Linker script that defines symbols around sections. The DECL_X() // macros need this linker script to place _start and _end symbols // around the list of declared items. +#include "autoconf.h" // CONFIG_MACH_AVR +#include "compiler.h" // __PASTE + +#if CONFIG_MACH_AVR +#define DECL_SECTION .progmem.data. +#else +#define DECL_SECTION .rodata. +#endif #define DECLWRAPPER(NAME) \ - .progmem.data. ## NAME : SUBALIGN(1) { \ + __PASTE(DECL_SECTION, NAME) : SUBALIGN(1) { \ NAME ## _start = . ; \ - *( .progmem.data. ## NAME ##.pre* ) \ - *( .progmem.data. ## NAME ##* ) \ - *( .progmem.data. ## NAME ##.post* ) \ + *( .rodata. ## NAME ##.pre* ) \ + *( .rodata. ## NAME ##* ) \ + *( .rodata. ## NAME ##.post* ) \ NAME ## _end = . ; \ } @@ -23,4 +31,7 @@ SECTIONS .compile_time_request.parsers 0 (INFO) : { *( .compile_time_request.parsers ) } + .compile_time_request (INFO) : { + *( .compile_time_request ) + } } diff --git a/src/sched.h b/src/sched.h index bdef5e4c..9685317f 100644 --- a/src/sched.h +++ b/src/sched.h @@ -42,7 +42,7 @@ struct callback_handler { }; #define _DECL_CALLBACK(NAME, FUNC) \ const struct callback_handler _DECL_ ## NAME ## _ ## FUNC __visible \ - __section(".progmem.data." __stringify(NAME) ) = { .func = FUNC } + __section(".rodata." __stringify(NAME) ) = { .func = FUNC } #define foreachdecl(ITER, NAME) \ extern typeof(*ITER) NAME ## _start[], NAME ## _end[]; \