Re: git: 0d4f7723bc43 - main - libc: link libsys as a auxiliary filter library

From: Konstantin Belousov <kostikbel_at_gmail.com>
Date: Tue, 06 Feb 2024 17:24:35 UTC
On Mon, Feb 05, 2024 at 08:52:36PM +0000, Jessica Clarke wrote:
> On 5 Feb 2024, at 20:38, Brooks Davis <brooks@FreeBSD.org> wrote:
> > 
> > The branch main has been updated by brooks:
> > 
> > URL: https://cgit.FreeBSD.org/src/commit/?id=0d4f7723bc43e06ca22025740cb826a7f282ea11
> > 
> > commit 0d4f7723bc43e06ca22025740cb826a7f282ea11
> > Author:     Brooks Davis <brooks@FreeBSD.org>
> > AuthorDate: 2023-11-15 23:35:16 +0000
> > Commit:     Brooks Davis <brooks@FreeBSD.org>
> > CommitDate: 2024-02-05 20:34:56 +0000
> > 
> >    libc: link libsys as a auxiliary filter library
> > 
> >    At runtime, when rtld loads libc it will also load libsys.  For each
> >    symbol that is present in both, the libsys one will override the libc
> >    one.  It continues to be the case that program need only link against
> >    libc (usually implicitly).  The linkage to libsys is automatic.
> > 
> >    Reviewed by:    kib, emaste, imp
> >    Pull Request:   https://github.com/freebsd/freebsd-src/pull/908
> > ---
> > Makefile.inc1            | 2 ++
> > UPDATING                 | 6 ++++++
> > lib/Makefile             | 2 +-
> > lib/libc/Makefile        | 3 +++
> > share/mk/src.libnames.mk | 2 +-
> > 5 files changed, 13 insertions(+), 2 deletions(-)
> > 
> > diff --git a/Makefile.inc1 b/Makefile.inc1
> > index 7a9917fd8a74..f97e53cc7f9a 100644
> > --- a/Makefile.inc1
> > +++ b/Makefile.inc1
> > @@ -3125,10 +3125,12 @@ _startup_libs= lib/csu
> > _startup_libs+= lib/libc
> > _startup_libs+= lib/libc_nonshared
> > _startup_libs+= lib/libcxxrt
> > +_startup_libs+= lib/libsys
> > 
> > _prereq_libs+= lib/libgcc_eh lib/libgcc_s
> > _startup_libs+= lib/libgcc_eh lib/libgcc_s
> > 
> > +lib/libc__L: lib/libsys__L
> > lib/libgcc_s__L: lib/libc__L
> > lib/libgcc_s__L: lib/libc_nonshared__L
> > lib/libcxxrt__L: lib/libgcc_s__L
> > diff --git a/UPDATING b/UPDATING
> > index 33bae2a42b9d..aae30936a8b5 100644
> > --- a/UPDATING
> > +++ b/UPDATING
> > @@ -27,6 +27,12 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 15.x IS SLOW:
> > world, or to merely disable the most expensive debugging functionality
> > at runtime, run "ln -s 'abort:false,junk:false' /etc/malloc.conf".)
> > 
> > +20240205:
> > + For dynamically linked programs, system calls are now made from
> > + libsys rather than libc.  No change in linkage is required as
> > + libsys is an auxiliary filter for libc.  People building custom
> > + images must ensure that libsys.so.7 is included.
> > +
> > 20240202:
> > Loader now also read configuration files listed in local_loader_conf_files.
> > Files listed here are the last ones read. And /boot/loader.conf.local was
> > diff --git a/lib/Makefile b/lib/Makefile
> > index db07883e2b10..9d2531820c8b 100644
> > --- a/lib/Makefile
> > +++ b/lib/Makefile
> > @@ -123,7 +123,7 @@ SUBDIR_DEPEND_libbsnmp= ${_libnetgraph}
> > SUBDIR_DEPEND_libc++:= libcxxrt
> > # libssp_nonshared doesn't need to be linked into libc on every arch, but it is
> > # small enough to build that this bit of serialization is likely insignificant.
> > -SUBDIR_DEPEND_libc= libcompiler_rt libssp_nonshared
> > +SUBDIR_DEPEND_libc= libsys libcompiler_rt libssp_nonshared
> > SUBDIR_DEPEND_libcam= libsbuf
> > SUBDIR_DEPEND_libcasper= libnv
> > SUBDIR_DEPEND_libdevstat= libkvm
> > diff --git a/lib/libc/Makefile b/lib/libc/Makefile
> > index 72300e88d3d7..6a54f7641087 100644
> > --- a/lib/libc/Makefile
> > +++ b/lib/libc/Makefile
> > @@ -62,6 +62,9 @@ CFLAGS+= -ftls-model=initial-exec
> > #
> > LDFLAGS+= -nodefaultlibs
> > LIBADD+= compiler_rt
> > +LIBADD+= sys
> > +
> > +LDFLAGS+=-Wl,--auxiliary,libsys.so
> 
> >From reading documentation and implementation code (LLD + rtld), should
> this not be the soname, i.e. libsys.so.7?

Yes it should be soname, since otherwise several things are wrong:
- libsys.so open requires /usr mounted 
- different filter soname/name results in unneeded DT_NEEDED entry
  for libc
 0x000000007ffffffd (AUXILIARY)          Auxiliary library: [libsys.so]
 0x0000000000000001 (NEEDED)             Shared library: [libsys.so.7]