All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 1/3] libxcrypt: Allow undefined symbols in version scripts with lld linker
@ 2025-08-12  5:13 Khem Raj
  2025-08-12  5:13 ` [PATCH v2 2/3] zlib: Always use GNU ld for linking Khem Raj
  2025-08-12  5:13 ` [PATCH 3/3] libtirpc: Fix version scripts to work with lld linker Khem Raj
  0 siblings, 2 replies; 4+ messages in thread
From: Khem Raj @ 2025-08-12  5:13 UTC (permalink / raw)
  To: openembedded-core; +Cc: Khem Raj

Unlike GNU ld, LLD defaults to erroring about undefined version symbols
add commandline parameter to sush lld here

Fixes
| x86_64-yoesdk-linux-ld.lld: error: version script assignment of 'XCRYPT_2.0' to symbol 'crypt_gensalt_r' failed: symbol not defined
| x86_64-yoesdk-linux-ld.lld: error: version script assignment of 'XCRYPT_2.0' to symbol 'xcrypt' failed: symbol not defined
| x86_64-yoesdk-linux-ld.lld: error: version script assignment of 'XCRYPT_2.0' to symbol 'xcrypt_gensalt' failed: symbol not defined
| x86_64-yoesdk-linux-ld.lld: error: version script assignment of 'XCRYPT_2.0' to symbol 'xcrypt_gensalt_r' failed: symbol not defined
| x86_64-yoesdk-linux-ld.lld: error: version script assignment of 'XCRYPT_2.0' to symbol 'xcrypt_r' failed: symbol not defined
| x86_64-yoesdk-linux-clang: error: linker command failed with exit code 1 (use -v to see invocation)

LLD has stricter defaults and strict symbol versioning enforcement.
LLD requires that all symbols
referenced in version scripts actually exist in the object files being
linked Same errors/behavior can be
seen with GNU linker as well if we add -Wl,--undefined-version to LDFLAGS
GNU linker chooses to be a bit lenient with defaults.

Having LLD to lower its barrier does not change the output it
produces, it's the same as GNU ld

This is known issue seen with other distros e.g. NixOS upstream [1]

[1] https://github.com/besser82/libxcrypt/issues/181

Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
v2: Add upstream defect information

 meta/recipes-core/libxcrypt/libxcrypt.inc | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/meta/recipes-core/libxcrypt/libxcrypt.inc b/meta/recipes-core/libxcrypt/libxcrypt.inc
index 77fec832348..da515d19270 100644
--- a/meta/recipes-core/libxcrypt/libxcrypt.inc
+++ b/meta/recipes-core/libxcrypt/libxcrypt.inc
@@ -24,3 +24,5 @@ API = "--disable-obsolete-api"
 EXTRA_OECONF += "${API}"
 
 BBCLASSEXTEND = "native nativesdk"
+# Needed until https://github.com/besser82/libxcrypt/issues/181 is addressed
+LDFLAGS += "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', '-Wl,--undefined-version', '', d)}"


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH v2 2/3] zlib: Always use GNU ld for linking
  2025-08-12  5:13 [PATCH v2 1/3] libxcrypt: Allow undefined symbols in version scripts with lld linker Khem Raj
@ 2025-08-12  5:13 ` Khem Raj
  2025-08-12  5:13 ` [PATCH 3/3] libtirpc: Fix version scripts to work with lld linker Khem Raj
  1 sibling, 0 replies; 4+ messages in thread
From: Khem Raj @ 2025-08-12  5:13 UTC (permalink / raw)
  To: openembedded-core; +Cc: Khem Raj

Linking does not yet work with LLD

Fixes
aarch64-yoesdk-linux-ld.lld: error: undefined symbol: gzopen
>>> referenced by minigzip.c
>>>               minigzip.o:(main)

Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
v2: Add upstream defect information

 meta/recipes-core/zlib/zlib_1.3.1.bb | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/meta/recipes-core/zlib/zlib_1.3.1.bb b/meta/recipes-core/zlib/zlib_1.3.1.bb
index e62c50c5df7..a313e5aed10 100644
--- a/meta/recipes-core/zlib/zlib_1.3.1.bb
+++ b/meta/recipes-core/zlib/zlib_1.3.1.bb
@@ -20,6 +20,9 @@ SRC_URI[sha256sum] = "9a93b2b7dfdac77ceba5a558a580e74667dd6fede4585b91eefb60f03b
 PREMIRRORS:append = " https://zlib.net/ https://zlib.net/fossils/"
 
 CFLAGS += "-D_REENTRANT -fPIE"
+# zlib does not build with lld, keep it until https://github.com/madler/zlib/pull/936
+# is addressed
+LDFLAGS:append = " -fuse-ld=bfd"
 
 RDEPENDS:${PN}-ptest += "make"
 


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 3/3] libtirpc: Fix version scripts to work with lld linker
  2025-08-12  5:13 [PATCH v2 1/3] libxcrypt: Allow undefined symbols in version scripts with lld linker Khem Raj
  2025-08-12  5:13 ` [PATCH v2 2/3] zlib: Always use GNU ld for linking Khem Raj
@ 2025-08-12  5:13 ` Khem Raj
  2025-08-12 11:41   ` [OE-core] " Mathieu Dubois-Briand
  1 sibling, 1 reply; 4+ messages in thread
From: Khem Raj @ 2025-08-12  5:13 UTC (permalink / raw)
  To: openembedded-core; +Cc: Khem Raj

Since bfd linker does not enable string checking for versioned symbols, build is generating
undefined versioned symbols, which LLD does not allow by default. Actually these symbols
should not be generated at all when given features are not enabled

Fixes link errors with lld

aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol '_svcauth_gss' failed: symbol not defined
aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'authgss_create' failed: symbol not defined
aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'authgss_create_default' failed: symbol not defined
aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'authgss_free_private_data' failed: symbol not defined
aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'authgss_get_private_data' failed: symbol not defined
aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'authgss_service' failed: symbol not defined
aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'cbc_crypt' failed: symbol not defined
aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'ecb_crypt' failed: symbol not defined
aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'endrpcent' failed: symbol not defined
aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'getrpcent' failed: symbol not defined
aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'getrpcbynumber' failed: symbol not defined
aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'getrpcbyname' failed: symbol not defined
aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'gss_log_debug' failed: symbol not defined
aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'gss_log_hexdump' failed: symbol not defined
aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'gss_log_status' failed: symbol not defined
aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'rpc_gss_get_error' failed: symbol not defined
aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'rpc_gss_get_mech_info' failed: symbol not defined
aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'rpc_gss_get_mechanisms' failed: symbol not defined
aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'rpc_gss_get_principal_name' failed: symbol not defined
aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'rpc_gss_get_versions' failed: symbol not defined

Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
v2: Add a fix to tidy up linker map

 ...d-conditional-version-script-support.patch | 805 ++++++++++++++++++
 .../libtirpc/libtirpc_1.3.6.bb                |   1 +
 2 files changed, 806 insertions(+)
 create mode 100644 meta/recipes-extended/libtirpc/libtirpc/0001-Add-conditional-version-script-support.patch

diff --git a/meta/recipes-extended/libtirpc/libtirpc/0001-Add-conditional-version-script-support.patch b/meta/recipes-extended/libtirpc/libtirpc/0001-Add-conditional-version-script-support.patch
new file mode 100644
index 00000000000..fdb166b9aba
--- /dev/null
+++ b/meta/recipes-extended/libtirpc/libtirpc/0001-Add-conditional-version-script-support.patch
@@ -0,0 +1,805 @@
+From 8ae9a335d56fc4aba8454159b326d809efca597f Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 11 Aug 2025 21:13:59 -0700
+Subject: [PATCH] Add conditional version script support
+
+This patch adds conditional symbol versioning to libtirpc, allowing
+GSS-API, DES crypto, and RPC database symbols to be conditionally
+included in the version script based on build configuration.
+
+LLD is strict about undefined symbols referenced in a version script.
+Some libtirpc symbols (rpcsec_gss, old DES helpers, rpc database
+helpers) are optional and may not be built depending on configure
+options or missing deps. GNU ld tolerated this; LLD errors out.
+
+This change keeps the canonical symbol map in src/libtirpc.map, but
+adds a make-time rule to generate a filtered copy
+where names from disabled features are deleted. The lib is then linked
+against the generated linker map file.
+
+Fixes linking errors when these features are not available.
+
+Upstream-Status: Submitted [https://lore.kernel.org/linux-nfs/20250812041944.2767074-1-raj.khem@gmail.com/T/#u]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ configure.ac                          | 50 +++++++++++++++++++++++++++
+ src/Makefile.am                       | 21 +++++++++--
+ src/{libtirpc.map => libtirpc.map.in} | 48 +++++--------------------
+ 3 files changed, 77 insertions(+), 42 deletions(-)
+ rename src/{libtirpc.map => libtirpc.map.in} (84%)
+
+--- a/configure.ac
++++ b/configure.ac
+@@ -77,6 +77,20 @@ if test "x$enable_ipv6" != xno; then
+ 	AC_DEFINE(INET6, 1, [Define to 1 if IPv6 is available])
+ fi
+ 
++# RPC database support
++AC_ARG_ENABLE(rpcdb,
++    [AS_HELP_STRING([--enable-rpcdb], [Enable RPC Database support @<:@default=no@:>@])],
++    [], [enable_rpcdb=no],
++    [enable_rpcdb=auto])
++if test "x$enable_rpcdb" != "xno"; then
++    AC_CHECK_FUNCS([getrpcent getrpcbyname getrpcbynumber], [have_rpcdb=yes])
++
++    if test "x$have_rpcdb" = "xyes"; then
++        AC_DEFINE([RPCDB], [1], [Define if RPC database support is available])
++    fi
++fi
++AM_CONDITIONAL(RPCDB, test "x$enable_rpcdb" != xno)
++
+ AC_ARG_ENABLE(symvers,
+ 	[AS_HELP_STRING([--disable-symvers],[Disable symbol versioning @<:@default=no@:>@])],
+       [],[enable_symvers=maybe])
+@@ -97,6 +111,33 @@ fi
+ 
+ AM_CONDITIONAL(SYMVERS, test "x$enable_symvers" = xyes)
+ 
++# Generate symbol lists for version script
++if test "x$enable_gssapi" = "xyes"; then
++    GSS_SYMBOLS="_svcauth_gss; authgss_create; authgss_create_default; authgss_free_private_data; authgss_get_private_data; authgss_service; gss_log_debug; gss_log_hexdump; gss_log_status; rpc_gss_get_error; rpc_gss_get_mech_info; rpc_gss_get_mechanisms; rpc_gss_get_principal_name; rpc_gss_get_versions; rpc_gss_qop_to_num; rpc_gss_seccreate; rpc_gss_set_callback; rpc_gss_set_defaults; rpc_gss_set_svc_name; rpc_gss_svc_max_data_length;"
++
++    GSS_SYMBOLS_031="svcauth_gss_get_principal; svcauth_gss_set_svc_name;"
++else
++    GSS_SYMBOLS=""
++    GSS_SYMBOLS_031=""
++fi
++
++if test "x$enable_authdes" = "xyes"; then
++    DES_SYMBOLS="cbc_crypt; ecb_crypt; xdr_authdes_cred; xdr_authdes_verf; xdr_rpc_gss_cred; xdr_rpc_gss_data; xdr_rpc_gss_init_args; xdr_rpc_gss_init_res;"
++else
++    DES_SYMBOLS=""
++fi
++
++if test "x$enable_rpcdb" = "xyes"; then
++    RPCDB_SYMBOLS="endrpcent; getrpcent; getrpcbynumber; getrpcbyname; setrpcent;"
++else
++    RPCDB_SYMBOLS=""
++fi
++
++AC_SUBST([GSS_SYMBOLS])
++AC_SUBST([GSS_SYMBOLS_031])
++AC_SUBST([DES_SYMBOLS])
++AC_SUBST([RPCDB_SYMBOLS])
++
+ AC_CANONICAL_BUILD
+ # Check for which host we are on and setup a few things
+ # specifically based on the host
+@@ -167,7 +208,16 @@ AC_CHECK_FUNCS([getpeereid getrpcbyname
+ AC_CHECK_TYPES(struct rpcent,,, [
+       #include <netdb.h>])
+ AC_CONFIG_FILES([Makefile src/Makefile man/Makefile doc/Makefile])
++AC_CONFIG_FILES([src/libtirpc.map])
+ AC_CONFIG_FILES([libtirpc.pc])
+ AC_OUTPUT
+ 
++# Configuration summary
++AC_MSG_NOTICE([
++libtirpc configuration summary:
++  GSS-API support: $enable_gssapi
++  DES crypto support: $enable_authdes
++  RPC database support: $enable_rpcdb
++  Symbol versioning: $enable_symvers
++])
+ 
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -6,6 +6,9 @@
+ ## anything like that.
+ 
+ noinst_HEADERS = rpc_com.h debug.h
++EXTRA_DIST = libtirpc.map.in
++# Generated files
++BUILT_SOURCES = libtirpc.map
+ 
+ AM_CPPFLAGS = -I$(top_srcdir)/tirpc -include config.h -DPORTMAP -DINET6 \
+ 		-D_GNU_SOURCE -Wall -pipe
+@@ -15,10 +18,19 @@ lib_LTLIBRARIES = libtirpc.la
+ libtirpc_la_LDFLAGS = @LDFLAG_NOUNDEFINED@ -no-undefined @PTHREAD_LIBS@
+ libtirpc_la_LDFLAGS += -version-info @LT_VERSION_INFO@
+ 
++# Generate version script from template
++libtirpc.map: $(srcdir)/libtirpc.map.in
++	$(AM_V_GEN)$(SED) \
++		-e 's|@GSS_SYMBOLS@|$(GSS_SYMBOLS)|g' \
++		-e 's|@GSS_SYMBOLS_031@|$(GSS_SYMBOLS_031)|g' \
++		-e 's|@DES_SYMBOLS@|$(DES_SYMBOLS)|g' \
++		-e 's|@RPCDB_SYMBOLS@|$(RPCDB_SYMBOLS)|g' \
++		< $(srcdir)/libtirpc.map.in > $@ || rm -f $@
++
+ libtirpc_la_SOURCES = auth_none.c auth_unix.c authunix_prot.c \
+         binddynport.c bindresvport.c \
+         clnt_bcast.c clnt_dg.c clnt_generic.c clnt_perror.c clnt_raw.c clnt_simple.c \
+-        clnt_vc.c rpc_dtablesize.c getnetconfig.c getnetpath.c getrpcent.c \
++        clnt_vc.c rpc_dtablesize.c getnetconfig.c getnetpath.c \
+         getrpcport.c mt_misc.c pmap_clnt.c pmap_getmaps.c pmap_getport.c \
+         pmap_prot.c pmap_prot2.c pmap_rmt.c rpc_prot.c rpc_commondata.c \
+         rpc_callmsg.c rpc_generic.c rpc_soc.c rpcb_clnt.c rpcb_prot.c \
+@@ -34,7 +46,7 @@ endif
+ libtirpc_la_SOURCES += xdr.c xdr_rec.c xdr_array.c xdr_float.c xdr_mem.c xdr_reference.c xdr_stdio.c xdr_sizeof.c
+ 
+ if SYMVERS
+-    libtirpc_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libtirpc.map
++    libtirpc_la_LDFLAGS += -Wl,--version-script=$(builddir)/libtirpc.map
+ endif
+ 
+ ## Secure-RPC
+@@ -45,8 +57,13 @@ if GSS
+     libtirpc_la_CFLAGS = -DHAVE_RPCSEC_GSS $(GSSAPI_CFLAGS)
+ endif
+ 
++# Conditionally add RPC database sources
++if RPCDB
++		libtirpc_la_SOURCES += getrpcent.c
++endif
++
+ libtirpc_la_SOURCES += key_call.c key_prot_xdr.c getpublickey.c
+ libtirpc_la_SOURCES += netname.c netnamer.c rpcdname.c rtime.c
+ 
+-CLEANFILES	       = cscope.* *~
++CLEANFILES	       = cscope.* libtirpc.map *~
+ DISTCLEANFILES	       = Makefile.in
+--- a/src/libtirpc.map
++++ /dev/null
+@@ -1,335 +0,0 @@
+-TIRPC_0.3.0 {
+-  global:
+-    # __*
+-    __rpc_createerr;
+-    __rpc_dtbsize;
+-    __rpc_endconf;
+-    __rpc_fd2sockinfo;
+-    __rpc_fixup_addr;
+-    __rpc_get_a_size;
+-    __rpc_get_local_uid;
+-    __rpc_get_t_size;
+-    __rpc_getconf;
+-    __rpc_getconfip;
+-    __rpc_nconf2fd;
+-    __rpc_nconf2fd_flags;
+-    __rpc_nconf2sockinfo;
+-    __rpc_rawcombuf;
+-    __rpc_seman2socktype;
+-    __rpc_setconf;
+-    __rpc_sockinfo2netid;
+-    __rpc_sockisbound;
+-    __rpc_socktype2seman;
+-    __rpc_taddr2uaddr_af;
+-    __rpc_uaddr2taddr_af;
+-    __rpcgettp;
+-
+-    # _*
+-    _authenticate;
+-    _get_next_token;
+-    _gss_authenticate;
+-    _null_auth;
+-    _rpc_dtablesize;
+-    _seterr_reply;
+-    _svcauth_none;
+-    _svcauth_short;
+-    _svcauth_unix;
+-    _svcauth_gss;
+-
+-    # a*
+-    authdes_create;
+-    authdes_seccreate;
+-    authgss_create;
+-    authgss_create_default;
+-    authgss_free_private_data;
+-    authgss_get_private_data;
+-    authgss_service;
+-    authnone_create;
+-    authunix_create;
+-    authunix_create_default;
+-
+-    # b*
+-    bindresvport;
+-    bindresvport_sa;
+-
+-    # c*
+-    callrpc;
+-    cbc_crypt;
+-    clnt_broadcast;
+-    clnt_create;
+-    clnt_create_timed;
+-    clnt_create_vers;
+-    clnt_create_vers_timed;
+-    clnt_dg_create;
+-    clnt_pcreateerror;
+-    clnt_perrno;
+-    clnt_perror;
+-    clnt_raw_create;
+-    clnt_spcreateerror;
+-    clnt_sperrno;
+-    clnt_sperror;
+-    clnt_tli_create;
+-    clnt_tp_create;
+-    clnt_tp_create_timed;
+-    clnt_vc_create;
+-    clntraw_create;
+-    clnttcp_create;
+-    clntudp_bufcreate;
+-    clntudp_create;
+-    clntunix_create;
+-
+-    # e*
+-    ecb_crypt;
+-    endnetconfig;
+-    endnetpath;
+-    endrpcent;
+-
+-    # f*
+-    freenetconfigent;
+-
+-    # g*
+-    get_myaddress;
+-    getnetconfig;
+-    getnetconfigent;
+-    getnetpath;
+-    getrpcent;
+-    getrpcbynumber;
+-    getrpcbyname;
+-    getrpcport;
+-    gss_log_debug;
+-    gss_log_hexdump;
+-    gss_log_status;
+-
+-    # n*
+-    nc_perror;
+-    nc_sperror;
+-
+-    # p*
+-    pmap_getmaps;
+-    pmap_getport;
+-    pmap_rmtcall;
+-    pmap_set;
+-    pmap_unset;
+-
+-    # r*
+-    registerrpc;
+-    rpc_broadcast;
+-    rpc_broadcast_exp;
+-    rpc_call;
+-    rpc_control;
+-    rpc_createerr;
+-    rpc_gss_get_error;
+-    rpc_gss_get_mech_info;
+-    rpc_gss_get_mechanisms;
+-    rpc_gss_get_principal_name;
+-    rpc_gss_get_versions;
+-    rpc_gss_getcred;
+-    rpc_gss_is_installed;
+-    rpc_gss_max_data_length;
+-    rpc_gss_mech_to_oid;
+-    rpc_gss_qop_to_num;
+-    rpc_gss_seccreate;
+-    rpc_gss_set_callback;
+-    rpc_gss_set_defaults;
+-    rpc_gss_set_svc_name;
+-    rpc_gss_svc_max_data_length;
+-    rpc_nullproc;
+-    rpc_reg;
+-    rpcb_getaddr;
+-    rpcb_getmaps;
+-    rpcb_gettime;
+-    rpcb_rmtcall;
+-    rpcb_set;
+-    rpcb_taddr2uaddr;
+-    rpcb_uaddr2taddr;
+-    rpcb_unset;
+-
+-    # s*
+-    setnetconfig;
+-    setnetpath;
+-    setrpcent;
+-    svc_auth_reg;
+-    svc_create;
+-    svc_dg_create;
+-    svc_dg_enablecache;
+-    svc_exit;
+-    svc_fd_create;
+-    svc_fdset;
+-    svc_getreq;
+-    svc_getreq_common;
+-    svc_getreq_poll;
+-    svc_getreqset;
+-    svc_maxfd;
+-    svc_raw_create;
+-    svc_reg;
+-    svc_register;
+-    svc_run;
+-    svc_sendreply;
+-    svc_tli_create;
+-    svc_tp_create;
+-    svc_unreg;
+-    svc_unregister;
+-    svc_vc_create;
+-    svcerr_auth;
+-    svcerr_decode;
+-    svcerr_noproc;
+-    svcerr_noprog;
+-    svcerr_progvers;
+-    svcerr_systemerr;
+-    svcerr_weakauth;
+-    svcfd_create;
+-    svcraw_create;
+-    svctcp_create;
+-    svcudp_bufcreate;
+-    svcudp_create;
+-    svcunix_create;
+-    svcunixfd_create;
+-
+-    # t*
+-    taddr2uaddr;
+-
+-    # u*
+-    uaddr2taddr;
+-
+-    # x*
+-    xdr_accepted_reply;
+-    xdr_array;
+-    xdr_authdes_cred;
+-    xdr_authdes_verf;
+-    xdr_authunix_parms;
+-    xdr_bool;
+-    xdr_bytes;
+-    xdr_callhdr; xdr_callmsg;
+-    xdr_char;
+-    xdr_des_block;
+-    xdr_double;
+-    xdr_enum;
+-    xdr_float;
+-    xdr_free;
+-    xdr_hyper;
+-    xdr_int16_t;
+-    xdr_int32_t;
+-    xdr_int64_t;
+-    xdr_int8_t;
+-    xdr_int;
+-    xdr_long;
+-    xdr_longlong_t;
+-    xdr_netbuf;
+-    xdr_netobj;
+-    xdr_opaque;
+-    xdr_opaque_auth;
+-    xdr_pmap;
+-    xdr_pmaplist;
+-    xdr_pmaplist_ptr;
+-    xdr_pointer;
+-    xdr_quad_t;
+-    xdr_reference;
+-    xdr_rejected_reply;
+-    xdr_replymsg;
+-    xdr_rmtcall_args;
+-    xdr_rmtcallres;
+-    xdr_rpc_gss_cred;
+-    xdr_rpc_gss_data;
+-    xdr_rpc_gss_init_args;
+-    xdr_rpc_gss_init_res;
+-    xdr_rpcb;
+-    xdr_rpcb_entry;
+-    xdr_rpcb_entry_list_ptr;
+-    xdr_rpcb_rmtcallargs;
+-    xdr_rpcb_rmtcallres;
+-    xdr_rpcb_stat;
+-    xdr_rpcb_stat_byvers;
+-    xdr_rpcblist;
+-    xdr_rpcblist_ptr;
+-    xdr_rpcbs_addrlist;
+-    xdr_rpcbs_addrlist_ptr;
+-    xdr_rpcbs_proc;
+-    xdr_rpcbs_rmtcalllist;
+-    xdr_rpcbs_rmtcalllist_ptr;
+-    xdr_short;
+-    xdr_string;
+-    xdr_u_char;
+-    xdr_u_hyper;
+-    xdr_u_int16_t;
+-    xdr_u_int32_t;
+-    xdr_u_int64_t;
+-    xdr_u_int8_t;
+-    xdr_u_int;
+-    xdr_u_long;
+-    xdr_u_longlong_t;
+-    xdr_u_quad_t;
+-    xdr_u_short;
+-    xdr_uint16_t;
+-    xdr_uint32_t;
+-    xdr_uint64_t;
+-    xdr_uint8_t;
+-    xdr_union;
+-    xdr_vector;
+-    xdr_void;
+-    xdr_wrapstring;
+-    xdrmem_create;
+-    xdrrec_create;
+-    xdrrec_endofrecord;
+-    xdrrec_eof;
+-    xdrrec_skiprecord;
+-    xdrstdio_create;
+-    xprt_register;
+-    xprt_unregister;
+-
+-  local:
+-    *;
+-};
+-
+-TIRPC_0.3.1 {
+-    svcauth_gss_get_principal;
+-    svcauth_gss_set_svc_name;
+-} TIRPC_0.3.0;
+-
+-TIRPC_0.3.2 {
+-    getnetname;
+-    getpublicandprivatekey;
+-    getpublickey;
+-    host2netname;
+-    key_call_destroy;
+-    key_decryptsession;
+-    key_decryptsession_pk;
+-    key_encryptsession;
+-    key_encryptsession_pk;
+-    key_gendes;
+-    key_get_conv;
+-    key_setsecret;
+-    key_secretkey_is_set;
+-    key_setnet;
+-    netname2host;
+-    netname2user;
+-    rtime;
+-    user2netname;
+-    xdr_cryptkeyarg;
+-    xdr_cryptkeyarg2;
+-    xdr_cryptkeyres;
+-    xdr_getcredres;
+-    xdr_key_netstarg;
+-    xdr_key_netstres;
+-    xdr_keybuf;
+-    xdr_keystatus;
+-    xdr_netnamestr;
+-    xdr_unixcred;
+-} TIRPC_0.3.1;
+-
+-TIRPC_0.3.3 {
+-    __getpublickey_LOCAL;
+-    __key_decryptsession_pk_LOCAL;
+-    __key_encryptsession_pk_LOCAL;
+-    __key_gendes_LOCAL;
+-    xdr_sizeof;
+-    authdes_pk_create;
+-    svc_pollfd;
+-    svc_max_pollfd;
+-} TIRPC_0.3.2;
+-
+-TIRPC_PRIVATE {
+-  global:
+-    __libc_clntudp_bufcreate;
+-  # private, but used by rpcbind:
+-    __svc_clean_idle; svc_auth_none; libtirpc_set_debug;
+-};
+--- /dev/null
++++ b/src/libtirpc.map.in
+@@ -0,0 +1,303 @@
++TIRPC_0.3.0 {
++  global:
++    # __*
++    __rpc_createerr;
++    __rpc_dtbsize;
++    __rpc_endconf;
++    __rpc_fd2sockinfo;
++    __rpc_fixup_addr;
++    __rpc_get_a_size;
++    __rpc_get_local_uid;
++    __rpc_get_t_size;
++    __rpc_getconf;
++    __rpc_getconfip;
++    __rpc_nconf2fd;
++    __rpc_nconf2fd_flags;
++    __rpc_nconf2sockinfo;
++    __rpc_rawcombuf;
++    __rpc_seman2socktype;
++    __rpc_setconf;
++    __rpc_sockinfo2netid;
++    __rpc_sockisbound;
++    __rpc_socktype2seman;
++    __rpc_taddr2uaddr_af;
++    __rpc_uaddr2taddr_af;
++    __rpcgettp;
++
++    # _*
++    _authenticate;
++    _get_next_token;
++    _gss_authenticate;
++    _null_auth;
++    _rpc_dtablesize;
++    _seterr_reply;
++    _svcauth_none;
++    _svcauth_short;
++    _svcauth_unix;
++
++    # a*
++    authdes_create;
++    authdes_seccreate;
++    authnone_create;
++    authunix_create;
++    authunix_create_default;
++
++    # b*
++    bindresvport;
++    bindresvport_sa;
++
++    # c*
++    callrpc;
++    clnt_broadcast;
++    clnt_create;
++    clnt_create_timed;
++    clnt_create_vers;
++    clnt_create_vers_timed;
++    clnt_dg_create;
++    clnt_pcreateerror;
++    clnt_perrno;
++    clnt_perror;
++    clnt_raw_create;
++    clnt_spcreateerror;
++    clnt_sperrno;
++    clnt_sperror;
++    clnt_tli_create;
++    clnt_tp_create;
++    clnt_tp_create_timed;
++    clnt_vc_create;
++    clntraw_create;
++    clnttcp_create;
++    clntudp_bufcreate;
++    clntudp_create;
++    clntunix_create;
++
++    # e*
++    endnetconfig;
++    endnetpath;
++
++    # f*
++    freenetconfigent;
++
++    # g*
++    get_myaddress;
++    getnetconfig;
++    getnetconfigent;
++    getnetpath;
++    getrpcport;
++
++    # n*
++    nc_perror;
++    nc_sperror;
++
++    # p*
++    pmap_getmaps;
++    pmap_getport;
++    pmap_rmtcall;
++    pmap_set;
++    pmap_unset;
++
++    # r*
++    registerrpc;
++    rpc_broadcast;
++    rpc_broadcast_exp;
++    rpc_call;
++    rpc_control;
++    rpc_createerr;
++    rpc_nullproc;
++    rpc_reg;
++    rpcb_getaddr;
++    rpcb_getmaps;
++    rpcb_gettime;
++    rpcb_rmtcall;
++    rpcb_set;
++    rpcb_taddr2uaddr;
++    rpcb_uaddr2taddr;
++    rpcb_unset;
++
++    # s*
++    setnetconfig;
++    setnetpath;
++    svc_auth_reg;
++    svc_create;
++    svc_dg_create;
++    svc_dg_enablecache;
++    svc_exit;
++    svc_fd_create;
++    svc_fdset;
++    svc_getreq;
++    svc_getreq_common;
++    svc_getreq_poll;
++    svc_getreqset;
++    svc_maxfd;
++    svc_raw_create;
++    svc_reg;
++    svc_register;
++    svc_run;
++    svc_sendreply;
++    svc_tli_create;
++    svc_tp_create;
++    svc_unreg;
++    svc_unregister;
++    svc_vc_create;
++    svcerr_auth;
++    svcerr_decode;
++    svcerr_noproc;
++    svcerr_noprog;
++    svcerr_progvers;
++    svcerr_systemerr;
++    svcerr_weakauth;
++    svcfd_create;
++    svcraw_create;
++    svctcp_create;
++    svcudp_bufcreate;
++    svcudp_create;
++    svcunix_create;
++    svcunixfd_create;
++
++    # t*
++    taddr2uaddr;
++
++    # u*
++    uaddr2taddr;
++
++    # x*
++    xdr_accepted_reply;
++    xdr_array;
++    xdr_authunix_parms;
++    xdr_bool;
++    xdr_bytes;
++    xdr_callhdr; xdr_callmsg;
++    xdr_char;
++    xdr_des_block;
++    xdr_double;
++    xdr_enum;
++    xdr_float;
++    xdr_free;
++    xdr_hyper;
++    xdr_int16_t;
++    xdr_int32_t;
++    xdr_int64_t;
++    xdr_int8_t;
++    xdr_int;
++    xdr_long;
++    xdr_longlong_t;
++    xdr_netbuf;
++    xdr_netobj;
++    xdr_opaque;
++    xdr_opaque_auth;
++    xdr_pmap;
++    xdr_pmaplist;
++    xdr_pmaplist_ptr;
++    xdr_pointer;
++    xdr_quad_t;
++    xdr_reference;
++    xdr_rejected_reply;
++    xdr_replymsg;
++    xdr_rmtcall_args;
++    xdr_rmtcallres;
++    xdr_rpcb;
++    xdr_rpcb_entry;
++    xdr_rpcb_entry_list_ptr;
++    xdr_rpcb_rmtcallargs;
++    xdr_rpcb_rmtcallres;
++    xdr_rpcb_stat;
++    xdr_rpcb_stat_byvers;
++    xdr_rpcblist;
++    xdr_rpcblist_ptr;
++    xdr_rpcbs_addrlist;
++    xdr_rpcbs_addrlist_ptr;
++    xdr_rpcbs_proc;
++    xdr_rpcbs_rmtcalllist;
++    xdr_rpcbs_rmtcalllist_ptr;
++    xdr_short;
++    xdr_string;
++    xdr_u_char;
++    xdr_u_hyper;
++    xdr_u_int16_t;
++    xdr_u_int32_t;
++    xdr_u_int64_t;
++    xdr_u_int8_t;
++    xdr_u_int;
++    xdr_u_long;
++    xdr_u_longlong_t;
++    xdr_u_quad_t;
++    xdr_u_short;
++    xdr_uint16_t;
++    xdr_uint32_t;
++    xdr_uint64_t;
++    xdr_uint8_t;
++    xdr_union;
++    xdr_vector;
++    xdr_void;
++    xdr_wrapstring;
++    xdrmem_create;
++    xdrrec_create;
++    xdrrec_endofrecord;
++    xdrrec_eof;
++    xdrrec_skiprecord;
++    xdrstdio_create;
++    xprt_register;
++    xprt_unregister;
++    # GSS-API symbols (conditionally included)
++@GSS_SYMBOLS@
++    # DES crypto symbols (conditionally included)
++@DES_SYMBOLS@
++    # RPC database symbols (conditionally included)
++@RPCDB_SYMBOLS@
++
++  local:
++    *;
++};
++
++TIRPC_0.3.1 {
++# GSS-API symbols (conditionally included)
++@GSS_SYMBOLS_031@
++} TIRPC_0.3.0;
++
++TIRPC_0.3.2 {
++    getnetname;
++    getpublicandprivatekey;
++    getpublickey;
++    host2netname;
++    key_decryptsession;
++    key_decryptsession_pk;
++    key_encryptsession;
++    key_encryptsession_pk;
++    key_gendes;
++    key_get_conv;
++    key_setsecret;
++    key_secretkey_is_set;
++    key_setnet;
++    netname2host;
++    netname2user;
++    rtime;
++    user2netname;
++    xdr_cryptkeyarg;
++    xdr_cryptkeyarg2;
++    xdr_cryptkeyres;
++    xdr_getcredres;
++    xdr_key_netstarg;
++    xdr_key_netstres;
++    xdr_keybuf;
++    xdr_keystatus;
++    xdr_netnamestr;
++    xdr_unixcred;
++} TIRPC_0.3.1;
++
++TIRPC_0.3.3 {
++    __getpublickey_LOCAL;
++    __key_decryptsession_pk_LOCAL;
++    __key_encryptsession_pk_LOCAL;
++    __key_gendes_LOCAL;
++    xdr_sizeof;
++    authdes_pk_create;
++    svc_pollfd;
++    svc_max_pollfd;
++} TIRPC_0.3.2;
++
++TIRPC_PRIVATE {
++  global:
++    __libc_clntudp_bufcreate;
++  # private, but used by rpcbind:
++    __svc_clean_idle; svc_auth_none; libtirpc_set_debug;
++};
diff --git a/meta/recipes-extended/libtirpc/libtirpc_1.3.6.bb b/meta/recipes-extended/libtirpc/libtirpc_1.3.6.bb
index 6ea9a725dbf..184c43031a5 100644
--- a/meta/recipes-extended/libtirpc/libtirpc_1.3.6.bb
+++ b/meta/recipes-extended/libtirpc/libtirpc_1.3.6.bb
@@ -12,6 +12,7 @@ PROVIDES = "virtual/librpc"
 SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BP}.tar.bz2 \
            file://0001-Update-declarations-to-allow-compile-with-gcc-15.patch \
            file://0002-update-signal-and-key_call-declarations-to-allow-com.patch \
+           file://0001-Add-conditional-version-script-support.patch \
           "
 UPSTREAM_CHECK_URI = "https://sourceforge.net/projects/libtirpc/files/libtirpc/"
 UPSTREAM_CHECK_REGEX = "(?P<pver>\d+(\.\d+)+)/"


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [OE-core] [PATCH 3/3] libtirpc: Fix version scripts to work with lld linker
  2025-08-12  5:13 ` [PATCH 3/3] libtirpc: Fix version scripts to work with lld linker Khem Raj
@ 2025-08-12 11:41   ` Mathieu Dubois-Briand
  0 siblings, 0 replies; 4+ messages in thread
From: Mathieu Dubois-Briand @ 2025-08-12 11:41 UTC (permalink / raw)
  To: raj.khem, openembedded-core

On Tue Aug 12, 2025 at 7:13 AM CEST, Khem Raj via lists.openembedded.org wrote:
> Since bfd linker does not enable string checking for versioned symbols, build is generating
> undefined versioned symbols, which LLD does not allow by default. Actually these symbols
> should not be generated at all when given features are not enabled
>
> Fixes link errors with lld
>
> aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol '_svcauth_gss' failed: symbol not defined
> aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'authgss_create' failed: symbol not defined
> aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'authgss_create_default' failed: symbol not defined
> aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'authgss_free_private_data' failed: symbol not defined
> aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'authgss_get_private_data' failed: symbol not defined
> aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'authgss_service' failed: symbol not defined
> aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'cbc_crypt' failed: symbol not defined
> aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'ecb_crypt' failed: symbol not defined
> aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'endrpcent' failed: symbol not defined
> aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'getrpcent' failed: symbol not defined
> aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'getrpcbynumber' failed: symbol not defined
> aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'getrpcbyname' failed: symbol not defined
> aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'gss_log_debug' failed: symbol not defined
> aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'gss_log_hexdump' failed: symbol not defined
> aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'gss_log_status' failed: symbol not defined
> aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'rpc_gss_get_error' failed: symbol not defined
> aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'rpc_gss_get_mech_info' failed: symbol not defined
> aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'rpc_gss_get_mechanisms' failed: symbol not defined
> aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'rpc_gss_get_principal_name' failed: symbol not defined
> aarch64-yoesdk-linux-ld.lld: error: version script assignment of 'TIRPC_0.3.0' to symbol 'rpc_gss_get_versions' failed: symbol not defined
>
> Signed-off-by: Khem Raj <raj.khem@gmail.com>
> ---

Hi Khem,

Thanks for the v2, but I believe it breaks the build with musl, on both
quota and nfs-utils:

ERROR: quota-4.10-r0 do_compile: Execution of '/srv/pokybuild/yocto-worker/musl-qemuarm64/build/build/tmp/work/cortexa57-poky-linux-musl/quota/4.10/temp/run.do_compile.1692753' failed with exit code 1
...
| /usr/src/debug/quota/4.10/svc_socket.c:39:(.text+0x30): undefined reference to `getrpcbynumber'
| collect2: error: ld returned 1 exit status
...
ERROR: nfs-utils-2.8.3-r0 do_configure: Execution of '/srv/pokybuild/yocto-worker/musl-qemuarm64/build/build/tmp/work/cortexa57-poky-linux-musl/nfs-utils/2.8.3/temp/run.do_configure.2602719' failed with exit code 1
...
| configure: error: Neither getrpcbynumber_r nor getrpcbynumber are available

https://autobuilder.yoctoproject.org/valkyrie/#/builders/111/builds/942
https://autobuilder.yoctoproject.org/valkyrie/#/builders/6/builds/2224
https://autobuilder.yoctoproject.org/valkyrie/#/builders/3/builds/2254

Can you have a look at these errors please?

-- 
Mathieu Dubois-Briand, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com



^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2025-08-12 11:41 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-12  5:13 [PATCH v2 1/3] libxcrypt: Allow undefined symbols in version scripts with lld linker Khem Raj
2025-08-12  5:13 ` [PATCH v2 2/3] zlib: Always use GNU ld for linking Khem Raj
2025-08-12  5:13 ` [PATCH 3/3] libtirpc: Fix version scripts to work with lld linker Khem Raj
2025-08-12 11:41   ` [OE-core] " Mathieu Dubois-Briand

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.