mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-05 01:54:09 +08:00
7a8e7da422
This cleans up the module support that was commited earlier to work with what's actually emitted from our GCC port as it lands upstream. Most of the work here is adding new relocations to the kernel. There's some limitations on module loading imposed by the kernel: * The kernel doesn't support linker relaxation, which is necessary to support R_RISCV_ALIGN. In order to get reliable module building you're going to need to a GCC that supports the new '-mno-relax', which IIRC isn't going to be out until 8.1.0. It's somewhat unlikely that R_RISCV_ALIGN will appear in a module even without '-mno-relax' support, so issues shouldn't be common. * There is no large code model for RISC-V, which means modules must be loaded within a 32-bit signed offset of the kernel. We don't currently have any mechanism for ensuring this memory remains free or moving pages around, so issues here might be common. I fixed a singcle merge conflict in arch/riscv/kernel/Makefile.
81 lines
2.1 KiB
Makefile
81 lines
2.1 KiB
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.
|
|
#
|
|
|
|
LDFLAGS :=
|
|
OBJCOPYFLAGS := -O binary
|
|
LDFLAGS_vmlinux :=
|
|
ifeq ($(CONFIG_DYNAMIC_FTRACE),y)
|
|
LDFLAGS_vmlinux := --no-relax
|
|
endif
|
|
KBUILD_AFLAGS_MODULE += -fPIC
|
|
KBUILD_CFLAGS_MODULE += -fPIC
|
|
|
|
KBUILD_DEFCONFIG = defconfig
|
|
|
|
export BITS
|
|
ifeq ($(CONFIG_ARCH_RV64I),y)
|
|
BITS := 64
|
|
UTS_MACHINE := riscv64
|
|
|
|
KBUILD_CFLAGS += -mabi=lp64
|
|
KBUILD_AFLAGS += -mabi=lp64
|
|
KBUILD_MARCH = rv64im
|
|
LDFLAGS += -melf64lriscv
|
|
else
|
|
BITS := 32
|
|
UTS_MACHINE := riscv32
|
|
|
|
KBUILD_CFLAGS += -mabi=ilp32
|
|
KBUILD_AFLAGS += -mabi=ilp32
|
|
KBUILD_MARCH = rv32im
|
|
LDFLAGS += -melf32lriscv
|
|
endif
|
|
|
|
KBUILD_CFLAGS += -Wall
|
|
|
|
ifeq ($(CONFIG_RISCV_ISA_A),y)
|
|
KBUILD_ARCH_A = a
|
|
endif
|
|
ifeq ($(CONFIG_RISCV_ISA_C),y)
|
|
KBUILD_ARCH_C = c
|
|
endif
|
|
|
|
KBUILD_AFLAGS += -march=$(KBUILD_MARCH)$(KBUILD_ARCH_A)fd$(KBUILD_ARCH_C)
|
|
|
|
KBUILD_CFLAGS += -march=$(KBUILD_MARCH)$(KBUILD_ARCH_A)$(KBUILD_ARCH_C)
|
|
KBUILD_CFLAGS += -mno-save-restore
|
|
KBUILD_CFLAGS += -DCONFIG_PAGE_OFFSET=$(CONFIG_PAGE_OFFSET)
|
|
|
|
ifeq ($(CONFIG_CMODEL_MEDLOW),y)
|
|
KBUILD_CFLAGS += -mcmodel=medlow
|
|
endif
|
|
ifeq ($(CONFIG_CMODEL_MEDANY),y)
|
|
KBUILD_CFLAGS += -mcmodel=medany
|
|
endif
|
|
ifeq ($(CONFIG_MODULE_SECTIONS),y)
|
|
KBUILD_LDFLAGS_MODULE += -T $(srctree)/arch/riscv/kernel/module.lds
|
|
endif
|
|
|
|
KBUILD_CFLAGS_MODULE += $(call cc-option,-mno-relax)
|
|
|
|
# GCC versions that support the "-mstrict-align" option default to allowing
|
|
# unaligned accesses. While unaligned accesses are explicitly allowed in the
|
|
# RISC-V ISA, they're emulated by machine mode traps on all extant
|
|
# architectures. It's faster to have GCC emit only aligned accesses.
|
|
KBUILD_CFLAGS += $(call cc-option,-mstrict-align)
|
|
|
|
head-y := arch/riscv/kernel/head.o
|
|
|
|
core-y += arch/riscv/kernel/ arch/riscv/mm/
|
|
|
|
libs-y += arch/riscv/lib/
|
|
|
|
all: vmlinux
|