Commit c0a18111e571138747a98af18b3a2124df56a0d1

Authored by Linus Torvalds
1 parent db176c6ed8

Revert "uml: fix gcc problem"

This reverts commit 22eecde2f9034764a3fd095eecfa3adfb8ec9a98.  Uli
reports that it breaks UML on x86-64 with the Fedora 8 gcc (gcc 4.1.2),
causing a crash on startup. See

	http://marc.info/?l=linux-kernel&m=121011722806093&w=2

for a trace.

Reported-by: Ulrich Drepper <drepper@redhat.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Showing 1 changed file with 1 additions and 4 deletions Inline Diff

1 # 1 #
2 # This file is included by the global makefile so that you can add your own 2 # This file is included by the global makefile so that you can add your own
3 # architecture-specific flags and dependencies. 3 # architecture-specific flags and dependencies.
4 # 4 #
5 # Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com) 5 # Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
6 # Licensed under the GPL 6 # Licensed under the GPL
7 # 7 #
8 8
9 ARCH_DIR := arch/um 9 ARCH_DIR := arch/um
10 OS := $(shell uname -s) 10 OS := $(shell uname -s)
11 # We require bash because the vmlinux link and loader script cpp use bash 11 # We require bash because the vmlinux link and loader script cpp use bash
12 # features. 12 # features.
13 SHELL := /bin/bash 13 SHELL := /bin/bash
14 14
15 filechk_gen_header = $< 15 filechk_gen_header = $<
16 16
17 core-y += $(ARCH_DIR)/kernel/ \ 17 core-y += $(ARCH_DIR)/kernel/ \
18 $(ARCH_DIR)/drivers/ \ 18 $(ARCH_DIR)/drivers/ \
19 $(ARCH_DIR)/os-$(OS)/ 19 $(ARCH_DIR)/os-$(OS)/
20 20
21 # Have to precede the include because the included Makefiles reference them. 21 # Have to precede the include because the included Makefiles reference them.
22 SYMLINK_HEADERS := archparam.h system.h sigcontext.h processor.h ptrace.h \ 22 SYMLINK_HEADERS := archparam.h system.h sigcontext.h processor.h ptrace.h \
23 module.h vm-flags.h elf.h host_ldt.h 23 module.h vm-flags.h elf.h host_ldt.h
24 SYMLINK_HEADERS := $(foreach header,$(SYMLINK_HEADERS),include/asm-um/$(header)) 24 SYMLINK_HEADERS := $(foreach header,$(SYMLINK_HEADERS),include/asm-um/$(header))
25 25
26 # XXX: The "os" symlink is only used by arch/um/include/os.h, which includes 26 # XXX: The "os" symlink is only used by arch/um/include/os.h, which includes
27 # ../os/include/file.h 27 # ../os/include/file.h
28 # 28 #
29 # These are cleaned up during mrproper. Please DO NOT fix it again, this is 29 # These are cleaned up during mrproper. Please DO NOT fix it again, this is
30 # the Correct Thing(tm) to do! 30 # the Correct Thing(tm) to do!
31 ARCH_SYMLINKS = include/asm-um/arch $(ARCH_DIR)/include/sysdep $(ARCH_DIR)/os \ 31 ARCH_SYMLINKS = include/asm-um/arch $(ARCH_DIR)/include/sysdep $(ARCH_DIR)/os \
32 $(SYMLINK_HEADERS) $(ARCH_DIR)/include/uml-config.h 32 $(SYMLINK_HEADERS) $(ARCH_DIR)/include/uml-config.h
33 33
34 MODE_INCLUDE += -I$(srctree)/$(ARCH_DIR)/include/skas 34 MODE_INCLUDE += -I$(srctree)/$(ARCH_DIR)/include/skas
35 35
36 include $(srctree)/$(ARCH_DIR)/Makefile-skas 36 include $(srctree)/$(ARCH_DIR)/Makefile-skas
37 37
38 ARCH_INCLUDE := -I$(ARCH_DIR)/include 38 ARCH_INCLUDE := -I$(ARCH_DIR)/include
39 ifneq ($(KBUILD_SRC),) 39 ifneq ($(KBUILD_SRC),)
40 ARCH_INCLUDE += -I$(srctree)/$(ARCH_DIR)/include 40 ARCH_INCLUDE += -I$(srctree)/$(ARCH_DIR)/include
41 endif 41 endif
42 SYS_DIR := $(ARCH_DIR)/include/sysdep-$(SUBARCH) 42 SYS_DIR := $(ARCH_DIR)/include/sysdep-$(SUBARCH)
43 43
44 # -Dvmap=kernel_vmap prevents anything from referencing the libpcap.o symbol so 44 # -Dvmap=kernel_vmap prevents anything from referencing the libpcap.o symbol so
45 # named - it's a common symbol in libpcap, so we get a binary which crashes. 45 # named - it's a common symbol in libpcap, so we get a binary which crashes.
46 # 46 #
47 # Same things for in6addr_loopback and mktime - found in libc. For these two we 47 # Same things for in6addr_loopback and mktime - found in libc. For these two we
48 # only get link-time error, luckily. 48 # only get link-time error, luckily.
49 # 49 #
50 # These apply to USER_CFLAGS to. 50 # These apply to USER_CFLAGS to.
51 51
52 KBUILD_CFLAGS += $(CFLAGS) $(CFLAGS-y) -D__arch_um__ -DSUBARCH=\"$(SUBARCH)\" \ 52 KBUILD_CFLAGS += $(CFLAGS) $(CFLAGS-y) -D__arch_um__ -DSUBARCH=\"$(SUBARCH)\" \
53 $(ARCH_INCLUDE) $(MODE_INCLUDE) -Dvmap=kernel_vmap \ 53 $(ARCH_INCLUDE) $(MODE_INCLUDE) -Dvmap=kernel_vmap \
54 -Din6addr_loopback=kernel_in6addr_loopback \ 54 -Din6addr_loopback=kernel_in6addr_loopback \
55 -Din6addr_any=kernel_in6addr_any 55 -Din6addr_any=kernel_in6addr_any
56 56
57 KBUILD_AFLAGS += $(ARCH_INCLUDE) 57 KBUILD_AFLAGS += $(ARCH_INCLUDE)
58 58
59 USER_CFLAGS = $(patsubst $(KERNEL_DEFINES),,$(patsubst -D__KERNEL__,,\ 59 USER_CFLAGS = $(patsubst $(KERNEL_DEFINES),,$(patsubst -D__KERNEL__,,\
60 $(patsubst -I%,,$(KBUILD_CFLAGS)))) $(ARCH_INCLUDE) $(MODE_INCLUDE) \ 60 $(patsubst -I%,,$(KBUILD_CFLAGS)))) $(ARCH_INCLUDE) $(MODE_INCLUDE) \
61 $(filter -I%,$(CFLAGS)) -D_FILE_OFFSET_BITS=64 61 $(filter -I%,$(CFLAGS)) -D_FILE_OFFSET_BITS=64
62 62
63 include $(srctree)/$(ARCH_DIR)/Makefile-$(SUBARCH) 63 include $(srctree)/$(ARCH_DIR)/Makefile-$(SUBARCH)
64 64
65 #This will adjust *FLAGS accordingly to the platform. 65 #This will adjust *FLAGS accordingly to the platform.
66 include $(srctree)/$(ARCH_DIR)/Makefile-os-$(OS) 66 include $(srctree)/$(ARCH_DIR)/Makefile-os-$(OS)
67 67
68 # -Derrno=kernel_errno - This turns all kernel references to errno into 68 # -Derrno=kernel_errno - This turns all kernel references to errno into
69 # kernel_errno to separate them from the libc errno. This allows -fno-common 69 # kernel_errno to separate them from the libc errno. This allows -fno-common
70 # in KBUILD_CFLAGS. Otherwise, it would cause ld to complain about the two different 70 # in KBUILD_CFLAGS. Otherwise, it would cause ld to complain about the two different
71 # errnos. 71 # errnos.
72 # These apply to kernelspace only. 72 # These apply to kernelspace only.
73 # 73 #
74 # strip leading and trailing whitespace to make the USER_CFLAGS removal of these 74 # strip leading and trailing whitespace to make the USER_CFLAGS removal of these
75 # defines more robust 75 # defines more robust
76 76
77 KERNEL_DEFINES = $(strip -Derrno=kernel_errno -Dsigprocmask=kernel_sigprocmask \ 77 KERNEL_DEFINES = $(strip -Derrno=kernel_errno -Dsigprocmask=kernel_sigprocmask \
78 -Dmktime=kernel_mktime $(ARCH_KERNEL_DEFINES)) 78 -Dmktime=kernel_mktime $(ARCH_KERNEL_DEFINES))
79 KBUILD_CFLAGS += $(KERNEL_DEFINES) 79 KBUILD_CFLAGS += $(KERNEL_DEFINES)
80 # Disable unit-at-a-time mode on pre-gcc-4.0 compilers, it makes gcc use 80 KBUILD_CFLAGS += $(call cc-option,-fno-unit-at-a-time,)
81 # a lot more stack due to the lack of sharing of stacklots:
82 KBUILD_CFLAGS += $(shell if [ $(call cc-version) -lt 0400 ] ; then \
83 echo $(call cc-option,-fno-unit-at-a-time); fi ;)
84 81
85 PHONY += linux 82 PHONY += linux
86 83
87 all: linux 84 all: linux
88 85
89 linux: vmlinux 86 linux: vmlinux
90 @echo ' LINK $@' 87 @echo ' LINK $@'
91 $(Q)ln -f $< $@ 88 $(Q)ln -f $< $@
92 89
93 define archhelp 90 define archhelp
94 echo '* linux - Binary kernel image (./linux) - for backward' 91 echo '* linux - Binary kernel image (./linux) - for backward'
95 echo ' compatibility only, this creates a hard link to the' 92 echo ' compatibility only, this creates a hard link to the'
96 echo ' real kernel binary, the "vmlinux" binary you' 93 echo ' real kernel binary, the "vmlinux" binary you'
97 echo ' find in the kernel root.' 94 echo ' find in the kernel root.'
98 endef 95 endef
99 96
100 ifneq ($(KBUILD_SRC),) 97 ifneq ($(KBUILD_SRC),)
101 $(shell mkdir -p $(ARCH_DIR) && ln -fsn $(srctree)/$(ARCH_DIR)/Kconfig.$(SUBARCH) $(ARCH_DIR)/Kconfig.arch) 98 $(shell mkdir -p $(ARCH_DIR) && ln -fsn $(srctree)/$(ARCH_DIR)/Kconfig.$(SUBARCH) $(ARCH_DIR)/Kconfig.arch)
102 else 99 else
103 $(shell cd $(ARCH_DIR) && ln -sf Kconfig.$(SUBARCH) Kconfig.arch) 100 $(shell cd $(ARCH_DIR) && ln -sf Kconfig.$(SUBARCH) Kconfig.arch)
104 endif 101 endif
105 102
106 archprepare: $(ARCH_SYMLINKS) $(ARCH_DIR)/include/user_constants.h 103 archprepare: $(ARCH_SYMLINKS) $(ARCH_DIR)/include/user_constants.h
107 prepare: $(ARCH_DIR)/include/kern_constants.h 104 prepare: $(ARCH_DIR)/include/kern_constants.h
108 105
109 LINK-$(CONFIG_LD_SCRIPT_STATIC) += -static 106 LINK-$(CONFIG_LD_SCRIPT_STATIC) += -static
110 LINK-$(CONFIG_LD_SCRIPT_DYN) += -Wl,-rpath,/lib 107 LINK-$(CONFIG_LD_SCRIPT_DYN) += -Wl,-rpath,/lib
111 108
112 CFLAGS_NO_HARDENING := $(call cc-option, -fno-PIC,) $(call cc-option, -fno-pic,) \ 109 CFLAGS_NO_HARDENING := $(call cc-option, -fno-PIC,) $(call cc-option, -fno-pic,) \
113 $(call cc-option, -fno-stack-protector,) \ 110 $(call cc-option, -fno-stack-protector,) \
114 $(call cc-option, -fno-stack-protector-all,) 111 $(call cc-option, -fno-stack-protector-all,)
115 112
116 CONFIG_KERNEL_STACK_ORDER ?= 2 113 CONFIG_KERNEL_STACK_ORDER ?= 2
117 STACK_SIZE := $(shell echo $$[ 4096 * (1 << $(CONFIG_KERNEL_STACK_ORDER)) ] ) 114 STACK_SIZE := $(shell echo $$[ 4096 * (1 << $(CONFIG_KERNEL_STACK_ORDER)) ] )
118 115
119 CPPFLAGS_vmlinux.lds = -U$(SUBARCH) -DSTART=$(START) -DELF_ARCH=$(ELF_ARCH) \ 116 CPPFLAGS_vmlinux.lds = -U$(SUBARCH) -DSTART=$(START) -DELF_ARCH=$(ELF_ARCH) \
120 -DELF_FORMAT="$(ELF_FORMAT)" -DKERNEL_STACK_SIZE=$(STACK_SIZE) 117 -DELF_FORMAT="$(ELF_FORMAT)" -DKERNEL_STACK_SIZE=$(STACK_SIZE)
121 118
122 # The wrappers will select whether using "malloc" or the kernel allocator. 119 # The wrappers will select whether using "malloc" or the kernel allocator.
123 LINK_WRAPS = -Wl,--wrap,malloc -Wl,--wrap,free -Wl,--wrap,calloc 120 LINK_WRAPS = -Wl,--wrap,malloc -Wl,--wrap,free -Wl,--wrap,calloc
124 121
125 LD_FLAGS_CMDLINE = $(foreach opt,$(LDFLAGS),-Wl,$(opt)) 122 LD_FLAGS_CMDLINE = $(foreach opt,$(LDFLAGS),-Wl,$(opt))
126 123
127 CFLAGS_vmlinux := $(LINK-y) $(LINK_WRAPS) $(LD_FLAGS_CMDLINE) 124 CFLAGS_vmlinux := $(LINK-y) $(LINK_WRAPS) $(LD_FLAGS_CMDLINE)
128 define cmd_vmlinux__ 125 define cmd_vmlinux__
129 $(CC) $(CFLAGS_vmlinux) -o $@ \ 126 $(CC) $(CFLAGS_vmlinux) -o $@ \
130 -Wl,-T,$(vmlinux-lds) $(vmlinux-init) \ 127 -Wl,-T,$(vmlinux-lds) $(vmlinux-init) \
131 -Wl,--start-group $(vmlinux-main) -Wl,--end-group \ 128 -Wl,--start-group $(vmlinux-main) -Wl,--end-group \
132 -lutil \ 129 -lutil \
133 $(filter-out $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) vmlinux.o \ 130 $(filter-out $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) vmlinux.o \
134 FORCE ,$^) ; rm -f linux 131 FORCE ,$^) ; rm -f linux
135 endef 132 endef
136 133
137 # When cleaning we don't include .config, so we don't include 134 # When cleaning we don't include .config, so we don't include
138 # TT or skas makefiles and don't clean skas_ptregs.h. 135 # TT or skas makefiles and don't clean skas_ptregs.h.
139 CLEAN_FILES += linux x.i gmon.out $(ARCH_DIR)/include/uml-config.h \ 136 CLEAN_FILES += linux x.i gmon.out $(ARCH_DIR)/include/uml-config.h \
140 $(ARCH_DIR)/include/user_constants.h \ 137 $(ARCH_DIR)/include/user_constants.h \
141 $(ARCH_DIR)/include/kern_constants.h $(ARCH_DIR)/Kconfig.arch 138 $(ARCH_DIR)/include/kern_constants.h $(ARCH_DIR)/Kconfig.arch
142 139
143 MRPROPER_FILES += $(ARCH_SYMLINKS) 140 MRPROPER_FILES += $(ARCH_SYMLINKS)
144 141
145 archclean: 142 archclean:
146 @find . \( -name '*.bb' -o -name '*.bbg' -o -name '*.da' \ 143 @find . \( -name '*.bb' -o -name '*.bbg' -o -name '*.da' \
147 -o -name '*.gcov' \) -type f -print | xargs rm -f 144 -o -name '*.gcov' \) -type f -print | xargs rm -f
148 145
149 $(SYMLINK_HEADERS): 146 $(SYMLINK_HEADERS):
150 @echo ' SYMLINK $@' 147 @echo ' SYMLINK $@'
151 ifneq ($(KBUILD_SRC),) 148 ifneq ($(KBUILD_SRC),)
152 $(Q)mkdir -p $(objtree)/include/asm-um 149 $(Q)mkdir -p $(objtree)/include/asm-um
153 $(Q)ln -fsn $(srctree)/include/asm-um/$(basename $(notdir $@))-$(SUBARCH)$(suffix $@) $@ 150 $(Q)ln -fsn $(srctree)/include/asm-um/$(basename $(notdir $@))-$(SUBARCH)$(suffix $@) $@
154 else 151 else
155 $(Q)cd $(srctree)/$(dir $@) ; \ 152 $(Q)cd $(srctree)/$(dir $@) ; \
156 ln -sf $(basename $(notdir $@))-$(SUBARCH)$(suffix $@) $(notdir $@) 153 ln -sf $(basename $(notdir $@))-$(SUBARCH)$(suffix $@) $(notdir $@)
157 endif 154 endif
158 155
159 include/asm-um/arch: 156 include/asm-um/arch:
160 @echo ' SYMLINK $@' 157 @echo ' SYMLINK $@'
161 ifneq ($(KBUILD_SRC),) 158 ifneq ($(KBUILD_SRC),)
162 $(Q)mkdir -p $(objtree)/include/asm-um 159 $(Q)mkdir -p $(objtree)/include/asm-um
163 $(Q)ln -fsn $(srctree)/include/asm-$(HEADER_ARCH) include/asm-um/arch 160 $(Q)ln -fsn $(srctree)/include/asm-$(HEADER_ARCH) include/asm-um/arch
164 else 161 else
165 $(Q)cd $(srctree)/include/asm-um && ln -fsn ../asm-$(HEADER_ARCH) arch 162 $(Q)cd $(srctree)/include/asm-um && ln -fsn ../asm-$(HEADER_ARCH) arch
166 endif 163 endif
167 164
168 $(objtree)/$(ARCH_DIR)/include: 165 $(objtree)/$(ARCH_DIR)/include:
169 @echo ' MKDIR $@' 166 @echo ' MKDIR $@'
170 $(Q)mkdir -p $@ 167 $(Q)mkdir -p $@
171 168
172 $(ARCH_DIR)/include/sysdep: $(objtree)/$(ARCH_DIR)/include 169 $(ARCH_DIR)/include/sysdep: $(objtree)/$(ARCH_DIR)/include
173 @echo ' SYMLINK $@' 170 @echo ' SYMLINK $@'
174 ifneq ($(KBUILD_SRC),) 171 ifneq ($(KBUILD_SRC),)
175 $(Q)ln -fsn $(srctree)/$(ARCH_DIR)/include/sysdep-$(SUBARCH) $(ARCH_DIR)/include/sysdep 172 $(Q)ln -fsn $(srctree)/$(ARCH_DIR)/include/sysdep-$(SUBARCH) $(ARCH_DIR)/include/sysdep
176 else 173 else
177 $(Q)cd $(ARCH_DIR)/include && ln -fsn sysdep-$(SUBARCH) sysdep 174 $(Q)cd $(ARCH_DIR)/include && ln -fsn sysdep-$(SUBARCH) sysdep
178 endif 175 endif
179 176
180 $(ARCH_DIR)/os: 177 $(ARCH_DIR)/os:
181 @echo ' SYMLINK $@' 178 @echo ' SYMLINK $@'
182 ifneq ($(KBUILD_SRC),) 179 ifneq ($(KBUILD_SRC),)
183 $(Q)ln -fsn $(srctree)/$(ARCH_DIR)/os-$(OS) $(ARCH_DIR)/os 180 $(Q)ln -fsn $(srctree)/$(ARCH_DIR)/os-$(OS) $(ARCH_DIR)/os
184 else 181 else
185 $(Q)cd $(ARCH_DIR) && ln -fsn os-$(OS) os 182 $(Q)cd $(ARCH_DIR) && ln -fsn os-$(OS) os
186 endif 183 endif
187 184
188 # Generated files 185 # Generated files
189 define filechk_umlconfig 186 define filechk_umlconfig
190 sed 's/ CONFIG/ UML_CONFIG/' 187 sed 's/ CONFIG/ UML_CONFIG/'
191 endef 188 endef
192 189
193 $(ARCH_DIR)/include/uml-config.h : include/linux/autoconf.h 190 $(ARCH_DIR)/include/uml-config.h : include/linux/autoconf.h
194 $(call filechk,umlconfig) 191 $(call filechk,umlconfig)
195 192
196 $(ARCH_DIR)/sys-$(SUBARCH)/user-offsets.s: FORCE 193 $(ARCH_DIR)/sys-$(SUBARCH)/user-offsets.s: FORCE
197 $(Q)$(MAKE) $(build)=$(ARCH_DIR)/sys-$(SUBARCH) $@ 194 $(Q)$(MAKE) $(build)=$(ARCH_DIR)/sys-$(SUBARCH) $@
198 195
199 define filechk_gen-asm-offsets 196 define filechk_gen-asm-offsets
200 (set -e; \ 197 (set -e; \
201 echo "/*"; \ 198 echo "/*"; \
202 echo " * DO NOT MODIFY."; \ 199 echo " * DO NOT MODIFY."; \
203 echo " *"; \ 200 echo " *"; \
204 echo " * This file was generated by arch/$(ARCH)/Makefile"; \ 201 echo " * This file was generated by arch/$(ARCH)/Makefile"; \
205 echo " *"; \ 202 echo " *"; \
206 echo " */"; \ 203 echo " */"; \
207 echo ""; \ 204 echo ""; \
208 sed -ne "/^->/{s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; s:->::; p;}"; \ 205 sed -ne "/^->/{s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; s:->::; p;}"; \
209 echo ""; ) 206 echo ""; )
210 endef 207 endef
211 208
212 $(ARCH_DIR)/include/user_constants.h: $(ARCH_DIR)/sys-$(SUBARCH)/user-offsets.s 209 $(ARCH_DIR)/include/user_constants.h: $(ARCH_DIR)/sys-$(SUBARCH)/user-offsets.s
213 $(call filechk,gen-asm-offsets) 210 $(call filechk,gen-asm-offsets)
214 211
215 $(ARCH_DIR)/include/kern_constants.h: $(objtree)/$(ARCH_DIR)/include 212 $(ARCH_DIR)/include/kern_constants.h: $(objtree)/$(ARCH_DIR)/include
216 @echo ' SYMLINK $@' 213 @echo ' SYMLINK $@'
217 $(Q)ln -sf ../../../include/asm-um/asm-offsets.h $@ 214 $(Q)ln -sf ../../../include/asm-um/asm-offsets.h $@
218 215
219 export SUBARCH USER_CFLAGS CFLAGS_NO_HARDENING OS HEADER_ARCH 216 export SUBARCH USER_CFLAGS CFLAGS_NO_HARDENING OS HEADER_ARCH
220 217