UML kbuild patch

From: Jeff Dike (
Date: Mon Sep 23 2002 - 20:09:03 EST

The UML build needs a few kbuild changes in order to work with the latest

Since kbuild now enforces the use of the linker script on the vmlinux build,
UML can't use its old two-stage link, where
        vmlinux is a normal relocatable object file
        which is linked into the linux binary with the linker script

So, in order to fold those into one stage and produce an ELF binary, I need
the vmlinux "linker" to actually be gcc. This implies I need a
"-Wl,-T,arch/$(ARCH)/" instead of the usual
"-T arch/$(ARCH)/".

This is done without breaking the other arches by changing the final link
command to $(LD_vmlinux) which is defaulted to $(LD) if the arch doesn't
define it.

The "-Wl,..." is done similarly by using $(LDFLAGS_vmlinux_default) if
the linker command is anything but gcc and $(LDFLAGS_vmlinux_gcc) if it is

The one caveat is that I removed $(LDFLAGS) from the link line - you might
want to add it back.

You can pull bk:// The patch is also appended.


# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher.
# This patch includes the following deltas:
# ChangeSet 1.600 -> 1.602
# Makefile 1.305 -> 1.307
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 02/09/23 1.601
# Fixes to allow UML to build with the new vmlinux rules.
# --------------------------------------------
# 02/09/23 1.602
# Made the UML Makefile changes work for the other arches.
# --------------------------------------------
diff -Nru a/Makefile b/Makefile
--- a/Makefile Mon Sep 23 19:50:33 2002
+++ b/Makefile Mon Sep 23 19:50:33 2002
@@ -288,10 +288,12 @@
 # we cannot yet know if we will need to relink vmlinux.
 # So we descend into init/ inside the rule for vmlinux again.
+LD_vmlinux := $(if $(LD_vmlinux),$(LD_vmlinux),$(LD))
 vmlinux-objs := $(HEAD) $(INIT) $(CORE_FILES) $(LIBS) $(DRIVERS) $(NETWORKS)
 quiet_cmd_link_vmlinux = LD $@
-cmd_link_vmlinux = $(LD) $(LDFLAGS) $(LDFLAGS_$(@F)) $(HEAD) $(INIT) \
+cmd_link_vmlinux = $(LD_vmlinux) $(LDFLAGS_$(@F)) $(HEAD) $(INIT) \
                 --start-group \
                 $(CORE_FILES) \
                 $(LIBS) \
@@ -313,7 +315,11 @@
         $(NM) vmlinux | grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | sort >
-LDFLAGS_vmlinux += -T arch/$(ARCH)/
+LDFLAGS_vmlinux_default = -T arch/$(ARCH)/
+LDFLAGS_vmlinux_gcc = -Wl,-T,arch/$(ARCH)/
+vmlinux_base = $(basename $(notdir $(LD_vmlinux)))
+LDFLAGS_vmlinux += $(if $(LDFLAGS_vmlinux_$(vmlinux_base)),$(LDFLAGS_vmlinux_$(vmlinux_base)),$(LDFLAGS_vmlinux_default))
 vmlinux: $(vmlinux-objs) arch/$(ARCH)/ FORCE
         $(call if_changed_rule,link_vmlinux)

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to
More majordomo info at
Please read the FAQ at

This archive was generated by hypermail 2b29 : Mon Sep 23 2002 - 22:00:41 EST