+1999-05-11 Ulrich Drepper <drepper@cygnus.com>
+
+ * elf/Versions (ld.so) [GLIBC_2.1.1]: Add _dl_lazy.
+ * elf/dl-open.c (_dl_open_worker): Only relocate newly loaded objects
+ lazily if LD_BIND_NOW is not set.
+ * elf/dl-support.c (_dl_lazy): New variable.
+ (non_dynamic_init): Set _dl_lazy according to LD_BIND_NOW envvar.
+ * elf/rtld.c (_dl_lazy): new global variable.
+ ( dl_main): Remove lazy, replace it by _dl_lazy.
+
+1999-05-06 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
+
+ * locale/setlocale.c (new_composite_name): Check also whether the
+ first category name differs.
+
+1999-05-11 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
+
+ * sysdeps/unix/sysv/linux/ftime.c: Use the bsd implementation, not
+ the generic one.
+
+1999-05-11 Philip Blundell <pb@nexus.co.uk>
+
+ * sysdeps/generic/bits/socket.h (struct sockaddr_storage): New
+ structure; storage suitable for any socket address.
+ * sysdeps/unix/sysv/linux/bits/socket.h (struct sockaddr_storage):
+ Likewise.
+ * sysdeps/unix/sysv/linux/mips/bits/socket.h (struct
+ sockaddr_storage): Likewise.
+
+ * inet/netinet/in.h: Use ULONG_MAX not ~0 to test for a 64-bit
+ platform.
+
1999-05-10 Ulrich Drepper <drepper@cygnus.com>
* hesiod/Versions: Change _nss_hesiod_getpwuid and
/* System-specific socket constants and types. Generic/4.3 BSD version.
- Copyright (C) 1991, 92, 94, 95, 96, 97, 98 Free Software Foundation, Inc.
+ Copyright (C) 1991,92,94,95,96,97,98,99 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
# error "Never include <bits/socket.h> directly; use <sys/socket.h> instead."
#endif
+#include <limits.h>
+#include <bits/types.h>
+
#define __need_size_t
#include <stddef.h>
};
+/* Structure large enough to hold any socket address (with the historical
+ exception of AF_UNIX). We reserve 128 bytes. */
+#if ULONG_MAX > 0xffffffff
+# define __ss_align __uint64_t
+#else
+# define __ss_align __uint32_t
+#endif
+#define _SS_SIZE 128
+#define _SS_PADSIZE (_SS_SIZE - (2 * sizeof (__ss_align)))
+
+struct sockaddr_storage
+ {
+ __SOCKADDR_COMMON (__ss_); /* Address family, etc. */
+ __ss_align __ss_align; /* Force desired alignment. */
+ char __ss_padding[_SS_PADSIZE];
+ };
+
+
/* Bits in the FLAGS argument to `send', `recv', et al. */
enum
{
}
GLIBC_2.1.1 {
# global variables
- _dl_origin_path; _dl_platformlen;
+ _dl_lazy; _dl_origin_path; _dl_platformlen;
# functions used in other libraries
_dl_dst_count; _dl_dst_substitute;
extern char **__environ;
+extern int _dl_lazy; /* Do we do lazy relocations? */
+
/* Undefine the following for debugging. */
/* #define SCOPE_DEBUG 1 */
#ifdef SCOPE_DEBUG
struct r_debug *r;
unsigned int global_add;
const char *dst;
+ int lazy;
/* Maybe we have to expand a DST. */
dst = strchr (file, '$');
show_scope (new);
#endif
+ /* Only do lazy relocation if `LD_BIND_NOW' is not set. */
+ lazy = (mode & RTLD_BINDING_MASK) == RTLD_LAZY && _dl_lazy;
+
/* Relocate the objects loaded. We do this in reverse order so that copy
relocs of earlier objects overwrite the data written by later objects. */
}
else
#endif
- _dl_relocate_object (l, l->l_scope,
- (mode & RTLD_BINDING_MASK) == RTLD_LAZY, 0);
+ _dl_relocate_object (l, l->l_scope, lazy, 0);
}
if (l == new)
/* Support for dynamic linking code in static libc.
- Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
+ Copyright (C) 1996, 1997, 1998, 1999 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
int _dl_debug_versions;
int _dl_debug_reloc;
int _dl_debug_files;
+int _dl_lazy;
/* If nonzero print warnings about problematic situations. */
int _dl_verbose;
objects. */
_dl_init_paths (getenv ("LD_LIBRARY_PATH"));
+ _dl_lazy = *(getenv ("LD_BIND_NOW") ?: "") == '\0';
+
#ifdef DL_PLATFORM_INIT
DL_PLATFORM_INIT;
#endif
const char *_dl_profile;
const char *_dl_profile_output;
struct link_map *_dl_profile_map;
+int _dl_lazy;
int _dl_debug_libs;
int _dl_debug_impcalls;
int _dl_debug_bindings;
ElfW(Addr) *user_entry)
{
const ElfW(Phdr) *ph;
- int lazy;
enum mode mode;
struct link_map **preloads;
unsigned int npreloads;
hp_timing_t diff;
/* Process the environment variable which control the behaviour. */
- process_envvars (&mode, &lazy);
+ process_envvars (&mode, &_dl_lazy);
/* Set up a flag which tells we are just starting. */
_dl_starting_up = 1;
if (! strcmp (_dl_argv[1], "--list"))
{
mode = list;
- lazy = -1; /* This means do no dependency analysis. */
+ _dl_lazy = -1; /* This means do no dependency analysis. */
++_dl_skip_args;
--_dl_argc;
}
else
{
- if (lazy >= 0)
+ if (_dl_lazy >= 0)
{
/* We have to do symbol dependency testing. */
struct relocate_args args;
struct link_map *l;
- args.lazy = lazy;
+ args.lazy = _dl_lazy;
l = _dl_loaded;
while (l->l_next)
hp_timing_t add;
/* If we are profiling we also must do lazy reloaction. */
- lazy |= consider_profiling;
+ _dl_lazy |= consider_profiling;
l = _dl_loaded;
while (l->l_next)
do
{
if (l != &_dl_rtld_map)
- _dl_relocate_object (l, l->l_scope, lazy, consider_profiling);
+ _dl_relocate_object (l, l->l_scope, _dl_lazy, consider_profiling);
l = l->l_prev;
}
-/* Copyright (C) 1991,92,93,94,95,96,97,98 Free Software Foundation, Inc.
+/* Copyright (C) 1991,92,93,94,95,96,97,98,99 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
#define _NETINET_IN_H 1
#include <features.h>
+#include <limits.h>
#include <stdint.h>
#include <sys/types.h>
uint8_t u6_addr8[16];
uint16_t u6_addr16[8];
uint32_t u6_addr32[4];
-#if (~0UL) > 0xffffffff
+#if ULONG_MAX > 0xffffffff
uint64_t u6_addr64[2];
#endif
} in6_u;
_nl_current_names[i]);
last_len = strlen (name);
cumlen += _nl_category_name_sizes[i] + 1 + last_len + 1;
- if (i > 0 && same && strcmp (name, newnames[0]) != 0)
+ if (same && strcmp (name, newnames[0]) != 0)
same = 0;
}
/* System-specific socket constants and types. Generic/4.3 BSD version.
- Copyright (C) 1991, 92, 94, 95, 96, 97, 98 Free Software Foundation, Inc.
+ Copyright (C) 1991,92,94,95,96,97,98,99 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
# error "Never include <bits/socket.h> directly; use <sys/socket.h> instead."
#endif
+#include <limits.h>
+#include <bits/types.h>
+
#define __need_size_t
#include <stddef.h>
};
+/* Structure large enough to hold any socket address (with the historical
+ exception of AF_UNIX). We reserve 128 bytes. */
+#if ULONG_MAX > 0xffffffff
+# define __ss_align __uint64_t
+#else
+# define __ss_align __uint32_t
+#endif
+#define _SS_SIZE 128
+#define _SS_PADSIZE (_SS_SIZE - (2 * sizeof (__ss_align)))
+
+struct sockaddr_storage
+ {
+ __SOCKADDR_COMMON (__ss_); /* Address family, etc. */
+ __ss_align __ss_align; /* Force desired alignment. */
+ char __ss_padding[_SS_PADSIZE];
+ };
+
+
/* Bits in the FLAGS argument to `send', `recv', et al. */
enum
{
#define __need_NULL
#include <stddef.h>
+#include <limits.h>
#include <sys/types.h>
/* Type for length arguments in socket calls. */
};
+/* Structure large enough to hold any socket address (with the historical
+ exception of AF_UNIX). We reserve 128 bytes. */
+#if ULONG_MAX > 0xffffffff
+# define __ss_aligntype __uint64_t
+#else
+# define __ss_aligntype __uint32_t
+#endif
+#define _SS_SIZE 128
+#define _SS_PADSIZE (_SS_SIZE - (2 * sizeof (__ss_aligntype)))
+
+struct sockaddr_storage
+ {
+ __SOCKADDR_COMMON (__ss_); /* Address family, etc. */
+ __ss_aligntype __ss_align; /* Force desired alignment. */
+ char __ss_padding[_SS_PADSIZE];
+ };
+
+
/* Bits in the FLAGS argument to `send', `recv', et al. */
enum
{
/* Linux defines the ftime system call but doesn't actually implement
- it. Use the generic implementation. */
-#include <sysdeps/generic/ftime.c>
+ it. Use the BSD implementation. */
+#include <sysdeps/unix/bsd/ftime.c>
/* System-specific socket constants and types. Linux/MIPS version.
- Copyright (C) 1991, 92, 94, 95, 96, 97, 98 Free Software Foundation, Inc.
+ Copyright (C) 1991,92,94,95,96,97,98,99 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
#define __need_NULL
#include <stddef.h>
+#include <limits.h>
#include <sys/types.h>
/* Type for length arguments in socket calls. */
};
+/* Structure large enough to hold any socket address (with the historical
+ exception of AF_UNIX). We reserve 128 bytes. */
+#if ULONG_MAX > 0xffffffff
+# define __ss_align __uint64_t
+#else
+# define __ss_align __uint32_t
+#endif
+#define _SS_SIZE 128
+#define _SS_PADSIZE (_SS_SIZE - (2 * sizeof(__ss_align)))
+
+struct sockaddr_storage
+ {
+ __SOCKADDR_COMMON (__ss_); /* Address family, etc. */
+ __ss_align __ss_align; /* Force desired alignment. */
+ char __ss_padding[_SS_PADSIZE];
+ };
+
+
/* Bits in the FLAGS argument to `send', `recv', et al. */
enum
{