Index | Thread | Search

From:
Jeremie Courreges-Anglas <jca@wxcvbn.org>
Subject:
Re: binutils: enable ld.bfd ?
To:
Klemens Nanni <kn@openbsd.org>
Cc:
Frederic Cambus <fred@statdns.com>, ports <ports@openbsd.org>
Date:
Sat, 13 Dec 2025 18:06:00 +0100

Download raw body.

Thread
  • Jeremie Courreges-Anglas:

    binutils: enable ld.bfd ?

  • On Sat, Dec 13, 2025 at 03:54:19PM +0000, Klemens Nanni wrote:
    > 04.12.2025 22:11, Klemens Nanni пишет:
    > > 03.12.2025 23:20, Jeremie Courreges-Anglas пишет:
    > >> On Mon, Dec 01, 2025 at 10:12:36PM +0000, Klemens Nanni wrote:
    > >>> 30.11.2025 19:17, Klemens Nanni пишет:
    > >>>> 30.11.2025 18:58, Jeremie Courreges-Anglas пишет:
    > >>>>> Nothing depends on binutils at the moment.  Indeed this port will need
    > >>>>> some tweaks on some architectures (backports from base probably).
    > >>>>> Sigh.  Maybe restricting this to amd64 and arm64 is more reasonable
    > >>>>> indeed...
    > >>>>
    > >>>> Yes, hence my uncertainty as to what's the best approach here.
    > >>>
    > >>> I'm starting to prefer a small subset of archs;  the Makefile bits are
    > >>> not much and so far only two would use ld.bfd, so looking into build
    > >>> failures on archs like arm is eating time that I'd like to spend on
    > >>> productive stuff instead.
    > >>
    > >> ack, but...
    > >>
    > >>>>
    > >>>>> I wonder if it would be less effort to provide a stripped down
    > >>>>> binutils port for bare x86_64, like arm-none-eabi/binutils.  Care to
    > >>>>> show your ipxe port and how it is currently using gld from binutils?
    > >>>>
    > >>>> - "new net/ipxe" https://marc.info/?l=openbsd-ports&m=176381141712670&w=2
    > >>>> - https://github.com/jasperla/openbsd-wip/tree/master/net/ipxe
    > >>>>   (since got updated and gained .iso images, rest is the same)
    > >>>>
    > >>>> tl;dr:  Usual COMPILER* for gcc15 and AS=gas, etc. via MAKE_FLAGS.
    > >>>>
    > >>>>>> Could someone please give this a try on anything other than:
    > >>>>>> arm64 amd64 i386 octeon?
    > >>>>>
    > >>>>> Builds and packages on sparc64
    > >>>>
    > >>>> Thanks!
    > >>>>
    > >>>>> The list of "safe" architectures where we could enable gld without
    > >>>>> patches can probably be determined, but gotta head out now.
    > >>>>
    > >>>> I'll try to cover more architectures.
    > >>>
    > >>> riscv64 builds fine as-is, arm needs the equivalent to arm64's configure.tgt
    > >>> patch, but then further fails with
    > >>>
    > >>> earmelf_obsd.c:56:5: error: non-void function 'gldarmelf_obsd_get_script' should return a value [-Wreturn-mismatch]
    > >>>    56 |     return
    > >>>       |     ^
    > >>>
    > >>> Oddly enough, that file does not exist under WRKDIR.
    > >>
    > >> That error I can reproduce on arm64, using your diff from
    > >> https://marc.info/?l=openbsd-ports&m=176451477006648&w=2
    > >>
    > >> The build process isn't very helpful since it actively deletes the
    > >> source file.  It seems retrying with a random number of make jobs
    > >> makes it build, but I wouldn't vouch for the quality of the end
    > >> result...
    > > 
    > > I see it now as well... it doesn't always fail for me, guess I got (un)lucky.
    > > 
    > > Thanks for testing!
    > > 
    > >>
    > >> Do you have a diff that works on amd64 and arm64?
    > > 
    > > Not yet, I'll try to find the culprit on arm64 and come back this weekend.
    > Well... haven't found a solution (yet), so my proposal is to build ld.bfd
    > only on amd64 until the arm64/gmake/whatever bug is fixed.
    > 
    > Diff is the same and includes the patch needed for arm64, I merely omitted
    > it from LD_ARCHS and added a comment.
    > 
    > OK?
    
    Diff isn't the same as it introduces SEPARATE_BUILD and lacks
    PFRAG.ld.  Updated diff below follows make plist.  ok jca@ for that
    version.
    
    
    Index: Makefile
    ===================================================================
    RCS file: /cvs/ports/devel/binutils/Makefile,v
    diff -u -p -r1.23 Makefile
    --- Makefile	29 Nov 2025 18:11:04 -0000	1.23
    +++ Makefile	13 Dec 2025 16:41:58 -0000
    @@ -3,7 +3,7 @@ COMMENT =	GNU binary utilities
     # keep version synchronized with devel/gas
     V =		2.45.1
     DISTNAME =	binutils-${V}
    -REVISION =	0
    +REVISION =	1
     
     CATEGORIES =	devel
     
    @@ -28,13 +28,23 @@ CONFIGURE_STYLE =	gnu
     
     CONFIGURE_ARGS +=	--disable-gas \
     			--disable-gprof \
    -			--disable-ld \
     			--disable-libctf \
     			--disable-nls \
     			--disable-install-libbfd \
     			--program-prefix=g \
     			--without-msgpack \
     			--with-system-zlib
    +
    +SEPARATE_BUILD =	Yes
    +
    +# XXX arm64 sporadically fails, rerunning make eventually builds
    +LD_ARCHS =		amd64
    +SUBST_VARS =		LD_ARCHS
    +.if ${LD_ARCHS:M${MACHINE_ARCH}}
    +PKG_ARGS =		-Dld=1
    +.else
    +CONFIGURE_ARGS +=	--disable-ld
    +.endif
     
     USE_GMAKE =	Yes
     
    Index: patches/patch-ld_configure_tgt
    ===================================================================
    RCS file: patches/patch-ld_configure_tgt
    diff -N patches/patch-ld_configure_tgt
    --- /dev/null	1 Jan 1970 00:00:00 -0000
    +++ patches/patch-ld_configure_tgt	13 Dec 2025 16:41:58 -0000
    @@ -0,0 +1,15 @@
    +recognise arm64
    +
    +Index: ld/configure.tgt
    +--- ld/configure.tgt.orig
    ++++ ld/configure.tgt
    +@@ -98,6 +98,9 @@ aarch64-*-freebsd*)	targ_emul=aarch64fbsd
    + aarch64-*-fuchsia*)	targ_emul=aarch64elf
    + 			targ_extra_emuls="aarch64elfb armelf armelfb"
    + 			;;
    ++aarch64-*-openbsd*)	targ_emul=aarch64obsd
    ++			targ_extra_emuls="aarch64obsdb aarch64elf"
    ++			;;
    + aarch64_be-*-linux-gnu_ilp32)
    + 			targ_emul=aarch64linux32b
    + 			targ_extra_libpath="aarch64linuxb aarch64linux aarch64linux32 armelfb_linux_eabi armelf_linux_eabi"
    Index: pkg/DESCR
    ===================================================================
    RCS file: /cvs/ports/devel/binutils/pkg/DESCR,v
    diff -u -p -r1.1.1.1 DESCR
    --- pkg/DESCR	7 Aug 2022 20:44:09 -0000	1.1.1.1
    +++ pkg/DESCR	13 Dec 2025 16:41:58 -0000
    @@ -4,6 +4,7 @@ This package contains the following GNU 
     - ar - A utility for creating, modifying and extracting from archives.
     - c++filt - Filter to demangle encoded C++ symbols.
     - elfedit - Update ELF header and program property of ELF files.
    +- ld - Links files. (only on ${LD_ARCHS})
     - nm - Lists symbols from object files.
     - objcopy - Copies and translates object files.
     - objdump - Displays information from object files.
    Index: pkg/PFRAG.ld
    ===================================================================
    RCS file: pkg/PFRAG.ld
    diff -N pkg/PFRAG.ld
    --- /dev/null	1 Jan 1970 00:00:00 -0000
    +++ pkg/PFRAG.ld	13 Dec 2025 16:41:58 -0000
    @@ -0,0 +1,7 @@
    +@bin bin/gld
    +@bin bin/gld.bfd
    +@info info/ld.info
    +@info info/ldint.info
    +lib/bfd-plugins/
    +@so lib/bfd-plugins/libdep.so
    +@man man/man1/gld.1
    Index: pkg/PLIST
    ===================================================================
    RCS file: /cvs/ports/devel/binutils/pkg/PLIST,v
    diff -u -p -r1.4 PLIST
    --- pkg/PLIST	24 Sep 2025 17:03:55 -0000	1.4
    +++ pkg/PLIST	13 Dec 2025 16:41:58 -0000
    @@ -26,5 +26,6 @@
     @man man/man1/gsize.1
     @man man/man1/gstrings.1
     @man man/man1/gstrip.1
    +%%ld%%
     @comment @man man/man1/gwindmc.1
     @comment @man man/man1/gwindres.1
    
    
    -- 
    jca
    
    
  • Jeremie Courreges-Anglas:

    binutils: enable ld.bfd ?