about summary refs log tree commit diff
path: root/sysdeps
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2000-02-28 21:16:38 +0000
committerUlrich Drepper <drepper@redhat.com>2000-02-28 21:16:38 +0000
commita808d541c6fb36db381923c52040855602e9fd83 (patch)
tree07bbe429e74c8dc139eaa7329809b77500182e79 /sysdeps
parent46b5798928ff48010c151ddcca258e65710d6194 (diff)
downloadglibc-a808d541c6fb36db381923c52040855602e9fd83.tar.gz
glibc-a808d541c6fb36db381923c52040855602e9fd83.tar.xz
glibc-a808d541c6fb36db381923c52040855602e9fd83.zip
Update.
2000-02-28  Ulrich Drepper  <drepper@redhat.com>

	* sysdeps/unix/start.c: Initialize __errno and add comment
	explaining why.  Remove K&R compatibility.

	* sysdeps/powerpc/fpu/s_isnan.c: Avoid using asm statement to
	declare aliases.

	* sysdeps/powerpc/Makefile: Always pass flags to compile for ppc
	and not rs6000.
	[$(subdir)=misc] (sysdep_routines): Add gprsave0, gprrest0,
	gprsave1 , and gprrest1.
	Don't pass special flags to compiler for init and gmon-start if
	this is no ELF platform.

	* sysdeps/mach/hurd/bits/statfs.h: Define _STATFS_F_NAMELEN.
	* sysdeps/unix/sysv/linux/bits/statfs.h: Likewise.
	* sysdeps/unix/sysv/linux/mips/bits/statfs.h: Likewise.
	* sysdeps/unix/sysv/linux/sparc/bits/statfs.h: Likewise.
	* sysdeps/posix/fpathconf.c: Don't unconditionally use f_namelen
	in statfs.  Check feature macro and use f_name_max or NAME_MAX
	instead.
	* sysdeps/posix/pathconf.c: Likewise.

	* dlfcn/dlfcn.h: Remove DL_CALL_FCT definition here.
	* sysdeps/generic/bits/dlfcn.h: Define DL_CALL_FCT here.
	* sysdeps/mips/bits/dlfcn.h: Define DL_CALL_FCT here.
	* iconv/skeleton.c: If DL_CALL_FCT is not yet defined, add dumy
	definition here.

	* sysdeps/generic/libc-start.c: Fix typo in comment.

	* include/set-hooks.h: Allow systems to not define
	symbol_set_define.

	* configure.in: Unify machine names rs6000 and powerpc.
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/generic/bits/dlfcn.h20
-rw-r--r--sysdeps/generic/libc-start.c4
-rw-r--r--sysdeps/mach/hurd/bits/statfs.h5
-rw-r--r--sysdeps/mips/bits/dlfcn.h20
-rw-r--r--sysdeps/posix/fpathconf.c14
-rw-r--r--sysdeps/posix/pathconf.c14
-rw-r--r--sysdeps/powerpc/Makefile11
-rw-r--r--sysdeps/powerpc/fpu/s_isnan.c28
-rw-r--r--sysdeps/unix/start.c10
-rw-r--r--sysdeps/unix/sysv/linux/bits/statfs.h5
-rw-r--r--sysdeps/unix/sysv/linux/mips/bits/statfs.h5
-rw-r--r--sysdeps/unix/sysv/linux/sparc/bits/statfs.h5
12 files changed, 112 insertions, 29 deletions
diff --git a/sysdeps/generic/bits/dlfcn.h b/sysdeps/generic/bits/dlfcn.h
index f5983d706c..99d544859f 100644
--- a/sysdeps/generic/bits/dlfcn.h
+++ b/sysdeps/generic/bits/dlfcn.h
@@ -1,5 +1,5 @@
 /* System dependent definitions for run-time dynamic loading.
-   Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1997, 1998, 1999, 2000 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
@@ -35,3 +35,21 @@
    The implementation does this by default and so we can define the
    value to zero.  */
 #define RTLD_LOCAL	0
+
+#ifdef __USE_GNU
+/* To support profiling of shared objects it is a good idea to call
+   the function found using `dlsym' using the following macro since
+   these calls do not use the PLT.  But this would mean the dynamic
+   loader has no chance to find out when the function is called.  The
+   macro applies the necessary magic so that profiling is possible.
+   Rewrite
+	foo = (*fctp) (arg1, arg2);
+   into
+        foo = DL_CALL_FCT (fctp, (arg1, arg2));
+*/
+# define DL_CALL_FCT(fctp, args) \
+  (_dl_mcount_wrapper_check (fctp), (*(fctp)) args)
+
+/* This function calls the profiling functions.  */
+extern void _dl_mcount_wrapper_check (void *__selfpc) __THROW;
+#endif
diff --git a/sysdeps/generic/libc-start.c b/sysdeps/generic/libc-start.c
index 7c0bc58a2a..77f730a027 100644
--- a/sysdeps/generic/libc-start.c
+++ b/sysdeps/generic/libc-start.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 1999 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 1999, 2000 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
@@ -103,7 +103,7 @@ check_one_fd (int fd, int mode)
 	 about to start does not accidently use this descriptor.  */
       int nullfd = __libc_open (_PATH_DEVNULL, mode);
       if (nullfd == -1)
-	/* We cannot even given an error message here since it would
+	/* We cannot even give an error message here since it would
 	   run into the same problems.  */
 	abort ();
     }
diff --git a/sysdeps/mach/hurd/bits/statfs.h b/sysdeps/mach/hurd/bits/statfs.h
index ef05ebf70c..927b00c917 100644
--- a/sysdeps/mach/hurd/bits/statfs.h
+++ b/sysdeps/mach/hurd/bits/statfs.h
@@ -1,5 +1,5 @@
 /* Definition of `struct statfs', information about a filesystem.
-   Copyright (C) 1996, 97, 98 Free Software Foundation, Inc.
+   Copyright (C) 1996, 97, 98, 2000 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
@@ -82,3 +82,6 @@ struct statfs64
     unsigned int f_spare[3];
   };
 #endif
+
+/* Tell code we have this member.  */
+#define _STATFS_F_NAMELEN
diff --git a/sysdeps/mips/bits/dlfcn.h b/sysdeps/mips/bits/dlfcn.h
index 2939d9e19f..0da3a67a92 100644
--- a/sysdeps/mips/bits/dlfcn.h
+++ b/sysdeps/mips/bits/dlfcn.h
@@ -1,5 +1,5 @@
 /* System dependent definitions for run-time dynamic loading.
-   Copyright (C) 1996, 1997, 1999 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1997, 1999, 2000 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
@@ -35,3 +35,21 @@
    The implementation does this by default and so we can define the
    value to zero.  */
 #define RTLD_LOCAL      0
+
+#ifdef __USE_GNU
+/* To support profiling of shared objects it is a good idea to call
+   the function found using `dlsym' using the following macro since
+   these calls do not use the PLT.  But this would mean the dynamic
+   loader has no chance to find out when the function is called.  The
+   macro applies the necessary magic so that profiling is possible.
+   Rewrite
+	foo = (*fctp) (arg1, arg2);
+   into
+        foo = DL_CALL_FCT (fctp, (arg1, arg2));
+*/
+# define DL_CALL_FCT(fctp, args) \
+  (_dl_mcount_wrapper_check (fctp), (*(fctp)) args)
+
+/* This function calls the profiling functions.  */
+extern void _dl_mcount_wrapper_check (void *__selfpc) __THROW;
+#endif
diff --git a/sysdeps/posix/fpathconf.c b/sysdeps/posix/fpathconf.c
index 94593bccca..ede91fbf95 100644
--- a/sysdeps/posix/fpathconf.c
+++ b/sysdeps/posix/fpathconf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1995, 1996, 1998 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1995, 1996, 1998, 2000 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
@@ -81,7 +81,17 @@ __fpathconf (fd, name)
 	    return -1;
 	  }
 	else
-	  return buf.f_namelen;
+	  {
+#ifdef _STATFS_F_NAMELEN
+	    return buf.f_namelen;
+#else
+# ifdef _STATFS_F_NAME_MAX
+	    return buf.f_name_max;
+# else
+	    return NAME_MAX;
+# endif
+#endif
+	  }
       }
 #else
       return -1;
diff --git a/sysdeps/posix/pathconf.c b/sysdeps/posix/pathconf.c
index 2032afe208..b6181c3b33 100644
--- a/sysdeps/posix/pathconf.c
+++ b/sysdeps/posix/pathconf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1995, 1996, 1998 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1995, 1996, 1998, 2000 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
@@ -76,7 +76,17 @@ __pathconf (const char *path, int name)
 	    return -1;
 	  }
 	else
-	  return buf.f_namelen;
+	  {
+#ifdef _STATFS_F_NAMELEN
+	    return buf.f_namelen;
+#else
+# ifdef _STATFS_F_NAME_MAX
+	    return buf.f_name_max;
+# else
+	    return NAME_MAX;
+# endif
+#endif
+	  }
       }
 #else
       return -1;
diff --git a/sysdeps/powerpc/Makefile b/sysdeps/powerpc/Makefile
index f2d3271925..f7ed25002a 100644
--- a/sysdeps/powerpc/Makefile
+++ b/sysdeps/powerpc/Makefile
@@ -1,3 +1,8 @@
+# We always want to use the new mnemonic syntax even if we are on a RS6000
+# machine.
++cflags += -mnew-mnemonics -Wa,-mppc -mpowerpc
+asm-CPPFLAGS += -Wa,-mppc
+
 ifeq ($(subdir),math)
 libm-support += fenv_const fe_nomask
 endif
@@ -6,6 +11,10 @@ ifeq ($(subdir),gmon)
 sysdep_routines += ppc-mcount
 endif
 
+ifeq ($(subdir),misc)
+sysdep_routines += gprsave0 gprrest0 gprsave1 gprrest1
+endif
+
 # On PPC, -fpic works until the GOT contains 2^15 bytes, and possibly
 # more depending on how clever the linker is.  Each GOT entry takes 4 bytes,
 # so that's at least 8192 entries.  Since libc only uses about 2000 entries,
@@ -15,6 +24,7 @@ pic-ccflag = -fpic
 endif
 
 ifeq ($(subdir),csu)
+ifneq ($(elf),no)
 # The initfini generation code doesn't work in the presence of -fPIC, so
 # we use -fpic instead which is much better.
 CFLAGS-initfini.s = -g0 -fpic
@@ -24,6 +34,7 @@ CFLAGS-initfini.s = -g0 -fpic
 CFLAGS-init.o = -G0
 CFLAGS-gmon-start.o = -G0
 endif
+endif
 
 ifeq ($(subdir),string)
 CFLAGS-memcmp.c += -Wno-uninitialized
diff --git a/sysdeps/powerpc/fpu/s_isnan.c b/sysdeps/powerpc/fpu/s_isnan.c
index 34019fdbdb..feea7e5c6e 100644
--- a/sysdeps/powerpc/fpu/s_isnan.c
+++ b/sysdeps/powerpc/fpu/s_isnan.c
@@ -1,22 +1,26 @@
 /* Return 1 if argument is a NaN, else 0.
-   Copyright (C) 1997 Free Software Foundation, Inc.
+   Copyright (C) 1997, 2000 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 Library General Public License as
    published by the Free Software Foundation; either version 2 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
    Library General Public License for more details.
-  
+
    You should have received a copy of the GNU Library General Public
    License along with the GNU C Library; see the file COPYING.LIB.  If not,
    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    Boston, MA 02111-1307, USA.  */
 
+/* Ugly kludge to avoid declarations.  */
+#define __isnanf __Xisnanf
+#define isnanf Xisnanf
+
 #include "math.h"
 #include <fenv_libc.h>
 
@@ -31,16 +35,14 @@ int __isnan(double x)
   return result;
 }
 weak_alias (__isnan, isnan)
+
 /* It turns out that the 'double' version will also always work for
-   single-precision.  Use explicit assembler to stop gcc complaining
-   that 'isnanf' takes a float parameter, not double.  */
-asm ("\
-        .globl __isnanf
-        .globl isnanf
-        .weak isnanf
-	.set __isnanf,__isnan
-	.set isnanf,__isnan
-");
+   single-precision.  */
+#undef __isnanf
+#undef isnanf
+strong_alias (__isnan, __isnanf)
+weak_alias (__isnanf, isnanf)
+
 #ifdef NO_LONG_DOUBLE
 strong_alias (__isnan, __isnanl)
 weak_alias (__isnan, isnanl)
diff --git a/sysdeps/unix/start.c b/sysdeps/unix/start.c
index 49d17810ad..41fb75e063 100644
--- a/sysdeps/unix/start.c
+++ b/sysdeps/unix/start.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 93, 95, 96, 97, 98 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 93, 1995-1998, 2000 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
@@ -36,12 +36,14 @@ weak_alias (__data_start, data_start)
 #endif
 
 #ifndef errno
-volatile int __errno;
+/* __errno must be initialized since otherwise one cannot create an
+   alias (at least on some platforms).  */
+volatile int __errno = 0;
 strong_alias (__errno, errno)
 #endif
 
-extern void __libc_init __P ((int argc, char **argv, char **envp));
-extern int main __P ((int argc, char **argv, char **envp));
+extern void __libc_init (int argc, char **argv, char **envp);
+extern int main (int argc, char **argv, char **envp);
 
 
 /* Not a prototype because it gets called strangely.  */
diff --git a/sysdeps/unix/sysv/linux/bits/statfs.h b/sysdeps/unix/sysv/linux/bits/statfs.h
index 31ae564b46..7bf59ec9fc 100644
--- a/sysdeps/unix/sysv/linux/bits/statfs.h
+++ b/sysdeps/unix/sysv/linux/bits/statfs.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1998, 2000 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
@@ -59,3 +59,6 @@ struct statfs64
     int f_spare[6];
   };
 #endif
+
+/* Tell code we have this member.  */
+#define _STATFS_F_NAMELEN
diff --git a/sysdeps/unix/sysv/linux/mips/bits/statfs.h b/sysdeps/unix/sysv/linux/mips/bits/statfs.h
index 36d9996a69..1099ae1f5e 100644
--- a/sysdeps/unix/sysv/linux/mips/bits/statfs.h
+++ b/sysdeps/unix/sysv/linux/mips/bits/statfs.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 2000 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
@@ -67,3 +67,6 @@ struct statfs64
     long int f_spare[6];
   };
 #endif
+
+/* Tell code we have these members.  */
+#define _STATFS_F_NAMELEN
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/statfs.h b/sysdeps/unix/sysv/linux/sparc/bits/statfs.h
index 2037634007..0bda6dca45 100644
--- a/sysdeps/unix/sysv/linux/sparc/bits/statfs.h
+++ b/sysdeps/unix/sysv/linux/sparc/bits/statfs.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1998, 1999, 2000 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
@@ -59,3 +59,6 @@ struct statfs64
     long int f_spare[6];
   };
 #endif
+
+/* Tell code we have these members.  */
+#define _STATFS_F_NAMELEN