2d09b07279
files that can use the default value. It used to be required that the low-order bits of KERNVIRTADDR matched the low-order bits of the physical load address for all arm platforms. That hasn't been a requirement for armv6 platforms since FreeBSD 10. There is no longer any relationship between load addr and KERNVIRTADDR except that both must be aligned to a 2 MiB boundary. This change makes the default KERNVIRTADDR value 0xc0000000, and removes the options from all the platforms that can use the default value. The default is now defined in vmparam.h, and that file is now included in a few new places that reference KERNVIRTADDR, since it may not come in via the forced-include of opt_global.h on the compile command line.
176 lines
5.2 KiB
Makefile
176 lines
5.2 KiB
Makefile
# Makefile.arm -- with config changes.
|
|
# Copyright 1990 W. Jolitz
|
|
# from: @(#)Makefile.i386 7.1 5/10/91
|
|
# $FreeBSD$
|
|
#
|
|
# Makefile for FreeBSD
|
|
#
|
|
# This makefile is constructed from a machine description:
|
|
# config machineid
|
|
# Most changes should be made in the machine description
|
|
# /sys/arm/conf/``machineid''
|
|
# after which you should do
|
|
# config machineid
|
|
# Generic makefile changes should be made in
|
|
# /sys/conf/Makefile.arm
|
|
# after which config should be rerun for all machines.
|
|
#
|
|
|
|
# Which version of config(8) is required.
|
|
%VERSREQ= 600013
|
|
|
|
STD8X16FONT?= iso
|
|
|
|
.if !defined(S)
|
|
.if exists(./@/.)
|
|
S= ./@
|
|
.else
|
|
S= ../../..
|
|
.endif
|
|
.endif
|
|
.include "$S/conf/kern.pre.mk"
|
|
|
|
INCLUDES+= -I$S/contrib/libfdt -I$S/gnu/dts/include
|
|
|
|
SYSTEM_LD:= ${SYSTEM_LD:$S/conf/ldscript.$M=ldscript.$M}
|
|
SYSTEM_DEP:= ${SYSTEM_DEP:$S/conf/ldscript.$M=ldscript.$M}
|
|
|
|
.if !defined(DEBUG) && !defined(PROFLEVEL)
|
|
STRIP_FLAGS = -S
|
|
.endif
|
|
|
|
# We don't support gcc's thump interwork stuff, so disable it
|
|
CFLAGS.gcc += -mno-thumb-interwork
|
|
|
|
# We generally don't want fpu instructions in the kernel.
|
|
CFLAGS.clang += -mfpu=none
|
|
|
|
.if !empty(DDB_ENABLED)
|
|
CFLAGS += -funwind-tables
|
|
.if ${COMPILER_TYPE} == "clang" && ${COMPILER_VERSION} < 30500
|
|
# clang < 3.5.0 requires us to tell it to emit assembly with unwind information
|
|
CFLAGS += -mllvm -arm-enable-ehabi
|
|
.endif
|
|
.endif
|
|
|
|
# "makeoptions KERNVIRTADDR=" is now optional, supply the default value.
|
|
.if empty(KERNVIRTADDR)
|
|
KERNVIRTADDR= 0xc0000000
|
|
.endif
|
|
|
|
# hack because genassym.c includes sys/bus.h which includes these.
|
|
genassym.o: bus_if.h device_if.h
|
|
|
|
SYSTEM_LD_ = ${LD} -m ${LD_EMULATION} -Bdynamic -T ldscript.$M.noheader \
|
|
${_LDFLAGS} --no-warn-mismatch --warn-common --export-dynamic \
|
|
--dynamic-linker /red/herring \
|
|
-o ${FULLKERNEL}.noheader -X ${SYSTEM_OBJS} vers.o
|
|
SYSTEM_LD_TAIL +=;sed s/" + SIZEOF_HEADERS"// ldscript.$M\
|
|
>ldscript.$M.noheader; \
|
|
${SYSTEM_LD_}; \
|
|
${OBJCOPY} -S -O binary ${FULLKERNEL}.noheader \
|
|
${KERNEL_KO}.bin; \
|
|
rm ${FULLKERNEL}.noheader
|
|
|
|
FILES_CPU_FUNC = \
|
|
$S/$M/$M/cpufunc_asm_arm9.S \
|
|
$S/$M/$M/cpufunc_asm_xscale.S $S/$M/$M/cpufunc_asm.S \
|
|
$S/$M/$M/cpufunc_asm_xscale_c3.S $S/$M/$M/cpufunc_asm_armv5_ec.S \
|
|
$S/$M/$M/cpufunc_asm_fa526.S $S/$M/$M/cpufunc_asm_sheeva.S \
|
|
$S/$M/$M/cpufunc_asm_pj4b.S $S/$M/$M/cpufunc_asm_armv6.S \
|
|
$S/$M/$M/cpufunc_asm_armv7.S
|
|
|
|
.if ${MACHINE_ARCH:Marmv[67]*} == "" && defined(KERNPHYSADDR)
|
|
KERNEL_EXTRA=trampoline
|
|
KERNEL_EXTRA_INSTALL=kernel.gz.tramp
|
|
trampoline: ${KERNEL_KO}.tramp
|
|
${KERNEL_KO}.tramp: ${KERNEL_KO} $S/$M/$M/inckern.S $S/$M/$M/elf_trampoline.c
|
|
echo "#define KERNNAME \"${KERNEL_KO}.tmp\"" >opt_kernname.h
|
|
sed s/${KERNVIRTADDR}/${KERNPHYSADDR}/ ldscript.$M > ldscript.$M.tramp
|
|
sed s/" + SIZEOF_HEADERS"// ldscript.$M.tramp > \
|
|
ldscript.$M.tramp.noheader
|
|
echo "#include <machine/asm.h>" >tmphack.S
|
|
echo "ENTRY(_start)" >>tmphack.S
|
|
echo "bl _startC" >>tmphack.S
|
|
${OBJCOPY} --strip-symbol '$$d' --strip-symbol '$$a' \
|
|
-g --strip-symbol '$$t' ${FULLKERNEL} ${KERNEL_KO}.tmp
|
|
eval $$(stat -s ${KERNEL_KO}.tmp) && \
|
|
echo "#define KERNSIZE $$st_size" >>opt_kernname.h
|
|
${CC} -O -nostdlib -I. -I$S \
|
|
-Xlinker -T -Xlinker ldscript.$M.tramp \
|
|
-DELF_TRAMPOLINE \
|
|
tmphack.S \
|
|
$S/$M/$M/elf_trampoline.c \
|
|
$S/$M/$M/inckern.S \
|
|
${FILES_CPU_FUNC} \
|
|
-o ${KERNEL_KO}.tramp
|
|
${CC} -O -nostdlib -I. -I$S \
|
|
-Xlinker -T -Xlinker ldscript.$M.tramp.noheader \
|
|
-DELF_TRAMPOLINE \
|
|
tmphack.S \
|
|
$S/$M/$M/elf_trampoline.c \
|
|
$S/$M/$M/inckern.S \
|
|
${FILES_CPU_FUNC} \
|
|
-o ${KERNEL_KO}.tramp.noheader
|
|
${OBJCOPY} -S -O binary ${KERNEL_KO}.tramp.noheader \
|
|
${KERNEL_KO}.tramp.bin
|
|
${OBJCOPY} ${STRIP_FLAGS} ${KERNEL_KO}.tmp
|
|
echo "#define KERNNAME \"${KERNEL_KO}.tmp.gz\"" >opt_kernname.h
|
|
eval $$(stat -s ${KERNEL_KO}.tmp) && \
|
|
echo "#define KERNSIZE $$st_size" >>opt_kernname.h
|
|
gzip -f9 ${KERNEL_KO}.tmp
|
|
eval $$(stat -s ${KERNEL_KO}.tmp.gz) && \
|
|
echo "#define KERNCOMPSIZE $$st_size" >>opt_kernname.h
|
|
${CC} -O2 -ffreestanding -I. -I$S -c \
|
|
-DKZIP -DELF_TRAMPOLINE \
|
|
$S/kern/inflate.c \
|
|
-o inflate-tramp.o
|
|
${CC} -O -nostdlib -I. -I$S \
|
|
-Xlinker -T -Xlinker ldscript.$M.tramp \
|
|
-DKZIP -DELF_TRAMPOLINE \
|
|
tmphack.S \
|
|
$S/$M/$M/elf_trampoline.c \
|
|
inflate-tramp.o \
|
|
$S/$M/$M/inckern.S \
|
|
${FILES_CPU_FUNC} \
|
|
-o ${KERNEL_KO}.gz.tramp
|
|
${CC} -O -nostdlib -I. -I$S \
|
|
-Xlinker -T -Xlinker ldscript.$M.tramp.noheader \
|
|
-DKZIP -DELF_TRAMPOLINE \
|
|
tmphack.S \
|
|
$S/$M/$M/elf_trampoline.c \
|
|
inflate-tramp.o \
|
|
$S/$M/$M/inckern.S \
|
|
${FILES_CPU_FUNC} \
|
|
-o ${KERNEL_KO}.tramp.noheader
|
|
${OBJCOPY} -S -O binary ${KERNEL_KO}.tramp.noheader \
|
|
${KERNEL_KO}.gz.tramp.bin
|
|
rm ${KERNEL_KO}.tmp.gz ${KERNEL_KO}.tramp.noheader opt_kernname.h \
|
|
inflate-tramp.o tmphack.S
|
|
.endif
|
|
|
|
%BEFORE_DEPEND
|
|
|
|
%OBJS
|
|
|
|
%FILES.c
|
|
|
|
%FILES.s
|
|
|
|
%FILES.m
|
|
|
|
%CLEAN
|
|
|
|
CLEAN+= ldscript.$M ${KERNEL_KO}.bin ldscript.$M.noheader
|
|
|
|
CLEAN+= ${KERNEL_KO}.tramp ${KERNEL_KO}.tramp.bin ldscript.$M.tramp \
|
|
ldscript.$M.tramp.noheader ${KERNEL_KO}.gz.tramp \
|
|
${KERNEL_KO}.gz.tramp.bin
|
|
|
|
ldscript.$M: $S/conf/ldscript.$M
|
|
cat $S/conf/ldscript.$M|sed s/KERNPHYSADDR/${KERNPHYSADDR}/g| \
|
|
sed s/KERNVIRTADDR/${KERNVIRTADDR}/g > ldscript.$M
|
|
%RULES
|
|
|
|
.include "$S/conf/kern.post.mk"
|