aboutsummaryrefslogtreecommitdiff
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.zip
glibc-a808d541c6fb36db381923c52040855602e9fd83.tar.gz
glibc-a808d541c6fb36db381923c52040855602e9fd83.tar.bz2
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 f5983d7..99d5448 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 7c0bc58..77f730a 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 ef05ebf..927b00c 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 2939d9e..0da3a67 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 94593bc..ede91fb 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 2032afe..b6181c3 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 f2d3271..f7ed250 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 34019fd..feea7e5 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 49d1781..41fb75e 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 31ae564..7bf59ec 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 36d9996..1099ae1 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 2037634..0bda6dc 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