diff options
-rw-r--r-- | ChangeLog | 44 | ||||
-rw-r--r-- | MakeTAGS | 38 | ||||
-rw-r--r-- | Makerules | 4 | ||||
-rw-r--r-- | dirent/dirent.h | 21 | ||||
-rw-r--r-- | elf/dl-runtime.c | 6 | ||||
-rw-r--r-- | intl/Makefile | 6 | ||||
-rw-r--r-- | intl/dcgettext.c | 41 | ||||
-rw-r--r-- | intl/finddomain.c | 26 | ||||
-rw-r--r-- | intl/gettextP.h | 21 | ||||
-rw-r--r-- | intl/hash-string.h | 26 | ||||
-rw-r--r-- | intl/libintl.h | 34 | ||||
-rw-r--r-- | intl/localealias.c | 20 | ||||
-rw-r--r-- | manual/Makefile | 8 | ||||
-rw-r--r-- | stdio-common/vfscanf.c | 1 | ||||
-rw-r--r-- | sysdeps/m68k/bsd-_setjmp.S | 2 | ||||
-rw-r--r-- | sysdeps/m68k/bsd-setjmp.S | 2 | ||||
-rw-r--r-- | sysdeps/m68k/dl-machine.h | 27 | ||||
-rw-r--r-- | sysdeps/unix/closedir.c | 6 | ||||
-rw-r--r-- | sysdeps/unix/dirstream.h | 7 | ||||
-rw-r--r-- | sysdeps/unix/opendir.c | 26 | ||||
-rw-r--r-- | sysdeps/unix/readdir.c | 4 | ||||
-rw-r--r-- | sysdeps/unix/seekdir.c | 6 | ||||
-rw-r--r-- | sysdeps/unix/telldir.c | 4 | ||||
-rw-r--r-- | time/mktime.c | 5 |
24 files changed, 248 insertions, 137 deletions
@@ -1,3 +1,47 @@ +Mon Feb 19 15:30:26 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu> + + * stdio-common/tstscanf.c (main): Add check for "0" as %d. + + * sysdeps/stub/msync.c: Undo change of Jan 29; just two args. + Only some systems have three args; let them define their own stub. + + * sysdeps/generic/dl-sysdep.c: Declare _dl_secure. + + * sysdeps/generic/machine-gmon.h: New file. + * gmon/Makefile (distribute): Add machine-gmon.h. + * gmon/mcount.c: Undo changes of Feb 13. + Include "machine-gmon.h". + +Sun Feb 18 13:24:06 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu> + + * sysdeps/unix/sysv/linux/direct.h: File removed, since it is + identical to unix/common/direct.h. + + * sysdeps/unix/Makefile [no_deps]: Don't include s-proto.d. + + * sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Don't add ipc. + + * stdio-common/Makefile (tests): Remove scanf6. + + * sysdeps/unix/sysv/linux/Makefile (non-lib.a): Append libieee.a. + + * time/mktime.c (mktime): Move static variable localtime_offset to + file scope. + + * stdio-common/vfscanf.c: Put '0' in buffer before scanning for %i + base indicator. + +Thu Feb 15 16:56:17 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * sysdeps/m68k/dl-machine.h (elf_machine_load_address): Corrected. + (ELF_MACHINE_BEFORE_RTLD_RELOC): Define. + (_dl_runtime_resolve): Save %a1 as well. + (ELF_MACHINE_RUNTIME_FIXUP_ARGS): Add second dummy arg. + (elf_machine_relplt): Define. + + * elf/dl-runtime.c: Include possible extra args in declaration of + fixup. + Fri Feb 16 11:01:59 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu> * time/tzset.c: Limit hours to 23, not 12. From jaffer. @@ -1,6 +1,6 @@ # Make the TAGS files. -# Copyright (C) 1992, 1994, 1995 Free Software Foundation, Inc. +# Copyright (C) 1992, 1994, 1995, 1996 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 @@ -98,7 +98,7 @@ ifdef subdir ifdef tags_sources $(ETAGS) -o $@ $^ else -# No sources. Create a dummy file. +# No sources. Create a dummy file. touch $@ endif # tags_sources else # parent @@ -114,3 +114,37 @@ $(subdirs:%=%/TAGS): $(MAKE) -C $(@D) no_deps=t $(@F) endif # subdir + +XGETTEXT = xgettext +MSGJOIN = msgjoin + +P = $(..)po + +ifdef subdir +domain = $(subdir) +else +domain = libc-top +endif + +define extract +@rm -f $@.new +$(XGETTEXT) --keyword=_ --keyword=N_ --sort-output -d - \ + > $@.new /dev/null $^ +mv -f $@.new $@ +endef + +$P/$(domain).pot: $(tags_sources); $(extract) + +$P/siglist.pot: $(..)sysdeps/generic/signame.c; $(extract) +$P/errlist.pot: $(..)sysdeps/mach/hurd/errlist.c; $(extract) + +ifndef subdir +$P/SYS_libc.pot: $P/libc-top.pot $(subdirs:%=$P/%.pot) + @rm -f $@.new + $(MSGJOIN) $^ > $@.new + mv -f $@.new $@ + +$(subdirs:%=$P/%.pot): $P/%.pot: FORCE + $(MAKE) -C $* no_deps=t ../$@ +FORCE: +endif @@ -621,6 +621,10 @@ check: tests TAGS: distinfo $(..)MakeTAGS $(MAKE) $(addprefix -f ,$^) $@ +$(..)po/%.pot: distinfo $(..)MakeTAGS + $(MAKE) $(addprefix -f ,$^) $@ + + .PHONY: echo-headers echo-headers: @echo $(headers) diff --git a/dirent/dirent.h b/dirent/dirent.h index 5b99437..8a65486 100644 --- a/dirent/dirent.h +++ b/dirent/dirent.h @@ -29,25 +29,8 @@ __BEGIN_DECLS #include <gnu/types.h> - -/* Directory entry structure. - - This structure is laid out identically to the `struct direct' that - represents directory entries in the GNU Hurd and in BSD 4.4 (and - incidentally, on disk in the Berkeley fast file system). The `readdir' - implementations for GNU and BSD know this; you must change them if you - change this structure. */ - -struct dirent - { - __ino_t d_fileno; /* File serial number. */ - unsigned short int d_reclen; /* Length of the whole `struct dirent'. */ - unsigned char d_type; /* File type, possibly unknown. */ - unsigned char d_namlen; /* Length of the file name. */ - - /* Only this member is in the POSIX standard. */ - char d_name[1]; /* File name (actually longer). */ - }; +/* This file defines `struct dirent'. */ +#include <direntry.h> #if defined(__USE_BSD) || defined(__USE_MISC) #define d_ino d_fileno /* Backward compatibility. */ diff --git a/elf/dl-runtime.c b/elf/dl-runtime.c index 6ee1a94..3be90ca 100644 --- a/elf/dl-runtime.c +++ b/elf/dl-runtime.c @@ -37,7 +37,11 @@ Cambridge, MA 02139, USA. */ in the trampoline code will be a local PC-relative call. Tell the compiler not to worry that the function appears not to be called. */ -static Elf32_Addr fixup (struct link_map *l, Elf32_Word reloc_offset) +static Elf32_Addr fixup ( +#ifdef ELF_MACHINE_RUNTIME_FIXUP_ARGS + ELF_MACHINE_RUNTIME_FIXUP_ARGS, +#endif + struct link_map *l, Elf32_Word reloc_offset) __attribute__ ((unused)); /* This function is called through a special trampoline from the PLT the diff --git a/intl/Makefile b/intl/Makefile index adc4d01..0354b42 100644 --- a/intl/Makefile +++ b/intl/Makefile @@ -31,9 +31,9 @@ CPPFLAGS += -D'GNULOCALEDIR="$(localedir)"' \ ifdef gettext-srcdir -%:: $(gettext-srcdir)/intl/%.glibc; $(copysrc) -%:: $(gettext-srcdir)/intl/%.c; $(copysrc) -%:: $(gettext-srcdir)/intl/%.h; $(copysrc) +%.h:: $(gettext-srcdir)/intl/%.glibc; $(copysrc) +%.c:: $(gettext-srcdir)/intl/%.c; $(copysrc) +%.h:: $(gettext-srcdir)/intl/%.h; $(copysrc) define copysrc cp -f $< $@.new diff --git a/intl/dcgettext.c b/intl/dcgettext.c index 09e0443..7562f69 100644 --- a/intl/dcgettext.c +++ b/intl/dcgettext.c @@ -1,5 +1,5 @@ -/* dcgettext.c -- implemenatation of the dcgettext(3) function - Copyright (C) 1995 Software Foundation, Inc. +/* dcgettext.c -- implementation of the dcgettext(3) function + Copyright (C) 1995 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -24,7 +24,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef __GNUC__ # define alloca __builtin_alloca #else -# ifdef HAVE_ALLOCA_H || defined _LIBC +# if defined HAVE_ALLOCA_H || defined _LIBC # include <alloca.h> # else # ifdef _AIX @@ -151,10 +151,11 @@ const char _nl_default_dirname[] = GNULOCALEDIR; struct binding *_nl_domain_bindings; /* Prototypes for local functions. */ -static char *find_msg __P ((struct loaded_domain *domain, const char *msgid)); -static const char *category_to_name __P((int category)); -static const char *guess_category_value __P((int category, - const char *categoryname)); +static char *find_msg PARAMS ((struct loaded_domain *domain, + const char *msgid)); +static const char *category_to_name PARAMS ((int category)); +static const char *guess_category_value PARAMS ((int category, + const char *categoryname)); /* Names for the libintl functions are a problem. They must not clash @@ -182,6 +183,7 @@ DCGETTEXT (domainname, msgid, category) char *dirname, *xdomainname; char *single_locale; char *retval; + int saved_errno = errno; /* If no real MSGID is given return NULL. */ if (msgid == NULL) @@ -233,9 +235,12 @@ DCGETTEXT (domainname, msgid, category) } if (ret == NULL) - /* We cannot get the current working directory. Don't signal an - error but simply return the default string. */ - return (char *) msgid; + { + /* We cannot get the current working directory. Don't signal an + error but simply return the default string. */ + errno = saved_errno; + return (char *) msgid; + } /* We don't want libintl.a to depend on any other library. So we avoid the non-standard function stpcpy. In GNU C Library @@ -302,7 +307,10 @@ DCGETTEXT (domainname, msgid, category) domain. Return the MSGID. */ if (strcmp (single_locale, "C") == 0 || strcmp (single_locale, "POSIX") == 0) - return (char *) msgid; + { + errno = saved_errno; + return (char *) msgid; + } /* Find structure describing the message catalog matching the @@ -317,7 +325,7 @@ DCGETTEXT (domainname, msgid, category) { int cnt; - for (cnt = 0; domain->successor[cnt] != NULL; --cnt) + for (cnt = 0; domain->successor[cnt] != NULL; ++cnt) { retval = find_msg (domain->successor[cnt], msgid); @@ -327,7 +335,10 @@ DCGETTEXT (domainname, msgid, category) } if (retval != NULL) - return retval; + { + errno = saved_errno; + return retval; + } } } /* NOTREACHED */ @@ -375,8 +386,8 @@ find_msg (domain, msgid) while (1) { - if (idx >= W (domain->must_swap, domain->hash_size) - incr) - idx -= W (domain->must_swap, domain->hash_size) - incr; + if (idx >= domain->hash_size - incr) + idx -= domain->hash_size - incr; else idx += incr; diff --git a/intl/finddomain.c b/intl/finddomain.c index 007a87e..07c5f44 100644 --- a/intl/finddomain.c +++ b/intl/finddomain.c @@ -1,5 +1,5 @@ /* finddomain.c -- handle list of needed message catalogs - Copyright (C) 1995 Software Foundation, Inc. + Copyright (C) 1995 Free Software Foundation, Inc. Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. This program is free software; you can redistribute it and/or modify @@ -83,21 +83,21 @@ void free (); static struct loaded_domain *_nl_loaded_domains; /* Prototypes for local functions. */ -static struct loaded_domain *make_entry_rec __P ((const char *dirname, - int mask, - const char *language, - const char *territory, - const char *codeset, - const char *modifier, - const char *special, - const char *sponsor, - const char *revision, - const char *domainname, - int do_allocate)); +static struct loaded_domain *make_entry_rec PARAMS ((const char *dirname, + int mask, + const char *language, + const char *territory, + const char *codeset, + const char *modifier, + const char *special, + const char *sponsor, + const char *revision, + const char *domainname, + int do_allocate)); /* Substitution for systems lacking this function in their C library. */ #if !_LIBC && !HAVE_STPCPY -static char *stpcpy __P ((char *dest, const char *src)); +static char *stpcpy PARAMS ((char *dest, const char *src)); #endif diff --git a/intl/gettextP.h b/intl/gettextP.h index 12031c6..7c74f6c 100644 --- a/intl/gettextP.h +++ b/intl/gettextP.h @@ -1,5 +1,5 @@ /* gettextP.h -- header describing internals of gettext library - Copyright (C) 1995 Software Foundation, Inc. + Copyright (C) 1995 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -20,11 +20,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* @@ end of prolog @@ */ -#ifndef __P +#ifndef PARAMS # if __STDC__ -# define __P(args) args +# define PARAMS(args) args # else -# define __P(args) () +# define PARAMS(args) () # endif #endif @@ -32,6 +32,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ # define W(flag, data) ((flag) ? SWAP (data) : (data)) #endif + +static nls_uint32 SWAP PARAMS ((nls_uint32 i)); + static inline nls_uint32 SWAP (i) nls_uint32 i; @@ -64,12 +67,12 @@ struct binding char *dirname; }; -struct loaded_domain *_nl_find_domain __P ((const char *__dirname, - char *__locale, - const char *__domainname)); -void _nl_load_domain __P ((struct loaded_domain *__domain)); +struct loaded_domain *_nl_find_domain PARAMS ((const char *__dirname, + char *__locale, + const char *__domainname)); +void _nl_load_domain PARAMS ((struct loaded_domain *__domain)); -const char *_nl_expand_alias __P ((const char *__name)); +const char *_nl_expand_alias PARAMS ((const char *__name)); /* @@ begin of epilog @@ */ diff --git a/intl/hash-string.h b/intl/hash-string.h index e846b50..ef1f448 100644 --- a/intl/hash-string.h +++ b/intl/hash-string.h @@ -1,5 +1,5 @@ /* hash-string - Implements a string hashing function. - Copyright (C) 1995 Software Foundation, Inc. + Copyright (C) 1995 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -21,22 +21,28 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* @@ end of prolog @@ */ -#ifndef BITSPERBYTE -# define BITSPERBYTE 8 +#ifndef PARAMS +# if __STDC__ +# define PARAMS(Args) Args +# else +# define PARAMS(Args) () +# endif #endif -#ifndef LONGBITS -# define LONGBITS (sizeof (long) * BITSPERBYTE) -#endif /* LONGBITS */ +/* We assume to have `unsigned long int' value with at least 32 bits. */ +#define HASHWORDBITS 32 + /* Defines the so called `hashpjw' function by P.J. Weinberger [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools, - 1986, 1987 Bell Telephone Laboratories, Inc.] */ + 1986, 1987 Bell Telephone Laboratories, Inc.] */ +static unsigned long hash_string PARAMS ((const char *__str_param)); + static inline unsigned long hash_string (str_param) const char *str_param; { - unsigned long hval, g; + unsigned long int hval, g; const char *str = str_param; /* Compute the hash value for the given string. */ @@ -45,10 +51,10 @@ hash_string (str_param) { hval <<= 4; hval += (unsigned long) *str++; - g = hval & ((unsigned long) 0xf << (LONGBITS - 4)); + g = hval & ((unsigned long) 0xf << (HASHWORDBITS - 4)); if (g != 0) { - hval ^= g >> (LONGBITS - 8); + hval ^= g >> (HASHWORDBITS - 8); hval ^= g; } } diff --git a/intl/libintl.h b/intl/libintl.h index f9a150d..8e5b8f9 100644 --- a/intl/libintl.h +++ b/intl/libintl.h @@ -37,34 +37,36 @@ __BEGIN_DECLS /* Look up MSGID in the current default message catalog for the current LC_MESSAGES locale. If not found, returns MSGID itself (the default text). */ -extern char *gettext __P ((const char *__msgid)); -extern char *__gettext __P ((const char *__msgid)); +extern char *gettext __P ((__const char *__msgid)); +extern char *__gettext __P ((__const char *__msgid)); /* Look up MSGID in the DOMAINNAME message catalog for the current LC_MESSAGES locale. */ -extern char *dgettext __P ((const char *__domainname, const char *__msgid)); -extern char *__dgettext __P ((const char *__domainname, const char *__msgid)); +extern char *dgettext __P ((__const char *__domainname, + __const char *__msgid)); +extern char *__dgettext __P ((__const char *__domainname, + __const char *__msgid)); /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY locale. */ -extern char *dcgettext __P ((const char *__domainname, const char *__msgid, - int __category)); -extern char *__dcgettext __P ((const char *__domainname, const char *__msgid, - int __category)); +extern char *dcgettext __P ((__const char *__domainname, + __const char *__msgid, int __category)); +extern char *__dcgettext __P ((__const char *__domainname, + __const char *__msgid, int __category)); /* Set the current default message catalog to DOMAINNAME. If DOMAINNAME is null, return the current default. If DOMAINNAME is "", reset to the default of "messages". */ -extern char *textdomain __P ((const char *__domainname)); -extern char *__textdomain __P ((const char *__domainname)); +extern char *textdomain __P ((__const char *__domainname)); +extern char *__textdomain __P ((__const char *__domainname)); /* Specify that the DOMAINNAME message catalog will be found in DIRNAME rather than in the system locale data base. */ -extern char *bindtextdomain __P ((const char *__domainname, - const char *__dirname)); -extern char *__bindtextdomain __P ((const char *__domainname, - const char *__dirname)); +extern char *bindtextdomain __P ((__const char *__domainname, + __const char *__dirname)); +extern char *__bindtextdomain __P ((__const char *__domainname, + __const char *__dirname)); /* Optimized version of the function above. */ @@ -73,9 +75,9 @@ extern char *__bindtextdomain __P ((const char *__domainname, `__builtin_constant_p' predicate in dcgettext would always return false. */ -# define gettext (msgid) dgettext (NULL, msgid) +# define gettext(msgid) dgettext (NULL, msgid) -# define dgettext (domainname, msgid) \ +# define dgettext(domainname, msgid) \ dcgettext (domainname, msgid, LC_MESSAGES) # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) diff --git a/intl/localealias.c b/intl/localealias.c index 47f2cbf..02fa8a7 100644 --- a/intl/localealias.c +++ b/intl/localealias.c @@ -1,5 +1,5 @@ /* localealias.c -- handle aliases for locale names - Copyright (C) 1995 Free Software Foundation, Inc. + Copyright (C) 1995, 1996 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -86,10 +86,10 @@ static size_t maxmap = 0; /* Prototypes for local functions. */ -static size_t read_alias_file __P ((const char *fname, int fname_len)); -static void extend_alias_table __P ((void)); -static int alias_compare __P ((const struct alias_map *map1, - const struct alias_map *map2)); +static size_t read_alias_file PARAMS ((const char *fname, int fname_len)); +static void extend_alias_table PARAMS ((void)); +static int alias_compare PARAMS ((const struct alias_map *map1, + const struct alias_map *map2)); const char * @@ -109,9 +109,9 @@ _nl_expand_alias (name) if (nmap > 0) retval = (struct alias_map *) bsearch (&item, map, nmap, sizeof (struct alias_map), - (int (*) (const void *, - const void *)) - alias_compare); + (int (*) PARAMS ((const void *, + const void *)) + ) alias_compare); else retval = NULL; @@ -257,7 +257,7 @@ read_alias_file (fname, fname_len) if (added > 0) qsort (map, nmap, sizeof (struct alias_map), - (int (*) (const void *, const void *)) alias_compare); + (int (*) PARAMS ((const void *, const void *))) alias_compare); return added; } @@ -309,6 +309,8 @@ alias_compare (map1, map2) c2 = isupper (*p2) ? tolower (*p2) : *p2; if (c1 == '\0') break; + ++p1; + ++p2; } while (c1 == c2); diff --git a/manual/Makefile b/manual/Makefile index df7a9a3..54a3a46 100644 --- a/manual/Makefile +++ b/manual/Makefile @@ -1,6 +1,6 @@ # Makefile for the GNU C Library manual. -# Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc. +# Copyright (C) 1992, 1993, 1994, 1995, 1996 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 @@ -148,7 +148,7 @@ ETAGS = etags -T endif TAGS: $(minimal-dist) $(ETAGS) -o $@ $^ - + # These are targets that each glibc subdirectory is expected to understand. # ../Rules defines them for code subdirectories; for us, they are no-ops. glibc-targets := subdir_lib objects objs others tests subdir_lint.out \ @@ -157,13 +157,13 @@ glibc-targets := subdir_lib objects objs others tests subdir_lint.out \ $(glibc-targets): stubs: $(common-objpfx)stub-manual -$(common-objpfx)stub-manual: +$(common-objpfx)stub-manual ../po/manual.pot: cp /dev/null $@ # The top-level glibc Makefile expects subdir_install to update the stubs file. subdir_install: stubs - + # Get rid of these variables if they came from the parent. routines = aux = diff --git a/stdio-common/vfscanf.c b/stdio-common/vfscanf.c index 48aa059..bc7acd6 100644 --- a/stdio-common/vfscanf.c +++ b/stdio-common/vfscanf.c @@ -528,6 +528,7 @@ __vfscanf (FILE *s, const char *format, va_list argptr) if (width > 0) --width; + ADDW (c); (void) inchar (); if (width != 0 && tolower (c) == 'x') diff --git a/sysdeps/m68k/bsd-_setjmp.S b/sysdeps/m68k/bsd-_setjmp.S index 69aa7de..db777cf 100644 --- a/sysdeps/m68k/bsd-_setjmp.S +++ b/sysdeps/m68k/bsd-_setjmp.S @@ -23,7 +23,7 @@ Cambridge, MA 02139, USA. */ #include <sysdep.h> -#ifdef MOTOROLA_SYNTAX +#if defined (MOTOROLA_SYNTAX) || defined (ELF_SYNTAX) #define d0 %d0 #define d1 %d1 #define PUSH(reg) move.l reg, -(%sp) diff --git a/sysdeps/m68k/bsd-setjmp.S b/sysdeps/m68k/bsd-setjmp.S index c853516..c179497 100644 --- a/sysdeps/m68k/bsd-setjmp.S +++ b/sysdeps/m68k/bsd-setjmp.S @@ -23,7 +23,7 @@ Cambridge, MA 02139, USA. */ #include <sysdep.h> -#ifdef MOTOROLA_SYNTAX +#if defined (MOTOROLA_SYNTAX) || defined (ELF_SYNTAX) #define d0 %d0 #define d1 %d1 #define PUSH(reg) move.l reg, -(%sp) diff --git a/sysdeps/m68k/dl-machine.h b/sysdeps/m68k/dl-machine.h index 2208cd2..8cbb977 100644 --- a/sysdeps/m68k/dl-machine.h +++ b/sysdeps/m68k/dl-machine.h @@ -52,9 +52,22 @@ elf_machine_got (void) static inline Elf32_Addr elf_machine_load_address (void) { - ... + Elf32_Addr addr; + asm ("here: lea here(%%pc), %0\n" + " sub.l %#here, %0" + : "=a" (addr)); + return addr; } +/* The `subl' insn above will contain an R_68K_RELATIVE relocation + entry intended to insert the run-time address of the label `here'. + This will be the first relocation in the text of the dynamic + linker; we skip it to avoid trying to modify read-only text in this + early stage. */ +#define ELF_MACHINE_BEFORE_RTLD_RELOC(dynamic_info) \ + ((dynamic_info)[DT_RELA]->d_un.d_ptr += sizeof (Elf32_Rela), \ + (dynamic_info)[DT_RELASZ]->d_un.d_val -= sizeof (Elf32_Rela)) + /* Perform the relocation specified by RELOC and SYM (which is fully resolved). MAP is the object containing the reloc. */ @@ -158,11 +171,13 @@ elf_machine_runtime_setup (struct link_map *l, int lazy) .globl _dl_runtime_resolve .type _dl_runtime_resolve, @function _dl_runtime_resolve: - | Save %a0 (struct return address). + | Save %a0 (struct return address) and %a1. move.l %a0, -(%sp) + move.l %a1, -(%sp) | Call the real address resolver. - bsr.l fixup - | Restore register %a0. + jbsr fixup + | Restore register %a0 and %a1. + move.l (%sp)+, %a1 move.l (%sp)+, %a0 | Pop parameters addq.l #8, %sp @@ -170,7 +185,9 @@ _dl_runtime_resolve: jmp (%d0) .size _dl_runtime_resolve, . - _dl_runtime_resolve "); -#define ELF_MACHINE_RUNTIME_FIXUP_ARGS long int save_a0 +#define ELF_MACHINE_RUNTIME_FIXUP_ARGS long int save_a0, long int save_a1 +/* The PLT uses Elf32_Rela relocs. */ +#define elf_machine_relplt elf_machine_rela } diff --git a/sysdeps/unix/closedir.c b/sysdeps/unix/closedir.c index 5f1ac74..6acbb62 100644 --- a/sysdeps/unix/closedir.c +++ b/sysdeps/unix/closedir.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1993, 1995 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1993, 1995, 1996 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 @@ -37,9 +37,9 @@ DEFUN(closedir, (dirp), DIR *dirp) return -1; } - fd = dirp->__fd; + fd = dirp->fd; - free ((PTR) dirp->__data); + free ((PTR) dirp->data); free ((PTR) dirp); return __close (fd); diff --git a/sysdeps/unix/dirstream.h b/sysdeps/unix/dirstream.h index 72fd67c..52d2337 100644 --- a/sysdeps/unix/dirstream.h +++ b/sysdeps/unix/dirstream.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1995 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1995, 1996 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 @@ -20,8 +20,7 @@ Cambridge, MA 02139, USA. */ #define _DIRSTREAM_H 1 -#define __need_size_t -#include <stddef.h> +#include <sys/types.h> /* Directory stream type. @@ -37,7 +36,7 @@ struct __dirstream size_t __offset; /* Current offset into the block. */ size_t __size; /* Total valid data in the block. */ - struct dirent __entry; /* Returned by `readdir'. */ + off_t pos; /* Position of next entry to read. */ }; #define _DIR_dirfd(dirp) ((dirp)->__fd) diff --git a/sysdeps/unix/opendir.c b/sysdeps/unix/opendir.c index 5cd6206..31111e8 100644 --- a/sysdeps/unix/opendir.c +++ b/sysdeps/unix/opendir.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. +/* Copyright (C) 1991, 92, 93, 94, 95, 96 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 @@ -16,7 +16,6 @@ License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#include <ansidecl.h> #include <errno.h> #include <limits.h> #include <stddef.h> @@ -28,12 +27,11 @@ Cambridge, MA 02139, USA. */ #include <unistd.h> #include <stdio.h> -#include "direct.h" /* This file defines `struct direct'. */ #include "dirstream.h" /* Open a directory stream on NAME. */ DIR * -DEFUN(opendir, (name), CONST char *name) +opendir (const char *name) { DIR *dirp; struct stat statbuf; @@ -62,7 +60,7 @@ DEFUN(opendir, (name), CONST char *name) goto lose; } - dirp = (DIR *) calloc (1, sizeof (DIR) + NAME_MAX); /* Zero-fill. */ + dirp = (DIR *) calloc (1, sizeof (DIR)); /* Zero-fill. */ if (dirp == NULL) lose: { @@ -73,24 +71,24 @@ DEFUN(opendir, (name), CONST char *name) } #ifdef _STATBUF_ST_BLKSIZE - if (statbuf.st_blksize < sizeof (struct direct)) - dirp->__allocation = sizeof (struct direct); + if (statbuf.st_blksize < sizeof (struct dirent)) + dirp->allocation = sizeof (struct dirent); else - dirp->__allocation = statbuf.st_blksize; + dirp->allocation = statbuf.st_blksize; #else - dirp->__allocation = (BUFSIZ < sizeof (struct direct) ? - sizeof (struct direct) : BUFSIZ); + dirp->allocation = (BUFSIZ < sizeof (struct dirent) ? + sizeof (struct dirent) : BUFSIZ); #endif - dirp->__data = (char *) malloc (dirp->__allocation); - if (dirp->__data == NULL) + dirp->data = (char *) malloc (dirp->allocation); + if (dirp->data == NULL) { int save = errno; - free ((PTR) dirp); + free (dirp); (void) __close (fd); errno = save; return NULL; } - dirp->__fd = fd; + dirp->fd = fd; return dirp; } diff --git a/sysdeps/unix/readdir.c b/sysdeps/unix/readdir.c index 1842948..b1d7e43 100644 --- a/sysdeps/unix/readdir.c +++ b/sysdeps/unix/readdir.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. +/* Copyright (C) 1991, 92, 93, 94, 95, 96 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 @@ -77,6 +77,8 @@ DEFUN(readdir, (dirp), DIR *dirp) p = memchr ((PTR) dp->d_name, '\0', D_NAMLEN (dp) + 1); d->d_namlen = (p != NULL) ? p - dp->d_name : D_NAMLEN (dp); memcpy (d->d_name, dp->d_name, d->d_namlen + 1); + d->d_type = DT_UNKNOWN; + d->d_reclen = &d->d_name[d->d_namlen + 1] - (char *) d; return d; } } diff --git a/sysdeps/unix/seekdir.c b/sysdeps/unix/seekdir.c index 018f697..02390d7 100644 --- a/sysdeps/unix/seekdir.c +++ b/sysdeps/unix/seekdir.c @@ -27,7 +27,7 @@ Cambridge, MA 02139, USA. */ void DEFUN(seekdir, (dirp, pos), DIR *dirp AND __off_t pos) { - (void) __lseek(dirp->__fd, pos, SEEK_SET); - dirp->__size = 0; - dirp->__offset = 0; + (void) __lseek(dirp->fd, pos, SEEK_SET); + dirp->size = 0; + dirp->offset = 0; } diff --git a/sysdeps/unix/telldir.c b/sysdeps/unix/telldir.c index 2b611b0..c319d71 100644 --- a/sysdeps/unix/telldir.c +++ b/sysdeps/unix/telldir.c @@ -36,8 +36,8 @@ DEFUN(telldir, (dirp), DIR *dirp) return (off_t) -1; } - pos = __lseek(dirp->__fd, (off_t) 0, SEEK_CUR); + pos = __lseek(dirp->fd, (off_t) 0, SEEK_CUR); if (pos == (off_t) -1) return (off_t) -1; - return pos + dirp->__size - dirp->__offset; + return pos + dirp->size - dirp->offset; } diff --git a/time/mktime.c b/time/mktime.c index 852d405..c3c5395 100644 --- a/time/mktime.c +++ b/time/mktime.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1994, 1995 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1994, 1995, 1996 Free Software Foundation, Inc. Contributed by Paul Eggert (eggert@twinsun.com). This file is part of the GNU C Library. @@ -146,12 +146,13 @@ ydhms_tm_diff (year, yday, hour, min, sec, tp) } +static time_t localtime_offset; + /* Convert *TP to a time_t value. */ time_t mktime (tp) struct tm *tp; { - static time_t localtime_offset; return __mktime_internal (tp, localtime_r, &localtime_offset); } |