Page MenuHome GnuPG

libgcrypt build failure on HPPA 1.1 (./.libs/libgcrypt.so: undefined reference to `__udiv_qrnnd')
Closed, ResolvedPublic

Description

Originally reported downstream in Gentoo (we tried disabling asm support for HPPA 1.1 as a workaround for now, but that didn't help).

Failure with 1.9.4:

/bin/sh ../libtool  --tag=CC   --mode=link hppa1.1-unknown-linux-gnu-gcc  -O2 -pipe -march=1.1 -fvisibility=hidden -fno-delete-null-pointer-checks -Wall    -Wl,--version-script=/var/tmp/portage/dev-libs/libgcrypt-1.9.4-r1/work/libgcrypt-1.9.4/src/libgcrypt.vers -version-info 23:4:3 -Wl,-O1 -Wl,--as-needed -o libgcrypt.la -rpath /usr/lib libgcrypt_la-visibility.lo libgcrypt_la-misc.lo libgcrypt_la-global.lo libgcrypt_la-sexp.lo libgcrypt_la-hwfeatures.lo libgcrypt_la-stdmem.lo libgcrypt_la-secmem.lo libgcrypt_la-missing-string.lo libgcrypt_la-fips.lo libgcrypt_la-hmac256.lo libgcrypt_la-context.lo   ../cipher/libcipher.la ../random/librandom.la ../mpi/libmpi.la ../compat/libcompat.la  -lgpg-error 
libtool: link: hppa1.1-unknown-linux-gnu-gcc -O2 -pipe -march=1.1 -fvisibility=hidden -fno-delete-null-pointer-checks -Wall -Wl,-O1 -o dumpsexp dumpsexp-dumpsexp.o  -Wl,--as-needed
libtool: link: hppa1.1-unknown-linux-gnu-gcc -DSTANDALONE -O2 -pipe -march=1.1 -fvisibility=hidden -fno-delete-null-pointer-checks -Wall -Wl,-O1 -o hmac256 hmac256-hmac256.o  -Wl,--as-needed
libtool: link: hppa1.1-unknown-linux-gnu-gcc -shared  -fPIC -DPIC  .libs/libgcrypt_la-visibility.o .libs/libgcrypt_la-misc.o .libs/libgcrypt_la-global.o .libs/libgcrypt_la-sexp.o .libs/libgcrypt_la-hwfeatures.o .libs/libgcrypt_la-stdmem.o .libs/libgcrypt_la-secmem.o .libs/libgcrypt_la-missing-string.o .libs/libgcrypt_la-fips.o .libs/libgcrypt_la-hmac256.o .libs/libgcrypt_la-context.o  -Wl,--whole-archive ../cipher/.libs/libcipher.a ../random/.libs/librandom.a ../mpi/.libs/libmpi.a ../compat/.libs/libcompat.a -Wl,--no-whole-archive  -Wl,--as-needed -lgpg-error  -O2 -march=1.1 -Wl,--version-script=/var/tmp/portage/dev-libs/libgcrypt-1.9.4-r1/work/libgcrypt-1.9.4/src/libgcrypt.vers -Wl,-O1   -Wl,-soname -Wl,libgcrypt.so.20 -o .libs/libgcrypt.so.20.3.4
libtool: link: (cd ".libs" && rm -f "libgcrypt.so.20" && ln -s "libgcrypt.so.20.3.4" "libgcrypt.so.20")
libtool: link: (cd ".libs" && rm -f "libgcrypt.so" && ln -s "libgcrypt.so.20.3.4" "libgcrypt.so")
libtool: link: ( cd ".libs" && rm -f "libgcrypt.la" && ln -s "../libgcrypt.la" "libgcrypt.la" )
/bin/sh ../libtool  --tag=CC   --mode=link hppa1.1-unknown-linux-gnu-gcc  -O2 -pipe -march=1.1 -fvisibility=hidden -fno-delete-null-pointer-checks -Wall  -Wl,-O1 -Wl,--as-needed -o mpicalc mpicalc-mpicalc.o libgcrypt.la -lgpg-error 
libtool: link: hppa1.1-unknown-linux-gnu-gcc -O2 -pipe -march=1.1 -fvisibility=hidden -fno-delete-null-pointer-checks -Wall -Wl,-O1 -o .libs/mpicalc mpicalc-mpicalc.o  -Wl,--as-needed ./.libs/libgcrypt.so -lgpg-error
/usr/lib/gcc/hppa1.1-unknown-linux-gnu/11.2.1/../../../../hppa1.1-unknown-linux-gnu/bin/ld: ./.libs/libgcrypt.so: undefined reference to `__udiv_qrnnd'
collect2: error: ld returned 1 exit status
make[2]: *** [Makefile:751: mpicalc] Error 1
make[2]: Leaving directory '/var/tmp/portage/dev-libs/libgcrypt-1.9.4-r1/work/libgcrypt-1.9.4-.hppa/src'
make[1]: *** [Makefile:502: all-recursive] Error 1
make[1]: Leaving directory '/var/tmp/portage/dev-libs/libgcrypt-1.9.4-r1/work/libgcrypt-1.9.4-.hppa'
make: *** [Makefile:434: all] Error 2
ERROR: dev-libs/libgcrypt-1.9.4-r1::gentoo failed (compile phase):

System information:

Portage 3.0.30 (python 3.9.12-final-0, default/linux/hppa/17.0/systemd, gcc-11.2.1, glibc-2.34-r10, 5.18.0-rc6 parisc64)
=================================================================
System uname: Linux-5.18.0-rc6-parisc64-PA8800_-Mako-with-glibc2.34
KiB Mem:     8207148 total,   1249056 free
KiB Swap:    1120444 total,   1119668 free
Timestamp of repository gentoo: Thu, 12 May 2022 20:00:02 +0000
Head commit of repository gentoo: c5770d163a136f521cdfba187278aca2958514ba
sh bash 5.1_p16
ld GNU ld (Gentoo 2.37_p1 p2) 2.37
app-misc/pax-utils:        1.3.3::gentoo
app-shells/bash:           5.1_p16::gentoo
dev-lang/perl:             5.34.0-r9::gentoo
dev-lang/python:           3.9.12::gentoo, 3.10.4::gentoo
dev-util/cmake:            3.22.2::gentoo
dev-util/meson:            0.60.3::gentoo
sys-apps/baselayout:       2.7-r3::gentoo
sys-apps/sandbox:          2.29::gentoo
sys-apps/systemd:          250.4-r2::gentoo
sys-devel/autoconf:        2.71-r1::gentoo
sys-devel/automake:        1.16.5::gentoo
sys-devel/binutils:        2.37_p1-r2::gentoo
sys-devel/binutils-config: 5.4.1::gentoo
sys-devel/gcc:             11.2.1_p20220115::gentoo
sys-devel/gcc-config:      2.5-r1::gentoo
sys-devel/libtool:         2.4.6-r6::gentoo
sys-devel/make:            4.3::gentoo
sys-kernel/linux-headers:  5.15-r3::gentoo (virtual/os-headers)
sys-libs/glibc:            2.34-r10::gentoo
Repositories:

gentoo
    location: /var/db/repos/gentoo
    sync-type: rsync
    sync-uri: rsync://rsync.gentoo.org/gentoo-portage
    priority: -1000
    sync-rsync-verify-jobs: 1
    sync-rsync-extra-opts:
    sync-rsync-verify-max-age: 24
    sync-rsync-verify-metamanifest: yes

ACCEPT_KEYWORDS="hppa"
ACCEPT_LICENSE="@FREE"
CBUILD="hppa1.1-unknown-linux-gnu"
CFLAGS="-O2 -pipe -march=1.1"
CHOST="hppa1.1-unknown-linux-gnu"
CONFIG_PROTECT="/etc /usr/share/gnupg/qualified.txt"
CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/env.d /etc/gconf /etc/gentoo-release /etc/sandbox.d /etc/terminfo"
CXXFLAGS="-O2 -pipe -march=1.1"
DISTDIR="/var/cache/distfiles"
ENV_UNSET="CARGO_HOME DBUS_SESSION_BUS_ADDRESS DISPLAY GOBIN GOPATH PERL5LIB PERL5OPT PERLPREFIX PERL_CORE PERL_MB_OPT PERL_MM_OPT XAUTHORITY XDG_CACHE_HOME XDG_CONFIG_HOME XDG_DATA_HOME XDG_RUNTIME_DIR"
FCFLAGS="-O2 -pipe -march=1.1"
FEATURES="assume-digests binpkg-docompress binpkg-dostrip binpkg-logs binpkg-multi-instance buildpkg-live config-protect-if-modified distlocks ebuild-locks fixlafiles ipc-sandbox merge-sync multilib-strict network-sandbox news parallel-fetch pid-sandbox preserve-libs protect-owned qa-unresolved-soname-deps sandbox sfperms strict unknown-features-warn unmerge-logs unmerge-orphans userfetch userpriv usersandbox usersync xattr"
FFLAGS="-O2 -pipe -march=1.1"
GENTOO_MIRRORS="http://distfiles.gentoo.org"
LANG="C.UTF8"
LDFLAGS="-Wl,-O1 -Wl,--as-needed"
MAKEOPTS="-j3"
PKGDIR="/var/cache/binpkgs"
PORTAGE_CONFIGROOT="/"
PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --omit-dir-times --compress --force --whole-file --delete --stats --human-readable --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages --exclude=/.git"
PORTAGE_TMPDIR="/var/tmp"
USE="acl big-endian bzip2 cli crypt fortran gdbm hppa iconv ipv6 libglvnd ncurses nls nptl openmp pam pcre readline seccomp split-usr ssl systemd udev unicode xattr zlib" ADA_TARGET="gnat_2020" APACHE2_MODULES="authn_core authz_core socache_shmcb unixd actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" CALLIGRA_FEATURES="karbon sheets words" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" ELIBC="glibc" GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock greis isync itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf skytraq superstar2 timing tsip tripmate tnt ublox ubx" INPUT_DEVICES="libinput" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer" LUA_SINGLE_TARGET="lua5-1" LUA_TARGETS="lua5-1" OFFICE_IMPLEMENTATION="libreoffice" PHP_TARGETS="php7-4 php8-0" POSTGRES_TARGETS="postgres12 postgres13" PYTHON_SINGLE_TARGET="python3_9" PYTHON_TARGETS="python3_9" RUBY_TARGETS="ruby26 ruby27" USERLAND="GNU" VIDEO_CARDS="fbdev dummy v4l" XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipset ipp2p iface geoip fuzzy condition tee tarpit sysrq proto steal rawnat logmark ipmark dhcpmac delude chaos account"
Unset:  ADDR2LINE, AR, ARFLAGS, AS, ASFLAGS, CC, CCLD, CONFIG_SHELL, CPP, CPPFLAGS, CTARGET, CXX, CXXFILT, ELFEDIT, EMERGE_DEFAULT_OPTS, EXTRA_ECONF, F77FLAGS, FC, GCOV, GPROF, INSTALL_MASK, LC_ALL, LD, LEX, LFLAGS, LIBTOOL, LINGUAS, MAKE, MAKEFLAGS, NM, OBJCOPY, OBJDUMP, PORTAGE_BINHOST, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS, RANLIB, READELF, RUSTFLAGS, SHELL, SIZE, STRINGS, STRIP, YACC, YFLAGS

Details

Event Timeline

Full build.log:

. Happy to get more information if you tell us what's needed. Hardware access can be given over SSH too.

The same build failure occurs on HPPA 1.1 with or without --disable-asm passed to configure. HPPA 2.0 is fine.

thesamesam renamed this task from libgcrypt build failure on HPPA 1.1 () to libgcrypt build failure on HPPA 1.1 (./.libs/libgcrypt.so: undefined reference to `__udiv_qrnnd').May 13 2022, 12:03 AM
thesamesam added a project: Gentoo.
thesamesam updated the task description. (Show Details)

Could you please give us the build log with no --disable-asm?

IIUC, for the hppa1.1 build, assembler implementation of __udiv_qrnnd is required.

Well, I examined the longlong.h implementation.
It originates from GCC, and in the GCC log, there has never been udiv_qrnnd defined for hppa.

Although I don't test it at all, possibly, removing udiv_qrnnd would be the best solution.

diff --git a/mpi/longlong.h b/mpi/longlong.h
index 39cdd0c2..b2d4316c 100644
--- a/mpi/longlong.h
+++ b/mpi/longlong.h
@@ -430,14 +430,6 @@ extern UDItype __udiv_qrnnd ();
 #  define UMUL_TIME 40
 #  define UDIV_TIME 80
 # endif
-# ifndef LONGLONG_STANDALONE
-#  define udiv_qrnnd(q, r, n1, n0, d) \
-  do { USItype __r;							\
-    (q) = __udiv_qrnnd (&__r, (n1), (n0), (d)); 			\
-    (r) = __r;								\
-  } while (0)
-extern USItype __udiv_qrnnd ();
-# endif /* !LONGLONG_STANDALONE */
 # define count_leading_zeros(count, x) \
   do {								       \
     USItype __tmp;						       \

Thank you for your fast reply. My apologies - I should have thought to do that (share log with asm enabled)! But now I'm confused. I think the failure was only ever with asm disabled. I will check with somebody else tomorrow just to make sure though.

This patch works but I have not tested on any other platform - only HPPA 1.1.

BTW: I don't understand what happened in this previous case, but it looks like this has happened before: https://lists.gnupg.org/pipermail/gnupg-devel/2007-October/024021.html on HPPA 1.1 with exactly the same error (which was fixed somehow).

werner triaged this task as Normal priority.May 13 2022, 8:06 AM
werner added a project: libgcrypt.
werner added a project: hppa.

Okay, confirmed: I was just wrong and the build failure was only ever with --disable-asm (i.e. the log in this bug is the only relevant one). Patch works.

Thanks for your confirmation.

If --disable-asm is needed for HPPA (for some reasons), conservative way adding that support may be the following (when removing is considered too aggressive).

diff --git a/mpi/longlong.h b/mpi/longlong.h
index 39cdd0c2..c299534c 100644
--- a/mpi/longlong.h
+++ b/mpi/longlong.h
@@ -430,14 +430,14 @@ extern UDItype __udiv_qrnnd ();
 #  define UMUL_TIME 40
 #  define UDIV_TIME 80
 # endif
-# ifndef LONGLONG_STANDALONE
+# if !defined(LONGLONG_STANDALONE) && !defined(ASM_DISABLED)
 #  define udiv_qrnnd(q, r, n1, n0, d) \
   do { USItype __r;							\
     (q) = __udiv_qrnnd (&__r, (n1), (n0), (d)); 			\
     (r) = __r;								\
   } while (0)
 extern USItype __udiv_qrnnd ();
-# endif /* !LONGLONG_STANDALONE */
+# endif /* !LONGLONG_STANDALONE && !ASM_DISABLED */
 # define count_leading_zeros(count, x) \
   do {								       \
     USItype __tmp;						       \

I'll push this if no objection.

Pushed the change.

Thanks! Interestingly didn't seem to work with 1.9.x but it does with 1.10x. Maybe I made some error when testing.

didn't seem to work with 1.9.x

No, it is not backported to 1.9 (or 1.8).

You need to apply another patch for 1.9.

diff --git a/configure.ac b/configure.ac
index 37947ecb..6fdca24a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -546,6 +546,9 @@ AC_ARG_ENABLE([asm],
               [try_asm_modules=$enableval],
               [try_asm_modules=yes])
 AC_MSG_RESULT($try_asm_modules)
+if test "$try_asm_modules" != yes ; then
+    AC_DEFINE(ASM_DISABLED,1,[Defined if --disable-asm was used to configure])
+fi
 
 # Implementation of the --enable-m-guard switch.
 AC_MSG_CHECKING([whether memory guard is requested])
werner changed the task status from Open to Testing.Sep 22 2022, 11:00 AM
werner removed a project: Restricted Project.