2017-07-11 09:08:08 +08:00
|
|
|
# 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.
|
|
|
|
#
|
|
|
|
|
|
|
|
OBJCOPYFLAGS := -O binary
|
|
|
|
LDFLAGS_vmlinux :=
|
2018-02-13 13:13:16 +08:00
|
|
|
ifeq ($(CONFIG_DYNAMIC_FTRACE),y)
|
|
|
|
LDFLAGS_vmlinux := --no-relax
|
|
|
|
endif
|
2017-07-11 09:08:08 +08:00
|
|
|
KBUILD_AFLAGS_MODULE += -fPIC
|
|
|
|
KBUILD_CFLAGS_MODULE += -fPIC
|
|
|
|
|
|
|
|
export BITS
|
|
|
|
ifeq ($(CONFIG_ARCH_RV64I),y)
|
|
|
|
BITS := 64
|
|
|
|
UTS_MACHINE := riscv64
|
|
|
|
|
|
|
|
KBUILD_CFLAGS += -mabi=lp64
|
|
|
|
KBUILD_AFLAGS += -mabi=lp64
|
2018-07-29 09:14:47 +08:00
|
|
|
|
2018-08-24 07:20:39 +08:00
|
|
|
KBUILD_LDFLAGS += -melf64lriscv
|
2017-07-11 09:08:08 +08:00
|
|
|
else
|
|
|
|
BITS := 32
|
|
|
|
UTS_MACHINE := riscv32
|
|
|
|
|
|
|
|
KBUILD_CFLAGS += -mabi=ilp32
|
|
|
|
KBUILD_AFLAGS += -mabi=ilp32
|
2018-08-24 07:20:39 +08:00
|
|
|
KBUILD_LDFLAGS += -melf32lriscv
|
2017-07-11 09:08:08 +08:00
|
|
|
endif
|
|
|
|
|
2018-10-09 10:18:32 +08:00
|
|
|
# ISA string setting
|
2019-04-15 17:14:35 +08:00
|
|
|
riscv-march-$(CONFIG_ARCH_RV32I) := rv32ima
|
|
|
|
riscv-march-$(CONFIG_ARCH_RV64I) := rv64ima
|
2018-10-09 10:18:33 +08:00
|
|
|
riscv-march-$(CONFIG_FPU) := $(riscv-march-y)fd
|
2018-10-09 10:18:32 +08:00
|
|
|
riscv-march-$(CONFIG_RISCV_ISA_C) := $(riscv-march-y)c
|
|
|
|
KBUILD_CFLAGS += -march=$(subst fd,,$(riscv-march-y))
|
|
|
|
KBUILD_AFLAGS += -march=$(riscv-march-y)
|
2017-07-11 09:08:08 +08:00
|
|
|
|
|
|
|
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
|
2018-03-15 16:50:41 +08:00
|
|
|
ifeq ($(CONFIG_MODULE_SECTIONS),y)
|
|
|
|
KBUILD_LDFLAGS_MODULE += -T $(srctree)/arch/riscv/kernel/module.lds
|
|
|
|
endif
|
|
|
|
|
|
|
|
KBUILD_CFLAGS_MODULE += $(call cc-option,-mno-relax)
|
2017-07-11 09:08:08 +08:00
|
|
|
|
|
|
|
# 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)
|
|
|
|
|
2018-05-31 23:42:01 +08:00
|
|
|
# arch specific predefines for sparse
|
|
|
|
CHECKFLAGS += -D__riscv -D__riscv_xlen=$(BITS)
|
|
|
|
|
2018-11-12 13:55:15 +08:00
|
|
|
# Default target when executing plain make
|
|
|
|
boot := arch/riscv/boot
|
|
|
|
KBUILD_IMAGE := $(boot)/Image.gz
|
|
|
|
|
2017-07-11 09:08:08 +08:00
|
|
|
head-y := arch/riscv/kernel/head.o
|
|
|
|
|
bpf, riscv: add BPF JIT for RV64G
This commit adds a BPF JIT for RV64G.
The JIT is a two-pass JIT, and has a dynamic prolog/epilogue (similar
to the MIPS64 BPF JIT) instead of static ones (e.g. x86_64).
At the moment the RISC-V Linux port does not support
CONFIG_HAVE_KPROBES, which means that CONFIG_BPF_EVENTS is not
supported. Thus, no tests involving BPF_PROG_TYPE_TRACEPOINT,
BPF_PROG_TYPE_PERF_EVENT, BPF_PROG_TYPE_KPROBE and
BPF_PROG_TYPE_RAW_TRACEPOINT passes.
The implementation does not support "far branching" (>4KiB).
Test results:
# modprobe test_bpf
test_bpf: Summary: 378 PASSED, 0 FAILED, [366/366 JIT'ed]
# echo 1 > /proc/sys/kernel/unprivileged_bpf_disabled
# ./test_verifier
...
Summary: 761 PASSED, 507 SKIPPED, 2 FAILED
Note that "test_verifier" was run with one build with
CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y and one without, otherwise
many of the the tests that require unaligned access were skipped.
CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y:
# echo 1 > /proc/sys/kernel/unprivileged_bpf_disabled
# ./test_verifier | grep -c 'NOTE.*unknown align'
0
No CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS:
# echo 1 > /proc/sys/kernel/unprivileged_bpf_disabled
# ./test_verifier | grep -c 'NOTE.*unknown align'
59
The two failing test_verifier tests are:
"ld_abs: vlan + abs, test 1"
"ld_abs: jump around ld_abs"
This is due to that "far branching" involved in those tests.
All tests where done on QEMU (QEMU emulator version 3.1.50
(v3.1.0-688-g8ae951fbc106)).
Signed-off-by: Björn Töpel <bjorn.topel@gmail.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
2019-02-05 20:41:22 +08:00
|
|
|
core-y += arch/riscv/kernel/ arch/riscv/mm/ arch/riscv/net/
|
2017-07-11 09:08:08 +08:00
|
|
|
|
|
|
|
libs-y += arch/riscv/lib/
|
|
|
|
|
2018-11-05 22:35:37 +08:00
|
|
|
PHONY += vdso_install
|
|
|
|
vdso_install:
|
|
|
|
$(Q)$(MAKE) $(build)=arch/riscv/kernel/vdso $@
|
|
|
|
|
2018-11-12 13:55:15 +08:00
|
|
|
all: Image.gz
|
|
|
|
|
|
|
|
Image: vmlinux
|
|
|
|
$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
|
|
|
|
|
|
|
|
Image.%: Image
|
|
|
|
$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
|
|
|
|
|
|
|
|
zinstall install:
|
|
|
|
$(Q)$(MAKE) $(build)=$(boot) $@
|