Commit Graph

6 Commits

Author SHA1 Message Date
Stefan Liebler
18d6c45e12 s390: Refactor ifunc resolvers due to false debuginfo.
This patch adjusts the s390 specific ifunc helper macros in ifunc-resolve.h to
use the common __ifunc macro, which uses gcc attribute ifunc to get rid of the
false debuginfo. Therefore the redirection construct is applied where needed.

Perhaps in future we can switch some of the internal symbols __GI_* from the
fallback variant to the ifunc function. But this change is not
straightforward due to a segmentation fault while linking libc.so with older
binutils on s390.

ChangeLog:

	[BZ #20478]
	* sysdeps/s390/multiarch/ifunc-resolve.h
	(s390_vx_libc_ifunc2, s390_libc_ifunc): Use __ifunc from libc-symbols.h
	to create ifunc symbols.
	(s390_vx_libc_ifunc_init, s390_vx_libc_ifunc_redirected
	, s390_vx_libc_ifunc2_redirected, s390_libc_ifunc_init): New define.
	* sysdeps/s390/multiarch/memchr.c: Redirect ifunced function in header
	for using it as type for ifunc function.
	* sysdeps/s390/multiarch/mempcpy.c: Likewise.
	* sysdeps/s390/multiarch/rawmemchr.c: Likewise.
	* sysdeps/s390/multiarch/stpcpy.c: Likewise.
	* sysdeps/s390/multiarch/stpncpy.c: Likewise.
	* sysdeps/s390/multiarch/strcat.c: Likewise.
	* sysdeps/s390/multiarch/strchr.c: Likewise.
	* sysdeps/s390/multiarch/strcmp.c: Likewise.
	* sysdeps/s390/multiarch/strcpy.c: Likewise.
	* sysdeps/s390/multiarch/strcspn.c: Likewise.
	* sysdeps/s390/multiarch/strlen.c: Likewise.
	* sysdeps/s390/multiarch/strncmp.c: Likewise.
	* sysdeps/s390/multiarch/strncpy.c: Likewise.
	* sysdeps/s390/multiarch/strnlen.c: Likewise.
	* sysdeps/s390/multiarch/strpbrk.c: Likewise.
	* sysdeps/s390/multiarch/strrchr.c: Likewise.
	* sysdeps/s390/multiarch/strspn.c: Likewise.
	* sysdeps/s390/multiarch/wcschr.c: Likewise.
	* sysdeps/s390/multiarch/wcscmp.c: Likewise.
	* sysdeps/s390/multiarch/wcspbrk.c: Likewise.
	* sysdeps/s390/multiarch/wcsspn.c: Likewise.
	* sysdeps/s390/multiarch/wmemchr.c: Likewise.
	* sysdeps/s390/multiarch/wmemset.c: Likewise.
	* sysdeps/s390/s390-32/multiarch/memcmp.c: Likewise.
	* sysdeps/s390/s390-32/multiarch/memcpy.c: Likewise.
	* sysdeps/s390/s390-32/multiarch/memset.c: Likewise.
	* sysdeps/s390/s390-64/multiarch/memcmp.c: Likewise.
	* sysdeps/s390/s390-64/multiarch/memcpy.c: Likewise.
	* sysdeps/s390/s390-64/multiarch/memset.c: Likewise.
2016-10-07 10:11:21 +02:00
Stefan Liebler
7165583255 S390: Do not call memcpy, memcmp, memset within libc.so via ifunc-plt.
On s390, the memcpy, memcmp, memset functions are IFUNC symbols,
which are created with s390_libc_ifunc-macro.
This macro creates a __GI_ symbol which is set to the
ifunced symbol. Thus calls within libc.so to e.g. memcpy
result in a call to *ABS*+0x954c0@plt stub and afterwards
to the resolved memcpy-ifunc-variant.

This patch sets the __GI_ symbol to the default-ifunc-variant
to avoid the plt call. The __GI_ symbols are now created at the
default variant of ifunced function.

ChangeLog:

	* sysdeps/s390/multiarch/ifunc-resolve.h (s390_libc_ifunc):
	Remove __GI_ symbol.
	* sysdeps/s390/s390-32/multiarch/memcmp-s390.S: Add __GI_memcmp symbol.
	* sysdeps/s390/s390-64/multiarch/memcmp-s390x.S: Likewise.
	* sysdeps/s390/s390-32/multiarch/memcpy-s390.S: Add __GI_memcpy symbol.
	* sysdeps/s390/s390-64/multiarch/memcpy-s390x.S: Likewise.
	* sysdeps/s390/s390-32/multiarch/memset-s390.S: Add __GI_memset symbol.
	* sysdeps/s390/s390-64/multiarch/memset-s390x.S: Likewise.
2016-05-24 10:39:13 +02:00
Joseph Myers
f7a9f785e5 Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
Stefan Liebler
31cf39421b S390: Use __asm__ instead of asm.
* sysdeps/s390/fpu/bits/mathinline.h:
	Use __asm__ [__volatile__] instead of asm [volatile].
	* sysdeps/s390/abort-instr.h: Likewise.
	* sysdeps/s390/atomic-machine.h: Likewise.
	* sysdeps/s390/bits/string.h: Likewise.
	* sysdeps/s390/dl-tls.h: Likewise.
	* sysdeps/s390/fpu/e_sqrt.c: Likewise.
	* sysdeps/s390/fpu/e_sqrtf.c: Likewise.
	* sysdeps/s390/fpu/e_sqrtl.c: Likewise.
	* sysdeps/s390/fpu/fesetround.c: Likewise.
	* sysdeps/s390/fpu/fpu_control.h: Likewise.
	* sysdeps/s390/fpu/s_fma.c: Likewise.
	* sysdeps/s390/fpu/s_fmaf.c: Likewise.
	* sysdeps/s390/memusage.h: Likewise.
	* sysdeps/s390/multiarch/ifunc-resolve.h: Likewise.
	* sysdeps/s390/nptl/pthread_spin_lock.c: Likewise.
	* sysdeps/s390/nptl/pthread_spin_trylock.c: Likewise.
	* sysdeps/s390/nptl/pthread_spin_unlock.c: Likewise.
	* sysdeps/s390/nptl/tls.h: Likewise.
	* sysdeps/s390/s390-32/__longjmp.c: Likewise.
	* sysdeps/s390/s390-32/backtrace.c: Likewise.
	* sysdeps/s390/s390-32/dl-machine.h: Likewise.
	* sysdeps/s390/s390-32/multiarch/memcmp.c: Likewise.
	* sysdeps/s390/s390-32/stackguard-macros.h: Likewise.
	* sysdeps/s390/s390-32/tls-macros.h: Likewise.
	* sysdeps/s390/s390-64/__longjmp.c: Likewise.
	* sysdeps/s390/s390-64/backtrace.c: Likewise.
	* sysdeps/s390/s390-64/dl-machine.h: Likewise.
	* sysdeps/s390/s390-64/iso-8859-1_cp037_z900.c: Likewise.
	* sysdeps/s390/s390-64/multiarch/memcmp.c: Likewise.
	* sysdeps/s390/s390-64/stackguard-macros.h: Likewise.
	* sysdeps/s390/s390-64/tls-macros.h: Likewise.
	* sysdeps/s390/s390-64/utf16-utf32-z9.c: Likewise.
	* sysdeps/s390/s390-64/utf8-utf16-z9.c: Likewise.
	* sysdeps/s390/s390-64/utf8-utf32-z9.c: Likewise.
	* sysdeps/unix/sysv/linux/s390/brk.c: Likewise.
	* sysdeps/unix/sysv/linux/s390/elision-trylock.c: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/____longjmp_chk.c: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-64/____longjmp_chk.c: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h: Likewise.
	* sysdeps/unix/sysv/linux/s390/sysconf.c: Likewise.
2015-11-20 08:56:40 +01:00
Stefan Liebler
fd484e057d S390: Ifunc resolver macro for vector instructions.
This patch introduces a s390 specific ifunc resolver macro for 32/64bit,
which chooses <func>_vx with vector instructions if HWCAP_S390_VX flag
in hwcaps is set or <func>_c if not.

ChangeLog:

	* sysdeps/s390/multiarch/ifunc-resolve.h (s390_vx_libc_ifunc,
	s390_vx_libc_ifunc2): New macro function.
2015-08-26 10:26:19 +02:00
Stefan Liebler
31556246c3 S390: Refactor ifunc implementations and enable ifunc-test-framework.
On s390 all ifunc resolvers were implemented in multiarch/ifunc-resolve.c.
The resulting single object files has undefined references to all ifunc-functions.
This patch introduces one multiarch/<func>.c file for each of memcpy, memcmp
and memset with the function specific ifunc resolver. The different function
implementations are now implemented in multiarch/<func>-s390x.S
(moved from multiarch/<func>.S).

The new multiarch/ifunc-resolve.h file contains the ifunc-resolver macro
and other helper-macros. They are merged and are now used in common for
32/64bit. Therefore the __<func>_g5/__<func>_z900 functions were renamed to
__<func>_default.

This patch also enables testing the ifunc implementations by implementing
the function __libc_ifunc_impl_list. It uses the helper-macros of ifunc-resolve.h.

ChangeLog:

	* sysdeps/s390/s390-32/multiarch/Makefile (sysdep_routines):
	Remove ifunc-resolve, add memset-s390, memcpy-s390, memcmp-s390.
	* sysdeps/s390/s390-32/multiarch/ifunc-resolve.c: Delete File.
	* sysdeps/s390/s390-32/multiarch/memcmp.S: Move to ...
	* sysdeps/s390/s390-32/multiarch/memcmp-s390.S: ... here.
	(memcmp, bcmp): Use __memcmp_default as alias source.
	* sysdeps/s390/s390-32/multiarch/memcmp.c: New File.
	* sysdeps/s390/s390-32/memcmp.S (__memcmp_g5):
	Rename to __memcmp_default.
	* sysdeps/s390/s390-32/multiarch/memcpy.S: Move to ...
	* sysdeps/s390/s390-32/multiarch/memcpy-s390.S: ... here.
	(memcpy): Use __memcpy_default as alias source.
	* sysdeps/s390/s390-32/multiarch/memcpy.c: New File.
	* sysdeps/s390/s390-32/memcpy.S (__memcpy_g5):
	Rename to __memcpy_default.
	* sysdeps/s390/s390-32/multiarch/memset.S: Move to ...
	* sysdeps/s390/s390-32/multiarch/memset-s390.S: ... here.
	(memset): Use __memset_default as alias source.
	* sysdeps/s390/s390-32/multiarch/memset.c: New File.
	* sysdeps/s390/s390-32/memset.S (__memset_g5):
	Rename to __memset_default.
	* sysdeps/s390/s390-64/multiarch/Makefile (sysdep_routines):
	Remove ifunc-resolve, add memset-s390x, memcpy-s390x, memcmp-s390x.
	* sysdeps/s390/s390-64/multiarch/ifunc-resolve.c: Delete File.
	* sysdeps/s390/s390-64/multiarch/memcmp.S: Move to ...
	* sysdeps/s390/s390-64/multiarch/memcmp-s390x.S: ... here.
	(memcmp, bcmp): Use __memcmp_default as alias source.
	* sysdeps/s390/s390-64/multiarch/memcmp.c: New File.
	* sysdeps/s390/s390-64/memcmp.S (__memcmp_z900):
	Rename to __memcmp_default.
	* sysdeps/s390/s390-64/multiarch/memcpy.S: Move to ...
	* sysdeps/s390/s390-64/multiarch/memcpy-s390x.S: ... here.
	(memcpy): Use __memcpy_default as alias source.
	* sysdeps/s390/s390-64/multiarch/memcpy.c: New File.
	* sysdeps/s390/s390-64/memcpy.S (__memcpy_z900):
	Rename to __memcpy_default.
	* sysdeps/s390/s390-64/multiarch/memset.S: Move to ...
	* sysdeps/s390/s390-64/multiarch/memset-s390x.S: ... here.
	(memset): Use __memset_default as alias source.
	* sysdeps/s390/s390-64/multiarch/memset.c: New File.
	* sysdeps/s390/s390-64/memset.S (__memset_z900):
	Rename to __memset_default.
	* sysdeps/s390/multiarch/ifunc-resolve.h: New File.
	* sysdeps/s390/multiarch/ifunc-impl-list.c: New File.
2015-08-26 10:26:18 +02:00