Browse Source

xtensa: preliminary support for upcoming FDPIC support in uClibc-ng

Waldemar Brodkorb 1 year ago
parent
commit
5fa28f6a96

+ 6 - 0
mk/vars.mk

@@ -311,6 +311,12 @@ TARGET_CXXFLAGS+=	-marm
 endif
 endif
 
+ifeq ($(ADK_TARGET_BINFMT_FDPIC),y)
+TARGET_CFLAGS+=		-mfdpic
+TARGET_CXXFLAGS+=	-mfdpic
+TARGET_LDFLAGS+=	-mfdpic
+endif
+
 # host compiler and linker flags
 HOST_CPPFLAGS:=		-I$(STAGING_HOST_DIR)/usr/include
 ifeq ($(OS_FOR_BUILD),Darwin)

+ 0 - 3
package/uclibc-ng-test/Makefile

@@ -47,9 +47,6 @@ endif
 ifeq ($(ADK_TARGET_ARCH_KVX),y)
 XAKE_FLAGS+=		NO_TLS=1
 endif
-ifeq ($(ADK_TARGET_WITH_MMU),)
-XAKE_FLAGS+=		NO_NPTL=1
-endif
 
 uclibc-ng-test-install:
 	${INSTALL_DIR} ${IDIR_UCLIBC_NG_TEST}/etc

+ 14 - 0
target/config/Config.in.abi

@@ -1,6 +1,18 @@
 # This file is part of the OpenADK project. OpenADK is copyrighted
 # material, please see the LICENCE file in the top-level directory.
 
+choice
+prompt "ABI"
+depends on ADK_TARGET_ARCH_XTENSA && ADK_TARGET_CPU_XTENSA_DC233C
+
+config ADK_TARGET_ABI_WINDOWED
+	bool "Windowed ABI"
+
+config ADK_TARGET_ABI_CALL0
+	bool "Call0 ABI"
+
+endchoice
+
 choice
 prompt "ABI"
 depends on ADK_TARGET_ARCH_MIPS64
@@ -62,6 +74,8 @@ config ADK_TARGET_ABI
 	default "x32" if ADK_TARGET_ABI_X32
 	default "eabihf" if ADK_TARGET_ARCH_ARM && ADK_TARGET_HARD_FLOAT
 	default "eabi" if ADK_TARGET_ARCH_ARM
+	default "windowed" if ADK_TARGET_ABI_WINDOWED
+	default "call0" if ADK_TARGET_ABI_CALL0
 
 config ADK_TARGET_ABI_RISCV
 	depends on ADK_TARGET_ARCH_RISCV32 || ADK_TARGET_ARCH_RISCV64

+ 2 - 1
target/config/Config.in.binfmt

@@ -24,7 +24,8 @@ config ADK_TARGET_BINFMT_FLAT
 config ADK_TARGET_BINFMT_FDPIC
 	bool "FDPIC"
 	select BUSYBOX_NOMMU
-	depends on ADK_TARGET_ARCH_ARM || ADK_TARGET_ARCH_BFIN || ADK_TARGET_ARCH_FRV || ADK_TARGET_ARCH_SH
+	depends on ADK_TARGET_ARCH_ARM || ADK_TARGET_ARCH_BFIN || ADK_TARGET_ARCH_FRV || ADK_TARGET_ARCH_SH \
+		|| ADK_TARGET_ARCH_XTENSA
 	depends on !ADK_TARGET_WITH_MMU
 
 config ADK_TARGET_BINFMT_DSBT

+ 4 - 0
target/config/Config.in.binutils

@@ -55,4 +55,8 @@ config ADK_TOOLCHAIN_BINUTILS_KVX
 	bool "kvx-coolidge"
 	depends on ADK_TARGET_ARCH_KVX
 
+config ADK_TOOLCHAIN_BINUTILS_XTENSA
+	bool "xtensa-fdpic-abi-spec-1.1"
+	depends on ADK_TARGET_ARCH_XTENSA
+
 endchoice

+ 4 - 0
target/config/Config.in.compiler

@@ -111,4 +111,8 @@ config ADK_TOOLCHAIN_GCC_KVX
 	bool "coolidge"
 	depends on ADK_TARGET_ARCH_KVX
 
+config ADK_TOOLCHAIN_GCC_XTENSA
+	bool "xtensa-fdpic-abi-spec-1.1"
+	depends on ADK_TARGET_ARCH_XTENSA
+
 endchoice

+ 3 - 3
target/config/Config.in.cpu

@@ -1830,9 +1830,9 @@ config ADK_TARGET_CPU_XTENSA_DC233C
 	select ADK_TARGET_SUPPORTS_THREADS
 	select ADK_TARGET_SUPPORTS_NPTL
 	select ADK_TARGET_SUPPORTS_LT
-	select ADK_TARGET_KERNEL_UIMAGE
-	select ADK_LINUX_KERNEL_XTENSA_VARIANT_DC233C if ADK_TARGET_OS_LINUX
-	select ADK_LINUX_KERNEL_INITIALIZE_XTENSA_MMU_INSIDE_VMLINUX if ADK_TARGET_OS_LINUX
+	select ADK_TARGET_KERNEL_IMAGE
+	select ADK_LINUX_KERNEL_XTENSA_VARIANT_DC233C if ADK_TARGET_WITH_MMU
+	select ADK_LINUX_KERNEL_INITIALIZE_XTENSA_MMU_INSIDE_VMLINUX if ADK_TARGET_WITH_MMU
 	depends on ADK_TARGET_ARCH_XTENSA
 
 config ADK_TARGET_CPU_XTENSA_DC232B

+ 1 - 0
target/config/Config.in.libc

@@ -220,6 +220,7 @@ config ADK_TARGET_SUFFIX
 	default "gnux32" if ADK_TARGET_LIB_GLIBC && ADK_TARGET_ABI_X32 && ADK_LINUX_64
 	default "gnuspe" if ADK_TARGET_LIB_GLIBC && ADK_TARGET_ARCH_PPC && ADK_TARGET_ARCH_PPC_WITH_SPE
 	default "gnu" if ADK_TARGET_LIB_GLIBC
+	default "uclibcfdpic" if ADK_TARGET_LIB_UCLIBC_NG && ADK_TARGET_ARCH_XTENSA && ADK_TARGET_BINFMT_FDPIC
 	default "uclinuxfdpiceabi" if ADK_TARGET_LIB_UCLIBC_NG && ADK_TARGET_ARCH_ARM && ADK_TARGET_BINFMT_FDPIC
 	default "uclibceabihf" if ADK_TARGET_LIB_UCLIBC_NG && ADK_TARGET_ARCH_ARM && ADK_TARGET_HARD_FLOAT
 	default "uclibceabi" if ADK_TARGET_LIB_UCLIBC_NG && ADK_TARGET_ARCH_ARM

+ 23 - 0
target/linux/config/Config.in.xtensa

@@ -12,11 +12,34 @@ config ADK_LINUX_KERNEL_INITIALIZE_XTENSA_MMU_INSIDE_VMLINUX
 
 config ADK_LINUX_KERNEL_XTENSA_VARIANT_CUSTOM
 	bool
+	default y if ADK_TARGET_BINFMT_FDPIC
+	default y if ADK_TARGET_BINFMT_FLAT
 
 config ADK_LINUX_KERNEL_XTENSA_VARIANT_CUSTOM_NAME
 	string
+	default "dc233c" if ADK_TARGET_CPU_XTENSA_DC233C
+	default "dc232b" if ADK_TARGET_CPU_XTENSA_DC232B
 	default "de212" if ADK_TARGET_CPU_XTENSA_DE212
 
 config ADK_LINUX_KERNEL_BUILTIN_DTB
 	string
 	default "kc705_nommu" if ADK_TARGET_CPU_XTENSA_DE212
+
+config ADK_LINUX_KERNEL_USER_ABI_CALL0_ONLY
+	bool
+	default y if ADK_TARGET_ABI_CALL0
+
+config ADK_LINUX_KERNEL_MEMMAP_CACHEATTR
+	hex
+	default "0x2cccccc7"
+	depends on !ADK_TARGET_WITH_MMU
+
+config ADK_LINUX_KERNEL_KERNEL_LOAD_ADDRESS
+	hex
+	default "0x00003000"
+	depends on !ADK_TARGET_WITH_MMU
+
+config ADK_LINUX_KERNEL_DEFAULT_MEM_START
+	hex
+	default "0x00000000"
+	depends on !ADK_TARGET_WITH_MMU

+ 4 - 7
target/xtensa/Makefile

@@ -5,24 +5,21 @@ include $(ADK_TOPDIR)/rules.mk
 include $(ADK_TOPDIR)/mk/kernel-build.mk
 include $(ADK_TOPDIR)/mk/image.mk
 
-ifeq ($(ADK_TARGET_CPU_XTENSA_DE212),y)
-KERNEL:=$(LINUX_DIR)/arch/xtensa/boot/Image.elf
-else
-KERNEL:=$(LINUX_DIR)/arch/xtensa/boot/uImage
-endif
-
 QEMU_ARGS:=${ADK_QEMU_ARGS}
 ifeq ($(ADK_TARGET_CPU_XTENSA_DC233C),y)
-QEMU_ARGS+=-M kc705
+QEMU_ARGS+=-M lx60
 QEMU_ARGS+=-cpu dc233c
+KERNEL:=$(LINUX_DIR)/arch/xtensa/boot/Image.elf
 endif
 ifeq ($(ADK_TARGET_CPU_XTENSA_DC232B),y)
 QEMU_ARGS+=-M kc705
 QEMU_ARGS+=-cpu dc232b
+KERNEL:=$(LINUX_DIR)/arch/xtensa/boot/uImage
 endif
 ifeq ($(ADK_TARGET_CPU_XTENSA_DE212),y)
 QEMU_ARGS+=-M kc705-nommu
 QEMU_ARGS+=-cpu de212 -m 256
+KERNEL:=$(LINUX_DIR)/arch/xtensa/boot/Image.elf
 endif
 
 # target helper text

+ 2 - 1
target/xtensa/kernel/qemu-xtensa

@@ -1,5 +1,6 @@
 CONFIG_XTENSA=y
+CONFIG_XTENSA_UNALIGNED_USER=y
 CONFIG_XTENSA_PLATFORM_XTFPGA=y
 CONFIG_CMDLINE_BOOL=y
-CONFIG_CMDLINE="console=ttyS0,38400 memmap=128M@0"
+CONFIG_CMDLINE="earlycon=uart8250,mmio32,0xfd050020,115200n8 console=ttyS0,115200n8 memmap=0x04000000@0"
 CONFIG_SECTION_MISMATCH_WARN_ONLY=y

BIN
target/xtensa/overlay/xtensa_dc233c_call0.tar


+ 0 - 0
target/xtensa/overlay/xtensa_dc233c.tar → target/xtensa/overlay/xtensa_dc233c_windowed.tar


+ 31 - 7
target/xtensa/uclibc-ng-nommu.config

@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# uClibc-ng 1.0.45 C Library Configuration
+# uClibc-ng 1.0.48 C Library Configuration
 #
 # TARGET_aarch64 is not set
 # TARGET_alpha is not set
@@ -43,9 +43,9 @@ TARGET_ARCH_BITS=32
 TARGET_ARCH="xtensa"
 FORCE_OPTIONS_FOR_ARCH=y
 TARGET_SUBARCH=""
-UCLIBC_FORMAT_FLAT=y
+UCLIBC_FORMAT_FDPIC_ELF=y
+# UCLIBC_FORMAT_FLAT is not set
 # UCLIBC_FORMAT_FLAT_SEP_DATA is not set
-# UCLIBC_FORMAT_SHARED_FLAT is not set
 ARCH_HAS_DEPRECATED_SYSCALLS=y
 ARCH_ANY_ENDIAN=y
 ARCH_LITTLE_ENDIAN=y
@@ -66,13 +66,31 @@ HAVE_DOT_CONFIG=y
 # General Library Settings
 #
 DOPIC=y
-# STATIC_PIE is not set
-ARCH_HAS_NO_SHARED=y
-ARCH_HAS_NO_LDSO=y
 ARCH_HAS_UCONTEXT=y
+HAVE_LDSO=y
+HAVE_SHARED=y
+# FORCE_SHAREABLE_TEXT_SEGMENTS is not set
+LDSO_LDD_SUPPORT=y
+LDSO_CACHE_SUPPORT=y
+LDSO_PRELOAD_ENV_SUPPORT=y
+# LDSO_PRELOAD_FILE_SUPPORT is not set
+LDSO_BASE_FILENAME="ld.so"
+# LDSO_STANDALONE_SUPPORT is not set
+# LDSO_PRELINK_SUPPORT is not set
+UCLIBC_STATIC_LDCONFIG=y
+LDSO_RUNPATH=y
+# LDSO_RUNPATH_OF_EXECUTABLE is not set
+LDSO_SAFE_RUNPATH=y
+LDSO_SEARCH_INTERP_PATH=y
+LDSO_LD_LIBRARY_PATH=y
 UCLIBC_CTOR_DTOR=y
-HAS_NO_THREADS=y
+# LDSO_GNU_HASH_SUPPORT is not set
+# HAS_NO_THREADS is not set
 # UCLIBC_HAS_LINUXTHREADS is not set
+UCLIBC_HAS_THREADS_NATIVE=y
+UCLIBC_HAS_THREADS=y
+UCLIBC_HAS_TLS=y
+# PTHREADS_DEBUG_SUPPORT is not set
 PTHREADS_STACK_DEFAULT_SIZE=2097152
 UCLIBC_HAS_SYSLOG=y
 UCLIBC_HAS_LFS=y
@@ -151,6 +169,7 @@ UCLIBC_DNSRAND_MODE_PRNGPLUS=y
 #
 UCLIBC_HAS_STRING_GENERIC_OPT=y
 UCLIBC_HAS_STRING_ARCH_OPT=y
+UCLIBC_HAS_STDIO_FUTEXES=y
 UCLIBC_HAS_CTYPE_TABLES=y
 UCLIBC_HAS_CTYPE_SIGNED=y
 # UCLIBC_HAS_CTYPE_UNSAFE is not set
@@ -214,6 +233,8 @@ HARDWIRED_ABSPATH=y
 # Security options
 #
 # UCLIBC_HAS_SSP is not set
+UCLIBC_BUILD_RELRO=y
+# UCLIBC_BUILD_NOW is not set
 UCLIBC_BUILD_NOEXECSTACK=y
 
 #
@@ -224,6 +245,9 @@ UCLIBC_EXTRA_CFLAGS=""
 # DODEBUG is not set
 # DOSTRIP is not set
 # DOASSERTS is not set
+# SUPPORT_LD_DEBUG is not set
+# SUPPORT_LD_DEBUG_EARLY is not set
 # UCLIBC_MALLOC_DEBUGGING is not set
+# UCLIBC_HAS_BACKTRACE is not set
 WARNINGS="-Wall"
 # EXTRA_WARNINGS is not set

+ 5 - 0
toolchain/binutils/Makefile

@@ -44,8 +44,13 @@ endif
 
 $(WRKBUILD)/.configured:
 ifeq ($(ADK_TARGET_ARCH_XTENSA),y)
+ifeq ($(ADK_TARGET_ABI),)
 	tar xf $(ADK_TOPDIR)/target/xtensa/overlay/xtensa_$(ADK_TARGET_CPU_TYPE).tar \
 		--strip-components=1 -C $(WRKSRC) binutils
+else
+	tar xf $(ADK_TOPDIR)/target/xtensa/overlay/xtensa_$(ADK_TARGET_CPU_TYPE)_$(ADK_TARGET_ABI).tar \
+		--strip-components=1 -C $(WRKSRC) binutils
+endif
 endif
 	(cd $(WRKBUILD); PATH='$(HOST_PATH)' \
 		MAKEINFO=true \

+ 7 - 0
toolchain/binutils/Makefile.inc

@@ -65,6 +65,13 @@ PKG_HASH:=		71d37c96451333c5c0b84b170169fdcb138bbb27397dc06281905d9717c8ed64
 PKG_SITES:=		${MASTER_SITE_GNU:=binutils/}
 DISTFILES:=		${PKG_NAME}-${PKG_VERSION}.tar.bz2
 endif
+ifeq ($(ADK_TOOLCHAIN_BINUTILS_XTENSA),y)
+PKG_VERSION:=		xtensa-fdpic-abi-spec-1.1
+PKG_GIT:=		tag
+PKG_RELEASE:=		1
+PKG_SITES:=		https://github.com/jcmvbkbc/binutils-gdb-xtensa.git
+DISTFILES:=		${PKG_NAME}-${PKG_VERSION}.tar.gz
+endif
 ifeq ($(ADK_TOOLCHAIN_BINUTILS_GIT),y)
 PKG_VERSION:=		git
 PKG_RELEASE:=		1

+ 5 - 0
toolchain/gcc/Makefile

@@ -286,8 +286,13 @@ GCC_BUILD_DIR_FINAL:=	$(WRKBUILD)-final
 
 $(GCC_BUILD_DIR_INITIAL)/.configured:
 ifeq ($(ADK_TARGET_ARCH_XTENSA),y)
+ifeq ($(ADK_TARGET_ABI),)
 	tar xf $(ADK_TOPDIR)/target/xtensa/overlay/xtensa_$(ADK_TARGET_CPU_TYPE).tar \
 		--strip-components=1 -C $(WRKSRC) gcc
+else
+	tar xf $(ADK_TOPDIR)/target/xtensa/overlay/xtensa_$(ADK_TARGET_CPU_TYPE)_$(ADK_TARGET_ABI).tar \
+		--strip-components=1 -C $(WRKSRC) gcc
+endif
 endif
 	mkdir -p $(GCC_BUILD_DIR_INITIAL)
 	# these symlinks are very important, do not remove

+ 8 - 0
toolchain/gcc/Makefile.inc

@@ -97,6 +97,14 @@ PKG_SITES:=		https://github.com/kalray/gcc.git
 PKG_RELEASE:=		1
 DISTFILES:=		${PKG_NAME}-${PKG_VERSION}.tar.gz
 endif
+ifeq ($(ADK_TOOLCHAIN_GCC_XTENSA),y)
+PKG_VERSION:=		xtensa-fdpic-abi-spec-1.1
+PKG_GIT:=		tag
+PKG_SITES:=		https://github.com/jcmvbkbc/gcc-xtensa.git
+PKG_RELEASE:=		1
+DISTFILES:=		${PKG_NAME}-${PKG_VERSION}.tar.gz
+LIBSTDCXXVER:=		29
+endif
 ifeq ($(ADK_TOOLCHAIN_GCC_GIT),y)
 PKG_VERSION:=		git
 PKG_SITES:=		https://github.com/gcc-mirror/gcc.git

+ 5 - 0
toolchain/linux-headers/Makefile

@@ -21,8 +21,13 @@ ifeq ($(ADK_KERNEL_ROOT_NFS),y)
 endif
 endif
 ifeq ($(ADK_TARGET_ARCH_XTENSA),y)
+ifeq ($(ADK_TARGET_ABI),)
 	tar xf $(ADK_TOPDIR)/target/xtensa/overlay/xtensa_$(ADK_TARGET_CPU_TYPE).tar \
 		--strip-components=1 -C $(WRKSRC) linux
+else
+	tar xf $(ADK_TOPDIR)/target/xtensa/overlay/xtensa_$(ADK_TARGET_CPU_TYPE)_$(ADK_TARGET_ABI).tar \
+		--strip-components=1 -C $(WRKSRC) linux
+endif
 endif
 ifneq ($(ADK_DISABLE_KERNEL_PATCHES),y)
 	$(TRACE) kernel-patch