mirror of
https://github.com/fail0verflow/switch-coreboot.git
synced 2025-05-04 01:39:18 -04:00
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 <c-d.hailfinger.devel.2006@gmx.net> Acked-by: Uwe Hermann <uwe@hermann-uwe.de> git-svn-id: svn://coreboot.org/repository/LinuxBIOSv3@516 f3766cd6-281f-0410-b1cd-43a5c92072e9
This commit is contained in:
parent
7ffd614f3f
commit
daea2e08b0
5 changed files with 19 additions and 4 deletions
|
@ -29,8 +29,23 @@
|
||||||
*/
|
*/
|
||||||
#define FUNC(func, ret, attr, args...) \
|
#define FUNC(func, ret, attr, args...) \
|
||||||
ret stage0_##func(args) attr
|
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...) \
|
#define EXTERN(func, ret, attr, args...) \
|
||||||
ret (*func)(args) attr= stage0_##func
|
ret (*func)(args) attr= stage0_##func
|
||||||
|
#else
|
||||||
|
#define EXTERN(func, ret, attr, args...) \
|
||||||
|
ret *func(args) attr
|
||||||
|
#endif
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#define FUNC(func, ret, attr, args...) \
|
#define FUNC(func, ret, attr, args...) \
|
||||||
ret func(args) attr
|
ret func(args) attr
|
||||||
|
|
|
@ -34,7 +34,7 @@ INITRAM_OBJ = $(obj)/mainboard/$(MAINBOARDDIR)/initram.o \
|
||||||
|
|
||||||
# Next Quest: Make a single rule out of those:
|
# Next Quest: Make a single rule out of those:
|
||||||
$(obj)/mainboard/$(MAINBOARDDIR)/initram.o: $(src)/mainboard/$(MAINBOARDDIR)/initram.c
|
$(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
|
$(obj)/northbridge/amd/geodelx/raminit.o: $(src)/northbridge/amd/geodelx/raminit.c
|
||||||
$(Q)mkdir -p $(dir $@)
|
$(Q)mkdir -p $(dir $@)
|
||||||
$(Q)$(CC) $(INITCFLAGS) -D_SHARED -fPIE -c $< -o $@
|
$(Q)$(CC) $(INITCFLAGS) -D_SHARED -fPIE -c $< -o $@
|
||||||
|
|
|
@ -28,7 +28,7 @@ INITRAM_OBJ = $(obj)/mainboard/$(MAINBOARDDIR)/initram.o \
|
||||||
|
|
||||||
# Next Quest: Make a single rule out of those:
|
# Next Quest: Make a single rule out of those:
|
||||||
$(obj)/mainboard/$(MAINBOARDDIR)/initram.o: $(src)/mainboard/$(MAINBOARDDIR)/initram.c
|
$(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
|
$(obj)/northbridge/amd/geodelx/raminit.o: $(src)/northbridge/amd/geodelx/raminit.c
|
||||||
$(Q)mkdir -p $(dir $@)
|
$(Q)mkdir -p $(dir $@)
|
||||||
$(Q)$(CC) $(INITCFLAGS) -D_SHARED -fPIE -c $< -o $@
|
$(Q)$(CC) $(INITCFLAGS) -D_SHARED -fPIE -c $< -o $@
|
||||||
|
|
|
@ -32,7 +32,7 @@ INITRAM_OBJ = $(obj)/mainboard/$(MAINBOARDDIR)/initram.o \
|
||||||
|
|
||||||
# Next Quest: Make a single rule out of those:
|
# Next Quest: Make a single rule out of those:
|
||||||
$(obj)/mainboard/$(MAINBOARDDIR)/initram.o: $(src)/mainboard/$(MAINBOARDDIR)/initram.c
|
$(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
|
$(obj)/northbridge/amd/geodelx/raminit.o: $(src)/northbridge/amd/geodelx/raminit.c
|
||||||
$(Q)mkdir -p $(dir $@)
|
$(Q)mkdir -p $(dir $@)
|
||||||
$(Q)$(CC) $(INITCFLAGS) -D_SHARED -fPIE -c $< -o $@
|
$(Q)$(CC) $(INITCFLAGS) -D_SHARED -fPIE -c $< -o $@
|
||||||
|
|
|
@ -43,7 +43,7 @@ $(obj)/linuxbios.vpd:
|
||||||
INITRAM_OBJ = $(obj)/mainboard/$(MAINBOARDDIR)/initram.o
|
INITRAM_OBJ = $(obj)/mainboard/$(MAINBOARDDIR)/initram.o
|
||||||
|
|
||||||
$(obj)/mainboard/$(MAINBOARDDIR)/initram.o: $(src)/mainboard/$(MAINBOARDDIR)/initram.c
|
$(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)
|
$(obj)/linuxbios.initram $(obj)/linuxbios.initram.map: $(obj)/stage0.init $(obj)/stage0-prefixed.o $(INITRAM_OBJ)
|
||||||
$(Q)# initram links against stage0
|
$(Q)# initram links against stage0
|
||||||
|
|
Loading…
Add table
Reference in a new issue