* 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
[email protected]
http://www.linuxbios.org/mailman/listinfo/linuxbios