mirror of git://sourceware.org/git/glibc.git
PowerPC ugly symbol versioning
http://sourceware.org/ml/libc-alpha/2013-08/msg00090.html This patch fixes symbol versioning in setjmp/longjmp. The existing code uses raw versions, which results in wrong symbol versioning when you want to build glibc with a base version of 2.19 for LE. Note that the merging the 64-bit and 32-bit versions in novmx-lonjmp.c and pt-longjmp.c doesn't result in GLIBC_2.0 versions for 64-bit, due to the base in shlib_versions. * sysdeps/powerpc/longjmp.c: Use proper symbol versioning macros. * sysdeps/powerpc/novmx-longjmp.c: Likewise. * sysdeps/powerpc/powerpc32/bsd-_setjmp.S: Likewise. * sysdeps/powerpc/powerpc32/bsd-setjmp.S: Likewise. * sysdeps/powerpc/powerpc32/fpu/__longjmp.S: Likewise. * sysdeps/powerpc/powerpc32/fpu/setjmp.S: Likewise. * sysdeps/powerpc/powerpc32/mcount.c: Likewise. * sysdeps/powerpc/powerpc32/setjmp.S: Likewise. * sysdeps/powerpc/powerpc64/setjmp.S: Likewise. * nptl/sysdeps/unix/sysv/linux/powerpc/pt-longjmp.c: Likewise.
This commit is contained in:
parent
be1e5d3113
commit
9b874b2f1e
13
ChangeLog
13
ChangeLog
|
@ -1,3 +1,16 @@
|
||||||
|
2013-10-04 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
|
* sysdeps/powerpc/longjmp.c: Use proper symbol versioning macros.
|
||||||
|
* sysdeps/powerpc/novmx-longjmp.c: Likewise.
|
||||||
|
* sysdeps/powerpc/powerpc32/bsd-_setjmp.S: Likewise.
|
||||||
|
* sysdeps/powerpc/powerpc32/bsd-setjmp.S: Likewise.
|
||||||
|
* sysdeps/powerpc/powerpc32/fpu/__longjmp.S: Likewise.
|
||||||
|
* sysdeps/powerpc/powerpc32/fpu/setjmp.S: Likewise.
|
||||||
|
* sysdeps/powerpc/powerpc32/mcount.c: Likewise.
|
||||||
|
* sysdeps/powerpc/powerpc32/setjmp.S: Likewise.
|
||||||
|
* sysdeps/powerpc/powerpc64/setjmp.S: Likewise.
|
||||||
|
* nptl/sysdeps/unix/sysv/linux/powerpc/pt-longjmp.c: Likewise.
|
||||||
|
|
||||||
2013-10-04 Anton Blanchard <anton@au1.ibm.com>
|
2013-10-04 Anton Blanchard <anton@au1.ibm.com>
|
||||||
Alistair Popple <alistair@ozlabs.au.ibm.com>
|
Alistair Popple <alistair@ozlabs.au.ibm.com>
|
||||||
Alan Modra <amodra@gmail.com>
|
Alan Modra <amodra@gmail.com>
|
||||||
|
|
|
@ -41,13 +41,8 @@ void __novmx_longjmp (jmp_buf env, int val)
|
||||||
__novmx__libc_longjmp (env, val);
|
__novmx__libc_longjmp (env, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
# if __WORDSIZE == 64
|
compat_symbol (libpthread, __novmx_longjmp, longjmp, GLIBC_2_0);
|
||||||
symbol_version (__novmx_longjmp,longjmp,GLIBC_2.3);
|
compat_symbol (libpthread, __novmx_siglongjmp, siglongjmp, GLIBC_2_0);
|
||||||
symbol_version (__novmx_siglongjmp,siglongjmp,GLIBC_2.3);
|
|
||||||
# else
|
|
||||||
symbol_version (__novmx_longjmp,longjmp,GLIBC_2.0);
|
|
||||||
symbol_version (__novmx_siglongjmp,siglongjmp,GLIBC_2.0);
|
|
||||||
# endif
|
|
||||||
#endif /* defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4)) */
|
#endif /* defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4)) */
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -62,5 +57,5 @@ __vmx_siglongjmp (jmp_buf env, int val)
|
||||||
__libc_siglongjmp (env, val);
|
__libc_siglongjmp (env, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
versioned_symbol (libc, __vmx_longjmp, longjmp, GLIBC_2_3_4);
|
versioned_symbol (libpthread, __vmx_longjmp, longjmp, GLIBC_2_3_4);
|
||||||
versioned_symbol (libc, __vmx_siglongjmp, siglongjmp, GLIBC_2_3_4);
|
versioned_symbol (libpthread, __vmx_siglongjmp, siglongjmp, GLIBC_2_3_4);
|
||||||
|
|
|
@ -55,6 +55,6 @@ weak_alias (__vmx__libc_siglongjmp, __vmxsiglongjmp)
|
||||||
|
|
||||||
default_symbol_version (__vmx__libc_longjmp, __libc_longjmp, GLIBC_PRIVATE);
|
default_symbol_version (__vmx__libc_longjmp, __libc_longjmp, GLIBC_PRIVATE);
|
||||||
default_symbol_version (__vmx__libc_siglongjmp, __libc_siglongjmp, GLIBC_PRIVATE);
|
default_symbol_version (__vmx__libc_siglongjmp, __libc_siglongjmp, GLIBC_PRIVATE);
|
||||||
default_symbol_version (__vmx_longjmp, _longjmp, GLIBC_2.3.4);
|
versioned_symbol (libc, __vmx_longjmp, _longjmp, GLIBC_2_3_4);
|
||||||
default_symbol_version (__vmxlongjmp, longjmp, GLIBC_2.3.4);
|
versioned_symbol (libc, __vmxlongjmp, longjmp, GLIBC_2_3_4);
|
||||||
default_symbol_version (__vmxsiglongjmp, siglongjmp, GLIBC_2.3.4);
|
versioned_symbol (libc, __vmxsiglongjmp, siglongjmp, GLIBC_2_3_4);
|
||||||
|
|
|
@ -50,13 +50,7 @@ weak_alias (__novmx__libc_siglongjmp, __novmx_longjmp)
|
||||||
weak_alias (__novmx__libc_siglongjmp, __novmxlongjmp)
|
weak_alias (__novmx__libc_siglongjmp, __novmxlongjmp)
|
||||||
weak_alias (__novmx__libc_siglongjmp, __novmxsiglongjmp)
|
weak_alias (__novmx__libc_siglongjmp, __novmxsiglongjmp)
|
||||||
|
|
||||||
# if __WORDSIZE == 64
|
compat_symbol (libc, __novmx_longjmp, _longjmp, GLIBC_2_0);
|
||||||
symbol_version (__novmx_longjmp,_longjmp,GLIBC_2.3);
|
compat_symbol (libc, __novmxlongjmp, longjmp, GLIBC_2_0);
|
||||||
symbol_version (__novmxlongjmp,longjmp,GLIBC_2.3);
|
compat_symbol (libc, __novmxsiglongjmp, siglongjmp, GLIBC_2_0);
|
||||||
symbol_version (__novmxsiglongjmp,siglongjmp,GLIBC_2.3);
|
|
||||||
# else
|
|
||||||
symbol_version (__novmx_longjmp,_longjmp,GLIBC_2.0);
|
|
||||||
symbol_version (__novmxlongjmp,longjmp,GLIBC_2.0);
|
|
||||||
symbol_version (__novmxsiglongjmp,siglongjmp,GLIBC_2.0);
|
|
||||||
# endif
|
|
||||||
#endif /* defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4)) */
|
#endif /* defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4)) */
|
||||||
|
|
|
@ -30,7 +30,7 @@ libc_hidden_def (_setjmp)
|
||||||
/* Build a versioned object for libc. */
|
/* Build a versioned object for libc. */
|
||||||
|
|
||||||
# if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4)
|
# if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4)
|
||||||
symbol_version (__novmx_setjmp,_setjmp,GLIBC_2.0);
|
compat_symbol (libc, __novmx_setjmp, _setjmp, GLIBC_2_0);
|
||||||
|
|
||||||
ENTRY (__novmx_setjmp)
|
ENTRY (__novmx_setjmp)
|
||||||
li r4,0 /* Set second argument to 0. */
|
li r4,0 /* Set second argument to 0. */
|
||||||
|
@ -39,7 +39,7 @@ END (__novmx_setjmp)
|
||||||
libc_hidden_def (__novmx_setjmp)
|
libc_hidden_def (__novmx_setjmp)
|
||||||
# endif /* defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4) */
|
# endif /* defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4) */
|
||||||
|
|
||||||
default_symbol_version (__vmx_setjmp,_setjmp,GLIBC_2.3.4)
|
versioned_symbol (libc, __vmx_setjmp, _setjmp, GLIBC_2_3_4)
|
||||||
/* __GI__setjmp prototype is needed for ntpl i.e. _setjmp is defined
|
/* __GI__setjmp prototype is needed for ntpl i.e. _setjmp is defined
|
||||||
as a libc_hidden_proto & is used in sysdeps/generic/libc-start.c
|
as a libc_hidden_proto & is used in sysdeps/generic/libc-start.c
|
||||||
if HAVE_CLEANUP_JMP_BUF is defined */
|
if HAVE_CLEANUP_JMP_BUF is defined */
|
||||||
|
|
|
@ -26,7 +26,7 @@ ENTRY (__novmxsetjmp)
|
||||||
b __novmx__sigsetjmp@local
|
b __novmx__sigsetjmp@local
|
||||||
END (__novmxsetjmp)
|
END (__novmxsetjmp)
|
||||||
strong_alias (__novmxsetjmp, __novmx__setjmp)
|
strong_alias (__novmxsetjmp, __novmx__setjmp)
|
||||||
symbol_version (__novmxsetjmp, setjmp, GLIBC_2.0)
|
compat_symbol (libc, __novmxsetjmp, setjmp, GLIBC_2_0)
|
||||||
|
|
||||||
#endif /* defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4) ) */
|
#endif /* defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4) ) */
|
||||||
|
|
||||||
|
@ -36,4 +36,4 @@ ENTRY (__vmxsetjmp)
|
||||||
END (__vmxsetjmp)
|
END (__vmxsetjmp)
|
||||||
strong_alias (__vmxsetjmp, __vmx__setjmp)
|
strong_alias (__vmxsetjmp, __vmx__setjmp)
|
||||||
strong_alias (__vmx__setjmp, __setjmp)
|
strong_alias (__vmx__setjmp, __setjmp)
|
||||||
default_symbol_version (__vmxsetjmp,setjmp,GLIBC_2.3.4)
|
versioned_symbol (libc, __vmxsetjmp, setjmp, GLIBC_2_3_4)
|
||||||
|
|
|
@ -26,14 +26,14 @@
|
||||||
|
|
||||||
#else /* !NOT_IN_libc */
|
#else /* !NOT_IN_libc */
|
||||||
/* Build a versioned object for libc. */
|
/* Build a versioned object for libc. */
|
||||||
default_symbol_version (__vmx__longjmp,__longjmp,GLIBC_2.3.4);
|
versioned_symbol (libc, __vmx__longjmp, __longjmp, GLIBC_2_3_4);
|
||||||
# define __longjmp __vmx__longjmp
|
# define __longjmp __vmx__longjmp
|
||||||
# include "__longjmp-common.S"
|
# include "__longjmp-common.S"
|
||||||
|
|
||||||
# if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4)
|
# if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4)
|
||||||
# define __NO_VMX__
|
# define __NO_VMX__
|
||||||
# undef JB_SIZE
|
# undef JB_SIZE
|
||||||
symbol_version (__novmx__longjmp,__longjmp,GLIBC_2.0);
|
compat_symbol (libc, __novmx__longjmp, __longjmp, GLIBC_2_0);
|
||||||
# undef __longjmp
|
# undef __longjmp
|
||||||
# define __longjmp __novmx__longjmp
|
# define __longjmp __novmx__longjmp
|
||||||
# include "__longjmp-common.S"
|
# include "__longjmp-common.S"
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
|
|
||||||
#else /* !NOT_IN_libc */
|
#else /* !NOT_IN_libc */
|
||||||
/* Build a versioned object for libc. */
|
/* Build a versioned object for libc. */
|
||||||
default_symbol_version (__vmx__sigsetjmp,__sigsetjmp,GLIBC_2.3.4)
|
versioned_symbol (libc, __vmx__sigsetjmp, __sigsetjmp, GLIBC_2_3_4)
|
||||||
# define __sigsetjmp __vmx__sigsetjmp
|
# define __sigsetjmp __vmx__sigsetjmp
|
||||||
# define __sigjmp_save __vmx__sigjmp_save
|
# define __sigjmp_save __vmx__sigjmp_save
|
||||||
# include "setjmp-common.S"
|
# include "setjmp-common.S"
|
||||||
|
@ -36,7 +36,7 @@ default_symbol_version (__vmx__sigsetjmp,__sigsetjmp,GLIBC_2.3.4)
|
||||||
# undef __sigsetjmp
|
# undef __sigsetjmp
|
||||||
# undef __sigjmp_save
|
# undef __sigjmp_save
|
||||||
# undef JB_SIZE
|
# undef JB_SIZE
|
||||||
symbol_version (__novmx__sigsetjmp,__sigsetjmp,GLIBC_2.0)
|
compat_symbol (libc, __novmx__sigsetjmp, __sigsetjmp, GLIBC_2_0)
|
||||||
# define __sigsetjmp __novmx__sigsetjmp
|
# define __sigsetjmp __novmx__sigsetjmp
|
||||||
# define __sigjmp_save __novmx__sigjmp_save
|
# define __sigjmp_save __novmx__sigjmp_save
|
||||||
# include "setjmp-common.S"
|
# include "setjmp-common.S"
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
/* __mcount_internal was added in glibc 2.15 with version GLIBC_PRIVATE,
|
/* __mcount_internal was added in glibc 2.15 with version GLIBC_PRIVATE,
|
||||||
but it should have been put in version GLIBC_2.15. Mark the
|
but it should have been put in version GLIBC_2.15. Mark the
|
||||||
GLIBC_PRIVATE version obsolete and add it to GLIBC_2.16 instead. */
|
GLIBC_PRIVATE version obsolete and add it to GLIBC_2.16 instead. */
|
||||||
default_symbol_version (___mcount_internal, __mcount_internal, GLIBC_2.16);
|
versioned_symbol (libc, ___mcount_internal, __mcount_internal, GLIBC_2_16);
|
||||||
|
|
||||||
#if SHLIB_COMPAT (libc, GLIBC_2_15, GLIBC_2_16)
|
#if SHLIB_COMPAT (libc, GLIBC_2_15, GLIBC_2_16)
|
||||||
strong_alias (___mcount_internal, ___mcount_internal_private);
|
strong_alias (___mcount_internal, ___mcount_internal_private);
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
|
|
||||||
#else /* !NOT_IN_libc */
|
#else /* !NOT_IN_libc */
|
||||||
/* Build a versioned object for libc. */
|
/* Build a versioned object for libc. */
|
||||||
default_symbol_version (__vmx__sigsetjmp,__sigsetjmp,GLIBC_2.3.4)
|
versioned_symbol (libc, __vmx__sigsetjmp, __sigsetjmp, GLIBC_2_3_4)
|
||||||
# define __sigsetjmp __vmx__sigsetjmp
|
# define __sigsetjmp __vmx__sigsetjmp
|
||||||
# define __sigjmp_save __vmx__sigjmp_save
|
# define __sigjmp_save __vmx__sigjmp_save
|
||||||
# include "setjmp-common.S"
|
# include "setjmp-common.S"
|
||||||
|
@ -35,7 +35,7 @@ default_symbol_version (__vmx__sigsetjmp,__sigsetjmp,GLIBC_2.3.4)
|
||||||
# undef __sigsetjmp
|
# undef __sigsetjmp
|
||||||
# undef __sigjmp_save
|
# undef __sigjmp_save
|
||||||
# undef JB_SIZE
|
# undef JB_SIZE
|
||||||
symbol_version (__novmx__sigsetjmp,__sigsetjmp,GLIBC_2.0)
|
compat_symbol (libc, __novmx__sigsetjmp, __sigsetjmp, GLIBC_2_0)
|
||||||
# define __sigsetjmp __novmx__sigsetjmp
|
# define __sigsetjmp __novmx__sigsetjmp
|
||||||
# define __sigjmp_save __novmx__sigjmp_save
|
# define __sigjmp_save __novmx__sigjmp_save
|
||||||
# include "setjmp-common.S"
|
# include "setjmp-common.S"
|
||||||
|
|
|
@ -26,9 +26,9 @@
|
||||||
|
|
||||||
#else /* !NOT_IN_libc */
|
#else /* !NOT_IN_libc */
|
||||||
/* Build a versioned object for libc. */
|
/* Build a versioned object for libc. */
|
||||||
default_symbol_version (__vmxsetjmp, setjmp, GLIBC_2.3.4)
|
versioned_symbol (libc, __vmxsetjmp, setjmp, GLIBC_2_3_4)
|
||||||
default_symbol_version (__vmx_setjmp,_setjmp,GLIBC_2.3.4)
|
versioned_symbol (libc, __vmx_setjmp, _setjmp, GLIBC_2_3_4)
|
||||||
default_symbol_version (__vmx__sigsetjmp,__sigsetjmp,GLIBC_2.3.4)
|
versioned_symbol (libc, __vmx__sigsetjmp, __sigsetjmp, GLIBC_2_3_4)
|
||||||
# define setjmp __vmxsetjmp
|
# define setjmp __vmxsetjmp
|
||||||
# define _setjmp __vmx_setjmp
|
# define _setjmp __vmx_setjmp
|
||||||
# define __sigsetjmp __vmx__sigsetjmp
|
# define __sigsetjmp __vmx__sigsetjmp
|
||||||
|
@ -44,9 +44,9 @@ strong_alias (__vmx__sigsetjmp, __setjmp)
|
||||||
# undef __sigjmp_save
|
# undef __sigjmp_save
|
||||||
# undef JB_SIZE
|
# undef JB_SIZE
|
||||||
# define __NO_VMX__
|
# define __NO_VMX__
|
||||||
symbol_version (__novmxsetjmp, setjmp, GLIBC_2.3)
|
compat_symbol (libc, __novmxsetjmp, setjmp, GLIBC_2_3)
|
||||||
symbol_version (__novmx_setjmp,_setjmp,GLIBC_2.3);
|
compat_symbol (libc, __novmx_setjmp,_setjmp, GLIBC_2_3);
|
||||||
symbol_version (__novmx__sigsetjmp,__sigsetjmp,GLIBC_2.3)
|
compat_symbol (libc, __novmx__sigsetjmp,__sigsetjmp, GLIBC_2_3)
|
||||||
# define setjmp __novmxsetjmp
|
# define setjmp __novmxsetjmp
|
||||||
# define _setjmp __novmx_setjmp
|
# define _setjmp __novmx_setjmp
|
||||||
# define __sigsetjmp __novmx__sigsetjmp
|
# define __sigsetjmp __novmx__sigsetjmp
|
||||||
|
|
Loading…
Reference in New Issue