[OpenAFS-devel] RestrictedQuery strange build failure on AIX

Benjamin Kaduk kaduk@MIT.EDU
Wed, 19 Mar 2014 16:41:33 -0400 (EDT)


On Wed, 19 Mar 2014, Gergely Risko wrote:

> Hi,
>
> AIX noob here :(
>
> Can someone please help me figure out why this fails:
> http://buildbot.openafs.org:8010/builders/aix-builder/builds/11224/steps/compile/logs/stdio
>
>> 	 /bin/sh ../../libtool --quiet --mode=link --tag=CC  xlc_r -static  -L/scratch/buildbot/slave2/power-aix/build/lib -L/scratch/buildbot/slave2/power-aix/build/lib  -O     -O -K -D_NONSTD_TYPES -D_MBI=void   -I/scratch/buildbot/slave2/power-aix/build/src/config -I/scratch/buildbot/slave2/power-aix/build/include  -I. -I.       -DAFS_PTHREAD_ENV   -o vlserver vlserver.o vlutils.o vlprocs.o vldbint.ss.o  vldbint.xdr.o  ../../src/rxstat/liboafs_rxstat.la  ../../src/audit/liboafs_audit.la  ../../src/ubik/liboafs_ubik.la  ../../src/sys/liboafs_sys.la  ../../src/rx/liboafs_rx.la  ../../src/rxstat/liboafs_rxstat.la  ../../src/rxkad/liboafs_rxkad.la  ../../src/lwp/liboafs_lwpcompat.la  ../../src/cmd/liboafs_cmd.la  ../../src/util/liboafs_util.la  ../../src/opr/liboafs_opr.la -lafshcrypto -lrokenafs -lpthread -ldl -ldl
>> ld: 0711-317 ERROR: Undefined symbol: .afsconf_CheckRestrictedQuery
>> ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.
>
> I have no access to an AIX box, so have no chance to debug this.  Google
> said that this could be because of linking order, but vlprocs.c is
> already using afsconf_SuperUser which is in the same file as the new
> afsconf_CheckRestrictedQuery.  So this seems strange to me.

The AIX builder is the only one in the current set of "triggered" builders 
(triggered for each gerrit submission) that enforces library export lists 
when building executables.  The OS X builders would also do so, but were 
disabled since a compiler update added more -Werror behavior that 
triggered on our code.

The fix is to export the afsconf_CheckRestrictedQuery from liboafs_auth 
and/or libafsauthent (as appropriate), by adding it (sorted 
alphabetically) to the files liboafs_auth.la.sym and/or 
libafsauthent.la.sym, as appropriate.  The dependencies in the root 
Makefile.in suggest that libafsauthent is the relevant one for this 
executable, but I don't remember enough of the distinction between the two 
to guarantee that the new symbol will not need to be exported from both of 
the auth libraries.

-Ben Kaduk