From 8afcd1092f3dc822aa255685b98c815eb3642819 Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Wed, 9 Oct 2019 17:13:05 +0200 Subject: lm32: try to build kernel for qemu --- mk/kernel-build.mk | 4 + target/config/Config.in.compiler | 5 + target/config/Config.in.kernelfmt | 3 + target/linux/Config.in.kernelversion | 2 +- target/linux/config/Config.in.serial | 12 ++ target/lm32/Makefile | 45 ++++++ target/lm32/systems/qemu-lm32 | 1 + toolchain/binutils/patches/2.32/lm32.patch | 25 ++++ toolchain/elf2flt/Makefile.inc | 6 - .../0001-lm32.patch | 159 --------------------- .../0002-sh2.patch | 43 ------ ...003-Makefile-fix-build-with-Binutils-2.31.patch | 34 ----- .../0001-lm32.patch | 159 +++++++++++++++++++++ .../0002-sh2.patch | 43 ++++++ toolchain/gcc/Makefile.inc | 8 ++ 15 files changed, 306 insertions(+), 243 deletions(-) create mode 100644 toolchain/binutils/patches/2.32/lm32.patch delete mode 100644 toolchain/elf2flt/patches/6d80ab6c93409e796f85da404bde84b841231531/0001-lm32.patch delete mode 100644 toolchain/elf2flt/patches/6d80ab6c93409e796f85da404bde84b841231531/0002-sh2.patch delete mode 100644 toolchain/elf2flt/patches/6d80ab6c93409e796f85da404bde84b841231531/0003-Makefile-fix-build-with-Binutils-2.31.patch create mode 100644 toolchain/elf2flt/patches/7e33f28df198c46764021ed14408bd262751e148/0001-lm32.patch create mode 100644 toolchain/elf2flt/patches/7e33f28df198c46764021ed14408bd262751e148/0002-sh2.patch diff --git a/mk/kernel-build.mk b/mk/kernel-build.mk index bd6d511a1..e63802371 100644 --- a/mk/kernel-build.mk +++ b/mk/kernel-build.mk @@ -39,6 +39,10 @@ ifeq ($(ADK_TARGET_KERNEL_IMAGE),y) KERNEL_FILE:=vmlinux KERNEL_TARGET:=$(ADK_TARGET_KERNEL) endif +ifeq ($(ADK_TARGET_KERNEL_SIMPLEIMAGE),y) +KERNEL_FILE:=vmlinux.bin +KERNEL_TARGET:=simpleImage.milkymist_one +endif ifneq ($(KERNEL_MODULES_USED),) KERNEL_TARGET+=modules diff --git a/target/config/Config.in.compiler b/target/config/Config.in.compiler index bfd6138e1..0020e6b92 100644 --- a/target/config/Config.in.compiler +++ b/target/config/Config.in.compiler @@ -31,6 +31,7 @@ prompt "GCC version" depends on ADK_BUILD_COMPILER_GCC default ADK_TOOLCHAIN_GCC_ARC if ADK_TARGET_ARCH_ARC default ADK_TOOLCHAIN_GCC_AVR32 if ADK_TARGET_ARCH_AVR32 +default ADK_TOOLCHAIN_GCC_LM32 if ADK_TARGET_ARCH_LM32 default ADK_TOOLCHAIN_GCC_METAG if ADK_TARGET_ARCH_METAG default ADK_TOOLCHAIN_GCC_NDS32 if ADK_TARGET_ARCH_NDS32 default ADK_TOOLCHAIN_GCC_7 if ADK_TARGET_CPU_ARM_ARM11MPCORE @@ -84,6 +85,10 @@ config ADK_TOOLCHAIN_GCC_METAG bool "4.2.4-metag" depends on ADK_TARGET_ARCH_METAG +config ADK_TOOLCHAIN_GCC_LM32 + bool "4.5.2" + depends on ADK_TARGET_ARCH_LM32 + config ADK_TOOLCHAIN_GCC_NDS32 bool "nds32-6.3.0-open" depends on ADK_TARGET_ARCH_NDS32 diff --git a/target/config/Config.in.kernelfmt b/target/config/Config.in.kernelfmt index e2fc675c3..f1d503e23 100644 --- a/target/config/Config.in.kernelfmt +++ b/target/config/Config.in.kernelfmt @@ -40,6 +40,9 @@ config ADK_TARGET_KERNEL_VMLINUX_SREC config ADK_TARGET_KERNEL_XIPIMAGE bool +config ADK_TARGET_KERNEL_SIMPLEIMAGE + bool + config ADK_TARGET_KERNEL string default "uImage" if ADK_TARGET_KERNEL_UIMAGE diff --git a/target/linux/Config.in.kernelversion b/target/linux/Config.in.kernelversion index 50805862f..6bb812b40 100644 --- a/target/linux/Config.in.kernelversion +++ b/target/linux/Config.in.kernelversion @@ -27,7 +27,6 @@ default ADK_TARGET_LINUX_KERNEL_VERSION_4_19 config ADK_TARGET_LINUX_KERNEL_VERSION_GIT bool "git" - select ADK_TARGET_LINUX_KERNEL_NEW depends on !ADK_TARGET_ARCH_AVR32 depends on !ADK_TARGET_ARCH_BFIN depends on !ADK_TARGET_ARCH_FRV @@ -256,6 +255,7 @@ config ADK_TARGET_LINUX_KERNEL_GIT_VER default "4.4.52" if ADK_TARGET_SYSTEM_PHYTEC_WEGA default "2.6.33" if ADK_TARGET_SYSTEM_KINETIS_K70 default "3.14.79" if ADK_TARGET_SYSTEM_SOLIDRUN_IMX6 + default "3.1.0" if ADK_TARGET_SYSTEM_QEMU_LM32 config ADK_TARGET_LINUX_KERNEL_GIT_TYPE string diff --git a/target/linux/config/Config.in.serial b/target/linux/config/Config.in.serial index d4273607f..c6fa0c6e1 100644 --- a/target/linux/config/Config.in.serial +++ b/target/linux/config/Config.in.serial @@ -76,6 +76,9 @@ config ADK_LINUX_KERNEL_SERIAL_BFIN_UART1 config ADK_LINUX_KERNEL_SERIAL_8250_INGENIC bool +config ADK_LINUX_KERNEL_SERIAL_MILKYMIST_CONSOLE + bool + config ADK_LINUX_KERNEL_SERIAL_BFIN bool "BFIN serial driver" select ADK_LINUX_KERNEL_SERIAL_BFIN_CONSOLE @@ -328,4 +331,13 @@ config ADK_LINUX_KERNEL_BOARD_GRASSHOPPER_USART0 help Enable second USART on Grasshoper boards +config ADK_LINUX_KERNEL_SERIAL_MILKYMIST + bool "Enable UART0 on Milkymist" + select ADK_LINUX_KERNEL_SERIAL_MILKYMIST_CONSOLE + depends on ADK_TARGET_SYSTEM_QEMU_LM32 + default y if ADK_TARGET_SYSTEM_QEMU_LM32 + default n + help + Enable second USART on Grasshoper boards + endmenu diff --git a/target/lm32/Makefile b/target/lm32/Makefile index ba872b7d7..d79009445 100644 --- a/target/lm32/Makefile +++ b/target/lm32/Makefile @@ -5,6 +5,51 @@ include $(ADK_TOPDIR)/rules.mk include $(ADK_TOPDIR)/mk/kernel-build.mk include $(ADK_TOPDIR)/mk/image.mk +KERNEL:=$(LINUX_DIR)/arch/lm32/boot/simpleImage.milkymist_one + +QEMU_ARGS:=-M milkymist +QEMU_ARGS+=-nographic -nodefaults -monitor pty -serial stdio -append "console=ttyS0" +# +# target helper text +ifeq ($(ADK_TARGET_FS),archive) +targethelp: + @echo "The RootFS tarball is: $(FW_DIR)/$(ROOTFSTARBALL)" +ifeq ($(ADK_TARGET_QEMU),y) + @echo 'The kernel file is: $(FW_DIR)/${TARGET_KERNEL}' + @echo "Use following command to create a QEMU Image:" + @echo "./scripts/create.sh qemu-${ADK_TARGET_CPU_ARCH}.img $(FW_DIR)/$(ROOTFSUSERTARBALL)" + @echo "Start qemu with following options:" + @echo 'qemu-system-${ADK_TARGET_CPU_ARCH} ${QEMU_ARGS} -kernel $(FW_DIR)/$(TARGET_KERNEL) qemu-${ADK_TARGET_CPU_ARCH}.img' +endif +endif +ifeq ($(ADK_TARGET_FS),initramfs) +targethelp: + @echo 'The kernel file is: $(FW_DIR)/${TARGET_KERNEL}' + @echo 'The initramfs image is: ${FW_DIR}/${INITRAMFS}' +ifeq ($(ADK_TARGET_QEMU),y) + @echo "Start qemu with following command line:" + @echo 'qemu-system-${ADK_TARGET_CPU_ARCH} ${QEMU_ARGS} -kernel $(FW_DIR)/$(TARGET_KERNEL) -initrd ${FW_DIR}/${INITRAMFS}' +endif +endif +ifeq ($(ADK_TARGET_FS),initramfsarchive) +targethelp: + @echo 'The kernel file is: $(FW_DIR)/${TARGET_KERNEL}' + @echo "The RootFS tarball is: $(FW_DIR)/$(ROOTFSUSERTARBALL)" +endif +ifeq ($(ADK_TARGET_FS),initramfspiggyback) +targethelp: + @echo 'The kernel+initramfs file is: $(FW_DIR)/${TARGET_KERNEL}' +ifeq ($(ADK_TARGET_QEMU),y) + @echo "Start qemu with following command line:" + @echo 'qemu-system-${ADK_TARGET_CPU_ARCH} ${QEMU_ARGS} -kernel $(FW_DIR)/$(TARGET_KERNEL)' +endif +endif + +kernel-strip: + +kernel-install: kernel-strip + @cp $(KERNEL) $(FW_DIR)/$(TARGET_KERNEL) + # filesystem specific targets ifeq ($(ADK_TARGET_FS),initramfs) imageinstall: kernel-install $(FW_DIR)/$(INITRAMFS) targethelp diff --git a/target/lm32/systems/qemu-lm32 b/target/lm32/systems/qemu-lm32 index f729902d8..901e1665f 100644 --- a/target/lm32/systems/qemu-lm32 +++ b/target/lm32/systems/qemu-lm32 @@ -3,6 +3,7 @@ config ADK_TARGET_SYSTEM_QEMU_LM32 select ADK_TARGET_QEMU select ADK_TARGET_CPU_LM32 select ADK_TARGET_UCLINUX + select ADK_TARGET_KERNEL_SIMPLEIMAGE help Support for Qemu Emulator LM32 architecture. diff --git a/toolchain/binutils/patches/2.32/lm32.patch b/toolchain/binutils/patches/2.32/lm32.patch new file mode 100644 index 000000000..176f09982 --- /dev/null +++ b/toolchain/binutils/patches/2.32/lm32.patch @@ -0,0 +1,25 @@ +diff -Nur binutils-2.32.orig/bfd/config.bfd binutils-2.32/bfd/config.bfd +--- binutils-2.32.orig/bfd/config.bfd 2019-01-19 17:01:32.000000000 +0100 ++++ binutils-2.32/bfd/config.bfd 2019-10-08 18:05:48.695171206 +0200 +@@ -787,7 +787,7 @@ + ;; + + lm32-*-*linux*) +- targ_defvec=lm32_elf32_fdpic_vec ++ targ_defvec=lm32_elf32_vec + targ_selvecs=lm32_elf32_vec + ;; + +diff -Nur binutils-2.32.orig/ld/configure.tgt binutils-2.32/ld/configure.tgt +--- binutils-2.32.orig/ld/configure.tgt 2019-01-19 17:01:33.000000000 +0100 ++++ binutils-2.32/ld/configure.tgt 2019-10-08 18:04:50.170788572 +0200 +@@ -388,7 +388,8 @@ + ;; + iq2000-*-elf) targ_emul=elf32iq2000 ; targ_extra_emuls="elf32iq10" + ;; +-lm32-*-*linux*) targ_emul=elf32lm32fd ;; ++lm32-*-*linux*) targ_emul=elf32lm32 ++ ;; + lm32-*-*) targ_emul=elf32lm32 ; targ_extra_emuls="elf32lm32fd" + ;; + m32c-*-elf | m32c-*-rtems*) diff --git a/toolchain/elf2flt/Makefile.inc b/toolchain/elf2flt/Makefile.inc index ca12e5ff7..30a3cebfe 100644 --- a/toolchain/elf2flt/Makefile.inc +++ b/toolchain/elf2flt/Makefile.inc @@ -12,9 +12,3 @@ PKG_GIT:= branch PKG_RELEASE:= 1 PKG_SITES:= git://git.osdn.net/gitroot/uclinux-h8/elf2flt.git endif -ifeq ($(ADK_TARGET_ARCH_LM32),y) -PKG_VERSION:= 3051fec89bbd30de6f952dc3100712feff3ca076 -PKG_GIT:= hash -PKG_RELEASE:= 1 -PKG_SITES:= https://github.com/m-labs/elf2flt-lm32.git -endif diff --git a/toolchain/elf2flt/patches/6d80ab6c93409e796f85da404bde84b841231531/0001-lm32.patch b/toolchain/elf2flt/patches/6d80ab6c93409e796f85da404bde84b841231531/0001-lm32.patch deleted file mode 100644 index 44757171b..000000000 --- a/toolchain/elf2flt/patches/6d80ab6c93409e796f85da404bde84b841231531/0001-lm32.patch +++ /dev/null @@ -1,159 +0,0 @@ -diff -Nur elf2flt-6d80ab6c93409e796f85da404bde84b841231531.orig/elf2flt.c elf2flt-6d80ab6c93409e796f85da404bde84b841231531/elf2flt.c ---- elf2flt-6d80ab6c93409e796f85da404bde84b841231531.orig/elf2flt.c 2017-09-27 06:06:04.000000000 +0200 -+++ elf2flt-6d80ab6c93409e796f85da404bde84b841231531/elf2flt.c 2017-09-27 06:07:51.032597579 +0200 -@@ -61,6 +61,8 @@ - #include - #elif defined(TARGET_h8300) - #include -+#elif defined(TARGET_lm32) -+#include - #elif defined(TARGET_m68k) - #include - #elif defined(TARGET_microblaze) -@@ -120,6 +122,11 @@ - #define ARCH "nios" - #elif defined(TARGET_nios2) - #define ARCH "nios2" -+#elif defined(TARGET_lm32) -+#define ARCH "lm32" -+#define FLAT_LM32_RELOC_TYPE_32_BIT 0 -+#define FLAT_LM32_RELOC_TYPE_HI16_BIT 1 -+#define FLAT_LM32_RELOC_TYPE_LO16_BIT 2 - #elif defined(TARGET_xtensa) - #define ARCH "xtensa" - #else -@@ -357,7 +364,7 @@ - int bad_relocs = 0; - asymbol **symb; - long nsymb; --#ifdef TARGET_bfin -+#if defined (TARGET_bfin) || defined (TARGET_lm32) - unsigned long persistent_data = 0; - #endif - -@@ -682,6 +689,36 @@ - break; - default: - goto bad_resolved_reloc; -+#elif defined(TARGET_lm32) -+ case R_LM32_HI16: -+ case R_LM32_LO16: -+ if (q->howto->type == R_LM32_HI16) { -+ pflags = FLAT_LM32_RELOC_TYPE_HI16_BIT << 29; -+ } else { -+ pflags = FLAT_LM32_RELOC_TYPE_LO16_BIT << 29; -+ } -+ -+ relocation_needed = 1; -+ -+ /* remember the upper 16 bits */ -+ if ((0xffff0000 & sym_addr) != persistent_data) { -+ flat_relocs = (uint32_t *) -+ (realloc (flat_relocs, (flat_reloc_count + 1) * sizeof (uint32_t))); -+ if (verbose) -+ printf ("New persistent data for %08lx\n", sym_addr); -+ persistent_data = 0xffff0000 & sym_addr; -+ flat_relocs[flat_reloc_count++] = (sym_addr >> 16) | (3 << 29); -+ } -+ break; -+ case R_LM32_32: -+ pflags = FLAT_LM32_RELOC_TYPE_32_BIT << 29; -+ relocation_needed = 1; -+ break; -+ case R_LM32_CALL: -+ relocation_needed = 0; -+ break; -+ default: -+ goto bad_resolved_reloc; - #elif defined(TARGET_m68k) - case R_68K_32: - goto good_32bit_resolved_reloc; -@@ -1459,6 +1496,63 @@ - #undef _30BITS_RELOC - #undef _28BITS_RELOC - #endif -+#ifdef TARGET_lm32 -+ case R_LM32_32: -+ { -+ pflags = FLAT_LM32_RELOC_TYPE_32_BIT << 29; -+ sym_vma = bfd_section_vma(abs_bfd, sym_section); -+ sym_addr += sym_vma + q->addend; -+ relocation_needed = 1; -+ break; -+ } -+ case R_LM32_CALL: -+ { -+ sym_vma = 0; -+ sym_addr += sym_vma + q->addend; -+ sym_addr -= q->address; -+ sym_addr = (int32_t)sym_addr >> q->howto->rightshift; -+ -+ if ((int32_t)sym_addr < -0x8000000 || (int32_t)sym_addr > 0x7ffffff) { -+ printf("ERROR: Relocation overflow for R_LM32_CALL relocation against %s\n", sym_name); -+ bad_relocs++; -+ continue; -+ } -+ -+ r_mem[0] |= (sym_addr >> 24) & 0x03; -+ r_mem[1] = (sym_addr >> 16) & 0xff; -+ r_mem[2] = (sym_addr >> 8) & 0xff; -+ r_mem[3] = sym_addr & 0xff; -+ break; -+ } -+ case R_LM32_HI16: -+ case R_LM32_LO16: -+ { -+ if (q->howto->type == R_LM32_HI16) { -+ pflags = FLAT_LM32_RELOC_TYPE_HI16_BIT << 29; -+ } else { -+ pflags = FLAT_LM32_RELOC_TYPE_LO16_BIT << 29; -+ } -+ -+ sym_vma = bfd_section_vma(abs_bfd, sym_section); -+ sym_addr += sym_vma + q->addend; -+ -+ relocation_needed = 1; -+ -+ /* remember the upper 16 bits */ -+ if ((0xffff0000 & sym_addr) != persistent_data) { -+ flat_relocs = (uint32_t *) -+ (realloc (flat_relocs, (flat_reloc_count + 1) * sizeof (uint32_t))); -+ if (verbose) -+ printf ("New persistent data for %08lx\n", sym_addr); -+ persistent_data = 0xffff0000 & sym_addr; -+ flat_relocs[flat_reloc_count++] = (sym_addr >> 16) | (3 << 29); -+ } -+ -+ r_mem[2] = (sym_addr >> 8) & 0xff; -+ r_mem[3] = sym_addr & 0xff; -+ break; -+ } -+#endif /* TARGET_lm32 */ - default: - /* missing support for other types of relocs */ - printf("ERROR: bad reloc type %d\n", (*p)->howto->type); -@@ -1596,6 +1690,13 @@ - break; - #endif - -+#ifdef TARGET_lm32 -+ case R_LM32_HI16: -+ case R_LM32_LO16: -+ case R_LM32_CALL: -+ /* entry has already been written */ -+ break; -+#endif - default: - /* The alignment of the build host - might be stricter than that of the -diff -Nur elf2flt-6d80ab6c93409e796f85da404bde84b841231531.orig/elf2flt.ld.in elf2flt-6d80ab6c93409e796f85da404bde84b841231531/elf2flt.ld.in ---- elf2flt-6d80ab6c93409e796f85da404bde84b841231531.orig/elf2flt.ld.in 2017-09-27 06:06:04.000000000 +0200 -+++ elf2flt-6d80ab6c93409e796f85da404bde84b841231531/elf2flt.ld.in 2017-09-29 18:11:30.999698955 +0200 -@@ -34,6 +34,7 @@ - W_RODAT *(.rodata1) - W_RODAT *(.rodata.*) - W_RODAT *(.gnu.linkonce.r*) -+W_RODAT *(.rofixup) - - /* .ARM.extab name sections containing exception unwinding information */ - *(.ARM.extab* .gnu.linkonce.armextab.*) diff --git a/toolchain/elf2flt/patches/6d80ab6c93409e796f85da404bde84b841231531/0002-sh2.patch b/toolchain/elf2flt/patches/6d80ab6c93409e796f85da404bde84b841231531/0002-sh2.patch deleted file mode 100644 index 59e263bc0..000000000 --- a/toolchain/elf2flt/patches/6d80ab6c93409e796f85da404bde84b841231531/0002-sh2.patch +++ /dev/null @@ -1,43 +0,0 @@ -diff -Nur elf2flt-6d80ab6c93409e796f85da404bde84b841231531.orig/elf2flt.c elf2flt-6d80ab6c93409e796f85da404bde84b841231531/elf2flt.c ---- elf2flt-6d80ab6c93409e796f85da404bde84b841231531.orig/elf2flt.c 2017-10-03 10:36:02.718919968 +0200 -+++ elf2flt-6d80ab6c93409e796f85da404bde84b841231531/elf2flt.c 2017-10-03 10:37:42.402568044 +0200 -@@ -74,7 +74,7 @@ - #define FLAT_NIOS2_R_HIADJ_LO 2 - #define FLAT_NIOS2_R_CALL26 4 - #include --#elif defined(TARGET_sh) -+#elif defined(TARGET_sh2) || defined(TARGET_sh2eb) - #include - #elif defined(TARGET_sparc) - #include -@@ -108,8 +108,10 @@ - #define ARCH "sparc" - #elif defined(TARGET_v850) - #define ARCH "v850" --#elif defined(TARGET_sh) --#define ARCH "sh" -+#elif defined(TARGET_sh2) -+#define ARCH "sh2" -+#elif defined(TARGET_sh2eb) -+#define ARCH "sh2" - #elif defined(TARGET_h8300) - #define ARCH "h8300" - #elif defined(TARGET_microblaze) -@@ -1309,7 +1311,7 @@ - #endif /* TARGET_sparc */ - - --#ifdef TARGET_sh -+#if defined(TARGET_sh2) || defined(TARGET_sh2eb) - case R_SH_DIR32: - relocation_needed = 1; - sym_vma = bfd_section_vma(abs_bfd, sym_section); -@@ -1320,7 +1322,7 @@ - sym_addr += sym_vma + q->addend; - sym_addr -= q->address; - break; --#endif /* TARGET_sh */ -+#endif /* TARGET_sh2 / TARGET_sh2eb */ - - #ifdef TARGET_e1 - #define htoe1l(x) htonl(x) diff --git a/toolchain/elf2flt/patches/6d80ab6c93409e796f85da404bde84b841231531/0003-Makefile-fix-build-with-Binutils-2.31.patch b/toolchain/elf2flt/patches/6d80ab6c93409e796f85da404bde84b841231531/0003-Makefile-fix-build-with-Binutils-2.31.patch deleted file mode 100644 index 825582550..000000000 --- a/toolchain/elf2flt/patches/6d80ab6c93409e796f85da404bde84b841231531/0003-Makefile-fix-build-with-Binutils-2.31.patch +++ /dev/null @@ -1,34 +0,0 @@ -From faf1a1646093fbc5ed279bae1c7250c7dfea56f8 Mon Sep 17 00:00:00 2001 -From: Romain Naour -Date: Tue, 17 Jul 2018 16:36:16 +0200 -Subject: [PATCH] Makefile: fix build with Binutils 2.31 - -Binutils added diagnostics.h to bfd.h [1], so elf2flt must create a symlink -for this header. - -Fixes: -https://gitlab.com/free-electrons/toolchains-builder/-/jobs/82284139 - -[1] https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=commitdiff;h=95da9854466ada2572b42f5528711a06a2d42db1 - -Signed-off-by: Romain Naour ---- - Makefile.in | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/Makefile.in b/Makefile.in -index cfad06c..164e306 100644 ---- a/Makefile.in -+++ b/Makefile.in -@@ -127,7 +127,7 @@ bfd-headers/.stamp: - rm -rf bfd-headers - mkdir bfd-headers - ln -sf $(BFD_INCLUDE_DIR)/bfd.h bfd-headers/bfd.h -- for f in ansidecl filenames hashtab libiberty symcat; do \ -+ for f in ansidecl diagnostics filenames hashtab libiberty symcat; do \ - ln -sf $(BINUTILS_INCLUDE_DIR)/$$f.h bfd-headers/$$f.h || exit 1; \ - done - ln -sf $(BINUTILS_INCLUDE_DIR)/elf bfd-headers/elf --- -2.7.4 - diff --git a/toolchain/elf2flt/patches/7e33f28df198c46764021ed14408bd262751e148/0001-lm32.patch b/toolchain/elf2flt/patches/7e33f28df198c46764021ed14408bd262751e148/0001-lm32.patch new file mode 100644 index 000000000..44757171b --- /dev/null +++ b/toolchain/elf2flt/patches/7e33f28df198c46764021ed14408bd262751e148/0001-lm32.patch @@ -0,0 +1,159 @@ +diff -Nur elf2flt-6d80ab6c93409e796f85da404bde84b841231531.orig/elf2flt.c elf2flt-6d80ab6c93409e796f85da404bde84b841231531/elf2flt.c +--- elf2flt-6d80ab6c93409e796f85da404bde84b841231531.orig/elf2flt.c 2017-09-27 06:06:04.000000000 +0200 ++++ elf2flt-6d80ab6c93409e796f85da404bde84b841231531/elf2flt.c 2017-09-27 06:07:51.032597579 +0200 +@@ -61,6 +61,8 @@ + #include + #elif defined(TARGET_h8300) + #include ++#elif defined(TARGET_lm32) ++#include + #elif defined(TARGET_m68k) + #include + #elif defined(TARGET_microblaze) +@@ -120,6 +122,11 @@ + #define ARCH "nios" + #elif defined(TARGET_nios2) + #define ARCH "nios2" ++#elif defined(TARGET_lm32) ++#define ARCH "lm32" ++#define FLAT_LM32_RELOC_TYPE_32_BIT 0 ++#define FLAT_LM32_RELOC_TYPE_HI16_BIT 1 ++#define FLAT_LM32_RELOC_TYPE_LO16_BIT 2 + #elif defined(TARGET_xtensa) + #define ARCH "xtensa" + #else +@@ -357,7 +364,7 @@ + int bad_relocs = 0; + asymbol **symb; + long nsymb; +-#ifdef TARGET_bfin ++#if defined (TARGET_bfin) || defined (TARGET_lm32) + unsigned long persistent_data = 0; + #endif + +@@ -682,6 +689,36 @@ + break; + default: + goto bad_resolved_reloc; ++#elif defined(TARGET_lm32) ++ case R_LM32_HI16: ++ case R_LM32_LO16: ++ if (q->howto->type == R_LM32_HI16) { ++ pflags = FLAT_LM32_RELOC_TYPE_HI16_BIT << 29; ++ } else { ++ pflags = FLAT_LM32_RELOC_TYPE_LO16_BIT << 29; ++ } ++ ++ relocation_needed = 1; ++ ++ /* remember the upper 16 bits */ ++ if ((0xffff0000 & sym_addr) != persistent_data) { ++ flat_relocs = (uint32_t *) ++ (realloc (flat_relocs, (flat_reloc_count + 1) * sizeof (uint32_t))); ++ if (verbose) ++ printf ("New persistent data for %08lx\n", sym_addr); ++ persistent_data = 0xffff0000 & sym_addr; ++ flat_relocs[flat_reloc_count++] = (sym_addr >> 16) | (3 << 29); ++ } ++ break; ++ case R_LM32_32: ++ pflags = FLAT_LM32_RELOC_TYPE_32_BIT << 29; ++ relocation_needed = 1; ++ break; ++ case R_LM32_CALL: ++ relocation_needed = 0; ++ break; ++ default: ++ goto bad_resolved_reloc; + #elif defined(TARGET_m68k) + case R_68K_32: + goto good_32bit_resolved_reloc; +@@ -1459,6 +1496,63 @@ + #undef _30BITS_RELOC + #undef _28BITS_RELOC + #endif ++#ifdef TARGET_lm32 ++ case R_LM32_32: ++ { ++ pflags = FLAT_LM32_RELOC_TYPE_32_BIT << 29; ++ sym_vma = bfd_section_vma(abs_bfd, sym_section); ++ sym_addr += sym_vma + q->addend; ++ relocation_needed = 1; ++ break; ++ } ++ case R_LM32_CALL: ++ { ++ sym_vma = 0; ++ sym_addr += sym_vma + q->addend; ++ sym_addr -= q->address; ++ sym_addr = (int32_t)sym_addr >> q->howto->rightshift; ++ ++ if ((int32_t)sym_addr < -0x8000000 || (int32_t)sym_addr > 0x7ffffff) { ++ printf("ERROR: Relocation overflow for R_LM32_CALL relocation against %s\n", sym_name); ++ bad_relocs++; ++ continue; ++ } ++ ++ r_mem[0] |= (sym_addr >> 24) & 0x03; ++ r_mem[1] = (sym_addr >> 16) & 0xff; ++ r_mem[2] = (sym_addr >> 8) & 0xff; ++ r_mem[3] = sym_addr & 0xff; ++ break; ++ } ++ case R_LM32_HI16: ++ case R_LM32_LO16: ++ { ++ if (q->howto->type == R_LM32_HI16) { ++ pflags = FLAT_LM32_RELOC_TYPE_HI16_BIT << 29; ++ } else { ++ pflags = FLAT_LM32_RELOC_TYPE_LO16_BIT << 29; ++ } ++ ++ sym_vma = bfd_section_vma(abs_bfd, sym_section); ++ sym_addr += sym_vma + q->addend; ++ ++ relocation_needed = 1; ++ ++ /* remember the upper 16 bits */ ++ if ((0xffff0000 & sym_addr) != persistent_data) { ++ flat_relocs = (uint32_t *) ++ (realloc (flat_relocs, (flat_reloc_count + 1) * sizeof (uint32_t))); ++ if (verbose) ++ printf ("New persistent data for %08lx\n", sym_addr); ++ persistent_data = 0xffff0000 & sym_addr; ++ flat_relocs[flat_reloc_count++] = (sym_addr >> 16) | (3 << 29); ++ } ++ ++ r_mem[2] = (sym_addr >> 8) & 0xff; ++ r_mem[3] = sym_addr & 0xff; ++ break; ++ } ++#endif /* TARGET_lm32 */ + default: + /* missing support for other types of relocs */ + printf("ERROR: bad reloc type %d\n", (*p)->howto->type); +@@ -1596,6 +1690,13 @@ + break; + #endif + ++#ifdef TARGET_lm32 ++ case R_LM32_HI16: ++ case R_LM32_LO16: ++ case R_LM32_CALL: ++ /* entry has already been written */ ++ break; ++#endif + default: + /* The alignment of the build host + might be stricter than that of the +diff -Nur elf2flt-6d80ab6c93409e796f85da404bde84b841231531.orig/elf2flt.ld.in elf2flt-6d80ab6c93409e796f85da404bde84b841231531/elf2flt.ld.in +--- elf2flt-6d80ab6c93409e796f85da404bde84b841231531.orig/elf2flt.ld.in 2017-09-27 06:06:04.000000000 +0200 ++++ elf2flt-6d80ab6c93409e796f85da404bde84b841231531/elf2flt.ld.in 2017-09-29 18:11:30.999698955 +0200 +@@ -34,6 +34,7 @@ + W_RODAT *(.rodata1) + W_RODAT *(.rodata.*) + W_RODAT *(.gnu.linkonce.r*) ++W_RODAT *(.rofixup) + + /* .ARM.extab name sections containing exception unwinding information */ + *(.ARM.extab* .gnu.linkonce.armextab.*) diff --git a/toolchain/elf2flt/patches/7e33f28df198c46764021ed14408bd262751e148/0002-sh2.patch b/toolchain/elf2flt/patches/7e33f28df198c46764021ed14408bd262751e148/0002-sh2.patch new file mode 100644 index 000000000..59e263bc0 --- /dev/null +++ b/toolchain/elf2flt/patches/7e33f28df198c46764021ed14408bd262751e148/0002-sh2.patch @@ -0,0 +1,43 @@ +diff -Nur elf2flt-6d80ab6c93409e796f85da404bde84b841231531.orig/elf2flt.c elf2flt-6d80ab6c93409e796f85da404bde84b841231531/elf2flt.c +--- elf2flt-6d80ab6c93409e796f85da404bde84b841231531.orig/elf2flt.c 2017-10-03 10:36:02.718919968 +0200 ++++ elf2flt-6d80ab6c93409e796f85da404bde84b841231531/elf2flt.c 2017-10-03 10:37:42.402568044 +0200 +@@ -74,7 +74,7 @@ + #define FLAT_NIOS2_R_HIADJ_LO 2 + #define FLAT_NIOS2_R_CALL26 4 + #include +-#elif defined(TARGET_sh) ++#elif defined(TARGET_sh2) || defined(TARGET_sh2eb) + #include + #elif defined(TARGET_sparc) + #include +@@ -108,8 +108,10 @@ + #define ARCH "sparc" + #elif defined(TARGET_v850) + #define ARCH "v850" +-#elif defined(TARGET_sh) +-#define ARCH "sh" ++#elif defined(TARGET_sh2) ++#define ARCH "sh2" ++#elif defined(TARGET_sh2eb) ++#define ARCH "sh2" + #elif defined(TARGET_h8300) + #define ARCH "h8300" + #elif defined(TARGET_microblaze) +@@ -1309,7 +1311,7 @@ + #endif /* TARGET_sparc */ + + +-#ifdef TARGET_sh ++#if defined(TARGET_sh2) || defined(TARGET_sh2eb) + case R_SH_DIR32: + relocation_needed = 1; + sym_vma = bfd_section_vma(abs_bfd, sym_section); +@@ -1320,7 +1322,7 @@ + sym_addr += sym_vma + q->addend; + sym_addr -= q->address; + break; +-#endif /* TARGET_sh */ ++#endif /* TARGET_sh2 / TARGET_sh2eb */ + + #ifdef TARGET_e1 + #define htoe1l(x) htonl(x) diff --git a/toolchain/gcc/Makefile.inc b/toolchain/gcc/Makefile.inc index 409fd2daa..6b626715f 100644 --- a/toolchain/gcc/Makefile.inc +++ b/toolchain/gcc/Makefile.inc @@ -49,6 +49,14 @@ PKG_RELEASE:= 1 DISTFILES:= ${PKG_NAME}-${PKG_VERSION}.tar.gz LIBSTDCXXVER:= 19 endif +ifeq ($(ADK_TOOLCHAIN_GCC_LM32),y) +PKG_VERSION:= 4.5.2 +PKG_HASH:= 07b880faf29f3f9d9c0953717002ac29f5d061427797d2487a7c9c169e6395b3 +PKG_SITES:= https://ftp.gnu.org/gnu/gcc/gcc-$(PKG_VERSION)/ +PKG_RELEASE:= 1 +DISTFILES:= ${PKG_NAME}-${PKG_VERSION}.tar.gz +LIBSTDCXXVER:= 19 +endif ifeq ($(ADK_TOOLCHAIN_GCC_NDS32),y) PKG_VERSION:= nds32-6.3.0-open PKG_HASH:= b23ce96df25dfdd5526496a3c2cd7ee1da4ed4094971a2e0c47c73ad7e1ad30a -- cgit v1.2.3