aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkfraser@localhost.localdomain <kfraser@localhost.localdomain>2006-10-18 16:56:27 +0100
committerkfraser@localhost.localdomain <kfraser@localhost.localdomain>2006-10-18 16:56:27 +0100
commitea847a59dc7db35e48d15faf01ca81ba982675c8 (patch)
tree55ea2a33af872666068c03e1d25ec359f545b149
parent8917832a55d01ea649c7d6a0265ccb3177098280 (diff)
downloadxen-ea847a59dc7db35e48d15faf01ca81ba982675c8.tar.gz
xen-ea847a59dc7db35e48d15faf01ca81ba982675c8.tar.bz2
xen-ea847a59dc7db35e48d15faf01ca81ba982675c8.zip
Clean up linker flag definitions.
1. GNU ld does not understand -m{32,64}. It must be cooked for it by the GCC driver program. 2. Where GNU ld is directly called we must use -melf_{i386,x86_64}. 3. We cannot avoid calling GNU ld directly in some cases (e.g., when specifying GNU-specific linker scripts) as on some host architectures the GCC driver is configured to call the host linker. 4. We cannot add -melf_{i386,x86_64} to LDFLAGS as the option is not recognised by GCC. Hence we define new LDFLAGS_DIRECT, to be added to the command line only when invoking GNU ld directly. Signed-off-by: Keir Fraser <keir@xensource.com>
-rw-r--r--config/x86_32.mk4
-rw-r--r--config/x86_64.mk4
-rw-r--r--tools/firmware/hvmloader/Makefile4
-rw-r--r--tools/firmware/vmxassist/Makefile3
-rw-r--r--xen/Rules.mk3
-rw-r--r--xen/arch/x86/Rules.mk2
6 files changed, 12 insertions, 8 deletions
diff --git a/config/x86_32.mk b/config/x86_32.mk
index 4db3c73b3b..7e13463326 100644
--- a/config/x86_32.mk
+++ b/config/x86_32.mk
@@ -7,5 +7,7 @@ CONFIG_XCUTILS := y
CONFIG_IOEMU := y
CFLAGS += -m32 -march=i686
-LDFLAGS += -m32
LIBDIR := lib
+
+# Use only if calling $(LD) directly.
+LDFLAGS_DIRECT += -melf_i386
diff --git a/config/x86_64.mk b/config/x86_64.mk
index c76567563c..3825caafd5 100644
--- a/config/x86_64.mk
+++ b/config/x86_64.mk
@@ -7,5 +7,7 @@ CONFIG_XCUTILS := y
CONFIG_IOEMU := y
CFLAGS += -m64
-LDFLAGS += -m64
LIBDIR = $(LIB64DIR)
+
+# Use only if calling $(LD) directly.
+LDFLAGS_DIRECT += -melf_x86_64
diff --git a/tools/firmware/hvmloader/Makefile b/tools/firmware/hvmloader/Makefile
index 3f9b7a95bb..ae031e96d4 100644
--- a/tools/firmware/hvmloader/Makefile
+++ b/tools/firmware/hvmloader/Makefile
@@ -38,7 +38,7 @@ CFLAGS += $(call test-gcc-flag,$(CC),-fno-stack-protector-all)
OBJCOPY = objcopy
CFLAGS += $(DEFINES) -I. $(XENINC) -fno-builtin -O2 -msoft-float
-LDFLAGS = -m32 -nostdlib -Wl,-N -Wl,-Ttext -Wl,$(LOADADDR)
+LDFLAGS = -nostdlib -Wl,-N -Wl,-Ttext -Wl,$(LOADADDR)
SRCS = hvmloader.c acpi_madt.c mp_tables.c util.c smbios.c
OBJS = $(patsubst %.c,%.o,$(SRCS))
@@ -48,7 +48,7 @@ all: hvmloader
hvmloader: roms.h $(SRCS)
$(CC) $(CFLAGS) -c $(SRCS)
- $(CC) $(LDFLAGS) -o hvmloader.tmp $(OBJS)
+ $(CC) $(CFLAGS) $(LDFLAGS) -o hvmloader.tmp $(OBJS)
$(OBJCOPY) hvmloader.tmp hvmloader
rm -f hvmloader.tmp
diff --git a/tools/firmware/vmxassist/Makefile b/tools/firmware/vmxassist/Makefile
index 08fea45781..1f441a12c3 100644
--- a/tools/firmware/vmxassist/Makefile
+++ b/tools/firmware/vmxassist/Makefile
@@ -39,7 +39,6 @@ CFLAGS += $(call test-gcc-flag,$(CC),-fno-stack-protector-all)
CPP = cpp -P
OBJCOPY = objcopy -p -O binary -R .note -R .comment -R .bss -S --gap-fill=0
CFLAGS += $(DEFINES) -I. $(XENINC) -fno-builtin -O2 -msoft-float
-LDFLAGS = -m elf_i386
OBJECTS = head.o trap.o vm86.o setup.o util.o
@@ -48,7 +47,7 @@ all: vmxassist.bin
vmxassist.bin: vmxassist.ld $(OBJECTS)
$(CPP) $(DEFINES) vmxassist.ld > vmxassist.tmp
- $(LD) -o vmxassist $(LDFLAGS) -nostdlib --fatal-warnings -N -T vmxassist.tmp $(OBJECTS)
+ $(LD) -o vmxassist $(LDFLAGS_DIRECT) -nostdlib --fatal-warnings -N -T vmxassist.tmp $(OBJECTS)
nm -n vmxassist > vmxassist.sym
$(OBJCOPY) vmxassist vmxassist.tmp
dd if=vmxassist.tmp of=vmxassist.bin ibs=512 conv=sync
diff --git a/xen/Rules.mk b/xen/Rules.mk
index 1522ba786b..d333e563ce 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -71,6 +71,9 @@ CFLAGS := $(strip $(CFLAGS) $(CFLAGS-y))
AFLAGS := $(strip $(AFLAGS) $(AFLAGS-y))
AFLAGS += $(patsubst -std=gnu%,,$(CFLAGS))
+# LDFLAGS are only passed directly to $(LD)
+LDFLAGS += $(LDFLAGS_DIRECT)
+
include Makefile
# Ensure each subdirectory has exactly one trailing slash.
diff --git a/xen/arch/x86/Rules.mk b/xen/arch/x86/Rules.mk
index 176d6aebf4..33eb5b53a4 100644
--- a/xen/arch/x86/Rules.mk
+++ b/xen/arch/x86/Rules.mk
@@ -34,7 +34,6 @@ CFLAGS += -DCONFIG_X86_SUPERVISOR_MODE_KERNEL=1
endif
ifeq ($(XEN_TARGET_ARCH),x86_32)
-LDFLAGS += -m elf_i386
x86_32 := y
x86_64 := n
endif
@@ -45,7 +44,6 @@ CFLAGS += -fno-asynchronous-unwind-tables
# -fvisibility=hidden reduces -fpic cost, if it's available
CFLAGS += $(shell $(CC) -v --help 2>&1 | grep " -fvisibility=" | \
grep -q hidden && echo "-DGCC_HAS_VISIBILITY_ATTRIBUTE")
-LDFLAGS += -m elf_x86_64
x86_32 := n
x86_64 := y
endif