Thanks. There's still something fishy going on,
since the truss output is acting like we are never
calling openat.
Can you please send a copy of your config.h? I want
to verify that HAVE_OPENAT and related macros are set.
config.h.gz attatched.
Also, can you please verify that gnu/openat.c is being
compiled and the result is being linked into 'tar'?
It's definately being compiled ...
-rw-r--r-- 1 xxxxxx xxxxxxxx 8544 Sep 5 11:27 gnu/openat.c
-rw-r--r-- 1 xxxxxx xxxxxxxx 1572 Sep 5 11:28 gnu/openat.o
-rw-r--r-- 1 xxxxxx xxxxxxxx 1770 Sep 5 11:28 gnu/openat-die.o
-rw-r--r-- 1 xxxxxx xxxxxxxx 2024 Sep 5 11:28 gnu/openat-proc.o
$ rm src/tar
$ gmake -n
...
echo " CCLD " tar;xlc -O2 -qarch=ppc -D_LINUX_SOURCE_COMPAT -o tar buffer.o checkpoint.o compare.o create.o delete.o exit.o extract.o xheader.o incremen.o list.o misc.o names.o sparse.o suffix.o system.o tar.o transform.o unlink.o update.o utf8.o warning.o ../lib/libtar.a ../gnu/libgnu.a -liconv
...
Must be in libgnu.a if it's included ...
$ rm gnu/libgnu.a
$ gmake -n
...
echo " AR " libgnu.a;ar cru libgnu.a allocator.o areadlink.o areadlinkat.o argmatch.o argp-ba.o argp-eexst.o argp-fmtstream.o argp-fs-xinl.o argp-help.o argp-parse.o argp-pin.o argp-pv.o argp-pvh.o argp-xinl.o argp-version-etc.o backupfile.o c-ctype.o careadlinkat.o cloexec.o close-stream.o closeout.o opendir-safer.o dirname.o basename.o dirname-lgpl.o basename-lgpl.o stripslash.o exclude.o exitfail.o fd-hook.o fdutimensat.o filenamecat-lgpl.o full-write.o gettime.o hash.o human.o imaxtostr.o inttostr.o offtostr.o uinttostr.o umaxtostr.o localcharset.o malloca.o mbchar.o mbscasecmp.o modechange.o openat-die.o parse-datetime.o priv-set.o progname.o quote.o quotearg.o safe-read.o safe-write.o save-cwd.o savedir.o strnlen1.o tempname.o dup-safer.o fd-safer.o pipe-safer.o uniwidth/width.o unlinkdir.o utimens.o version-etc.o version-etc-fsf.o xmalloc.o xalloc-die.o xgetcwd.o xstrndup.o xstrtol.o xstrtoul.o xstrtol-error.o xstrtoumax.o xvasprintf.o xasprintf.o asnprintf.o asprintf.o at-func2.o canonicalize-lgpl.o chdir-long.o chown.o error.o fchownat.o fcntl.o float.o fnmatch.o fpending.o fstatat.o getcwd.o getcwd-lgpl.o getdelim.o getline.o getopt.o getopt1.o lchown.o link.o linkat.o lstat.o mbrtowc.o mbsinit.o mbsrtowcs.o mbsrtowcs-state.o mempcpy.o memrchr.o mkfifo.o mknod.o mktime.o obstack.o open.o openat.o openat-proc.o printf-args.o printf-parse.o rawmemchr.o regex.o rename.o renameat.o stat.o strchrnul.o symlink.o unlink.o unlinkat.o vasnprintf.o vasprintf.o wcrtomb.o
ranlib libgnu.a
$
So yes, it's being compiled and included.
Can you send the assembly-language output for openat.c?
Typically this can be done by compiling with -S rather
than with -c (all other options being the same).