This patch implements a checker to detect instructions which should be paravirtualized instead of direct writing raw instruction. This patch does rough check so that it doesn't fully cover all cases, but it can detects most cases of paravirtualization breakage of hand written assembly codes. Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp> Signed-off-by: Tony Luck <tony.luck@intel.com>
135 lines
4.2 KiB
Makefile
135 lines
4.2 KiB
Makefile
#
|
|
# Makefile for the linux kernel.
|
|
#
|
|
|
|
extra-y := head.o init_task.o vmlinux.lds
|
|
|
|
obj-y := acpi.o entry.o efi.o efi_stub.o gate-data.o fsys.o ia64_ksyms.o irq.o irq_ia64.o \
|
|
irq_lsapic.o ivt.o machvec.o pal.o patch.o process.o perfmon.o ptrace.o sal.o \
|
|
salinfo.o setup.o signal.o sys_ia64.o time.o traps.o unaligned.o \
|
|
unwind.o mca.o mca_asm.o topology.o
|
|
|
|
obj-$(CONFIG_IA64_BRL_EMU) += brl_emu.o
|
|
obj-$(CONFIG_IA64_GENERIC) += acpi-ext.o
|
|
obj-$(CONFIG_IA64_HP_ZX1) += acpi-ext.o
|
|
obj-$(CONFIG_IA64_HP_ZX1_SWIOTLB) += acpi-ext.o
|
|
|
|
ifneq ($(CONFIG_ACPI_PROCESSOR),)
|
|
obj-y += acpi-processor.o
|
|
endif
|
|
|
|
obj-$(CONFIG_IA64_PALINFO) += palinfo.o
|
|
obj-$(CONFIG_IOSAPIC) += iosapic.o
|
|
obj-$(CONFIG_MODULES) += module.o
|
|
obj-$(CONFIG_SMP) += smp.o smpboot.o
|
|
obj-$(CONFIG_NUMA) += numa.o
|
|
obj-$(CONFIG_PERFMON) += perfmon_default_smpl.o
|
|
obj-$(CONFIG_IA64_CYCLONE) += cyclone.o
|
|
obj-$(CONFIG_CPU_FREQ) += cpufreq/
|
|
obj-$(CONFIG_IA64_MCA_RECOVERY) += mca_recovery.o
|
|
obj-$(CONFIG_KPROBES) += kprobes.o jprobes.o
|
|
obj-$(CONFIG_KEXEC) += machine_kexec.o relocate_kernel.o crash.o
|
|
obj-$(CONFIG_CRASH_DUMP) += crash_dump.o
|
|
obj-$(CONFIG_IA64_UNCACHED_ALLOCATOR) += uncached.o
|
|
obj-$(CONFIG_AUDIT) += audit.o
|
|
obj-$(CONFIG_PCI_MSI) += msi_ia64.o
|
|
mca_recovery-y += mca_drv.o mca_drv_asm.o
|
|
obj-$(CONFIG_IA64_MC_ERR_INJECT)+= err_inject.o
|
|
|
|
obj-$(CONFIG_PARAVIRT) += paravirt.o paravirtentry.o
|
|
|
|
obj-$(CONFIG_IA64_ESI) += esi.o
|
|
ifneq ($(CONFIG_IA64_ESI),)
|
|
obj-y += esi_stub.o # must be in kernel proper
|
|
endif
|
|
|
|
# The gate DSO image is built using a special linker script.
|
|
targets += gate.so gate-syms.o
|
|
|
|
extra-y += gate.so gate-syms.o gate.lds gate.o
|
|
|
|
# fp_emulate() expects f2-f5,f16-f31 to contain the user-level state.
|
|
CFLAGS_traps.o += -mfixed-range=f2-f5,f16-f31
|
|
|
|
CPPFLAGS_gate.lds := -P -C -U$(ARCH)
|
|
|
|
quiet_cmd_gate = GATE $@
|
|
cmd_gate = $(CC) -nostdlib $(GATECFLAGS_$(@F)) -Wl,-T,$(filter-out FORCE,$^) -o $@
|
|
|
|
GATECFLAGS_gate.so = -shared -s -Wl,-soname=linux-gate.so.1 \
|
|
$(call ld-option, -Wl$(comma)--hash-style=sysv)
|
|
$(obj)/gate.so: $(obj)/gate.lds $(obj)/gate.o FORCE
|
|
$(call if_changed,gate)
|
|
|
|
$(obj)/built-in.o: $(obj)/gate-syms.o
|
|
$(obj)/built-in.o: ld_flags += -R $(obj)/gate-syms.o
|
|
|
|
GATECFLAGS_gate-syms.o = -r
|
|
$(obj)/gate-syms.o: $(obj)/gate.lds $(obj)/gate.o FORCE
|
|
$(call if_changed,gate)
|
|
|
|
# gate-data.o contains the gate DSO image as data in section .data.gate.
|
|
# We must build gate.so before we can assemble it.
|
|
# Note: kbuild does not track this dependency due to usage of .incbin
|
|
$(obj)/gate-data.o: $(obj)/gate.so
|
|
|
|
# Calculate NR_IRQ = max(IA64_NATIVE_NR_IRQS, XEN_NR_IRQS, ...) based on config
|
|
define sed-y
|
|
"/^->/{s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; s:->::; p;}"
|
|
endef
|
|
quiet_cmd_nr_irqs = GEN $@
|
|
define cmd_nr_irqs
|
|
(set -e; \
|
|
echo "#ifndef __ASM_NR_IRQS_H__"; \
|
|
echo "#define __ASM_NR_IRQS_H__"; \
|
|
echo "/*"; \
|
|
echo " * DO NOT MODIFY."; \
|
|
echo " *"; \
|
|
echo " * This file was generated by Kbuild"; \
|
|
echo " *"; \
|
|
echo " */"; \
|
|
echo ""; \
|
|
sed -ne $(sed-y) $<; \
|
|
echo ""; \
|
|
echo "#endif" ) > $@
|
|
endef
|
|
|
|
# We use internal kbuild rules to avoid the "is up to date" message from make
|
|
arch/$(SRCARCH)/kernel/nr-irqs.s: $(srctree)/arch/$(SRCARCH)/kernel/nr-irqs.c \
|
|
$(wildcard $(srctree)/include/asm-ia64/*/irq.h)
|
|
$(Q)mkdir -p $(dir $@)
|
|
$(call if_changed_dep,cc_s_c)
|
|
|
|
include/asm-ia64/nr-irqs.h: arch/$(SRCARCH)/kernel/nr-irqs.s
|
|
$(Q)mkdir -p $(dir $@)
|
|
$(call cmd,nr_irqs)
|
|
|
|
clean-files += $(objtree)/include/asm-ia64/nr-irqs.h
|
|
|
|
#
|
|
# native ivt.S and entry.S
|
|
#
|
|
ASM_PARAVIRT_OBJS = ivt.o entry.o
|
|
define paravirtualized_native
|
|
AFLAGS_$(1) += -D__IA64_ASM_PARAVIRTUALIZED_NATIVE
|
|
AFLAGS_pvchk-sed-$(1) += -D__IA64_ASM_PARAVIRTUALIZED_PVCHECK
|
|
extra-y += pvchk-$(1)
|
|
endef
|
|
$(foreach obj,$(ASM_PARAVIRT_OBJS),$(eval $(call paravirtualized_native,$(obj))))
|
|
|
|
#
|
|
# Checker for paravirtualizations of privileged operations.
|
|
#
|
|
quiet_cmd_pv_check_sed = PVCHK $@
|
|
define cmd_pv_check_sed
|
|
sed -f $(srctree)/arch/$(SRCARCH)/scripts/pvcheck.sed $< > $@
|
|
endef
|
|
|
|
$(obj)/pvchk-sed-%.s: $(src)/%.S $(srctree)/arch/$(SRCARCH)/scripts/pvcheck.sed FORCE
|
|
$(call if_changed_dep,as_s_S)
|
|
$(obj)/pvchk-%.s: $(obj)/pvchk-sed-%.s FORCE
|
|
$(call if_changed,pv_check_sed)
|
|
$(obj)/pvchk-%.o: $(obj)/pvchk-%.s FORCE
|
|
$(call if_changed,as_o_S)
|
|
.PRECIOUS: $(obj)/pvchk-sed-%.s $(obj)/pvchk-%.s $(obj)/pvchk-%.o
|