forked from luck/tmp_suning_uos_patched
4bdc3b7f1b
This patch puts the infrastructure in place to allow for a reordering of functions based inside the vmlinux. The general idea is that it is possible to put all "common" functions into the first 2Mb of the code, so that they are covered by one TLB entry. This as opposed to the current situation where a typical vmlinux covers about 3.5Mb (on x86-64) and thus 2 TLB entries. This is done by enabling the -ffunction-sections flag in gcc, which puts each function in its own ELF section, so that the linker can then order them in a way defined by the linker script. As per previous discussions, Linus said he wanted a "static" list for this, eg a list provided by the kernel tarbal, so that most people have the same ordering at least. A script is provided to create this list based on readprofile(1) output. The included list is provisional, and entirely biased on my own testbox and me running a few kernel compiles and some other things. I think that to get to a better list we need to invite people to submit their own profiles, and somehow add those all up and base the final list on that. I'm willing to do that effort if this is ends up being the prefered approach. Such an effort probably needs to be repeated like once a year or so to adopt to the changing nature of the kernel. Made it a CONFIG with default n because it increases link times dramatically. Signed-off-by: Andi Kleen <ak@suse.de> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
110 lines
3.4 KiB
Makefile
110 lines
3.4 KiB
Makefile
#
|
|
# x86_64/Makefile
|
|
#
|
|
# This file is included by the global makefile so that you can add your own
|
|
# architecture-specific flags and dependencies. Remember to do have actions
|
|
# for "archclean" and "archdep" for cleaning up and making dependencies for
|
|
# this architecture
|
|
#
|
|
# This file is subject to the terms and conditions of the GNU General Public
|
|
# License. See the file "COPYING" in the main directory of this archive
|
|
# for more details.
|
|
#
|
|
# Copyright (C) 1994 by Linus Torvalds
|
|
#
|
|
# 19990713 Artur Skawina <skawina@geocities.com>
|
|
# Added '-march' and '-mpreferred-stack-boundary' support
|
|
# 20000913 Pavel Machek <pavel@suse.cz>
|
|
# Converted for x86_64 architecture
|
|
# 20010105 Andi Kleen, add IA32 compiler.
|
|
# ....and later removed it again....
|
|
#
|
|
# $Id: Makefile,v 1.31 2002/03/22 15:56:07 ak Exp $
|
|
|
|
LDFLAGS := -m elf_x86_64
|
|
OBJCOPYFLAGS := -O binary -R .note -R .comment -S
|
|
LDFLAGS_vmlinux :=
|
|
|
|
CHECKFLAGS += -D__x86_64__ -m64
|
|
|
|
cflags-$(CONFIG_MK8) += $(call cc-option,-march=k8)
|
|
cflags-$(CONFIG_MPSC) += $(call cc-option,-march=nocona)
|
|
cflags-$(CONFIG_GENERIC_CPU) += $(call cc-option,-mtune=generic)
|
|
CFLAGS += $(cflags-y)
|
|
|
|
CFLAGS += -m64
|
|
CFLAGS += -mno-red-zone
|
|
CFLAGS += -mcmodel=kernel
|
|
CFLAGS += -pipe
|
|
cflags-$(CONFIG_REORDER) += -ffunction-sections
|
|
# this makes reading assembly source easier, but produces worse code
|
|
# actually it makes the kernel smaller too.
|
|
CFLAGS += -fno-reorder-blocks
|
|
CFLAGS += -Wno-sign-compare
|
|
ifneq ($(CONFIG_UNWIND_INFO),y)
|
|
CFLAGS += -fno-asynchronous-unwind-tables
|
|
endif
|
|
ifneq ($(CONFIG_DEBUG_INFO),y)
|
|
# -fweb shrinks the kernel a bit, but the difference is very small
|
|
# it also messes up debugging, so don't use it for now.
|
|
#CFLAGS += $(call cc-option,-fweb)
|
|
endif
|
|
# -funit-at-a-time shrinks the kernel .text considerably
|
|
# unfortunately it makes reading oopses harder.
|
|
CFLAGS += $(call cc-option,-funit-at-a-time)
|
|
# prevent gcc from generating any FP code by mistake
|
|
CFLAGS += $(call cc-option,-mno-sse -mno-mmx -mno-sse2 -mno-3dnow,)
|
|
|
|
AFLAGS += -m64
|
|
|
|
head-y := arch/x86_64/kernel/head.o arch/x86_64/kernel/head64.o arch/x86_64/kernel/init_task.o
|
|
|
|
libs-y += arch/x86_64/lib/
|
|
core-y += arch/x86_64/kernel/ \
|
|
arch/x86_64/mm/ \
|
|
arch/x86_64/crypto/
|
|
core-$(CONFIG_IA32_EMULATION) += arch/x86_64/ia32/
|
|
drivers-$(CONFIG_PCI) += arch/x86_64/pci/
|
|
drivers-$(CONFIG_OPROFILE) += arch/x86_64/oprofile/
|
|
|
|
boot := arch/x86_64/boot
|
|
|
|
PHONY += bzImage bzlilo install archmrproper \
|
|
fdimage fdimage144 fdimage288 archclean
|
|
|
|
#Default target when executing "make"
|
|
all: bzImage
|
|
|
|
BOOTIMAGE := arch/x86_64/boot/bzImage
|
|
KBUILD_IMAGE := $(BOOTIMAGE)
|
|
|
|
bzImage: vmlinux
|
|
$(Q)$(MAKE) $(build)=$(boot) $(BOOTIMAGE)
|
|
|
|
bzlilo: vmlinux
|
|
$(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(BOOTIMAGE) zlilo
|
|
|
|
bzdisk: vmlinux
|
|
$(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(BOOTIMAGE) zdisk
|
|
|
|
fdimage fdimage144 fdimage288: vmlinux
|
|
$(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(BOOTIMAGE) $@
|
|
|
|
install:
|
|
$(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(BOOTIMAGE) $@
|
|
|
|
archclean:
|
|
$(Q)$(MAKE) $(clean)=$(boot)
|
|
|
|
define archhelp
|
|
echo '* bzImage - Compressed kernel image (arch/$(ARCH)/boot/bzImage)'
|
|
echo ' install - Install kernel using'
|
|
echo ' (your) ~/bin/installkernel or'
|
|
echo ' (distribution) /sbin/installkernel or'
|
|
echo ' install to $$(INSTALL_PATH) and run lilo'
|
|
endef
|
|
|
|
CLEAN_FILES += arch/$(ARCH)/boot/fdimage arch/$(ARCH)/boot/mtools.conf
|
|
|
|
|