Skip to content

Commit

Permalink
S390: Get rid of linknamespace failures for string functions.
Browse files Browse the repository at this point in the history
  • Loading branch information
Stefan Liebler authored and Andreas Krebbel committed Jan 16, 2015
1 parent 53fbd16 commit 1d53248
Show file tree
Hide file tree
Showing 16 changed files with 142 additions and 80 deletions.
62 changes: 62 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,65 @@
2015-01-16 Stefan Liebler <stli@linux.vnet.ibm.com>

[BZ #17848]
* sysdeps/s390/s390-32/memcmp.S
(memcmp_g5): Rename to __memcmp_g5.
* sysdeps/s390/s390-32/memcpy.S
(memcpy_g5): Rename to __memcpy_g5.
Jump to __memcpy_mvcle instead of memcpy_mvcle.
(memcpy_mvcle) Rename to __memcpy_mvcle.
* sysdeps/s390/s390-32/memset.S
(memset_g5): Rename to __memset_g5.
* sysdeps/s390/s390-32/multiarch/ifunc-resolve.c
(IFUNC_RESOLVE): Prefix ifunc-resolve function
and use prefixed functions.
* sysdeps/s390/s390-32/multiarch/memcmp.S
(memcmp_z196): Rename to __memcmp_z196.
(memcmp_z10): Rename to __memcmp_z10.
(memcmp): Set alias to __memcmp_g5.
(bcmp): Set alias to __memcmp_g5.
* sysdeps/s390/s390-32/multiarch/memcpy.S
(memcpy_z196): Rename to __memcpy_z196.
Jump to __memcpy_mvcle instead of memcpy_mvcle.
(memcpy_z10): Rename to __memcpy_z10.
Jump to __memcpy_mvcle instead of memcpy_mvcle.
(memcpy): Set alias to __memcpy_g5.
* sysdeps/s390/s390-32/multiarch/memset.S
(memset_z196): Rename to __memset_z196.
Jump to __memset_mvcle instead of memset_mvcle.
(memset_z10): Rename to __memset_z10.
Jump to __memset_mvcle instead of memset_mvcle.
(memset_mvcle) Rename to __memset_mvcle.
(memset): Set alias to __memset_g5.
* sysdeps/s390/s390-64/memcmp.S
(memcmp_z900): Rename to __memcmp_z900.
* sysdeps/s390/s390-64/memcpy.S
(memcpy_z900): Rename to __memcpy_z900.
Jump to __memcpy_mvcle instead of memcpy_mvcle.
(memcpy_mvcle) Rename to __memcpy_mvcle.
* sysdeps/s390/s390-64/memset.S
(memset_z900): Rename to __memset_z900.
* sysdeps/s390/s390-64/multiarch/ifunc-resolve.c
(IFUNC_RESOLVE): Prefix ifunc-resolve function
and use prefixed functions.
* sysdeps/s390/s390-64/multiarch/memcmp.S
(memcmp_z196): Rename to __memcmp_z196.
(memcmp_z10): Rename to __memcmp_z10.
(memcmp): Set alias to __memcmp_z900.
(bcmp): Set alias to __memcmp_z900.
* sysdeps/s390/s390-64/multiarch/memcpy.S
(memcpy_z196): Rename to __memcpy_z196.
Jump to __memcpy_mvcle instead of memcpy_mvcle.
(memcpy_z10): Rename to __memcpy_z10.
Jump to __memcpy_mvcle instead of memcpy_mvcle.
(memcpy): Set alias to __memcpy_z900.
* sysdeps/s390/s390-64/multiarch/memset.S
(memset_z196): Rename to __memset_z196.
Jump to __memset_mvcle instead of memset_mvcle.
(memset_z10): Rename to __memset_z10.
Jump to __memset_mvcle instead of memset_mvcle.
(memset_mvcle) Rename to __memset_mvcle.
(memset): Set alias to __memset_z900.

2015-01-14 Joseph Myers <joseph@codesourcery.com>

[BZ #17748]
Expand Down
2 changes: 1 addition & 1 deletion NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ Version 2.21
17630, 17633, 17634, 17635, 17647, 17653, 17657, 17658, 17664, 17665,
17668, 17682, 17717, 17719, 17722, 17723, 17724, 17725, 17732, 17733,
17744, 17745, 17746, 17747, 17748, 17775, 17777, 17780, 17781, 17782,
17791, 17793, 17796, 17797, 17803, 17806, 17834
17791, 17793, 17796, 17797, 17803, 17806, 17834, 17848

* Optimized strcpy, stpcpy, strncpy, stpncpy, strcmp, and strncmp
implementations for powerpc64/powerpc64le.
Expand Down
4 changes: 2 additions & 2 deletions sysdeps/s390/s390-32/memcmp.S
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@

.text
#ifdef USE_MULTIARCH
ENTRY(memcmp_g5)
ENTRY(__memcmp_g5)
#else
ENTRY(memcmp)
#endif
Expand Down Expand Up @@ -58,7 +58,7 @@ ENTRY(memcmp)
.L_G5_17:
clc 0(1,%r3),0(%r2)
#ifdef USE_MULTIARCH
END(memcmp_g5)
END(__memcmp_g5)
#else
END(memcmp)
libc_hidden_builtin_def (memcmp)
Expand Down
10 changes: 5 additions & 5 deletions sysdeps/s390/s390-32/memcpy.S
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
%r4 = number of bytes to copy. */

#ifdef USE_MULTIARCH
ENTRY(memcpy_g5)
ENTRY(__memcpy_g5)
#else
ENTRY(memcpy)
#endif
Expand All @@ -49,7 +49,7 @@ ENTRY(memcpy)
br %r14
.L_G5_13:
chi %r5,4096 # Switch to mvcle for copies >1MB
jh memcpy_mvcle
jh __memcpy_mvcle
.L_G5_12:
mvc 0(256,%r1),0(%r3)
la %r1,256(%r1)
Expand All @@ -60,13 +60,13 @@ ENTRY(memcpy)
.L_G5_17:
mvc 0(1,%r1),0(%r3)
#ifdef USE_MULTIARCH
END(memcpy_g5)
END(__memcpy_g5)
#else
END(memcpy)
libc_hidden_builtin_def (memcpy)
#endif

ENTRY(memcpy_mvcle)
ENTRY(__memcpy_mvcle)
# Using as standalone function will result in unexpected
# results since the length field is incremented by 1 in order to
# compensate the changes already done in the functions above.
Expand All @@ -79,4 +79,4 @@ ENTRY(memcpy_mvcle)
jo .L_MVCLE_1
lr %r2,%r1 # return destination address
br %r14
END(memcpy_mvcle)
END(__memcpy_mvcle)
4 changes: 2 additions & 2 deletions sysdeps/s390/s390-32/memset.S
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
.text

#ifdef USE_MULTIARCH
ENTRY(memset_g5)
ENTRY(__memset_g5)
#else
ENTRY(memset)
#endif
Expand Down Expand Up @@ -58,7 +58,7 @@ ENTRY(memset)
.L_G5_20:
mvc 1(1,%r1),0(%r1)
#ifdef USE_MULTIARCH
END(memset_g5)
END(__memset_g5)
#else
END(memset)
libc_hidden_builtin_def (memset)
Expand Down
16 changes: 8 additions & 8 deletions sysdeps/s390/s390-32/multiarch/ifunc-resolve.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,17 +28,17 @@
#define IFUNC_RESOLVE(FUNC) \
asm (".globl " #FUNC "\n\t" \
".type " #FUNC ",@gnu_indirect_function\n\t" \
".set " #FUNC ",resolve_" #FUNC "\n\t" \
".set " #FUNC ",__resolve_" #FUNC "\n\t" \
".globl __GI_" #FUNC "\n\t" \
".set __GI_" #FUNC "," #FUNC "\n"); \
\
/* Make the declarations of the optimized functions hidden in order
to prevent GOT slots being generated for them. */ \
extern void *FUNC##_z196 attribute_hidden; \
extern void *FUNC##_z10 attribute_hidden; \
extern void *FUNC##_g5 attribute_hidden; \
extern void *__##FUNC##_z196 attribute_hidden; \
extern void *__##FUNC##_z10 attribute_hidden; \
extern void *__##FUNC##_g5 attribute_hidden; \
\
void *resolve_##FUNC (unsigned long int dl_hwcap) \
void *__resolve_##FUNC (unsigned long int dl_hwcap) \
{ \
if ((dl_hwcap & HWCAP_S390_STFLE) \
&& (dl_hwcap & HWCAP_S390_ZARCH) \
Expand All @@ -53,11 +53,11 @@
: : "cc"); \
\
if ((stfle_bits & (1ULL << (63 - STFLE_BITS_Z196))) != 0) \
return &FUNC##_z196; \
return &__##FUNC##_z196; \
else if ((stfle_bits & (1ULL << (63 - STFLE_BITS_Z10))) != 0) \
return &FUNC##_z10; \
return &__##FUNC##_z10; \
} \
return &FUNC##_g5; \
return &__##FUNC##_g5; \
}

IFUNC_RESOLVE(memset)
Expand Down
12 changes: 6 additions & 6 deletions sysdeps/s390/s390-32/multiarch/memcmp.S
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@

#if IS_IN (libc)

ENTRY(memcmp_z196)
ENTRY(__memcmp_z196)
.machine "z196"
.machinemode "zarch_nohighgprs"
ltr %r4,%r4
Expand Down Expand Up @@ -61,9 +61,9 @@ ENTRY(memcmp_z196)
br %r14
.L_Z196_14:
clc 0(1,%r3),0(%r2)
END(memcmp_z196)
END(__memcmp_z196)

ENTRY(memcmp_z10)
ENTRY(__memcmp_z10)
.machine "z10"
.machinemode "zarch_nohighgprs"
ltr %r4,%r4
Expand All @@ -90,15 +90,15 @@ ENTRY(memcmp_z10)
j .L_Z10_3
.L_Z10_15:
clc 0(1,%r3),0(%r2)
END(memcmp_z10)
END(__memcmp_z10)

#endif

#include "../memcmp.S"

#if !IS_IN (libc)
.globl memcmp
.set memcmp,memcmp_g5
.set memcmp,__memcmp_g5
.weak bcmp
.set bcmp,memcmp_g5
.set bcmp,__memcmp_g5
#endif
14 changes: 7 additions & 7 deletions sysdeps/s390/s390-32/multiarch/memcpy.S
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@

#if defined SHARED && IS_IN (libc)

ENTRY(memcpy_z196)
ENTRY(__memcpy_z196)
.machine "z196"
.machinemode "zarch_nohighgprs"
llgfr %r4,%r4
Expand All @@ -46,7 +46,7 @@ ENTRY(memcpy_z196)
br %r14
.L_Z196_5:
cgfi %r5,262144 # Switch to mvcle for copies >64MB
jh memcpy_mvcle
jh __memcpy_mvcle
.L_Z196_2:
pfd 1,768(%r3)
pfd 2,768(%r1)
Expand All @@ -58,9 +58,9 @@ ENTRY(memcpy_z196)
j .L_Z196_3
.L_Z196_14:
mvc 0(1,%r1),0(%r3)
END(memcpy_z196)
END(__memcpy_z196)

ENTRY(memcpy_z10)
ENTRY(__memcpy_z10)
.machine "z10"
.machinemode "zarch_nohighgprs"
llgfr %r4,%r4
Expand All @@ -75,7 +75,7 @@ ENTRY(memcpy_z10)
br %r14
.L_Z10_13:
cgfi %r5,65535 # Switch to mvcle for copies >16MB
jh memcpy_mvcle
jh __memcpy_mvcle
.L_Z10_12:
pfd 1,768(%r3)
pfd 2,768(%r1)
Expand All @@ -86,13 +86,13 @@ ENTRY(memcpy_z10)
j .L_Z10_3
.L_Z10_15:
mvc 0(1,%r1),0(%r3)
END(memcpy_z10)
END(__memcpy_z10)

#endif

#include "../memcpy.S"

#if !defined SHARED || !IS_IN (libc)
.globl memcpy
.set memcpy,memcpy_g5
.set memcpy,__memcpy_g5
#endif
18 changes: 9 additions & 9 deletions sysdeps/s390/s390-32/multiarch/memset.S
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@

#if IS_IN (libc)

ENTRY(memset_z196)
ENTRY(__memset_z196)
.machine "z196"
.machinemode "zarch_nohighgprs"
llgfr %r4,%r4
Expand All @@ -49,7 +49,7 @@ ENTRY(memset_z196)
br %r14
.L_Z196_1:
cgfi %r5,1048576
jh memset_mvcle # Switch to mvcle for >256MB
jh __memset_mvcle # Switch to mvcle for >256MB
.L_Z196_2:
pfd 2,1024(%r1)
mvc 1(256,%r1),0(%r1)
Expand All @@ -59,9 +59,9 @@ ENTRY(memset_z196)
j .L_Z196_3
.L_Z196_17:
mvc 1(1,%r1),0(%r1)
END(memset_z196)
END(__memset_z196)

ENTRY(memset_z10)
ENTRY(__memset_z10)
.machine "z10"
.machinemode "zarch_nohighgprs"
llgfr %r4,%r4
Expand All @@ -78,7 +78,7 @@ ENTRY(memset_z10)
br %r14
.L_Z10_15:
cgfi %r5,163840 # Switch to mvcle for >40MB
jh memset_mvcle
jh __memset_mvcle
.L_Z10_14:
pfd 2,1024(%r1)
mvc 1(256,%r1),0(%r1)
Expand All @@ -87,9 +87,9 @@ ENTRY(memset_z10)
j .L_Z10_3
.L_Z10_18:
mvc 1(1,%r1),0(%r1)
END(memset_z10)
END(__memset_z10)

ENTRY(memset_mvcle)
ENTRY(__memset_mvcle)
ahi %r4,2 # take back the change done by the caller
lr %r0,%r2 # save source address
lr %r1,%r3 # move pad byte to R1
Expand All @@ -101,13 +101,13 @@ ENTRY(memset_mvcle)
lr %r2,%r0 # return value is source address
.L1:
br %r14
END(memset_mvcle)
END(__memset_mvcle)

#endif

#include "../memset.S"

#if !IS_IN (libc)
.globl memset
.set memset,memset_g5
.set memset,__memset_g5
#endif
4 changes: 2 additions & 2 deletions sysdeps/s390/s390-64/memcmp.S
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@

.text
#ifdef USE_MULTIARCH
ENTRY(memcmp_z900)
ENTRY(__memcmp_z900)
#else
ENTRY(memcmp)
#endif
Expand Down Expand Up @@ -56,7 +56,7 @@ ENTRY(memcmp)
.L_Z900_15:
clc 0(1,%r3),0(%r2)
#ifdef USE_MULTIARCH
END(memcmp_z900)
END(__memcmp_z900)
#else
END(memcmp)
libc_hidden_builtin_def (memcmp)
Expand Down
Loading

0 comments on commit 1d53248

Please sign in to comment.