#Makefile for building vmlinux with relocatable information and code. all: vmlinux.reloc obj := arch/powerpc AS = as LD = ld CC = gcc CPP = $(CC) -E #build userspace relocs program to extract list of relocation offsets $(obj)/relocs : $(obj)/relocs.c $(CC) $(obj)/relocs.c -o $(obj)/relocs #extract list of relocation offsets $(obj)/vmlinux.reloc.offsets : vmlinux $(obj)/relocs $(obj)/relocs vmlinux > $(obj)/vmlinux.reloc.offsets 2>/dev/null #binary format of vmlinux $(obj)/vmlinux.bin: vmlinux objcopy -O binary -R .note -R .comment -S vmlinux $(obj)/vmlinux.bin #concatenate vmlinux binary and relocation offset $(obj)/vmlinux.bin.all : $(obj)/vmlinux.bin $(obj)/vmlinux.reloc.offsets cat $(obj)/vmlinux.bin $(obj)/vmlinux.reloc.offsets > $(obj)/vmlinux.bin.all #generate elf headers for the concatenated vmlinux binary and relocation offset $(obj)/vmlinux.reloc.elf : $(obj)/vmlinux.reloc.scr $(obj)/vmlinux.bin.all $(LD) -m elf64ppc -r --format binary --oformat elf64-powerpc -T $(obj)/vmlinux.reloc.scr $(obj)/vmlinux.bin.all -o $(obj)/vmlinux.reloc.elf #build the wrapper around kernel $(obj)/kernel/reloc_apply.o : $(obj)/kernel/reloc_apply.S $(CC) -m64 -Wp,-MD,arch/powerpc/kernel/.reloc_apply.o.d -nostdinc -isystem /usr/lib/gcc/powerpc64-suse-linux/4.1.2/include -D__KERNEL__ -Iinclude -include include/linux/autoconf.h -D__ASSEMBLY__ -Wa,-maltivec -c -o arch/powerpc/kernel/reloc_apply.o arch/powerpc/kernel/reloc_apply.S #linker script $(obj)/vmlinux.reloc.lds : $(obj)/vmlinux.reloc.lds.S $(CC) -m64 -E -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Os -msoft-float -pipe -mminimal-toc -mtraceback=none -mcall-aixdesc -mtune=power4 -mno-altivec -mno-spe -funit-at-a-time -mno-string -Wa,-maltivec -fomit-frame-pointer -fno-stack-protector -Wdeclaration-after-statement -Wno-pointer-sign -Wp,-MD,arch/powerpc/.vmlinux.reloc.lds.d -nostdinc -isystem /usr/lib/gcc/powerpc64-suse-linux/4.1.2/include -D__KERNEL__ -Iinclude -include include/linux/autoconf.h -Upowerpc -P -C -Upowerpc -D__ASSEMBLY__ -o arch/powerpc/vmlinux.reloc.lds arch/powerpc/vmlinux.reloc.lds.S #build the relocatable vmlinux from vmlinux and relocatable kernel wrapper vmlinux.reloc : $(obj)/vmlinux.reloc.lds $(obj)/vmlinux.reloc.elf $(obj)/kernel/reloc_apply.o $(LD) -m elf64ppc -T $(obj)/vmlinux.reloc.lds $(obj)/vmlinux.reloc.elf $(obj)/kernel/reloc_apply.o -o vmlinux.reloc