mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-22 10:50:07 +00:00
Avoid DWARF definition DIE on ifunc symbols
This commit is contained in:
parent
6dcf80c782
commit
f85fa27058
30
ChangeLog
30
ChangeLog
@ -1,3 +1,33 @@
|
|||||||
|
2012-08-09 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
[BZ #14166]
|
||||||
|
* sysdeps/i386/i686/multiarch/strstr-c.c (strstr): Redefined
|
||||||
|
to __redirect_strstr.
|
||||||
|
(__strstr_sse42): Use typeof __redirect_strstr.
|
||||||
|
(__strstr_ia32): Likewise.
|
||||||
|
(__libc_strstr): New prototype.
|
||||||
|
(strstr): Renamed to ...
|
||||||
|
(__libc_strstr): This.
|
||||||
|
(strstr): New strong alias of __libc_strstr.
|
||||||
|
* sysdeps/x86_64/multiarch/strstr-c.c: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/x86_64/time.c (time): Redefined to
|
||||||
|
__redirect_time.
|
||||||
|
Include <time.h>.
|
||||||
|
(__libc_time): New prototype.
|
||||||
|
(time_ifunc): Replace time with __libc_time.
|
||||||
|
(time): New strong alias and hidden definition of __libc_time.
|
||||||
|
(__GI_time): Remove strong alias.
|
||||||
|
* sysdeps/x86_64/multiarch/memmove.c: Don't include <string.h>.
|
||||||
|
Include <stddef.h>.
|
||||||
|
(memmove): Redefined to __redirect_memmove.
|
||||||
|
(__memmove_sse2): Use typeof __redirect_memmove.
|
||||||
|
(__memmove_ssse3): Likewise.
|
||||||
|
(__memmove_ssse3_back): Likewise.
|
||||||
|
(__libc_memmove): New prototype.
|
||||||
|
(memmove): Renamed to ...
|
||||||
|
(__libc_memmove): This.
|
||||||
|
(memmove): New strong alias of __libc_memmove.
|
||||||
|
|
||||||
2012-08-08 Mark Salter <msalter@redhat.com>
|
2012-08-08 Mark Salter <msalter@redhat.com>
|
||||||
|
|
||||||
* elf/elf.h
|
* elf/elf.h
|
||||||
|
4
NEWS
4
NEWS
@ -9,8 +9,8 @@ Version 2.17
|
|||||||
|
|
||||||
* The following bugs are resolved with this release:
|
* The following bugs are resolved with this release:
|
||||||
|
|
||||||
6778, 6808, 13717, 14042, 14150, 14151, 14154, 14157, 14173, 14283, 14298,
|
6778, 6808, 13717, 14042, 14166, 14150, 14151, 14154, 14157, 14173, 14283,
|
||||||
14307, 14328, 14331, 14336, 14337, 14347, 14349
|
14298, 14307, 14328, 14331, 14336, 14337, 14347, 14349
|
||||||
|
|
||||||
* Support for STT_GNU_IFUNC symbols added for s390 and s390x.
|
* Support for STT_GNU_IFUNC symbols added for s390 and s390x.
|
||||||
Optimized versions of memcpy, memset, and memcmp added for System z10 and
|
Optimized versions of memcpy, memset, and memcmp added for System z10 and
|
||||||
|
@ -7,9 +7,20 @@
|
|||||||
__hidden_ver1 (__strstr_ia32, __GI_strstr, __strstr_ia32);
|
__hidden_ver1 (__strstr_ia32, __GI_strstr, __strstr_ia32);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Redefine strstr so that the compiler won't complain about the type
|
||||||
|
mismatch with the IFUNC selector in strong_alias, below. */
|
||||||
|
#undef strstr
|
||||||
|
#define strstr __redirect_strstr
|
||||||
|
|
||||||
#include "string/strstr.c"
|
#include "string/strstr.c"
|
||||||
|
|
||||||
extern char *__strstr_sse42 (const char *, const char *) attribute_hidden;
|
extern __typeof (__redirect_strstr) __strstr_sse42 attribute_hidden;
|
||||||
extern __typeof (__strstr_ia32) __strstr_ia32 attribute_hidden;
|
extern __typeof (__redirect_strstr) __strstr_ia32 attribute_hidden;
|
||||||
|
|
||||||
libc_ifunc (strstr, HAS_SSE4_2 ? __strstr_sse42 : __strstr_ia32);
|
/* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle
|
||||||
|
ifunc symbol properly. */
|
||||||
|
extern __typeof (__redirect_strstr) __libc_strstr;
|
||||||
|
libc_ifunc (__libc_strstr, HAS_SSE4_2 ? __strstr_sse42 : __strstr_ia32)
|
||||||
|
|
||||||
|
#undef strstr
|
||||||
|
strong_alias (__libc_strstr, strstr)
|
||||||
|
@ -16,11 +16,20 @@
|
|||||||
<http://www.gnu.org/licenses/>. */
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
#ifdef SHARED
|
#ifdef SHARED
|
||||||
|
/* Redefine time so that the compiler won't complain about the type
|
||||||
|
mismatch with the IFUNC selector in strong_alias, below. */
|
||||||
|
#undef time
|
||||||
|
#define time __redirect_time
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
#include <dl-vdso.h>
|
#include <dl-vdso.h>
|
||||||
|
|
||||||
#define VSYSCALL_ADDR_vtime 0xffffffffff600400
|
#define VSYSCALL_ADDR_vtime 0xffffffffff600400
|
||||||
|
|
||||||
void *time_ifunc (void) __asm__ ("time");
|
/* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle
|
||||||
|
ifunc symbol properly. */
|
||||||
|
extern __typeof (__redirect_time) __libc_time;
|
||||||
|
void *time_ifunc (void) __asm__ ("__libc_time");
|
||||||
|
|
||||||
void *
|
void *
|
||||||
time_ifunc (void)
|
time_ifunc (void)
|
||||||
@ -30,7 +39,11 @@ time_ifunc (void)
|
|||||||
/* If the vDSO is not available we fall back on the old vsyscall. */
|
/* If the vDSO is not available we fall back on the old vsyscall. */
|
||||||
return _dl_vdso_vsym ("__vdso_time", &linux26) ?: (void *) VSYSCALL_ADDR_vtime;
|
return _dl_vdso_vsym ("__vdso_time", &linux26) ?: (void *) VSYSCALL_ADDR_vtime;
|
||||||
}
|
}
|
||||||
__asm (".type time, %gnu_indirect_function");
|
__asm (".type __libc_time, %gnu_indirect_function");
|
||||||
|
|
||||||
|
#undef time
|
||||||
|
strong_alias (__libc_time, time)
|
||||||
|
libc_hidden_ver (__libc_time, time)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
@ -45,5 +58,3 @@ time (time_t *t)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
strong_alias (time, __GI_time)
|
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
License along with the GNU C Library; if not, see
|
License along with the GNU C Library; if not, see
|
||||||
<http://www.gnu.org/licenses/>. */
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
#include <string.h>
|
#include <stddef.h>
|
||||||
|
|
||||||
#ifndef NOT_IN_libc
|
#ifndef NOT_IN_libc
|
||||||
#include <shlib-compat.h>
|
#include <shlib-compat.h>
|
||||||
@ -29,20 +29,31 @@
|
|||||||
# define libc_hidden_builtin_def(name) \
|
# define libc_hidden_builtin_def(name) \
|
||||||
__hidden_ver1 (__memmove_sse2, __GI_memmove, __memmove_sse2);
|
__hidden_ver1 (__memmove_sse2, __GI_memmove, __memmove_sse2);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
extern __typeof (memmove) __memmove_sse2 attribute_hidden;
|
/* Redefine memmove so that the compiler won't complain about the type
|
||||||
extern __typeof (memmove) __memmove_ssse3 attribute_hidden;
|
mismatch with the IFUNC selector in strong_alias, below. */
|
||||||
extern __typeof (memmove) __memmove_ssse3_back attribute_hidden;
|
#undef memmove
|
||||||
|
#define memmove __redirect_memmove
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "string/memmove.c"
|
#include "string/memmove.c"
|
||||||
|
|
||||||
#ifndef NOT_IN_libc
|
#ifndef NOT_IN_libc
|
||||||
libc_ifunc (memmove,
|
extern __typeof (__redirect_memmove) __memmove_sse2 attribute_hidden;
|
||||||
|
extern __typeof (__redirect_memmove) __memmove_ssse3 attribute_hidden;
|
||||||
|
extern __typeof (__redirect_memmove) __memmove_ssse3_back attribute_hidden;
|
||||||
|
|
||||||
|
/* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle
|
||||||
|
ifunc symbol properly. */
|
||||||
|
extern __typeof (__redirect_memmove) __libc_memmove;
|
||||||
|
libc_ifunc (__libc_memmove,
|
||||||
HAS_SSSE3
|
HAS_SSSE3
|
||||||
? (HAS_FAST_COPY_BACKWARD
|
? (HAS_FAST_COPY_BACKWARD
|
||||||
? __memmove_ssse3_back : __memmove_ssse3)
|
? __memmove_ssse3_back : __memmove_ssse3)
|
||||||
: __memmove_sse2);
|
: __memmove_sse2)
|
||||||
|
|
||||||
|
#undef memmove
|
||||||
|
strong_alias (__libc_memmove, memmove)
|
||||||
|
|
||||||
#if SHLIB_COMPAT (libc, GLIBC_2_2_5, GLIBC_2_14)
|
#if SHLIB_COMPAT (libc, GLIBC_2_2_5, GLIBC_2_14)
|
||||||
compat_symbol (libc, memmove, memcpy, GLIBC_2_2_5);
|
compat_symbol (libc, memmove, memcpy, GLIBC_2_2_5);
|
||||||
|
@ -7,9 +7,20 @@
|
|||||||
__hidden_ver1 (__strstr_sse2, __GI_strstr, __strstr_sse2);
|
__hidden_ver1 (__strstr_sse2, __GI_strstr, __strstr_sse2);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Redefine strstr so that the compiler won't complain about the type
|
||||||
|
mismatch with the IFUNC selector in strong_alias, below. */
|
||||||
|
#undef strstr
|
||||||
|
#define strstr __redirect_strstr
|
||||||
|
|
||||||
#include "string/strstr.c"
|
#include "string/strstr.c"
|
||||||
|
|
||||||
extern char *__strstr_sse42 (const char *, const char *) attribute_hidden;
|
extern __typeof (__redirect_strstr) __strstr_sse42 attribute_hidden;
|
||||||
extern __typeof (__strstr_sse2) __strstr_sse2 attribute_hidden;
|
extern __typeof (__redirect_strstr) __strstr_sse2 attribute_hidden;
|
||||||
|
|
||||||
libc_ifunc (strstr, HAS_SSE4_2 ? __strstr_sse42 : __strstr_sse2);
|
/* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle
|
||||||
|
ifunc symbol properly. */
|
||||||
|
extern __typeof (__redirect_strstr) __libc_strstr;
|
||||||
|
libc_ifunc (__libc_strstr, HAS_SSE4_2 ? __strstr_sse42 : __strstr_sse2)
|
||||||
|
|
||||||
|
#undef strstr
|
||||||
|
strong_alias (__libc_strstr, strstr)
|
||||||
|
Loading…
Reference in New Issue
Block a user