This is an automated email from the ASF dual-hosted git repository. xiaoxiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
The following commit(s) were added to refs/heads/master by this push: new a9372627d8 risc-v/rv-virt: use fully linked apps for kernel build a9372627d8 is described below commit a9372627d82fe78b74e520b35ec9a1bab6c072af Author: Yanfeng Liu <yfliu2...@qq.com> AuthorDate: Thu Jan 11 11:37:40 2024 +0800 risc-v/rv-virt: use fully linked apps for kernel build Fully linked apps take less storage and are efficient to load. This is to enable them for rv-vrit configurations in KERNEL build. Changes: - arch/risc-v/Kconfig select BINFMT_ELF_EXECUTABLE for QEMU-RV - boards/risc-v/qemu-rv/rv-virt/configs - knsh32/defconfig enable ELF_EXECUTABLE, LIBM, OSTEST - knsh64/defconfig enable ELF_EXECUTABLE, LIBM, OSTEST - ksmp64/defconfig enable ELF_EXECUTABLE, LIBM, OSTEST - knetnsh64/defconfig enable ELF_EXECUTABLE, LIBM, OSTEST - knetnsh64_smp/defconfig enable ELF_EXECUTABLE, LIBM, OSTEST Additions: - boards/risc-v/qemu-rv/rv-virt/scripts/ - gnu-elf.ld apps linker script The ARCH_TEXT_VBASE of knsh32 is set to same as that of 64bit to reuse the apps linker script. Signed-off-by: Yanfeng Liu <yfliu2...@qq.com> --- arch/risc-v/Kconfig | 1 + .../qemu-rv/rv-virt/configs/knetnsh64/defconfig | 4 + .../rv-virt/configs/knetnsh64_smp/defconfig | 4 + .../qemu-rv/rv-virt/configs/knsh32/defconfig | 5 +- .../qemu-rv/rv-virt/configs/knsh64/defconfig | 3 + .../qemu-rv/rv-virt/configs/ksmp64/defconfig | 3 + boards/risc-v/qemu-rv/rv-virt/scripts/Make.defs | 6 +- boards/risc-v/qemu-rv/rv-virt/scripts/gnu-elf.ld | 131 +++++++++++++++++++++ 8 files changed, 154 insertions(+), 3 deletions(-) diff --git a/arch/risc-v/Kconfig b/arch/risc-v/Kconfig index 78e621c34f..8938931e00 100644 --- a/arch/risc-v/Kconfig +++ b/arch/risc-v/Kconfig @@ -174,6 +174,7 @@ config ARCH_CHIP_QEMU_RV select ARCH_HAVE_ADDRENV select ARCH_NEED_ADDRENV_MAPPING select ARCH_HAVE_S_MODE + select ARCH_HAVE_ELF_EXECUTABLE select ONESHOT select ALARM_ARCH ---help--- diff --git a/boards/risc-v/qemu-rv/rv-virt/configs/knetnsh64/defconfig b/boards/risc-v/qemu-rv/rv-virt/configs/knetnsh64/defconfig index 2d30588578..0b082d276e 100644 --- a/boards/risc-v/qemu-rv/rv-virt/configs/knetnsh64/defconfig +++ b/boards/risc-v/qemu-rv/rv-virt/configs/knetnsh64/defconfig @@ -36,12 +36,14 @@ CONFIG_ARCH_PGPOOL_PBASE=0x80400000 CONFIG_ARCH_PGPOOL_SIZE=4194304 CONFIG_ARCH_PGPOOL_VBASE=0x80400000 CONFIG_ARCH_RISCV=y +CONFIG_ARCH_SETJMP_H=y CONFIG_ARCH_STACKDUMP=y CONFIG_ARCH_TEXT_NPAGES=128 CONFIG_ARCH_TEXT_VBASE=0xC0000000 CONFIG_ARCH_USE_MMU=y CONFIG_ARCH_USE_MPU=y CONFIG_ARCH_USE_S_MODE=y +CONFIG_BINFMT_ELF_EXECUTABLE=y CONFIG_BOARD_LOOPSPERMSEC=6366 CONFIG_BUILD_KERNEL=y CONFIG_CODECS_HASH_MD5=y @@ -79,6 +81,7 @@ CONFIG_LIBC_ENVPATH=y CONFIG_LIBC_EXECFUNCS=y CONFIG_LIBC_PERROR_STDOUT=y CONFIG_LIBC_STRERROR=y +CONFIG_LIBM=y CONFIG_MEMSET_64BIT=y CONFIG_MEMSET_OPTSPEED=y CONFIG_MM_PGALLOC=y @@ -133,3 +136,4 @@ CONFIG_SYSTEM_NSH=y CONFIG_SYSTEM_NSH_PROGNAME="init" CONFIG_SYSTEM_PING=y CONFIG_TESTING_GETPRIME=y +CONFIG_TESTING_OSTEST=y diff --git a/boards/risc-v/qemu-rv/rv-virt/configs/knetnsh64_smp/defconfig b/boards/risc-v/qemu-rv/rv-virt/configs/knetnsh64_smp/defconfig index e44b602d06..3cad0d6da9 100644 --- a/boards/risc-v/qemu-rv/rv-virt/configs/knetnsh64_smp/defconfig +++ b/boards/risc-v/qemu-rv/rv-virt/configs/knetnsh64_smp/defconfig @@ -36,12 +36,14 @@ CONFIG_ARCH_PGPOOL_PBASE=0x80400000 CONFIG_ARCH_PGPOOL_SIZE=4194304 CONFIG_ARCH_PGPOOL_VBASE=0x80400000 CONFIG_ARCH_RISCV=y +CONFIG_ARCH_SETJMP_H=y CONFIG_ARCH_STACKDUMP=y CONFIG_ARCH_TEXT_NPAGES=128 CONFIG_ARCH_TEXT_VBASE=0xC0000000 CONFIG_ARCH_USE_MMU=y CONFIG_ARCH_USE_MPU=y CONFIG_ARCH_USE_S_MODE=y +CONFIG_BINFMT_ELF_EXECUTABLE=y CONFIG_BOARD_LOOPSPERMSEC=6366 CONFIG_BUILD_KERNEL=y CONFIG_CODECS_HASH_MD5=y @@ -80,6 +82,7 @@ CONFIG_LIBC_ENVPATH=y CONFIG_LIBC_EXECFUNCS=y CONFIG_LIBC_PERROR_STDOUT=y CONFIG_LIBC_STRERROR=y +CONFIG_LIBM=y CONFIG_MEMCPY_64BIT=y CONFIG_MEMCPY_VIK=y CONFIG_MEMSET_64BIT=y @@ -137,4 +140,5 @@ CONFIG_SYSTEM_NSH=y CONFIG_SYSTEM_NSH_PROGNAME="init" CONFIG_SYSTEM_PING=y CONFIG_TESTING_GETPRIME=y +CONFIG_TESTING_OSTEST=y CONFIG_TESTING_SMP=y diff --git a/boards/risc-v/qemu-rv/rv-virt/configs/knsh32/defconfig b/boards/risc-v/qemu-rv/rv-virt/configs/knsh32/defconfig index 86d381bd07..75d6d9ab5c 100644 --- a/boards/risc-v/qemu-rv/rv-virt/configs/knsh32/defconfig +++ b/boards/risc-v/qemu-rv/rv-virt/configs/knsh32/defconfig @@ -25,7 +25,7 @@ CONFIG_ARCH_CHIP_QEMU_RV_ISA_A=y CONFIG_ARCH_CHIP_QEMU_RV_ISA_C=y CONFIG_ARCH_CHIP_QEMU_RV_ISA_M=y CONFIG_ARCH_DATA_NPAGES=128 -CONFIG_ARCH_DATA_VBASE=0xC0400000 +CONFIG_ARCH_DATA_VBASE=0xC0100000 CONFIG_ARCH_HEAP_NPAGES=128 CONFIG_ARCH_HEAP_VBASE=0xC0800000 CONFIG_ARCH_INTERRUPTSTACK=2048 @@ -41,6 +41,7 @@ CONFIG_ARCH_TEXT_VBASE=0xC0000000 CONFIG_ARCH_USE_MMU=y CONFIG_ARCH_USE_MPU=y CONFIG_ARCH_USE_S_MODE=y +CONFIG_BINFMT_ELF_EXECUTABLE=y CONFIG_BOARD_LOOPSPERMSEC=6366 CONFIG_BUILD_KERNEL=y CONFIG_DEV_ZERO=y @@ -62,6 +63,7 @@ CONFIG_LIBC_ENVPATH=y CONFIG_LIBC_EXECFUNCS=y CONFIG_LIBC_PERROR_STDOUT=y CONFIG_LIBC_STRERROR=y +CONFIG_LIBM=y CONFIG_MM_PGALLOC=y CONFIG_NFILE_DESCRIPTORS_PER_BLOCK=6 CONFIG_NSH_ARCHINIT=y @@ -84,4 +86,5 @@ CONFIG_SYSLOG_TIMESTAMP=y CONFIG_SYSTEM_NSH=y CONFIG_SYSTEM_NSH_PROGNAME="init" CONFIG_TESTING_GETPRIME=y +CONFIG_TESTING_OSTEST=y CONFIG_USEC_PER_TICK=1000 diff --git a/boards/risc-v/qemu-rv/rv-virt/configs/knsh64/defconfig b/boards/risc-v/qemu-rv/rv-virt/configs/knsh64/defconfig index b665b39c6e..092331e47e 100644 --- a/boards/risc-v/qemu-rv/rv-virt/configs/knsh64/defconfig +++ b/boards/risc-v/qemu-rv/rv-virt/configs/knsh64/defconfig @@ -41,6 +41,7 @@ CONFIG_ARCH_TEXT_VBASE=0xC0000000 CONFIG_ARCH_USE_MMU=y CONFIG_ARCH_USE_MPU=y CONFIG_ARCH_USE_S_MODE=y +CONFIG_BINFMT_ELF_EXECUTABLE=y CONFIG_BOARD_LOOPSPERMSEC=6366 CONFIG_BUILD_KERNEL=y CONFIG_DEBUG_ASSERTIONS=y @@ -66,6 +67,7 @@ CONFIG_LIBC_ENVPATH=y CONFIG_LIBC_EXECFUNCS=y CONFIG_LIBC_PERROR_STDOUT=y CONFIG_LIBC_STRERROR=y +CONFIG_LIBM=y CONFIG_MEMSET_64BIT=y CONFIG_MEMSET_OPTSPEED=y CONFIG_MM_PGALLOC=y @@ -92,4 +94,5 @@ CONFIG_SYSLOG_TIMESTAMP=y CONFIG_SYSTEM_NSH=y CONFIG_SYSTEM_NSH_PROGNAME="init" CONFIG_TESTING_GETPRIME=y +CONFIG_TESTING_OSTEST=y CONFIG_USEC_PER_TICK=1000 diff --git a/boards/risc-v/qemu-rv/rv-virt/configs/ksmp64/defconfig b/boards/risc-v/qemu-rv/rv-virt/configs/ksmp64/defconfig index d9e9dcd111..c0f789c04e 100644 --- a/boards/risc-v/qemu-rv/rv-virt/configs/ksmp64/defconfig +++ b/boards/risc-v/qemu-rv/rv-virt/configs/ksmp64/defconfig @@ -41,6 +41,7 @@ CONFIG_ARCH_TEXT_VBASE=0xC0000000 CONFIG_ARCH_USE_MMU=y CONFIG_ARCH_USE_MPU=y CONFIG_ARCH_USE_S_MODE=y +CONFIG_BINFMT_ELF_EXECUTABLE=y CONFIG_BOARD_LOOPSPERMSEC=6366 CONFIG_BUILD_KERNEL=y CONFIG_DEBUG_FULLOPT=y @@ -65,6 +66,7 @@ CONFIG_LIBC_ENVPATH=y CONFIG_LIBC_EXECFUNCS=y CONFIG_LIBC_PERROR_STDOUT=y CONFIG_LIBC_STRERROR=y +CONFIG_LIBM=y CONFIG_MEMSET_64BIT=y CONFIG_MEMSET_OPTSPEED=y CONFIG_MM_PGALLOC=y @@ -93,4 +95,5 @@ CONFIG_SYSLOG_TIMESTAMP=y CONFIG_SYSTEM_NSH=y CONFIG_SYSTEM_NSH_PROGNAME="init" CONFIG_TESTING_GETPRIME=y +CONFIG_TESTING_OSTEST=y CONFIG_TESTING_SMP=y diff --git a/boards/risc-v/qemu-rv/rv-virt/scripts/Make.defs b/boards/risc-v/qemu-rv/rv-virt/scripts/Make.defs index 453bad37bc..59157549e3 100644 --- a/boards/risc-v/qemu-rv/rv-virt/scripts/Make.defs +++ b/boards/risc-v/qemu-rv/rv-virt/scripts/Make.defs @@ -55,5 +55,7 @@ else LDELFFLAGS = --oformat elf64-littleriscv endif -LDELFFLAGS += -r -e main -LDELFFLAGS += -T $(call CONVERT_PATH,$(TOPDIR)/binfmt/libelf/gnu-elf.ld) +ifeq ($(CONFIG_BINFMT_ELF_RELOCATABLE),y) +LDELFFLAGS += -r +endif + diff --git a/boards/risc-v/qemu-rv/rv-virt/scripts/gnu-elf.ld b/boards/risc-v/qemu-rv/rv-virt/scripts/gnu-elf.ld new file mode 100644 index 0000000000..d5e77d8e2c --- /dev/null +++ b/boards/risc-v/qemu-rv/rv-virt/scripts/gnu-elf.ld @@ -0,0 +1,131 @@ +/**************************************************************************** + * boards/risc-v/qemu-rv/rv-virt/scripts/gnu-elf.ld + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +SECTIONS +{ + . = 0xC0000000; + .text : + { + _stext = . ; + *(.text) + *(.text.*) + *(.gnu.warning) + *(.stub) + *(.glue_7) + *(.glue_7t) + *(.jcr) + + /* C++ support: The .init and .fini sections contain specific logic + * to manage static constructors and destructors. + */ + + *(.gnu.linkonce.t.*) + *(.init) /* Old ABI */ + *(.fini) /* Old ABI */ + _etext = . ; + } + + .rodata : + { + _srodata = . ; + *(.rodata) + *(.rodata1) + *(.rodata.*) + *(.gnu.linkonce.r*) + _erodata = . ; + } + + . = 0xC0101000; + .data : + { + _sdata = . ; + *(.data) + *(.data1) + *(.data.*) + *(.gnu.linkonce.d*) + . = ALIGN(4); + _edata = . ; + } + + /* C++ support. For each global and static local C++ object, + * GCC creates a small subroutine to construct the object. Pointers + * to these routines (not the routines themselves) are stored as + * simple, linear arrays in the .ctors section of the object file. + * Similarly, pointers to global/static destructor routines are + * stored in .dtors. + */ + + .ctors : + { + _sctors = . ; + KEEP(*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) + KEEP(*(.init_array .ctors)) + _ectors = . ; + } + + .dtors : + { + _sdtors = . ; + KEEP (*(.dtors)) /* Old ABI: Unallocated */ + KEEP (*(.fini_array)) /* New ABI: Allocated */ + KEEP (*(SORT(.fini_array.*))) + _edtors = . ; + } + + .bss : + { + _sbss = . ; + *(.bss) + *(.bss.*) + *(.sbss) + *(.sbss.*) + *(.gnu.linkonce.b*) + *(COMMON) + _ebss = . ; + } + + /* Thread local storage support */ + .tdata : { + _stdata = ABSOLUTE(.); + KEEP (*(.tdata .tdata.* .gnu.linkonce.td.*)); + _etdata = ABSOLUTE(.); + } + + .tbss : { + _stbss = ABSOLUTE(.); + KEEP (*(.tbss .tbss.* .gnu.linkonce.tb.* .tcommon)); + _etbss = ABSOLUTE(.); + } + + /* Stabs debugging sections. */ + + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_info 0 : { *(.debug_info) } + .debug_line 0 : { *(.debug_line) } + .debug_pubnames 0 : { *(.debug_pubnames) } + .debug_aranges 0 : { *(.debug_aranges) } +}