Re: 5e4854cbf8d8 - main - rescue: Link libzutil after libzfs.

From: John Baldwin <jhb_at_FreeBSD.org>
Date: Tue, 04 Oct 2022 16:33:11 UTC
On 10/3/22 8:03 PM, Ravi Pokala wrote:
> -----Original Message-----
> From: <owner-src-committers@freebsd.org> on behalf of John Baldwin <jhb@FreeBSD.org>
> Date: 2022-10-03, Monday at 16:11
> To: <src-committers@FreeBSD.org>, <dev-commits-src-all@FreeBSD.org>, <dev-commits-src-main@FreeBSD.org>
> Subject: git: 5e4854cbf8d8 - main - rescue: Link libzutil after libzfs.
> 
>      The branch main has been updated by jhb:
> 
>      URL: https://cgit.FreeBSD.org/src/commit/?id=5e4854cbf8d8a9b056472967d15e1021d36fcae1
> 
>      commit 5e4854cbf8d8a9b056472967d15e1021d36fcae1
>      Author:     John Baldwin <jhb@FreeBSD.org>
>      AuthorDate: 2022-10-03 23:10:42 +0000
>      Commit:     John Baldwin <jhb@FreeBSD.org>
>      CommitDate: 2022-10-03 23:10:42 +0000
> 
>          rescue: Link libzutil after libzfs.
> 
>          libzfs depends on symbols defined in libzutil.  For static linking
>          ld.bfd is less forgiving than lld, so rescue was failing to link when
>          using ld.bfd due to unresolved symbols from libzutil used by libzfs.
> 
> You're solving an issue of unresolved symbols by putting the library where they're defined *after* the library where they're used?
> 
> -Ravi (rpokala@)

Yes, that's normally how that works (you link libc last, not first).  lld is just
a bit different as it will look in earlier libraries to resolve symbols (backwards
references) not just forward references.  ld.bfd only does forward references by
default.

-- 
John Baldwin