diff options
author | Roland McGrath <roland@gnu.org> | 2002-09-18 18:32:27 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 2002-09-18 18:32:27 +0000 |
commit | 0bc0e4dd09dd45bce4ab349717b3d0781021c5f7 (patch) | |
tree | 6b2aee6d70f1935444024f87b5dc1bd329eab075 /locale | |
parent | 62aecc63568ade4684f11cadd98e65d48b4025a8 (diff) | |
download | glibc-0bc0e4dd09dd45bce4ab349717b3d0781021c5f7.zip glibc-0bc0e4dd09dd45bce4ab349717b3d0781021c5f7.tar.gz glibc-0bc0e4dd09dd45bce4ab349717b3d0781021c5f7.tar.bz2 |
* locale/lc-ctype.c (_nl_postload_ctype): Add compat_symbol decls for
the __ctype_* compat symbols, so the relocs generated bind to the
right versioned global symbol in the shared object.
* elf/do-rel.h (elf_dynamic_do_rel): Mask off 0x8000 bit (hidden flag)
from the value taken from the DT_VERSYM table.
* elf/dl-runtime.c (fixup, profile_fixup): Likewise.
* sysdeps/mips/dl-machine.h (__dl_runtime_resolve): Likewise.
(RESOLVE_GOTSYM): Likewise.
Diffstat (limited to 'locale')
-rw-r--r-- | locale/lc-ctype.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/locale/lc-ctype.c b/locale/lc-ctype.c index ad815df..eb10841 100644 --- a/locale/lc-ctype.c +++ b/locale/lc-ctype.c @@ -27,6 +27,8 @@ _NL_CURRENT_DEFINE (LC_CTYPE); /* We are called after loading LC_CTYPE data to load it into the variables used by the ctype.h macros. */ + + void _nl_postload_ctype (void) { @@ -65,6 +67,21 @@ _nl_postload_ctype (void) extern const uint32_t *__ctype32_toupper; extern const uint32_t *__ctype32_tolower; + /* We need the .symver declarations these macros generate so that + our references are explicitly bound to the versioned symbol names + rather than the unadorned names that are not exported. When the + linker sees these bound to local symbols (as the unexported names are) + then it doesn't generate a proper relocation to the global symbols. + We need those relocations so that a versioned definition with a COPY + reloc in an executable will override the libc.so definition. */ + +compat_symbol (libc, __ctype_b, __ctype_b, GLIBC_2_0); +compat_symbol (libc, __ctype_tolower, __ctype_tolower, GLIBC_2_0); +compat_symbol (libc, __ctype_toupper, __ctype_toupper, GLIBC_2_0); +compat_symbol (libc, __ctype32_b, __ctype32_b, GLIBC_2_0); +compat_symbol (libc, __ctype32_tolower, __ctype32_tolower, GLIBC_2_2); +compat_symbol (libc, __ctype32_toupper, __ctype32_toupper, GLIBC_2_2); + __ctype_b = current (uint16_t, CLASS, 128); __ctype_toupper = current (uint32_t, TOUPPER, 128); __ctype_tolower = current (uint32_t, TOLOWER, 128); |