On ARM, where profil_counter is not static, it is brought in by
references to various standard functions, as noted in
<https://sourceware.org/ml/libc-alpha/2014-11/msg00890.html>, although
it is not a standard function itself. I don't know if this also
causes test failures on SPARC, although I see no reason for it not to
do so.
This patch fixes this namespace issue. profil_counter is renamed to
__profil_counter and made a weak alias on ARM and SPARC. Because of
the uses in profil.c / sprofil.c it seems simplest to make the rename
globally, including on the other architectures for which
profil_counter was static and so the change is of no substance. The
variant names profil_counter_* used in sprofil.c are also renamed to
start with __ so that undesired function names do not get exported in
static libc.
As I noted in bug 17726, profil_counter should probably be a compat
symbol on ARM and SPARC, so it wouldn't exist at all in static libc
even as a weak alias. Since defining a compat symbol still requires
an internal name as a target of an alias, this patch still seems
reasonable as an intermediate step towards that goal: it wouldn't be
possible for the function simply to be static profil_counter on ARM
and SPARC with profil_counter also being the exported compat symbol
name, so profil.c / sprofil.c would still need to be prepared to call
the function under another name (here, __profil_counter).
Tested for x86_64 (testsuite, and that stripped installed shared
libraries are unchanged by the patch) and ARM (ABI and linknamespace
tests - this patch reduces the number of linknamespace failures I see
on ARM from 227 to 5, the residue being math.h failures for fe*
functions and for j0l/j1n/jnl/y0l/y1l/ynl aliases).
2014-12-17 Joseph Myers <joseph@codesourcery.com>
[BZ #17725]
* sysdeps/generic/profil-counter.h (profil_counter): Rename to
__profil_counter.
* sysdeps/unix/sysv/linux/hppa/profil-counter.h (profil_counter):
Likewise.
* sysdeps/unix/sysv/linux/i386/profil-counter.h (profil_counter):
Likewise.
* sysdeps/unix/sysv/linux/ia64/profil-counter.h (profil_counter):
Likewise.
* sysdeps/unix/sysv/linux/s390/s390-32/profil-counter.h
(profil_counter): Likewise.
* sysdeps/unix/sysv/linux/s390/s390-64/profil-counter.h
(profil_counter): Likewise.
* sysdeps/unix/sysv/linux/sh/profil-counter.h (profil_counter):
Likewise.
* sysdeps/unix/sysv/linux/tile/profil-counter.h (profil_counter):
Likewise.
* sysdeps/unix/sysv/linux/x86_64/profil-counter.h
(profil_counter): Likewise.
* sysdeps/unix/sysv/linux/arm/profil-counter.h (profil_counter):
Likewise.
[!__profil_counter] (profil_counter): Define as weak alias of
__profil_counter.
* sysdeps/unix/sysv/linux/sparc/sparc32/profil-counter.h
(profil_counter): Rename to __profil_counter.
[!__profil_counter] (profil_counter): Define as weak alias of
__profil_counter.
* sysdeps/unix/sysv/linux/sparc/sparc64/profil-counter.h
(profil_counter): Rename to __profil_counter.
[!__profil_counter] (profil_counter): Define as weak alias of
__profil_counter.
* sysdeps/posix/profil.c: Update comment referring to
profil_counter.
(__profil): Use __profil_counter instead of profil_counter.
* sysdeps/posix/sprofil.c (profil_counter): Rename to
__profil_counter. Use __profil_counter_ushort and
__profil_counter_uint in definitions.
(__sprofil): Use __profil_counter_uint and __profil_counter_ushort
instead of profil_counter_uint and profil_counter_ushort.
* sysdeps/unix/sysv/linux/x86_64/Makefile: New file.
* sysdeps/unix/sysv/linux/x86_64/Versions: New file.
* sysdeps/unix/sysv/linux/x86_64/bits/fcntl.h: New file.
* sysdeps/unix/sysv/linux/x86_64/bits/mman.h: New file.
* sysdeps/unix/sysv/linux/x86_64/bits/stat.h: New file.
* sysdeps/unix/sysv/linux/x86_64/bits/statfs.h: New file.
* sysdeps/unix/sysv/linux/x86_64/bits/time.h: New file.
* sysdeps/unix/sysv/linux/x86_64/bits/types.h: New file.
* sysdeps/unix/sysv/linux/x86_64/brk.c: New file.
* sysdeps/unix/sysv/linux/x86_64/clone.S: New file.
* sysdeps/unix/sysv/linux/x86_64/fstatfs64.c: New file.
* sysdeps/unix/sysv/linux/x86_64/ftruncate64.c: New file.
* sysdeps/unix/sysv/linux/x86_64/fxstat.c: New file.
* sysdeps/unix/sysv/linux/x86_64/fxstat64.c: New file.
* sysdeps/unix/sysv/linux/x86_64/getdents.c: New file.
* sysdeps/unix/sysv/linux/x86_64/getdents64.c: New file.
* sysdeps/unix/sysv/linux/x86_64/getrlimit64.c: New file.
* sysdeps/unix/sysv/linux/x86_64/gettimeofday.c: New file.
* sysdeps/unix/sysv/linux/x86_64/glob64.c: New file.
* sysdeps/unix/sysv/linux/x86_64/lxstat.c: New file.
* sysdeps/unix/sysv/linux/x86_64/lxstat64.c: New file.
* sysdeps/unix/sysv/linux/x86_64/mmap64.c: New file.
* sysdeps/unix/sysv/linux/x86_64/pread64.c: New file.
* sysdeps/unix/sysv/linux/x86_64/profil-counter.h: New file.
* sysdeps/unix/sysv/linux/x86_64/pwrite64.c: New file.
* sysdeps/unix/sysv/linux/x86_64/readdir.c: New file.
* sysdeps/unix/sysv/linux/x86_64/readdir64.c: New file.
* sysdeps/unix/sysv/linux/x86_64/readdir64_r.c: New file.
* sysdeps/unix/sysv/linux/x86_64/readdir_r.c: New file.
* sysdeps/unix/sysv/linux/x86_64/recv.c: New file.
* sysdeps/unix/sysv/linux/x86_64/register-dump.h: New file.
* sysdeps/unix/sysv/linux/x86_64/send.c: New file.
* sysdeps/unix/sysv/linux/x86_64/setrlimit64.c: New file.
* sysdeps/unix/sysv/linux/x86_64/sigaction.c: New file.
* sysdeps/unix/sysv/linux/x86_64/sigcontextinfo.h: New file.
* sysdeps/unix/sysv/linux/x86_64/sigpending.c: New file.
* sysdeps/unix/sysv/linux/x86_64/sigprocmask.c: New file.
* sysdeps/unix/sysv/linux/x86_64/sigsuspend.c: New file.
* sysdeps/unix/sysv/linux/x86_64/statfs64.c: New file.
* sysdeps/unix/sysv/linux/x86_64/sys/perm.h: New file.
* sysdeps/unix/sysv/linux/x86_64/sys/procfs.h: New file.
* sysdeps/unix/sysv/linux/x86_64/sys/reg.h: New file.
* sysdeps/unix/sysv/linux/x86_64/sys/ucontext.h: New file.
* sysdeps/unix/sysv/linux/x86_64/sys/user.h: New file.
* sysdeps/unix/sysv/linux/x86_64/syscall.S: New file.
* sysdeps/unix/sysv/linux/x86_64/syscalls.list: New file.
* sysdeps/unix/sysv/linux/x86_64/sysdep.S: New file.
* sysdeps/unix/sysv/linux/x86_64/sysdep.h: New file.
* sysdeps/unix/sysv/linux/x86_64/time.c: New file.
* sysdeps/unix/sysv/linux/x86_64/truncate64.c: New file.
* sysdeps/unix/sysv/linux/x86_64/umount.c: New file.
* sysdeps/unix/sysv/linux/x86_64/vfork.S: New file.
* sysdeps/unix/sysv/linux/x86_64/xstat.c: New file.
* sysdeps/unix/sysv/linux/x86_64/xstat64.c: New file.
* sysdeps/unix/x86_64/sysdep.S: New file.
* sysdeps/unix/x86_64/sysdep.h: New file.
* sysdeps/x86_64/Implies: New file.
* sysdeps/x86_64/Makefile: New file.
* sysdeps/x86_64/Versions: New file.
* sysdeps/x86_64/__longjmp.S: New file.
* sysdeps/x86_64/abort-instr.h: New file.
* sysdeps/x86_64/atomicity.h: New file.
* sysdeps/x86_64/bits/endian.h: New file.
* sysdeps/x86_64/bits/setjmp.h: New file.
* sysdeps/x86_64/bits/string.h: New file.
* sysdeps/x86_64/bp-asm.h: New file.
* sysdeps/x86_64/bsd-_setjmp.S: New file.
* sysdeps/x86_64/bsd-setjmp.S: New file.
* sysdeps/x86_64/dl-machine.h: New file.
* sysdeps/x86_64/elf/initfini.c: New file.
* sysdeps/x86_64/elf/start.S: New file.
* sysdeps/x86_64/ffs.c: New file.
* sysdeps/x86_64/ffsll.c: New file.
* sysdeps/x86_64/fpu/bits/fenv.h: New file.
* sysdeps/x86_64/fpu/bits/mathdef.h: New file.
* sysdeps/x86_64/fpu/e_acosl.c: New file.
* sysdeps/x86_64/fpu/e_atan2l.c: New file.
* sysdeps/x86_64/fpu/e_exp2l.S: New file.
* sysdeps/x86_64/fpu/e_expl.c: New file.
* sysdeps/x86_64/fpu/e_fmodl.S: New file.
* sysdeps/x86_64/fpu/e_log10l.S: New file.
* sysdeps/x86_64/fpu/e_log2l.S: New file.
* sysdeps/x86_64/fpu/e_logl.S: New file.
* sysdeps/x86_64/fpu/e_powl.S: New file.
* sysdeps/x86_64/fpu/e_rem_pio2l.c: New file.
* sysdeps/x86_64/fpu/e_scalbl.S: New file.
* sysdeps/x86_64/fpu/e_sqrtl.c: New file.
* sysdeps/x86_64/fpu/fclrexcpt.c: New file.
* sysdeps/x86_64/fpu/fedisblxcpt.c: New file.
* sysdeps/x86_64/fpu/feenablxcpt.c: New file.
* sysdeps/x86_64/fpu/fegetenv.c: New file.
* sysdeps/x86_64/fpu/fegetexcept.c: New file.
* sysdeps/x86_64/fpu/fegetround.c: New file.
* sysdeps/x86_64/fpu/feholdexcpt.c: New file.
* sysdeps/x86_64/fpu/fesetenv.c: New file.
* sysdeps/x86_64/fpu/fesetround.c: New file.
* sysdeps/x86_64/fpu/fgetexcptflg.c: New file.
* sysdeps/x86_64/fpu/fraiseexcpt.c: New file.
* sysdeps/x86_64/fpu/fsetexcptflg.c: New file.
* sysdeps/x86_64/fpu/ftestexcept.c: New file.
* sysdeps/x86_64/fpu/libm-test-ulps: New file.
* sysdeps/x86_64/fpu/math_ldbl.h: New file.
* sysdeps/x86_64/fpu/printf_fphex.c: New file.
* sysdeps/x86_64/fpu/s_atanl.c: New file.
* sysdeps/x86_64/fpu/s_cosl.S: New file.
* sysdeps/x86_64/fpu/s_expm1l.S: New file.
* sysdeps/x86_64/fpu/s_fpclassifyl.c: New file.
* sysdeps/x86_64/fpu/s_isinfl.c: New file.
* sysdeps/x86_64/fpu/s_isnanl.c: New file.
* sysdeps/x86_64/fpu/s_log1pl.S: New file.
* sysdeps/x86_64/fpu/s_logbl.c: New file.
* sysdeps/x86_64/fpu/s_nextafterl.c: New file.
* sysdeps/x86_64/fpu/s_nexttoward.c: New file.
* sysdeps/x86_64/fpu/s_nexttowardf.c: New file.
* sysdeps/x86_64/fpu/s_rintl.c: New file.
* sysdeps/x86_64/fpu/s_significandl.c: New file.
* sysdeps/x86_64/fpu/s_sincosl.S: New file.
* sysdeps/x86_64/fpu/s_sinl.S: New file.
* sysdeps/x86_64/fpu/s_tanl.S: New file.
* sysdeps/x86_64/gmp-mparam.h: New file.
* sysdeps/x86_64/hp-timing.c: New file.
* sysdeps/x86_64/hp-timing.h: New file.
* sysdeps/x86_64/htonl.S: New file.
* sysdeps/x86_64/memusage.h: New file.
* sysdeps/x86_64/setjmp.S: New file.
* sysdeps/x86_64/soft-fp/sfp-machine.h: New file.
* sysdeps/x86_64/stackinfo.h: New file.
* sysdeps/x86_64/sysdep.h: New file.
* sysdeps/unix/sysv/linux/x86_64/ldd-rewrite.sed: New file.