From daea2e08b07e4332a9e0815fdf56a2b773fc899b Mon Sep 17 00:00:00 2001 From: Uwe Hermann Date: Thu, 22 Nov 2007 22:54:11 +0000 Subject: [PATCH] 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 Acked-by: Uwe Hermann git-svn-id: svn://coreboot.org/repository/LinuxBIOSv3@516 f3766cd6-281f-0410-b1cd-43a5c92072e9 --- include/shared.h | 15 +++++++++++++++ mainboard/adl/msm800sev/Makefile | 2 +- mainboard/amd/norwich/Makefile | 2 +- mainboard/artecgroup/dbe61/Makefile | 2 +- mainboard/emulation/qemu-x86/Makefile | 2 +- 5 files changed, 19 insertions(+), 4 deletions(-) diff --git a/include/shared.h b/include/shared.h index 9af9fc1168..d7a3ec6541 100644 --- a/include/shared.h +++ b/include/shared.h @@ -29,8 +29,23 @@ */ #define FUNC(func, ret, attr, args...) \ ret stage0_##func(args) attr + +/* + * 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. + */ +#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 diff --git a/mainboard/adl/msm800sev/Makefile b/mainboard/adl/msm800sev/Makefile index 8de7a65ff2..b98d6d7374 100644 --- a/mainboard/adl/msm800sev/Makefile +++ b/mainboard/adl/msm800sev/Makefile @@ -34,7 +34,7 @@ INITRAM_OBJ = $(obj)/mainboard/$(MAINBOARDDIR)/initram.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 $@ + $(Q)$(CC) $(INITCFLAGS) -D_SHARED -D_MAINOBJECT -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 $@ diff --git a/mainboard/amd/norwich/Makefile b/mainboard/amd/norwich/Makefile index d54b5c68be..d0edc300f6 100644 --- a/mainboard/amd/norwich/Makefile +++ b/mainboard/amd/norwich/Makefile @@ -28,7 +28,7 @@ INITRAM_OBJ = $(obj)/mainboard/$(MAINBOARDDIR)/initram.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 $@ + $(Q)$(CC) $(INITCFLAGS) -D_SHARED -D_MAINOBJECT -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 $@ diff --git a/mainboard/artecgroup/dbe61/Makefile b/mainboard/artecgroup/dbe61/Makefile index 95e80540b7..6b2fdd771f 100644 --- a/mainboard/artecgroup/dbe61/Makefile +++ b/mainboard/artecgroup/dbe61/Makefile @@ -32,7 +32,7 @@ INITRAM_OBJ = $(obj)/mainboard/$(MAINBOARDDIR)/initram.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 $@ + $(Q)$(CC) $(INITCFLAGS) -D_SHARED -D_MAINOBJECT -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 $@ diff --git a/mainboard/emulation/qemu-x86/Makefile b/mainboard/emulation/qemu-x86/Makefile index e8e1f3e558..51b061f98a 100644 --- a/mainboard/emulation/qemu-x86/Makefile +++ b/mainboard/emulation/qemu-x86/Makefile @@ -43,7 +43,7 @@ $(obj)/linuxbios.vpd: 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 $@ + $(Q)$(CC) $(INITCFLAGS) -D_SHARED -D_MAINOBJECT -fPIE -c $< -o $@ $(obj)/linuxbios.initram $(obj)/linuxbios.initram.map: $(obj)/stage0.init $(obj)/stage0-prefixed.o $(INITRAM_OBJ) $(Q)# initram links against stage0