1998-02-17  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* elf/dl-load.c (add_name_to_object): Don't translate strings.
	* elf/dl-minimal.c (_strerror_internal): Define it here to avoid
	pulling in the whole error list.
	(__dcgettext, dcgettext): Removed.
	* libc.map: Export _strerror_internal.

1998-02-18 10:50  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/i386/fpu/t_exp.c: New file.

1998-02-18  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

	* nis/libnss_nisplus.map: NIS+ support is new in glibc 2.1, add
	everything with version GLIBC_2.1.
	* hesiod/libnss_hesiod.map: Likewise.

1998-02-18  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

	* manual/arith.texi (Old-style number conversion): This node is a
	section, not a subsection.

1998-02-17  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* elf/dl-lookup.c (make_string): Use __stpcpy instead of stpcpy.

1998-02-17  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* elf/rtld.c (dl_main): Make sure that the library search paths
	have been initialized before the first call to _dl_map_object.

1998-02-17  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* Makerules (common-generated): Add libc_pic.os.

1998-02-17  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* elf/rtld.c (dl_main): Use PT_PHDR to figure out the load address
	of the executable.

1998-02-18 10:28  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
This commit is contained in:
Ulrich Drepper 1998-02-18 11:00:24 +00:00
parent 1b5fd83083
commit da8324650d
10 changed files with 113 additions and 28 deletions

View File

@ -1,4 +1,45 @@
Wed Feb 18 10:28:58 1998 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> 1998-02-17 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* elf/dl-load.c (add_name_to_object): Don't translate strings.
* elf/dl-minimal.c (_strerror_internal): Define it here to avoid
pulling in the whole error list.
(__dcgettext, dcgettext): Removed.
* libc.map: Export _strerror_internal.
1998-02-18 10:50 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/i386/fpu/t_exp.c: New file.
1998-02-18 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* nis/libnss_nisplus.map: NIS+ support is new in glibc 2.1, add
everything with version GLIBC_2.1.
* hesiod/libnss_hesiod.map: Likewise.
1998-02-18 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* manual/arith.texi (Old-style number conversion): This node is a
section, not a subsection.
1998-02-17 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* elf/dl-lookup.c (make_string): Use __stpcpy instead of stpcpy.
1998-02-17 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* elf/rtld.c (dl_main): Make sure that the library search paths
have been initialized before the first call to _dl_map_object.
1998-02-17 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* Makerules (common-generated): Add libc_pic.os.
1998-02-17 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* elf/rtld.c (dl_main): Use PT_PHDR to figure out the load address
of the executable.
1998-02-18 10:28 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/m68k/fpu/t_exp.c: New file. * sysdeps/m68k/fpu/t_exp.c: New file.

View File

@ -125,7 +125,7 @@ add_name_to_object (struct link_map *l, char *name)
if (name == NULL) if (name == NULL)
{ {
/* No more memory. */ /* No more memory. */
_dl_signal_error (ENOMEM, NULL, _("could not allocate name string")); _dl_signal_error (ENOMEM, NULL, "could not allocate name string");
return 0; return 0;
} }
@ -141,8 +141,8 @@ add_name_to_object (struct link_map *l, char *name)
if (newname == NULL) if (newname == NULL)
{ {
/* No more memory. */ /* No more memory. */
_dl_signal_error (ENOMEM, name, _("cannot allocate name record")); _dl_signal_error (ENOMEM, name, "cannot allocate name record");
free(name); free (name);
return 0; return 0;
} }
/* The object should have a libname set from _dl_new_object. */ /* The object should have a libname set from _dl_new_object. */

View File

@ -1,5 +1,5 @@
/* Look up a symbol in the loaded objects. /* Look up a symbol in the loaded objects.
Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -51,7 +51,7 @@ struct sym_val
\ \
cp = result = alloca (len); \ cp = result = alloca (len); \
for (cnt = 0; cnt < sizeof (all) / sizeof (all[0]); ++cnt) \ for (cnt = 0; cnt < sizeof (all) / sizeof (all[0]); ++cnt) \
cp = stpcpy (cp, all[cnt]); \ cp = __stpcpy (cp, all[cnt]); \
\ \
result; \ result; \
}) })

View File

@ -24,6 +24,7 @@
#include <string.h> #include <string.h>
#include <link.h> #include <link.h>
#include <stdio-common/_itoa.h> #include <stdio-common/_itoa.h>
#include <errno.h>
/* Minimal `malloc' allocator for use while loading shared libraries. /* Minimal `malloc' allocator for use while loading shared libraries.
Only small blocks are allocated, and none are ever freed. */ Only small blocks are allocated, and none are ever freed. */
@ -123,15 +124,47 @@ longjmp (jmp_buf env, int val)
__longjmp (env[0].__jmpbuf, val); __longjmp (env[0].__jmpbuf, val);
} }
/* Define our own stub for the localization function used by strerror. /* Define our own version of the internal function used by strerror. We
English-only in the dynamic linker keeps it smaller. */ only provide the messages for some common errors. This avoids pulling
in the whole error list. */
char * weak_function char * weak_function
__dcgettext (const char *domainname, const char *msgid, int category) _strerror_internal (int errnum, char *buf, size_t buflen)
{ {
return (char *) msgid; char *msg;
switch (errnum)
{
case ENOMEM:
msg = (char *) "Cannot allocate memory";
break;
case EINVAL:
msg = (char *) "Invalid argument";
break;
case ENOENT:
msg = (char *) "No such file or directory";
break;
case EPERM:
msg = (char *) "Operation not permitted";
break;
case EIO:
msg = (char *) "Input/output error";
break;
case EACCES:
msg = (char *) "Permission denied";
break;
default:
/* No need to check buffer size, all calls in the dynamic linker
provide enough space. */
buf[buflen - 1] = '\0';
msg = _itoa_word (errnum, buf + buflen - 1, 10, 0);
msg = memcpy (msg - (sizeof ("Error ") - 1), "Error ",
sizeof ("Error ") - 1);
break;
}
return msg;
} }
weak_alias (__dcgettext, dcgettext)
#ifndef NDEBUG #ifndef NDEBUG

View File

@ -264,7 +264,6 @@ dl_main (const ElfW(Phdr) *phdr,
size_t file_size; size_t file_size;
char *file; char *file;
int has_interp = 0; int has_interp = 0;
const char *library_path = NULL; /* Overwrites LD_LIBRARY_PATH if given. */
/* Test whether we want to see the content of the auxiliary array passed /* Test whether we want to see the content of the auxiliary array passed
up from the kernel. */ up from the kernel. */
@ -323,6 +322,9 @@ dl_main (const ElfW(Phdr) *phdr,
ourselves). This is an easy way to test a new ld.so before ourselves). This is an easy way to test a new ld.so before
installing it. */ installing it. */
/* Overwrites LD_LIBRARY_PATH if given. */
const char *library_path = NULL;
/* Note the place where the dynamic linker actually came from. */ /* Note the place where the dynamic linker actually came from. */
_dl_rtld_map.l_name = _dl_argv[0]; _dl_rtld_map.l_name = _dl_argv[0];
@ -378,6 +380,10 @@ of this helper program; chances are you did not intend to run this program.\n",
--_dl_argc; --_dl_argc;
++_dl_argv; ++_dl_argv;
/* Initialize the data structures for the search paths for shared
objects. */
_dl_init_paths (library_path);
if (mode == verify) if (mode == verify)
{ {
char *err_str = NULL; char *err_str = NULL;
@ -412,12 +418,20 @@ of this helper program; chances are you did not intend to run this program.\n",
main_map->l_phnum = phent; main_map->l_phnum = phent;
main_map->l_entry = *user_entry; main_map->l_entry = *user_entry;
main_map->l_opencount = 1; main_map->l_opencount = 1;
/* Initialize the data structures for the search paths for shared
objects. */
_dl_init_paths (NULL);
} }
/* Scan the program header table for the dynamic section. */ /* Scan the program header table for the dynamic section. */
for (ph = phdr; ph < &phdr[phent]; ++ph) for (ph = phdr; ph < &phdr[phent]; ++ph)
switch (ph->p_type) switch (ph->p_type)
{ {
case PT_PHDR:
/* Find out the load address. */
main_map->l_addr = (ElfW(Addr)) phdr - ph->p_vaddr;
break;
case PT_DYNAMIC: case PT_DYNAMIC:
/* This tells us where to find the dynamic section, /* This tells us where to find the dynamic section,
which tells us everything we need to do. */ which tells us everything we need to do. */
@ -492,10 +506,6 @@ of this helper program; chances are you did not intend to run this program.\n",
preloads = NULL; preloads = NULL;
npreloads = 0; npreloads = 0;
/* Initialize the data structures for the search paths for shared
objects. */
_dl_init_paths (library_path);
preloadlist = getenv ("LD_PRELOAD"); preloadlist = getenv ("LD_PRELOAD");
if (preloadlist) if (preloadlist)
{ {

View File

@ -1,4 +1,4 @@
GLIBC_2.0 { GLIBC_2.1 {
global: global:
_nss_hesiod_setpwent; _nss_hesiod_endpwent; _nss_hesiod_setpwent; _nss_hesiod_endpwent;
_nss_hesiod_getpwnam_r; _nss_hesiod_getpwuid; _nss_hesiod_getpwnam_r; _nss_hesiod_getpwuid;

View File

@ -100,7 +100,7 @@ GLIBC_2.0 {
__vsscanf; __vfscanf; __vsnprintf; __vsscanf; __vfscanf; __vsnprintf;
_rpc_dtablesize; _null_auth; _seterr_reply; _rpc_dtablesize; _null_auth; _seterr_reply;
__res_randomid; __syscall_rt_sigqueueinfo; __getpid; __pread64; __pwrite64; __res_randomid; __syscall_rt_sigqueueinfo; __getpid; __pread64; __pwrite64;
__strcasecmp; __write; __strcasecmp; __write; _strerror_internal;
# Exception handling support functions from libgcc # Exception handling support functions from libgcc
__register_frame; __register_frame_table; __deregister_frame; __register_frame; __register_frame_table; __deregister_frame;

View File

@ -1328,7 +1328,7 @@ is provided mostly for compatibility with existing code; using
@node Old-style number conversion @node Old-style number conversion
@subsection Old-style way of converting numbers to strings @section Old-style way of converting numbers to strings
The @w{System V} library provided three functions to convert numbers to The @w{System V} library provided three functions to convert numbers to
strings which have a unusual and hard-to-be-used semantic. The GNU C strings which have a unusual and hard-to-be-used semantic. The GNU C

View File

@ -1,4 +1,4 @@
GLIBC_2.0 { GLIBC_2.1 {
global: global:
_nss_nisplus_endaliasent; _nss_nisplus_endetherent; _nss_nisplus_endgrent; _nss_nisplus_endaliasent; _nss_nisplus_endetherent; _nss_nisplus_endgrent;
_nss_nisplus_endhostent; _nss_nisplus_endnetent; _nss_nisplus_endnetgrent; _nss_nisplus_endhostent; _nss_nisplus_endnetent; _nss_nisplus_endnetgrent;

1
sysdeps/i386/fpu/t_exp.c Normal file
View File

@ -0,0 +1 @@
/* Empty. Not needed. */