[PATCH] uml: allow building as 32-bit binary on 64bit host
This patch makes the command: make ARCH=um SUBARCH=i386 work on x86_64 hosts (with support for building 32-bit binaries). This is especially needed since 64-bit UMLs don't support 32-bit emulation for guest binaries, currently. This has been tested in all possible cases and works. Only exception is that I've built but not tested a 64-bit binary, because I hadn't a 64-bit filesystem available. Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it> Cc: Jeff Dike <jdike@addtoit.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
ecc354a90a
commit
20d0021394
@ -51,11 +51,6 @@ MRPROPER_DIRS += $(ARCH_DIR)/include2
|
||||
endif
|
||||
SYS_DIR := $(ARCH_DIR)/include/sysdep-$(SUBARCH)
|
||||
|
||||
include $(srctree)/$(ARCH_DIR)/Makefile-$(SUBARCH)
|
||||
|
||||
core-y += $(SUBARCH_CORE)
|
||||
libs-y += $(SUBARCH_LIBS)
|
||||
|
||||
# -Dvmap=kernel_vmap affects everything, and prevents anything from
|
||||
# referencing the libpcap.o symbol so named.
|
||||
|
||||
@ -64,7 +59,7 @@ CFLAGS += $(CFLAGS-y) -D__arch_um__ -DSUBARCH=\"$(SUBARCH)\" \
|
||||
|
||||
USER_CFLAGS := $(patsubst -I%,,$(CFLAGS))
|
||||
USER_CFLAGS := $(patsubst -D__KERNEL__,,$(USER_CFLAGS)) $(ARCH_INCLUDE) \
|
||||
$(MODE_INCLUDE) $(ARCH_USER_CFLAGS)
|
||||
$(MODE_INCLUDE)
|
||||
|
||||
# -Derrno=kernel_errno - This turns all kernel references to errno into
|
||||
# kernel_errno to separate them from the libc errno. This allows -fno-common
|
||||
@ -74,6 +69,8 @@ USER_CFLAGS := $(patsubst -D__KERNEL__,,$(USER_CFLAGS)) $(ARCH_INCLUDE) \
|
||||
CFLAGS += -Derrno=kernel_errno -Dsigprocmask=kernel_sigprocmask
|
||||
CFLAGS += $(call cc-option,-fno-unit-at-a-time,)
|
||||
|
||||
include $(srctree)/$(ARCH_DIR)/Makefile-$(SUBARCH)
|
||||
|
||||
#This will adjust *FLAGS accordingly to the platform.
|
||||
include $(srctree)/$(ARCH_DIR)/Makefile-os-$(OS)
|
||||
|
||||
@ -132,7 +129,7 @@ CPPFLAGS_vmlinux.lds = -U$(SUBARCH) \
|
||||
#The wrappers will select whether using "malloc" or the kernel allocator.
|
||||
LINK_WRAPS = -Wl,--wrap,malloc -Wl,--wrap,free -Wl,--wrap,calloc
|
||||
|
||||
CFLAGS_vmlinux = $(LINK-y) $(LINK_WRAPS)
|
||||
CFLAGS_vmlinux := $(LINK-y) $(LINK_WRAPS)
|
||||
define cmd_vmlinux__
|
||||
$(CC) $(CFLAGS_vmlinux) -o $@ \
|
||||
-Wl,-T,$(vmlinux-lds) $(vmlinux-init) \
|
||||
|
@ -1,4 +1,4 @@
|
||||
SUBARCH_CORE := arch/um/sys-i386/ arch/i386/crypto/
|
||||
core-y += arch/um/sys-i386/ arch/i386/crypto/
|
||||
|
||||
TOP_ADDR := $(CONFIG_TOP_ADDR)
|
||||
|
||||
@ -8,21 +8,32 @@ ifeq ($(CONFIG_MODE_SKAS),y)
|
||||
endif
|
||||
endif
|
||||
|
||||
LDFLAGS += -m elf_i386
|
||||
ELF_ARCH := $(SUBARCH)
|
||||
ELF_FORMAT := elf32-$(SUBARCH)
|
||||
OBJCOPYFLAGS := -O binary -R .note -R .comment -S
|
||||
|
||||
ifeq ("$(origin SUBARCH)", "command line")
|
||||
ifneq ("$(shell uname -m | sed -e s/i.86/i386/)", "$(SUBARCH)")
|
||||
CFLAGS += $(call cc-option,-m32)
|
||||
USER_CFLAGS += $(call cc-option,-m32)
|
||||
HOSTCFLAGS += $(call cc-option,-m32)
|
||||
HOSTLDFLAGS += $(call cc-option,-m32)
|
||||
AFLAGS += $(call cc-option,-m32)
|
||||
LINK-y += $(call cc-option,-m32)
|
||||
UML_OBJCOPYFLAGS += -F $(ELF_FORMAT)
|
||||
|
||||
export LDFLAGS HOSTCFLAGS HOSTLDFLAGS UML_OBJCOPYFLAGS
|
||||
endif
|
||||
endif
|
||||
|
||||
CFLAGS += -U__$(SUBARCH)__ -U$(SUBARCH) $(STUB_CFLAGS)
|
||||
ARCH_USER_CFLAGS :=
|
||||
|
||||
ifneq ($(CONFIG_GPROF),y)
|
||||
ARCH_CFLAGS += -DUM_FASTCALL
|
||||
endif
|
||||
|
||||
ELF_ARCH := $(SUBARCH)
|
||||
ELF_FORMAT := elf32-$(SUBARCH)
|
||||
|
||||
OBJCOPYFLAGS := -O binary -R .note -R .comment -S
|
||||
|
||||
SYS_UTIL_DIR := $(ARCH_DIR)/sys-i386/util
|
||||
|
||||
SYS_HEADERS := $(SYS_DIR)/sc.h $(SYS_DIR)/thread.h
|
||||
SYS_HEADERS := $(SYS_DIR)/sc.h $(SYS_DIR)/thread.h
|
||||
|
||||
prepare: $(SYS_HEADERS)
|
||||
|
||||
|
@ -1,11 +1,13 @@
|
||||
# Copyright 2003 - 2004 Pathscale, Inc
|
||||
# Released under the GPL
|
||||
|
||||
SUBARCH_LIBS := arch/um/sys-x86_64/
|
||||
libs-y += arch/um/sys-x86_64/
|
||||
START := 0x60000000
|
||||
|
||||
#We #undef __x86_64__ for kernelspace, not for userspace where
|
||||
#it's needed for headers to work!
|
||||
CFLAGS += -U__$(SUBARCH)__ -fno-builtin $(STUB_CFLAGS)
|
||||
ARCH_USER_CFLAGS := -D__x86_64__
|
||||
USER_CFLAGS += -fno-builtin
|
||||
|
||||
ELF_ARCH := i386:x86-64
|
||||
ELF_FORMAT := elf64-x86-64
|
||||
|
@ -12,8 +12,8 @@ $(obj)/unmap.o: _c_flags = $(call unprofile,$(CFLAGS))
|
||||
|
||||
quiet_cmd_wrapld = LD $@
|
||||
define cmd_wrapld
|
||||
$(LD) -r -o $(obj)/unmap_tmp.o $< $(shell $(CC) -print-file-name=libc.a); \
|
||||
$(OBJCOPY) $(obj)/unmap_tmp.o $@ -G switcheroo
|
||||
$(LD) $(LDFLAGS) -r -o $(obj)/unmap_tmp.o $< $(shell $(CC) $(CFLAGS) -print-file-name=libc.a); \
|
||||
$(OBJCOPY) $(UML_OBJCOPYFLAGS) $(obj)/unmap_tmp.o $@ -G switcheroo
|
||||
endef
|
||||
|
||||
$(obj)/unmap_fin.o : $(obj)/unmap.o FORCE
|
||||
|
Loading…
Reference in New Issue
Block a user