From 8748364b7e6976cf8fc2671e488182f678d93797 Mon Sep 17 00:00:00 2001 From: apio Date: Tue, 8 Aug 2023 16:00:31 +0200 Subject: [PATCH] ports: Add a binutils port =D I can't believe the fact that there is a working gas and ld on Luna. At least, for a hello world program anyway :) objdump seems to have some problems with stack size in some cases, but apart from that, no crashes. And that can easily be solved with either more stack preallocation or stack resizing in the kernel on page faults. --- ports/README.md | 1 + ports/binutils/PACKAGE | 30 +++++++++ ports/binutils/binutils.patch | 117 ++++++++++++++++++++++++++++++++++ 3 files changed, 148 insertions(+) create mode 100644 ports/binutils/PACKAGE create mode 100644 ports/binutils/binutils.patch diff --git a/ports/README.md b/ports/README.md index 9710e12f..33d25a27 100644 --- a/ports/README.md +++ b/ports/README.md @@ -12,6 +12,7 @@ Try to keep this list in alphabetical order. Name | Version | Description | URL ---|---|--- | --- bc | 6.6.0 | An implementation of the POSIX bc calculator | https://github.com/gavinhoward/bc +binutils | 2.39 | The GNU suite of binary utilities | https://www.gnu.org/software/binutils minitar | 1.7.5 | Tiny and easy-to-use C library to read/write tar archives | https://git.cloudapio.eu/apio/minitar nasm | 2.16.01 | An assembler for the x86 CPU architecture | https://nasm.us diff --git a/ports/binutils/PACKAGE b/ports/binutils/PACKAGE new file mode 100644 index 00000000..a84adcd9 --- /dev/null +++ b/ports/binutils/PACKAGE @@ -0,0 +1,30 @@ +# Basic information +name="binutils" +version="2.39" + +# Download options +format="tar" +url="https://ftp.gnu.org/gnu/binutils/binutils-$version.tar.gz" +output="binutils-$version.tar.gz" +sha256sum="d12ea6f239f1ffe3533ea11ad6e224ffcb89eb5d01bbea589e9158780fa11f10" + +# Build instructions +default_build_make=true + +do_patch() +{ + patch -ui $portdir/binutils.patch -p 1 -d $srcdir/.. +} + +do_configure() +{ + $srcdir/configure --host=$LUNA_ARCH-luna --disable-nls --disable-werror --enable-warn-rwx-segments=no --prefix=/usr --enable-gold=no --enable-ld=yes --enable-gprofng=no +} + +do_install() +{ + make install + + cd $installdir/usr/bin + $LUNA_ARCH-luna-strip size objdump ar strings ranlib objcopy addr2line readelf elfedit nm strip c++filt as gprof ld.bfd ld +} diff --git a/ports/binutils/binutils.patch b/ports/binutils/binutils.patch new file mode 100644 index 00000000..d262e7f8 --- /dev/null +++ b/ports/binutils/binutils.patch @@ -0,0 +1,117 @@ +diff --color -rN -u binutils-2.39/bfd/config.bfd build/binutils-2.39/bfd/config.bfd +--- a/binutils-2.39/bfd/config.bfd 2022-01-22 13:14:07.000000000 +0100 ++++ b/binutils-2.39/bfd/config.bfd 2022-10-01 22:12:16.914033792 +0200 +@@ -651,6 +651,11 @@ + targ_selvecs="iamcu_elf32_vec i386_pei_vec" + targ64_selvecs="x86_64_elf64_vec x86_64_elf32_vec x86_64_pe_vec x86_64_pei_vec l1om_elf64_vec k1om_elf64_vec" + ;; ++ i[3-7]86-*-luna*) ++ targ_defvec=i386_elf32_vec ++ targ_selvecs= ++ targ64_selvecs=x86_64_elf64_vec ++ ;; + i[3-7]86-*-redox*) + targ_defvec=i386_elf32_vec + targ_selvecs= +@@ -706,6 +711,11 @@ + targ_selvecs="i386_elf32_vec iamcu_elf32_vec x86_64_elf32_vec i386_pei_vec x86_64_pe_vec x86_64_pei_vec l1om_elf64_vec k1om_elf64_vec" + want64=true + ;; ++ x86_64-*-luna*) ++ targ_defvec=x86_64_elf64_vec ++ targ_selvecs=i386_elf32_vec ++ want64=true ++ ;; + x86_64-*-mingw* | x86_64-*-pe | x86_64-*-pep | x86_64-*-cygwin) + targ_defvec=x86_64_pe_vec + targ_selvecs="x86_64_pe_vec x86_64_pei_vec x86_64_pe_big_vec x86_64_elf64_vec l1om_elf64_vec k1om_elf64_vec i386_pe_vec i386_pei_vec i386_elf32_vec iamcu_elf32_vec" +diff --color -rN -u binutils-2.39/gas/configure.tgt build/binutils-2.39/gas/configure.tgt +--- a/binutils-2.39/gas/configure.tgt 2022-01-22 13:14:08.000000000 +0100 ++++ b/binutils-2.39/gas/configure.tgt 2022-10-01 22:12.39.115093972 +0200 +@@ -238,6 +238,7 @@ + x86_64*-linux-gnux32) arch=x86_64:32 ;; + esac ;; + i386-*-lynxos*) fmt=elf em=lynx ;; ++ i386-*-luna*) fmt=elf em=gnu ;; + i386-*-redox*) fmt=elf ;; + i386-*-solaris*) fmt=elf em=solaris ;; + i386-*-freebsd* \ +diff --color -rN -u binutils-2.39/ld/configure.tgt build/binutils-2.39/ld/configure.tgt +--- a/binutils-2.39/ld/configure.tgt 2022-01-22 15:19:36.000000000 +0100 ++++ b/binutils-2.39/ld/configure.tgt 2022-10-01 22:15:04.853571062 +0200 +@@ -329,6 +329,11 @@ + targ64_extra_emuls="elf_x86_64 elf32_x86_64 elf_l1om elf_k1om" + targ64_extra_libpath="elf_x86_64 elf32_x86_64" + ;; ++i[3-7]86-*-luna*) ++ targ_emul=elf_i386_luna ++ targ_extra_emuls=elf_i386 ++ targ64_extra_emuls="elf_x86_64_luna elf_x86_64" ++ ;; + i[3-7]86-*-redox*) targ_emul=elf_i386 + targ_extra_emuls=elf_x86_64 + ;; +@@ -967,6 +972,10 @@ + targ_extra_libpath="elf_i386 elf32_x86_64 elf_l1om elf_k1om" + tdir_elf_i386=`echo ${targ_alias} | sed -e 's/x86_64/i386/'` + ;; ++x86_64-*-luna*) ++ targ_emul=elf_x86_64_luna ++ targ_extra_emuls="elf_i386_luna elf_x86_64 elf_i386" ++ ;; + x86_64-*-redox*) targ_emul=elf_x86_64 + targ_extra_emuls=elf_i386 + ;; +diff --color -rN -u binutils-2.39/ld/emulparams/elf_i386_luna.sh build/binutils-2.39/ld/emulparams/elf_i386_luna.sh +--- a/dev/null 1970-01-01 01:00:00.000000000 +0100 ++++ b/binutils-2.39/ld/emulparams/elf_i386_luna.sh 2022-10-01 21:52:12.394068335 +0200 +@@ -0,0 +1,3 @@ ++source_sh ${srcdir}/emulparams/elf_i386.sh ++TEXT_START_ADDR=0x08000000 ++MAXPAGESIZE=0x1000 +\ No newline at end of file +diff --color -rN -u binutils-2.39/ld/emulparams/elf_x86_64_luna.sh build/binutils-2.39/ld/emulparams/elf_x86_64_luna.sh +--- a/dev/null 1970-01-01 01:00:00.000000000 +0100 ++++ b/binutils-2.39/ld/emulparams/elf_x86_64_luna.sh 2022-10-01 21:53:00.411200592 +0200 +@@ -0,0 +1,2 @@ ++source_sh ${srcdir}/emulparams/elf_x86_64.sh ++MAXPAGESIZE=0x1000 +\ No newline at end of file +diff --color -rN -u binutils-2.39/ld/Makefile.am build/binutils-2.39/ld/Makefile.am +--- a/binutils-2.39/ld/Makefile.am 2022-01-22 13:14:09.000000000 +0100 ++++ b/binutils-2.39/ld/Makefile.am 2022-10-01 22:18:02.660263017 +0200 +@@ -278,6 +278,7 @@ + eelf32xtensa.c \ + eelf32z80.c \ + eelf_i386.c \ ++ eelf_i386_luna.c \ + eelf_i386_be.c \ + eelf_i386_fbsd.c \ + eelf_i386_haiku.c \ +@@ -464,6 +465,7 @@ + eelf_x86_64_fbsd.c \ + eelf_x86_64_haiku.c \ + eelf_x86_64_sol2.c \ ++ eelf_x86_64_luna.c \ + ehppa64linux.c \ + ei386pep.c \ + emmo.c +diff --color -rN -u binutils-2.39/ld/Makefile.in build/binutils-2.39/ld/Makefile.in +--- a/binutils-2.39/ld/Makefile.in 2022-02-09 12:49:03.000000000 +0100 ++++ b/binutils-2.39/ld/Makefile.in 2022-10-01 22:17:46.740196925 +0200 +@@ -769,6 +769,7 @@ + eelf32xtensa.c \ + eelf32z80.c \ + eelf_i386.c \ ++ eelf_i386_luna.c \ + eelf_i386_be.c \ + eelf_i386_fbsd.c \ + eelf_i386_haiku.c \ +@@ -954,6 +955,7 @@ + eelf_x86_64_fbsd.c \ + eelf_x86_64_haiku.c \ + eelf_x86_64_sol2.c \ ++ eelf_x86_64_luna.c \ + ehppa64linux.c \ + ei386pep.c \ + emmo.c