Build changes that allow the modules on arm64.
- Move the required kernel compiler flags from Makefile.arm64 to kern.mk. - Build arm64 modules as PIC; non-PIC relocations in .o for shared object output cannot be handled. - Do not try to install aarch64 symlink. - A hack for arm64 to avoid ld -r stage. See the comment for the explanation. Some functionality is lost, like ctf handling, but hopefully will be restored after newer linker is available. Reviewed by: andrew, emaste Tested by: andrew (on real hardware) Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D3796
This commit is contained in:
parent
48b0cbf71b
commit
b2d840b61f
@ -22,7 +22,6 @@ cpu ARM64
|
||||
ident GENERIC
|
||||
|
||||
makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols
|
||||
makeoptions NO_MODULES=1 # We don't yet support modules on arm64
|
||||
|
||||
options SCHED_ULE # ULE scheduler
|
||||
options PREEMPTION # Enable kernel thread preemption
|
||||
|
@ -27,12 +27,6 @@ S= ../../..
|
||||
|
||||
INCLUDES+= -I$S/contrib/libfdt
|
||||
|
||||
# We generally don't want fpu instructions in the kernel.
|
||||
CFLAGS += -mgeneral-regs-only
|
||||
|
||||
# Reserve x18 for pcpu data
|
||||
CFLAGS += -ffixed-x18
|
||||
|
||||
.if !empty(DDB_ENABLED)
|
||||
CFLAGS += -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer
|
||||
.endif
|
||||
|
@ -97,6 +97,13 @@ INLINE_LIMIT?= 8000
|
||||
INLINE_LIMIT?= 8000
|
||||
.endif
|
||||
|
||||
.if ${MACHINE_CPUARCH} == "aarch64"
|
||||
# We generally don't want fpu instructions in the kernel.
|
||||
CFLAGS += -mgeneral-regs-only
|
||||
# Reserve x18 for pcpu data
|
||||
CFLAGS += -ffixed-x18
|
||||
.endif
|
||||
|
||||
#
|
||||
# For sparc64 we want the medany code model so modules may be located
|
||||
# anywhere in the 64-bit address space. We also tell GCC to use floating
|
||||
|
@ -212,7 +212,7 @@ SRCS= assym.s vnode_if.h ${BEFORE_DEPEND} ${CFILES} \
|
||||
mv .newdep .depend
|
||||
|
||||
_ILINKS= machine
|
||||
.if ${MACHINE} != ${MACHINE_CPUARCH}
|
||||
.if ${MACHINE} != ${MACHINE_CPUARCH} && ${MACHINE} != "arm64"
|
||||
_ILINKS+= ${MACHINE_CPUARCH}
|
||||
.endif
|
||||
.if ${MACHINE_CPUARCH} == "i386" || ${MACHINE_CPUARCH} == "amd64"
|
||||
|
@ -113,6 +113,10 @@ CFLAGS+= ${DEBUG_FLAGS}
|
||||
CFLAGS+= -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer
|
||||
.endif
|
||||
|
||||
.if ${MACHINE_CPUARCH} == "aarch64"
|
||||
CFLAGS+= -fPIC
|
||||
.endif
|
||||
|
||||
# Temporary workaround for PR 196407, which contains the fascinating details.
|
||||
# Don't allow clang to use fpu instructions or registers in kernel modules.
|
||||
.if ${MACHINE_CPUARCH} == arm
|
||||
@ -182,7 +186,17 @@ ${PROG}.debug: ${FULLPROG}
|
||||
|
||||
.if ${__KLD_SHARED} == yes
|
||||
${FULLPROG}: ${KMOD}.kld
|
||||
.if ${MACHINE_CPUARCH} != "aarch64"
|
||||
${LD} -Bshareable ${_LDFLAGS} -o ${.TARGET} ${KMOD}.kld
|
||||
.else
|
||||
#XXXKIB Relocatable linking in aarch64 ld from binutils 2.25.1 does
|
||||
# not work. The linker corrupts the references to the external
|
||||
# symbols which are defined by other object in the linking set
|
||||
# and should therefore loose the GOT entry. The problem seems
|
||||
# to be fixed in the binutils-gdb git HEAD as of 2015-10-04. Hack
|
||||
# below allows to get partially functioning modules for now.
|
||||
${LD} -Bshareable ${_LDFLAGS} -o ${.TARGET} ${OBJS}
|
||||
.endif
|
||||
.if !defined(DEBUG_FLAGS)
|
||||
${OBJCOPY} --strip-debug ${.TARGET}
|
||||
.endif
|
||||
@ -220,7 +234,7 @@ ${FULLPROG}: ${OBJS}
|
||||
.endif
|
||||
|
||||
_ILINKS=machine
|
||||
.if ${MACHINE} != ${MACHINE_CPUARCH}
|
||||
.if ${MACHINE} != ${MACHINE_CPUARCH} && ${MACHINE} != "arm64"
|
||||
_ILINKS+=${MACHINE_CPUARCH}
|
||||
.endif
|
||||
.if ${MACHINE_CPUARCH} == "i386" || ${MACHINE_CPUARCH} == "amd64"
|
||||
|
Loading…
x
Reference in New Issue
Block a user