This is the mail archive of the
libc-alpha@sources.redhat.com
mailing list for the glibc project.
Re: symbol clarification please?
- From: Jack Howarth <howarth at fuse dot net>
- To: libc-alpha at sources dot redhat dot com
- Cc: drepper at redhat dot com
- Date: 12 Aug 2002 23:11:43 -0400
- Subject: Re: symbol clarification please?
Ulrich,
Sorry I forgot to attach the original and revised
libgcc-compat patches for you to look at...here they are.
Jack
#! /bin/sh -e
# All lines beginning with `# DP:' are a description of the patch.
# DP: Fix "/usr/include/bits/string2.h:419:
# DP: warning: pointer of type `void *' used in arithmetic"
if [ $# -ne 2 ]; then
echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
exit 1
fi
case "$1" in
-patch) patch -d "$2" -f --no-backup-if-mismatch -p0 < $0;;
-unpatch) patch -d "$2" -f --no-backup-if-mismatch -R -p0 < $0;;
*)
echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
exit 1
esac
exit 0
Index: sysdeps/powerpc/Makefile
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/powerpc/Makefile,v
retrieving revision 1.15
diff -u -p -r1.15 Makefile
--- sysdeps/powerpc/Makefile 6 Dec 2001 23:41:32 -0000 1.15
+++ sysdeps/powerpc/Makefile 15 May 2002 14:23:39 -0000
@@ -35,6 +35,11 @@ CFLAGS-initfini.s = -g0 -fpic -O1
CFLAGS-init.o = -G0
CFLAGS-gmon-start.o = -G0
endif
+ifeq (yes,$(build-shared))
+# Compatibility
+sysdep_routines += divdi3 libgcc-compat
+shared-only-routines += divdi3 libgcc-compat
+endif
endif
ifeq ($(subdir),string)
Index: sysdeps/powerpc/Versions
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/powerpc/Versions,v
retrieving revision 1.2
diff -u -p -r1.2 Versions
--- sysdeps/powerpc/Versions 28 Feb 2000 21:27:57 -0000 1.2
+++ sysdeps/powerpc/Versions 15 May 2002 14:38:34 -0000
@@ -1,3 +1,15 @@
+libc {
+ GLIBC_2.0 {
+ # Functions from libgcc.
+ __divdi3; __moddi3; __udivdi3; __umoddi3;
+ __cmpdi2; __ucmpdi2;
+ __ashldi3; __ashrdi3; __lshrdi3;
+ __fixdfdi; __fixunsdfdi;
+ __fixsfdi; __fixunssfdi;
+ __floatdidf; __floatdisf;
+ }
+}
+
libm {
GLIBC_2.1 {
# symbols used in macros from sysdeps/powerpc/bits/fenv.h
--- /dev/null Thu Oct 4 06:30:44 2001
+++ sysdeps/powerpc/libgcc-compat.c Wed Jun 26 08:31:30 2002
@@ -0,0 +1,113 @@
+/* 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 __ashldi3_internal (int64_t u, int32_t b)
+{
+ return __ashldi3 (u, b);
+}
+symbol_version (__ashldi3_internal, __ashldi3, GLIBC_2.0);
+
+
+extern int64_t __ashrdi3 (int64_t, int32_t);
+int64_t __ashrdi3_internal (int64_t u, int32_t b)
+{
+ return __ashrdi3 (u, b);
+}
+symbol_version (__ashrdi3_internal, __ashrdi3, GLIBC_2.0);
+
+
+extern int64_t __lshrdi3 (int64_t, int32_t);
+int64_t __lshrdi3_internal (int64_t u, int32_t b)
+{
+ return __lshrdi3 (u, b);
+}
+symbol_version (__lshrdi3_internal, __lshrdi3, GLIBC_2.0);
+
+
+extern int32_t __cmpdi2 (int64_t, int64_t);
+int32_t __cmpdi2_internal (int64_t u, int64_t v)
+{
+ return __cmpdi2 (u, v);
+}
+symbol_version (__cmpdi2_internal, __cmpdi2, GLIBC_2.0);
+
+
+extern int32_t __ucmpdi2 (int64_t, int64_t);
+int32_t __ucmpdi2_internal (int64_t u, int64_t v)
+{
+ return __ucmpdi2 (u, v);
+}
+symbol_version (__ucmpdi2_internal, __ucmpdi2, GLIBC_2.0);
+
+
+extern int64_t __fixdfdi (double);
+int64_t __fixdfdi_internal (double d)
+{
+ return __fixdfdi (d);
+}
+symbol_version (__fixdfdi_internal, __fixdfdi, GLIBC_2.0);
+
+
+extern int64_t __fixunsdfdi (double);
+int64_t __fixunsdfdi_internal (double d)
+{
+ return __fixunsdfdi (d);
+}
+symbol_version (__fixunsdfdi_internal, __fixunsdfdi, GLIBC_2.0);
+
+
+extern int64_t __fixsfdi (float);
+int64_t __fixsfdi_internal (float d)
+{
+ return __fixsfdi (d);
+}
+symbol_version (__fixsfdi_internal, __fixsfdi, GLIBC_2.0);
+
+
+extern int64_t __fixunssfdi (float);
+int64_t __fixunssfdi_internal (float d)
+{
+ return __fixunssfdi (d);
+}
+symbol_version (__fixunssfdi_internal, __fixunssfdi, GLIBC_2.0);
+
+
+extern double __floatdidf (int64_t);
+double __floatdidf_internal (int64_t u)
+{
+ return __floatdidf (u);
+}
+symbol_version (__floatdidf_internal, __floatdidf, GLIBC_2.0);
+
+
+extern float __floatdisf (int64_t);
+float __floatdisf_internal (int64_t u)
+{
+ return __floatdisf (u);
+}
+symbol_version (__floatdisf_internal, __floatdisf, GLIBC_2.0);
+
+#endif
#! /bin/sh -e
# All lines beginning with `# DP:' are a description of the patch.
# DP: Fix "/usr/include/bits/string2.h:419:
# DP: warning: pointer of type `void *' used in arithmetic"
if [ $# -ne 2 ]; then
echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
exit 1
fi
case "$1" in
-patch) patch -d "$2" -f --no-backup-if-mismatch -p0 < $0;;
-unpatch) patch -d "$2" -f --no-backup-if-mismatch -R -p0 < $0;;
*)
echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
exit 1
esac
exit 0
Index: sysdeps/powerpc/Makefile
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/powerpc/Makefile,v
retrieving revision 1.13.2.1
diff -u -p -r1.13.2.1 Makefile
--- sysdeps/powerpc/Makefile 21 May 2002 00:28:35 -0000 1.13.2.1
+++ sysdeps/powerpc/Makefile 6 Aug 2002 08:20:52 -0000
@@ -36,6 +36,10 @@ CFLAGS-gmon-start.o = -G0
endif
ifeq (yes,$(build-shared))
# Compatibility
+ifeq (yes,$(have-protected))
+CPPFLAGS-divdi3.c = -DHAVE_DOT_HIDDEN
+CPPFLAGS-libgcc-compat.S = -DHAVE_DOT_HIDDEN
+endif
sysdep_routines += divdi3 libgcc-compat
shared-only-routines += divdi3 libgcc-compat
endif
--- /dev/null Thu Oct 4 06:30:44 2001
+++ sysdeps/powerpc/libgcc-compat.S Tue Aug 6 01:15:38 2002
@@ -0,0 +1,148 @@
+/* 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)
+
+#ifndef INTUSE
+# define INTUSE(name) name##_internal
+#endif
+
+#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
--- /dev/null Thu Oct 4 06:30:44 2001
+++ sysdeps/powerpc/divdi3.c Tue Aug 6 04:55:41 2002
@@ -0,0 +1,44 @@
+/* 64-bit multiplication and division
+ 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>
+
+asm (".set __divdi3_internal,__divdi3");
+asm (".set __udivdi3_internal,__udivdi3");
+asm (".set __moddi3_internal,__moddi3");
+asm (".set __umoddi3_internal,__umoddi3");
+
+asm (".globl __divdi3_internal");
+asm (".globl __udivdi3_internal");
+asm (".globl __moddi3_internal");
+asm (".globl __umoddi3_internal");
+
+#ifdef HAVE_DOT_HIDDEN
+asm (".hidden __divdi3");
+asm (".hidden __udivdi3");
+asm (".hidden __moddi3");
+asm (".hidden __umoddi3");
+#endif
+
+symbol_version (__divdi3_internal, __divdi3, GLIBC_2.0);
+symbol_version (__udivdi3_internal, __udivdi3, GLIBC_2.0);
+symbol_version (__moddi3_internal, __moddi3, GLIBC_2.0);
+symbol_version (__umoddi3_internal, __umoddi3, GLIBC_2.0);
--- sysdeps/powerpc/libgcc-compat.c Wed Jun 26 08:31:30 2002
+++ /dev/null Thu Oct 4 06:30:44 2001
@@ -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 __ashldi3_internal (int64_t u, int32_t b)
-{
- return __ashldi3 (u, b);
-}
-symbol_version (__ashldi3_internal, __ashldi3, GLIBC_2.0);
-
-
-extern int64_t __ashrdi3 (int64_t, int32_t);
-int64_t __ashrdi3_internal (int64_t u, int32_t b)
-{
- return __ashrdi3 (u, b);
-}
-symbol_version (__ashrdi3_internal, __ashrdi3, GLIBC_2.0);
-
-
-extern int64_t __lshrdi3 (int64_t, int32_t);
-int64_t __lshrdi3_internal (int64_t u, int32_t b)
-{
- return __lshrdi3 (u, b);
-}
-symbol_version (__lshrdi3_internal, __lshrdi3, GLIBC_2.0);
-
-
-extern int32_t __cmpdi2 (int64_t, int64_t);
-int32_t __cmpdi2_internal (int64_t u, int64_t v)
-{
- return __cmpdi2 (u, v);
-}
-symbol_version (__cmpdi2_internal, __cmpdi2, GLIBC_2.0);
-
-
-extern int32_t __ucmpdi2 (int64_t, int64_t);
-int32_t __ucmpdi2_internal (int64_t u, int64_t v)
-{
- return __ucmpdi2 (u, v);
-}
-symbol_version (__ucmpdi2_internal, __ucmpdi2, GLIBC_2.0);
-
-
-extern int64_t __fixdfdi (double);
-int64_t __fixdfdi_internal (double d)
-{
- return __fixdfdi (d);
-}
-symbol_version (__fixdfdi_internal, __fixdfdi, GLIBC_2.0);
-
-
-extern int64_t __fixunsdfdi (double);
-int64_t __fixunsdfdi_internal (double d)
-{
- return __fixunsdfdi (d);
-}
-symbol_version (__fixunsdfdi_internal, __fixunsdfdi, GLIBC_2.0);
-
-
-extern int64_t __fixsfdi (float);
-int64_t __fixsfdi_internal (float d)
-{
- return __fixsfdi (d);
-}
-symbol_version (__fixsfdi_internal, __fixsfdi, GLIBC_2.0);
-
-
-extern int64_t __fixunssfdi (float);
-int64_t __fixunssfdi_internal (float d)
-{
- return __fixunssfdi (d);
-}
-symbol_version (__fixunssfdi_internal, __fixunssfdi, GLIBC_2.0);
-
-
-extern double __floatdidf (int64_t);
-double __floatdidf_internal (int64_t u)
-{
- return __floatdidf (u);
-}
-symbol_version (__floatdidf_internal, __floatdidf, GLIBC_2.0);
-
-
-extern float __floatdisf (int64_t);
-float __floatdisf_internal (int64_t u)
-{
- return __floatdisf (u);
-}
-symbol_version (__floatdisf_internal, __floatdisf, GLIBC_2.0);
-
-#endif