* Carl-Daniel Hailfinger <[EMAIL PROTECTED]> [071122 21:44]: > The introduction of the _SHARED macros had one flaw: If multiple files > had _SHARED defined during compilation, each of them would contain an > assignment of stage0_printk to *printk. During linking, this caused > errors as multiple definitions of printk existed. > Make sure _SHARED alone gives you only the printk prototype, and iff > _MAINOBJECT is defined as well, include the assignment. > > Signed-off-by: Carl-Daniel Hailfinger <[EMAIL PROTECTED]>
I like it, but I suggest to simplify the code further. On top of your sign-off, add Signed-off-by: Stefan Reinauer <[EMAIL PROTECTED]> -- coresystems GmbH • Brahmsstr. 16 • D-79104 Freiburg i. Br. Tel.: +49 761 7668825 • Fax: +49 761 7664613 Email: [EMAIL PROTECTED] • http://www.coresystems.de/ Registergericht: Amtsgericht Freiburg • HRB 7656 Geschäftsführer: Stefan Reinauer • Ust-IdNr.: DE245674866
Index: include/shared.h =================================================================== --- include/shared.h (revision 515) +++ include/shared.h (working copy) @@ -29,9 +29,16 @@ */ #define FUNC(func, ret, attr, args...) \ ret stage0_##func(args) attr + +#ifdef _MAINOBJECT #define EXTERN(func, ret, attr, args...) \ ret (*func)(args) attr= stage0_##func #else +#define EXTERN(func, ret, attr, args...) \ + ret *func(args) attr +#endif + +#else #define FUNC(func, ret, attr, args...) \ ret func(args) attr #define EXTERN(func, ret, attr, args...) Index: mainboard/adl/msm800sev/initram.c =================================================================== --- mainboard/adl/msm800sev/initram.c (revision 515) +++ mainboard/adl/msm800sev/initram.c (working copy) @@ -18,6 +18,7 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#define _MAINOBJECT #include <types.h> #include <lib.h> #include <console.h> Index: mainboard/adl/msm800sev/Makefile =================================================================== --- mainboard/adl/msm800sev/Makefile (revision 515) +++ mainboard/adl/msm800sev/Makefile (working copy) @@ -32,24 +32,11 @@ $(obj)/southbridge/amd/cs5536/smbus_initram.o \ $(obj)/arch/x86/geodelx/geodelx.o -# Next Quest: Make a single rule out of those: -$(obj)/mainboard/$(MAINBOARDDIR)/initram.o: $(src)/mainboard/$(MAINBOARDDIR)/initram.c - $(Q)$(CC) $(INITCFLAGS) -D_SHARED -fPIE -c $< -o $@ -$(obj)/northbridge/amd/geodelx/raminit.o: $(src)/northbridge/amd/geodelx/raminit.c - $(Q)mkdir -p $(dir $@) - $(Q)$(CC) $(INITCFLAGS) -D_SHARED -fPIE -c $< -o $@ -$(obj)/southbridge/amd/cs5536/smbus_initram.o: $(src)/southbridge/amd/cs5536/smbus_initram.c - $(Q)mkdir -p $(dir $@) - $(Q)$(CC) $(INITCFLAGS) -D_SHARED -fPIE -c $< -o $@ -$(obj)/arch/x86/geodelx/geodelx.o: $(src)/arch/x86/geodelx/geodelx.c - $(Q)mkdir -p $(dir $@) - $(Q)$(CC) $(INITCFLAGS) -D_SHARED -fPIE -c $< -o $@ - -$(obj)/linuxbios.initram $(obj)/linuxbios.initram.map: $(obj)/stage0.init $(obj)/stage0-prefixed.o $(INITRAM_OBJ) +$(obj)/linuxbios.initram $(obj)/linuxbios.initram.map: $(obj)/stage0.init $(obj)/stage0-prefixed.o $(patsubst %.o,%_xip.o,$(INITRAM_OBJ)) $(Q)# initram links against stage0 $(Q)printf " LD $(subst $(shell pwd)/,,$(@))\n" $(Q)$(LD) --entry main -N -R $(obj)/stage0-prefixed.o \ - $(INITRAM_OBJ) -o $(obj)/linuxbios.initram.o + $(patsubst %.o,%_xip.o,$(INITRAM_OBJ)) -o $(obj)/linuxbios.initram.o $(Q)printf " OBJCOPY $(subst $(shell pwd)/,,$(@))\n" $(Q)$(OBJCOPY) -O binary $(obj)/linuxbios.initram.o \ $(obj)/linuxbios.initram Index: mainboard/amd/norwich/initram.c =================================================================== --- mainboard/amd/norwich/initram.c (revision 515) +++ mainboard/amd/norwich/initram.c (working copy) @@ -18,6 +18,8 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#define _MAINOBJECT + #include <types.h> #include <lib.h> #include <console.h> Index: mainboard/amd/norwich/Makefile =================================================================== --- mainboard/amd/norwich/Makefile (revision 515) +++ mainboard/amd/norwich/Makefile (working copy) @@ -26,30 +26,17 @@ $(obj)/southbridge/amd/cs5536/smbus_initram.o \ $(obj)/arch/x86/geodelx/geodelx.o -# Next Quest: Make a single rule out of those: -$(obj)/mainboard/$(MAINBOARDDIR)/initram.o: $(src)/mainboard/$(MAINBOARDDIR)/initram.c - $(Q)$(CC) $(INITCFLAGS) -D_SHARED -fPIE -c $< -o $@ -$(obj)/northbridge/amd/geodelx/raminit.o: $(src)/northbridge/amd/geodelx/raminit.c - $(Q)mkdir -p $(dir $@) - $(Q)$(CC) $(INITCFLAGS) -D_SHARED -fPIE -c $< -o $@ -$(obj)/southbridge/amd/cs5536/smbus_initram.o: $(src)/southbridge/amd/cs5536/smbus_initram.c - $(Q)mkdir -p $(dir $@) - $(Q)$(CC) $(INITCFLAGS) -D_SHARED -fPIE -c $< -o $@ -$(obj)/arch/x86/geodelx/geodelx.o: $(src)/arch/x86/geodelx/geodelx.c - $(Q)mkdir -p $(dir $@) - $(Q)$(CC) $(INITCFLAGS) -D_SHARED -fPIE -c $< -o $@ - STAGE2_MAINBOARD_OBJ = $(obj)/linuxbios.vpd: $(Q)printf " BUILD DUMMY VPD\n" $(Q)dd if=/dev/zero of=$(obj)/linuxbios.vpd bs=256 count=1 $(SILENT) -$(obj)/linuxbios.initram $(obj)/linuxbios.initram.map: $(obj)/stage0.init $(obj)/stage0-prefixed.o $(INITRAM_OBJ) +$(obj)/linuxbios.initram $(obj)/linuxbios.initram.map: $(obj)/stage0.init $(obj)/stage0-prefixed.o $(patsubst %.o,%_xip.o,$(INITRAM_OBJ)) $(Q)# initram links against stage0 $(Q)printf " LD $(subst $(shell pwd)/,,$(@))\n" $(Q)$(LD) --entry main -N -R $(obj)/stage0-prefixed.o \ - $(INITRAM_OBJ) -o $(obj)/linuxbios.initram.o + $(patsubst %.o,%_xip.o,$(INITRAM_OBJ)) -o $(obj)/linuxbios.initram.o $(Q)printf " OBJCOPY $(subst $(shell pwd)/,,$(@))\n" $(Q)$(OBJCOPY) -O binary $(obj)/linuxbios.initram.o \ $(obj)/linuxbios.initram Index: mainboard/artecgroup/dbe61/initram.c =================================================================== --- mainboard/artecgroup/dbe61/initram.c (revision 515) +++ mainboard/artecgroup/dbe61/initram.c (working copy) @@ -18,6 +18,7 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#define _MAINOBJECT #include <types.h> #include <lib.h> #include <console.h> Index: mainboard/artecgroup/dbe61/Makefile =================================================================== --- mainboard/artecgroup/dbe61/Makefile (revision 515) +++ mainboard/artecgroup/dbe61/Makefile (working copy) @@ -30,24 +30,12 @@ INITRAM_OBJ = $(obj)/mainboard/$(MAINBOARDDIR)/initram.o \ $(obj)/arch/x86/geodelx/geodelx.o -# Next Quest: Make a single rule out of those: -$(obj)/mainboard/$(MAINBOARDDIR)/initram.o: $(src)/mainboard/$(MAINBOARDDIR)/initram.c - $(Q)$(CC) $(INITCFLAGS) -D_SHARED -fPIE -c $< -o $@ -$(obj)/northbridge/amd/geodelx/raminit.o: $(src)/northbridge/amd/geodelx/raminit.c - $(Q)mkdir -p $(dir $@) - $(Q)$(CC) $(INITCFLAGS) -D_SHARED -fPIE -c $< -o $@ -$(obj)/southbridge/amd/cs5536/smbus_initram.o: $(src)/southbridge/amd/cs5536/smbus_initram.c - $(Q)mkdir -p $(dir $@) - $(Q)$(CC) $(INITCFLAGS) -D_SHARED -fPIE -c $< -o $@ -$(obj)/arch/x86/geodelx/geodelx.o: $(src)/arch/x86/geodelx/geodelx.c - $(Q)mkdir -p $(dir $@) - $(Q)$(CC) $(INITCFLAGS) -D_SHARED -fPIE -c $< -o $@ -$(obj)/linuxbios.initram $(obj)/linuxbios.initram.map: $(obj)/stage0.init $(obj)/stage0-prefixed.o $(INITRAM_OBJ) +$(obj)/linuxbios.initram $(obj)/linuxbios.initram.map: $(obj)/stage0.init $(obj)/stage0-prefixed.o $(patsubst %.o,%_xip.o,$(INITRAM_OBJ)) $(Q)# initram links against stage0 $(Q)printf " LD $(subst $(shell pwd)/,,$(@))\n" $(Q)$(LD) --entry main -N -R $(obj)/stage0-prefixed.o \ - $(INITRAM_OBJ) -o $(obj)/linuxbios.initram.o + $(patsubst %.o,%_xip.o,$(INITRAM_OBJ)) -o $(obj)/linuxbios.initram.o $(Q)printf " OBJCOPY $(subst $(shell pwd)/,,$(@))\n" $(Q)$(OBJCOPY) -O binary $(obj)/linuxbios.initram.o \ $(obj)/linuxbios.initram Index: mainboard/emulation/qemu-x86/initram.c =================================================================== --- mainboard/emulation/qemu-x86/initram.c (revision 515) +++ mainboard/emulation/qemu-x86/initram.c (working copy) @@ -17,6 +17,7 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#define _MAINOBJECT #include <console.h> int main(void) Index: mainboard/emulation/qemu-x86/Makefile =================================================================== --- mainboard/emulation/qemu-x86/Makefile (revision 515) +++ mainboard/emulation/qemu-x86/Makefile (working copy) @@ -42,14 +42,11 @@ INITRAM_OBJ = $(obj)/mainboard/$(MAINBOARDDIR)/initram.o -$(obj)/mainboard/$(MAINBOARDDIR)/initram.o: $(src)/mainboard/$(MAINBOARDDIR)/initram.c - $(Q)$(CC) $(INITCFLAGS) -D_SHARED -fPIE -c $< -o $@ - -$(obj)/linuxbios.initram $(obj)/linuxbios.initram.map: $(obj)/stage0.init $(obj)/stage0-prefixed.o $(INITRAM_OBJ) +$(obj)/linuxbios.initram $(obj)/linuxbios.initram.map: $(obj)/stage0.init $(obj)/stage0-prefixed.o $(patsubst %.o,%_xip.o,$(INITRAM_OBJ)) $(Q)# initram links against stage0 $(Q)printf " LD $(subst $(shell pwd)/,,$(@))\n" $(Q)$(LD) --entry main -N -R $(obj)/stage0-prefixed.o \ - $(INITRAM_OBJ) -o $(obj)/linuxbios.initram.o + $(patsubst %.o,%_xip.o,$(INITRAM_OBJ)) -o $(obj)/linuxbios.initram.o $(Q)printf " OBJCOPY $(subst $(shell pwd)/,,$(@))\n" $(Q)$(OBJCOPY) -O binary $(obj)/linuxbios.initram.o \ $(obj)/linuxbios.initram Index: Rules.make =================================================================== --- Rules.make (revision 515) +++ Rules.make (working copy) @@ -78,3 +78,13 @@ $(Q)printf " CC $(subst $(shell pwd)/,,$(@))\n" $(Q)$(CC) $(INITCFLAGS) -c $< -o $@ +# +# ram initialization code can not be linked at a specific address, +# hence it has to be executed in place position independently. +# + +$(obj)/%_xip.o: $(src)/%.c + $(Q)mkdir -p $(dir $@) + $(Q)printf " CC $(subst $(shell pwd)/,,$(@)) (XIP)\n" + $(Q)$(CC) $(INITCFLAGS) -D_SHARED -fPIE -c $< -o $@ +
-- linuxbios mailing list linuxbios@linuxbios.org http://www.linuxbios.org/mailman/listinfo/linuxbios