mirror of git://sourceware.org/git/glibc.git
Fix ABI compatibility with libc compiled with old tools on powerpc.
Changes contributed by Franz Sirl <Franz.Sirl-kernel@lauterbach.com> and Jack Howarth <howarth@bromo.med.uc.edu>. * sysdeps/powerpc/Makefile [$(have-protected) = yes] (CPPFLAGS-divdi3.c, CPPFLAGS-libgcc-compat.S): New variables, pass -DHAVE_DOT_HIDDEN for these files. * sysdeps/powerpc/Versions (libc: GLIBC_2.0): Added __floatdidf, __floatdisf. * sysdeps/powerpc/divdi3.c: New file. * sysdeps/powerpc/libgcc-compat.S: New file, replacement for ... * sysdeps/powerpc/libgcc-compat.c: ... this, file removed.
This commit is contained in:
parent
070cadeb5f
commit
c8f3e6bcf0
14
ChangeLog
14
ChangeLog
|
@ -1,3 +1,17 @@
|
||||||
|
2002-08-20 Roland McGrath <roland@redhat.com>
|
||||||
|
|
||||||
|
Fix ABI compatibility with libc compiled with old tools on powerpc.
|
||||||
|
Changes contributed by Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
|
||||||
|
and Jack Howarth <howarth@bromo.med.uc.edu>.
|
||||||
|
* sysdeps/powerpc/Makefile [$(have-protected) = yes]
|
||||||
|
(CPPFLAGS-divdi3.c, CPPFLAGS-libgcc-compat.S): New variables,
|
||||||
|
pass -DHAVE_DOT_HIDDEN for these files.
|
||||||
|
* sysdeps/powerpc/Versions (libc: GLIBC_2.0): Added __floatdidf,
|
||||||
|
__floatdisf.
|
||||||
|
* sysdeps/powerpc/divdi3.c: New file.
|
||||||
|
* sysdeps/powerpc/libgcc-compat.S: New file, replacement for ...
|
||||||
|
* sysdeps/powerpc/libgcc-compat.c: ... this, file removed.
|
||||||
|
|
||||||
2002-08-20 Jakub Jelinek <jakub@redhat.com>
|
2002-08-20 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
* locale/loadarchive.c (_nl_load_locale_from_archive): Handle
|
* locale/loadarchive.c (_nl_load_locale_from_archive): Handle
|
||||||
|
|
|
@ -37,6 +37,10 @@ CFLAGS-gmon-start.o = -G0
|
||||||
endif
|
endif
|
||||||
ifeq (yes,$(build-shared))
|
ifeq (yes,$(build-shared))
|
||||||
# Compatibility
|
# Compatibility
|
||||||
|
ifeq (yes,$(have-protected))
|
||||||
|
CPPFLAGS-divdi3.c = -DHAVE_DOT_HIDDEN
|
||||||
|
CPPFLAGS-libgcc-compat.S = -DHAVE_DOT_HIDDEN
|
||||||
|
endif
|
||||||
sysdep_routines += divdi3 libgcc-compat
|
sysdep_routines += divdi3 libgcc-compat
|
||||||
shared-only-routines += divdi3 libgcc-compat
|
shared-only-routines += divdi3 libgcc-compat
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -6,6 +6,7 @@ libc {
|
||||||
__ashldi3; __ashrdi3; __lshrdi3;
|
__ashldi3; __ashrdi3; __lshrdi3;
|
||||||
__fixdfdi; __fixunsdfdi;
|
__fixdfdi; __fixunsdfdi;
|
||||||
__fixsfdi; __fixunssfdi;
|
__fixsfdi; __fixunssfdi;
|
||||||
|
__floatdidf; __floatdisf;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
/* 64-bit multiplication and division libgcc routines for 32-bit PowerPC
|
||||||
|
Copyright (C) 2002 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Lesser General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2.1 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
The GNU C Library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public
|
||||||
|
License along with the GNU C Library; if not, write to the Free
|
||||||
|
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA. */
|
||||||
|
|
||||||
|
#define _DIVDI3_C
|
||||||
|
#include <sysdeps/wordsize-32/divdi3.c>
|
||||||
|
|
||||||
|
INTDEF (__udivdi3);
|
||||||
|
INTDEF (__moddi3);
|
||||||
|
INTDEF (__umoddi3);
|
||||||
|
|
||||||
|
#ifdef HAVE_DOT_HIDDEN
|
||||||
|
asm (".hidden __divdi3");
|
||||||
|
asm (".hidden __udivdi3");
|
||||||
|
asm (".hidden __moddi3");
|
||||||
|
asm (".hidden __umoddi3");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <shlib-compat.h>
|
||||||
|
|
||||||
|
#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_2_6)
|
||||||
|
|
||||||
|
symbol_version (INTUSE (__divdi3), __divdi3, GLIBC_2.0);
|
||||||
|
symbol_version (INTUSE (__udivdi3), __udivdi3, GLIBC_2.0);
|
||||||
|
symbol_version (INTUSE (__moddi3), __moddi3, GLIBC_2.0);
|
||||||
|
symbol_version (INTUSE (__umoddi3), __umoddi3, GLIBC_2.0);
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,144 @@
|
||||||
|
/* pre-.hidden libgcc compatibility
|
||||||
|
Copyright (C) 2002 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Lesser General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2.1 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
The GNU C Library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public
|
||||||
|
License along with the GNU C Library; if not, write to the Free
|
||||||
|
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA. */
|
||||||
|
|
||||||
|
.file "libgcc-compat.S"
|
||||||
|
|
||||||
|
#include <shlib-compat.h>
|
||||||
|
|
||||||
|
#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2_6)
|
||||||
|
|
||||||
|
#define __ashldi3_v_glibc20 INTUSE (__ashldi3)
|
||||||
|
#define __ashrdi3_v_glibc20 INTUSE (__ashrdi3)
|
||||||
|
#define __lshrdi3_v_glibc20 INTUSE (__lshrdi3)
|
||||||
|
#define __cmpdi2_v_glibc20 INTUSE (__cmpdi2)
|
||||||
|
#define __ucmpdi2_v_glibc20 INTUSE (__ucmpdi2)
|
||||||
|
#define __fixdfdi_v_glibc20 INTUSE (__fixdfdi)
|
||||||
|
#define __fixsfdi_v_glibc20 INTUSE (__fixsfdi)
|
||||||
|
#define __fixunsdfdi_v_glibc20 INTUSE (__fixunsdfdi)
|
||||||
|
#define __fixunssfdi_v_glibc20 INTUSE (__fixunssfdi)
|
||||||
|
#define __floatdidf_v_glibc20 INTUSE (__floatdidf)
|
||||||
|
#define __floatdisf_v_glibc20 INTUSE (__floatdisf)
|
||||||
|
|
||||||
|
.symver __ashldi3_v_glibc20,__ashldi3@GLIBC_2.0
|
||||||
|
.symver __ashrdi3_v_glibc20,__ashrdi3@GLIBC_2.0
|
||||||
|
.symver __lshrdi3_v_glibc20,__lshrdi3@GLIBC_2.0
|
||||||
|
.symver __cmpdi2_v_glibc20,__cmpdi2@GLIBC_2.0
|
||||||
|
.symver __ucmpdi2_v_glibc20,__ucmpdi2@GLIBC_2.0
|
||||||
|
.symver __fixdfdi_v_glibc20,__fixdfdi@GLIBC_2.0
|
||||||
|
.symver __fixunsdfdi_v_glibc20,__fixunsdfdi@GLIBC_2.0
|
||||||
|
.symver __fixsfdi_v_glibc20,__fixsfdi@GLIBC_2.0
|
||||||
|
.symver __fixunssfdi_v_glibc20,__fixunssfdi@GLIBC_2.0
|
||||||
|
.symver __floatdidf_v_glibc20,__floatdidf@GLIBC_2.0
|
||||||
|
.symver __floatdisf_v_glibc20,__floatdisf@GLIBC_2.0
|
||||||
|
|
||||||
|
#ifdef HAVE_DOT_HIDDEN
|
||||||
|
.hidden __ashldi3
|
||||||
|
.hidden __ashrdi3
|
||||||
|
.hidden __lshrdi3
|
||||||
|
.hidden __cmpdi2
|
||||||
|
.hidden __ucmpdi2
|
||||||
|
.hidden __fixdfdi
|
||||||
|
.hidden __fixsfdi
|
||||||
|
.hidden __fixunsdfdi
|
||||||
|
.hidden __fixunssfdi
|
||||||
|
.hidden __floatdidf
|
||||||
|
.hidden __floatdisf
|
||||||
|
#endif
|
||||||
|
|
||||||
|
.section ".text"
|
||||||
|
|
||||||
|
.align 2
|
||||||
|
.globl __ashldi3_v_glibc20
|
||||||
|
.type __ashldi3_v_glibc20,@function
|
||||||
|
__ashldi3_v_glibc20:
|
||||||
|
b __ashldi3@local
|
||||||
|
.Lfe5:
|
||||||
|
.size __ashldi3_v_glibc20,.Lfe5-__ashldi3_v_glibc20
|
||||||
|
.align 2
|
||||||
|
.globl __ashrdi3_v_glibc20
|
||||||
|
.type __ashrdi3_v_glibc20,@function
|
||||||
|
__ashrdi3_v_glibc20:
|
||||||
|
b __ashrdi3@local
|
||||||
|
.Lfe6:
|
||||||
|
.size __ashrdi3_v_glibc20,.Lfe6-__ashrdi3_v_glibc20
|
||||||
|
.align 2
|
||||||
|
.globl __lshrdi3_v_glibc20
|
||||||
|
.type __lshrdi3_v_glibc20,@function
|
||||||
|
__lshrdi3_v_glibc20:
|
||||||
|
b __lshrdi3@local
|
||||||
|
.Lfe7:
|
||||||
|
.size __lshrdi3_v_glibc20,.Lfe7-__lshrdi3_v_glibc20
|
||||||
|
.align 2
|
||||||
|
.globl __cmpdi2_v_glibc20
|
||||||
|
.type __cmpdi2_v_glibc20,@function
|
||||||
|
__cmpdi2_v_glibc20:
|
||||||
|
b __cmpdi2@local
|
||||||
|
.Lfe8:
|
||||||
|
.size __cmpdi2_v_glibc20,.Lfe8-__cmpdi2_v_glibc20
|
||||||
|
.align 2
|
||||||
|
.globl __ucmpdi2_v_glibc20
|
||||||
|
.type __ucmpdi2_v_glibc20,@function
|
||||||
|
__ucmpdi2_v_glibc20:
|
||||||
|
b __ucmpdi2@local
|
||||||
|
.Lfe9:
|
||||||
|
.size __ucmpdi2_v_glibc20,.Lfe9-__ucmpdi2_v_glibc20
|
||||||
|
.align 2
|
||||||
|
.globl __fixdfdi_v_glibc20
|
||||||
|
.type __fixdfdi_v_glibc20,@function
|
||||||
|
__fixdfdi_v_glibc20:
|
||||||
|
b __fixdfdi@local
|
||||||
|
.Lfe10:
|
||||||
|
.size __fixdfdi_v_glibc20,.Lfe10-__fixdfdi_v_glibc20
|
||||||
|
.align 2
|
||||||
|
.globl __fixunsdfdi_v_glibc20
|
||||||
|
.type __fixunsdfdi_v_glibc20,@function
|
||||||
|
__fixunsdfdi_v_glibc20:
|
||||||
|
b __fixunsdfdi@local
|
||||||
|
.Lfe11:
|
||||||
|
.size __fixunsdfdi_v_glibc20,.Lfe11-__fixunsdfdi_v_glibc20
|
||||||
|
.align 2
|
||||||
|
.globl __fixsfdi_v_glibc20
|
||||||
|
.type __fixsfdi_v_glibc20,@function
|
||||||
|
__fixsfdi_v_glibc20:
|
||||||
|
b __fixsfdi@local
|
||||||
|
.Lfe12:
|
||||||
|
.size __fixsfdi_v_glibc20,.Lfe12-__fixsfdi_v_glibc20
|
||||||
|
.align 2
|
||||||
|
.globl __fixunssfdi_v_glibc20
|
||||||
|
.type __fixunssfdi_v_glibc20,@function
|
||||||
|
__fixunssfdi_v_glibc20:
|
||||||
|
b __fixunssfdi@local
|
||||||
|
.Lfe13:
|
||||||
|
.size __fixunssfdi_v_glibc20,.Lfe13-__fixunssfdi_v_glibc20
|
||||||
|
.align 2
|
||||||
|
.globl __floatdidf_v_glibc20
|
||||||
|
.type __floatdidf_v_glibc20,@function
|
||||||
|
__floatdidf_v_glibc20:
|
||||||
|
b __floatdidf@local
|
||||||
|
.Lfe14:
|
||||||
|
.size __floatdidf_v_glibc20,.Lfe14-__floatdidf_v_glibc20
|
||||||
|
.align 2
|
||||||
|
.globl __floatdisf_v_glibc20
|
||||||
|
.type __floatdisf_v_glibc20,@function
|
||||||
|
__floatdisf_v_glibc20:
|
||||||
|
b __floatdisf@local
|
||||||
|
.Lfe15:
|
||||||
|
.size __floatdisf_v_glibc20,.Lfe15-__floatdisf_v_glibc20
|
||||||
|
|
||||||
|
#endif
|
|
@ -1,113 +0,0 @@
|
||||||
/* pre-.hidden libgcc compatibility
|
|
||||||
Copyright (C) 2002 Free Software Foundation, Inc.
|
|
||||||
This file is part of the GNU C Library.
|
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 2.1 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
The GNU C Library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
|
||||||
License along with the GNU C Library; if not, write to the Free
|
|
||||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
|
||||||
02111-1307 USA. */
|
|
||||||
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <shlib-compat.h>
|
|
||||||
|
|
||||||
#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_2_6)
|
|
||||||
|
|
||||||
extern int64_t __ashldi3 (int64_t, int32_t);
|
|
||||||
int64_t INTUSE (__ashldi3) (int64_t u, int32_t b)
|
|
||||||
{
|
|
||||||
return __ashldi3 (u, b);
|
|
||||||
}
|
|
||||||
symbol_version (INTUSE (__ashldi3), __ashldi3, GLIBC_2.0);
|
|
||||||
|
|
||||||
|
|
||||||
extern int64_t __ashrdi3 (int64_t, int32_t);
|
|
||||||
int64_t INTUSE (__ashrdi3) (int64_t u, int32_t b)
|
|
||||||
{
|
|
||||||
return __ashrdi3 (u, b);
|
|
||||||
}
|
|
||||||
symbol_version (INTUSE (__ashrdi3), __ashrdi3, GLIBC_2.0);
|
|
||||||
|
|
||||||
|
|
||||||
extern int64_t __lshrdi3 (int64_t, int32_t);
|
|
||||||
int64_t INTUSE (__lshrdi3) (int64_t u, int32_t b)
|
|
||||||
{
|
|
||||||
return __lshrdi3 (u, b);
|
|
||||||
}
|
|
||||||
symbol_version (INTUSE (__lshrdi3), __lshrdi3, GLIBC_2.0);
|
|
||||||
|
|
||||||
|
|
||||||
extern int32_t __cmpdi2 (int64_t, int64_t);
|
|
||||||
int32_t INTUSE (__cmpdi2) (int64_t u, int64_t v)
|
|
||||||
{
|
|
||||||
return __cmpdi2 (u, v);
|
|
||||||
}
|
|
||||||
symbol_version (INTUSE (__cmpdi2), __cmpdi2, GLIBC_2.0);
|
|
||||||
|
|
||||||
|
|
||||||
extern int32_t __ucmpdi2 (int64_t, int64_t);
|
|
||||||
int32_t INTUSE (__ucmpdi2) (int64_t u, int64_t v)
|
|
||||||
{
|
|
||||||
return __ucmpdi2 (u, v);
|
|
||||||
}
|
|
||||||
symbol_version (INTUSE (__ucmpdi2), __ucmpdi2, GLIBC_2.0);
|
|
||||||
|
|
||||||
|
|
||||||
extern int64_t __fixdfdi (double);
|
|
||||||
int64_t INTUSE (__fixdfdi) (double d)
|
|
||||||
{
|
|
||||||
return __fixdfdi (d);
|
|
||||||
}
|
|
||||||
symbol_version (INTUSE (__fixdfdi), __fixdfdi, GLIBC_2.0);
|
|
||||||
|
|
||||||
|
|
||||||
extern int64_t __fixunsdfdi (double);
|
|
||||||
int64_t INTUSE (__fixunsdfdi) (double d)
|
|
||||||
{
|
|
||||||
return __fixunsdfdi (d);
|
|
||||||
}
|
|
||||||
symbol_version (INTUSE (__fixunsdfdi), __fixunsdfdi, GLIBC_2.0);
|
|
||||||
|
|
||||||
|
|
||||||
extern int64_t __fixsfdi (float);
|
|
||||||
int64_t INTUSE (__fixsfdi) (float d)
|
|
||||||
{
|
|
||||||
return __fixsfdi (d);
|
|
||||||
}
|
|
||||||
symbol_version (INTUSE (__fixsfdi), __fixsfdi, GLIBC_2.0);
|
|
||||||
|
|
||||||
|
|
||||||
extern int64_t __fixunssfdi (float);
|
|
||||||
int64_t INTUSE (__fixunssfdi) (float d)
|
|
||||||
{
|
|
||||||
return __fixunssfdi (d);
|
|
||||||
}
|
|
||||||
symbol_version (INTUSE (__fixunssfdi), __fixunssfdi, GLIBC_2.0);
|
|
||||||
|
|
||||||
|
|
||||||
extern double __floatdidf (int64_t);
|
|
||||||
double INTUSE (__floatdidf) (int64_t u)
|
|
||||||
{
|
|
||||||
return __floatdidf (u);
|
|
||||||
}
|
|
||||||
symbol_version (INTUSE (__floatdidf), __floatdidf, GLIBC_2.0);
|
|
||||||
|
|
||||||
|
|
||||||
extern float __floatdisf (int64_t);
|
|
||||||
float INTUSE (__floatdisf) (int64_t u)
|
|
||||||
{
|
|
||||||
return __floatdisf (u);
|
|
||||||
}
|
|
||||||
symbol_version (INTUSE (__floatdisf), __floatdisf, GLIBC_2.0);
|
|
||||||
|
|
||||||
#endif
|
|
Loading…
Reference in New Issue