Commit 1d63539e authored by Matti Kosola's avatar Matti Kosola

Merge branch 'jb36174' into 'master'

[glibc] Update to glibc-2.25, fixes jb#36174

See merge request !14
parents 12d81991 c2700b8a
...@@ -12,10 +12,10 @@ ...@@ -12,10 +12,10 @@
#include <sys/mman.h> #include <sys/mman.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <unistd.h> #include <unistd.h>
#include "../locale/hashval.h" #include "locale/hashval.h"
#define __LC_LAST 13 #define __LC_LAST 13
#include "../locale/locarchive.h" #include "locale/locarchive.h"
#include "../crypt/md5.h" #include "crypt/md5.h"
const char *alias_file = DATADIR "/locale/locale.alias"; const char *alias_file = DATADIR "/locale/locale.alias";
const char *locar_file = PREFIX "/lib/locale/locale-archive"; const char *locar_file = PREFIX "/lib/locale/locale-archive";
...@@ -36,7 +36,7 @@ static const char *locnames[] = ...@@ -36,7 +36,7 @@ static const char *locnames[] =
{ {
#define DEFINE_CATEGORY(category, category_name, items, a) \ #define DEFINE_CATEGORY(category, category_name, items, a) \
[category] = category_name, [category] = category_name,
#include "../locale/categories.def" #include "locale/categories.def"
#undef DEFINE_CATEGORY #undef DEFINE_CATEGORY
}; };
...@@ -147,7 +147,7 @@ extern void add_alias (struct locarhandle *ah, const char *alias, ...@@ -147,7 +147,7 @@ extern void add_alias (struct locarhandle *ah, const char *alias,
bool replace, const char *oldname, bool replace, const char *oldname,
uint32_t *locrec_offset_p); uint32_t *locrec_offset_p);
extern struct namehashent * static struct namehashent *
insert_name (struct locarhandle *ah, insert_name (struct locarhandle *ah,
const char *name, size_t name_len, bool replace); const char *name, size_t name_len, bool replace);
......
diff -Naur eglibc-2.15.old/localedata/Makefile eglibc-2.15/localedata/Makefile
--- eglibc-2.15.old/localedata/Makefile 2011-11-17 21:56:08.000000000 +0000
+++ eglibc-2.15/localedata/Makefile 2013-03-18 15:25:40.078955980 +0000
@@ -159,7 +159,11 @@
# Dependency for the locale files. We actually make it depend only on
# one of the files.
$(addprefix $(objpfx),$(CTYPE_FILES)): %: \
- gen-locale.sh $(common-objpfx)locale/localedef Makefile \
+ if [ -f /usr/bin/localedef ]; then \
+ gen-locale.sh /usr/bin/localedef Makefile \
+ else \
+ gen-locale.sh $(common-objpfx)locale/localedef Makefile \
+ fi\
$(addprefix charmaps/,$(CHARMAPS)) $(addprefix locales/,$(LOCALE_SRCS))
@$(SHELL) -e gen-locale.sh $(common-objpfx) \
'$(if $(cross-localedef), \
@@ -235,8 +239,12 @@
INSTALL-SUPPORTED-LOCALES=$(addprefix install-, $(SUPPORTED-LOCALES))
# Sometimes the whole collection of locale files should be installed.
-LOCALEDEF=I18NPATH=. GCONV_PATH=$(common-objpfx)iconvdata LC_ALL=C \
-$(common-objpfx)elf/ld.so --library-path $(rpath-link) $(common-objpfx)locale/localedef
+ifeq (,$(wildcard /usr/bin/localedef))
+LOCALEDEF=I18NPATH=. GCONV_PATH=$(common-objpfx)iconvdata LC_ALL=C $(common-objpfx)elf/ld.so --library-path $(rpath-link) $(common-objpfx)locale/localedef
+else
+LOCALEDEF=I18NPATH=. GCONV_PATH=$(common-objpfx)iconvdata LC_ALL=C /usr/bin/localedef
+endif
+
install-locales: $(INSTALL-SUPPORTED-LOCALES)
install-locales-dir:
diff --git a/ports/sysdeps/aarch64/nptl/pthread_spin_lock.c b/ports/sysdeps/aarch64/nptl/pthread_spin_lock.c
index 490bd43..7f2505f 100644
--- a/ports/sysdeps/aarch64/nptl/pthread_spin_lock.c
+++ b/ports/sysdeps/aarch64/nptl/pthread_spin_lock.c
@@ -21,4 +21,4 @@
/* We can't use the normal "#include <nptl/pthread_spin_lock.c>" because
it will resolve to this very file. Using "sysdeps/.." as reference to the
top level directory does the job. */
-#include <sysdeps/../nptl/pthread_spin_lock.c>
+#include <sysdeps/../../eglibc-2.19/nptl/pthread_spin_lock.c>
diff --git a/ports/sysdeps/arm/nptl/pthread_spin_lock.c b/ports/sysdeps/arm/nptl/pthread_spin_lock.c
index 7105c73..795db52 100644
--- a/ports/sysdeps/arm/nptl/pthread_spin_lock.c
+++ b/ports/sysdeps/arm/nptl/pthread_spin_lock.c
@@ -20,4 +20,4 @@
/* We can't use the normal "#include <nptl/pthread_spin_lock.c>" because
it will resolve to this very file. Using "sysdeps/.." as reference to the
top level directory does the job. */
-#include <sysdeps/../nptl/pthread_spin_lock.c>
+#include <sysdeps/../../eglibc-2.19/nptl/pthread_spin_lock.c>
diff --git a/ports/sysdeps/mips/nptl/pthread_spin_lock.c b/ports/sysdeps/mips/nptl/pthread_spin_lock.c
index f3e718c..a6c4ca3 100644
--- a/ports/sysdeps/mips/nptl/pthread_spin_lock.c
+++ b/ports/sysdeps/mips/nptl/pthread_spin_lock.c
@@ -20,4 +20,5 @@
/* We can't use the normal "#include <nptl/pthread_spin_lock.c>" because
it will resolve to this very file. Using "sysdeps/.." as reference to the
top level directory does the job. */
-#include <sysdeps/../nptl/pthread_spin_lock.c>
+#include <sysdeps/../../eglibc-2.19/nptl/pthread_spin_lock.c>
+
...@@ -4,20 +4,18 @@ diff -ru eglibc-2.18/csu/init-first.c eglibc-2.18-runfast/csu/init-first.c ...@@ -4,20 +4,18 @@ diff -ru eglibc-2.18/csu/init-first.c eglibc-2.18-runfast/csu/init-first.c
@@ -69,6 +69,9 @@ @@ -69,6 +69,9 @@
__setfpucw (__fpu_control); __setfpucw (__fpu_control);
} }
+ /* Set the default FPU mode once again it is RunFast */ + /* Set the default FPU mode once again it is RunFast */
+ _FPU_SETCW(_FPU_DEFAULT); + _FPU_SETCW(_FPU_DEFAULT);
+ +
/* Save the command-line arguments. */ /* Save the command-line arguments. */
__libc_argc = argc; __libc_argc = argc;
__libc_argv = argv; __libc_argv = argv;
Only in eglibc-2.18-runfast/ports/sysdeps/arm: .fpu_control.h.rej.swp
diff -ru eglibc-2.18/ports/sysdeps/arm/fpu_control.h eglibc-2.18-runfast/ports/sysdeps/arm/fpu_control.h
--- eglibc-2.18/ports/sysdeps/arm/fpu_control.h 2013-06-24 22:42:26.000000000 +0000 --- eglibc-2.18/ports/sysdeps/arm/fpu_control.h 2013-06-24 22:42:26.000000000 +0000
+++ eglibc-2.18-runfast/ports/sysdeps/arm/fpu_control.h 2014-01-01 11:06:13.000000000 +0000 +++ eglibc-2.18-runfast/sysdeps/arm/fpu_control.h 2014-01-01 11:06:13.000000000 +0000
@@ -22,7 +22,8 @@ @@ -22,7 +22,8 @@
#if !(defined(_LIBC) && !defined(_LIBC_TEST)) && defined(__SOFTFP__) #if !(defined(_LIBC) && !defined(_LIBC_TEST)) && defined(__SOFTFP__)
#define _FPU_RESERVED 0xffffffff #define _FPU_RESERVED 0xffffffff
-#define _FPU_DEFAULT 0x00000000 -#define _FPU_DEFAULT 0x00000000
+#define _FPU_DEFAULT (3 << 24) +#define _FPU_DEFAULT (3 << 24)
...@@ -25,19 +23,17 @@ diff -ru eglibc-2.18/ports/sysdeps/arm/fpu_control.h eglibc-2.18-runfast/ports/s ...@@ -25,19 +23,17 @@ diff -ru eglibc-2.18/ports/sysdeps/arm/fpu_control.h eglibc-2.18-runfast/ports/s
typedef unsigned int fpu_control_t; typedef unsigned int fpu_control_t;
#define _FPU_GETCW(cw) (cw) = 0 #define _FPU_GETCW(cw) (cw) = 0
#define _FPU_SETCW(cw) (void) (cw) #define _FPU_SETCW(cw) (void) (cw)
@@ -40,9 +41,11 @@ @@ -44,10 +45,11 @@ extern fpu_control_t __fpu_control;
/* Some bits in the FPSCR are not yet defined. They must be preserved when /* Some bits in the FPSCR are not yet defined. They must be preserved when
modifying the contents. */ modifying the contents. */
#define _FPU_RESERVED 0x00086060 #define _FPU_RESERVED 0x00086060
-#define _FPU_DEFAULT 0x00000000 -#define _FPU_DEFAULT 0x00000000
+/* The default mode is RunFast */ +/* The default mode is RunFast */
+#define _FPU_DEFAULT (3 << 24) +#define _FPU_DEFAULT (3 << 24)
+
/* Default + exceptions enabled. */ /* Default + exceptions enabled. */
-#define _FPU_IEEE (_FPU_DEFAULT | 0x00001f00) -#define _FPU_IEEE (_FPU_DEFAULT | 0x00001f00)
+#define _FPU_IEEE 0x00001f00 +#define _FPU_IEEE 0x00001f00
/* Type of the control word. */ /* Type of the control word. */
typedef unsigned int fpu_control_t; typedef unsigned int fpu_control_t;
Only in eglibc-2.18-runfast/ports/sysdeps/arm: fpu_control.h.orig
Only in eglibc-2.18-runfast/ports/sysdeps/arm: fpu_control.h.rej
--- glibc-2.25/bits/wordsize.h.bak 2018-11-08 15:12:14.756848932 +0200
+++ glibc-2.25/bits/wordsize.h 2018-11-08 15:13:00.505009458 +0200
@@ -1,27 +1,25 @@
-#error "This file must be written based on the data type sizes of the target"
-
/* The following entries are a template for what defines should be in the
wordsize.h header file for a target. */
/* Size in bits of the 'long int' and pointer types. */
-#define __WORDSIZE
+#define __WORDSIZE 32
/* This should be set to 1 if __WORDSIZE is 32 and size_t is type
'unsigned long' instead of type 'unsigned int'. This will ensure
that SIZE_MAX is defined as an unsigned long constant instead of an
unsigned int constant. Set to 0 if __WORDSIZE is 32 and size_t is
'unsigned int' and leave undefined if __WORDSIZE is 64. */
-#define __WORDSIZE32_SIZE_ULONG
+#define __WORDSIZE32_SIZE_ULONG 0
/* This should be set to 1 if __WORDSIZE is 32 and ptrdiff_t is type 'long'
instead of type 'int'. This will ensure that PTRDIFF_MIN and PTRDIFF_MAX
are defined as long constants instead of int constants. Set to 0 if
__WORDSIZE is 32 and ptrdiff_t is type 'int' and leave undefined if
__WORDSIZE is 64. */
-#define __WORDSIZE32_PTRDIFF_LONG
+#define __WORDSIZE32_PTRDIFF_LONG 0
/* Set to 1 in order to force time types to be 32 bits instead of 64 bits in
struct lastlog and struct utmp{,x} on 64-bit ports. This may be done in
order to make 64-bit ports compatible with 32-bit ports. Set to 0 for
64-bit ports where the time types are 64-bits or for any 32-bit ports. */
-#define __WORDSIZE_TIME64_COMPAT32
+#define __WORDSIZE_TIME64_COMPAT32 0
--- glibc-2.25/bits/errno.h.bak 2018-11-08 14:32:39.009340807 +0200
+++ glibc-2.25/bits/errno.h 2018-11-08 14:43:21.450954354 +0200
@@ -1,4 +1,5 @@
-/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+/* Error constants. Linux specific version.
+ Copyright (C) 1996-2014 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
@@ -15,20 +16,51 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-/* This file defines the `errno' constants. */
+#ifdef _ERRNO_H
-#if !defined __Emath_defined && (defined _ERRNO_H || defined __need_Emath)
-#undef __need_Emath
-#define __Emath_defined 1
-
-# define EDOM XXX <--- fill in what is actually needed
-# define EILSEQ XXX <--- fill in what is actually needed
-# define ERANGE XXX <--- fill in what is actually needed
-#endif
-
-#ifdef _ERRNO_H
-# error "Define here all the missing error messages for the port. These"
-# error "must match the numbers of the kernel."
-# define Exxxx XXX
-...
-#endif
+# undef EDOM
+# undef EILSEQ
+# undef ERANGE
+# include <linux/errno.h>
+
+/* Linux has no ENOTSUP error code. */
+# define ENOTSUP EOPNOTSUPP
+
+/* Older Linux versions also had no ECANCELED error code. */
+# ifndef ECANCELED
+# define ECANCELED 125
+# endif
+
+/* Support for error codes to support robust mutexes was added later, too. */
+# ifndef EOWNERDEAD
+# define EOWNERDEAD 130
+# define ENOTRECOVERABLE 131
+# endif
+
+# ifndef ERFKILL
+# define ERFKILL 132
+# endif
+
+# ifndef EHWPOISON
+# define EHWPOISON 133
+# endif
+
+# ifndef __ASSEMBLER__
+/* Function to get address of global `errno' variable. */
+extern int *__errno_location (void) __THROW __attribute__ ((__const__));
+
+# if !defined _LIBC || defined _LIBC_REENTRANT
+/* When using threads, errno is a per-thread value. */
+# define errno (*__errno_location ())
+# endif
+# endif /* !__ASSEMBLER__ */
+#endif /* _ERRNO_H */
+
+#if !defined _ERRNO_H && defined __need_Emath
+/* This is ugly but the kernel header is not clean enough. We must
+ define only the values EDOM, EILSEQ and ERANGE in case __need_Emath is
+ defined. */
+# define EDOM 33 /* Math argument out of domain of function. */
+# define EILSEQ 84 /* Illegal byte sequence. */
+# define ERANGE 34 /* Math result not representable. */
+#endif /* !_ERRNO_H && __need_Emath */
--- glibc-2.25/bits/endian.h.bak 2018-11-08 15:51:55.110637120 +0200
+++ glibc-2.25/bits/endian.h 2018-11-08 15:52:20.538742585 +0200
@@ -1,13 +1,10 @@
-/* This file should define __BYTE_ORDER as appropriate for the machine
- in question. See string/endian.h for how to define it.
-
- If only the stub bits/endian.h applies to a particular configuration,
- bytesex.h is generated by running a program on the host machine.
- So if cross-compiling to a machine with a different byte order,
- the bits/endian.h file for that machine must exist. */
-
#ifndef _ENDIAN_H
# error "Never use <bits/endian.h> directly; include <endian.h> instead."
#endif
-#error Machine byte order unknown.
+/* ARM can be either big or little endian. */
+#ifdef __ARMEB__
+#define __BYTE_ORDER __BIG_ENDIAN
+#else
+#define __BYTE_ORDER __LITTLE_ENDIAN
+#endif
...@@ -2,42 +2,41 @@ diff -ur glibc-2.14.1-orig/elf/rtld.c glibc-2.14.1/elf/rtld.c ...@@ -2,42 +2,41 @@ diff -ur glibc-2.14.1-orig/elf/rtld.c glibc-2.14.1/elf/rtld.c
--- glibc-2.14.1-orig/elf/rtld.c 2011-10-07 12:48:55.000000000 +0300 --- glibc-2.14.1-orig/elf/rtld.c 2011-10-07 12:48:55.000000000 +0300
+++ glibc-2.14.1/elf/rtld.c 2011-11-16 17:00:19.000000000 +0200 +++ glibc-2.14.1/elf/rtld.c 2011-11-16 17:00:19.000000000 +0200
@@ -930,6 +930,7 @@ @@ -930,6 +930,7 @@
if (*user_entry == (ElfW(Addr)) ENTRY_POINT) if (*user_entry == (ElfW(Addr)) ENTRY_POINT)
{ {
+ const char *forced_argv0 = NULL; + char *forced_argv0 = NULL;
/* Ho ho. We are not the program interpreter! We are the program /* Ho ho. We are not the program interpreter! We are the program
itself! This means someone ran ld.so as a command. Well, that itself! This means someone ran ld.so as a command. Well, that
might be convenient to do sometimes. We support it by might be convenient to do sometimes. We support it by
@@ -994,6 +995,14 @@ @@ -994,6 +995,14 @@
_dl_argc -= 2; _dl_argc -= 2;
INTUSE(_dl_argv) += 2; _dl_argv += 2;
} }
+ else if (! strcmp (INTUSE(_dl_argv)[1], "--argv0") && _dl_argc > 2) + else if (! strcmp (_dl_argv[1], "--argv0") && _dl_argc > 2)
+ { + {
+ forced_argv0 = INTUSE(_dl_argv)[2]; + forced_argv0 = _dl_argv[2];
+ +
+ _dl_skip_args += 2; + _dl_skip_args += 2;
+ _dl_argc -= 2; + _dl_argc -= 2;
+ INTUSE(_dl_argv) += 2; + _dl_argv += 2;
+ } + }
else else
break; break;
@@ -1021,6 +1030,7 @@ @@ -1021,6 +1030,7 @@
variable LD_LIBRARY_PATH\n\ variable LD_LIBRARY_PATH\n\
--inhibit-rpath LIST ignore RUNPATH and RPATH information in object names\n\ --inhibit-rpath LIST ignore RUNPATH and RPATH information in object names\n\
in LIST\n\ in LIST\n\
+ --argv0 STRING use STRING as argv[0]\n\ + --argv0 STRING use STRING as argv[0]\n\
--audit LIST use objects named in LIST as auditors\n"); --audit LIST use objects named in LIST as auditors\n");
++_dl_skip_args; ++_dl_skip_args;
@@ -1073,6 +1083,8 @@ @@ -1073,6 +1083,8 @@
HP_TIMING_DIFF (load_time, start, stop); HP_TIMING_DIFF (load_time, start, stop);
} }
+ if (forced_argv0 != NULL) _dl_argv[0] = forced_argv0; + if (forced_argv0 != NULL) _dl_argv[0] = forced_argv0;
+ +
/* Now the map for the main executable is available. */ /* Now the map for the main executable is available. */
main_map = GL(dl_ns)[LM_ID_BASE]._ns_loaded; main_map = GL(dl_ns)[LM_ID_BASE]._ns_loaded;
...@@ -3,12 +3,12 @@ index 49f070f..621b5a3 100644 ...@@ -3,12 +3,12 @@ index 49f070f..621b5a3 100644
--- a/elf/dl-load.c --- a/elf/dl-load.c
+++ b/elf/dl-load.c +++ b/elf/dl-load.c
@@ -2279,7 +2279,8 @@ _dl_map_object (struct link_map *loader, const char *name, @@ -2279,7 +2279,8 @@ _dl_map_object (struct link_map *loader, const char *name,
/* If the loader has the DF_1_NODEFLIB flag set we must not /* If the loader has the DF_1_NODEFLIB flag set we must not
use a cache entry from any of these directories. */ use a cache entry from any of these directories. */
- if (__builtin_expect (l->l_flags_1 & DF_1_NODEFLIB, 0)) - if (__glibc_unlikely (l->l_flags_1 & DF_1_NODEFLIB))
+ if (__builtin_expect (((l->l_flags_1 & DF_1_NODEFLIB) || + if (__glibc_unlikely (l->l_flags_1 & DF_1_NODEFLIB) ||
+ GLRO(dl_no_default_dirs)), 0)) + GLRO(dl_no_default_dirs))
{ {
const char *dirp = system_dirs; const char *dirp = system_dirs;
unsigned int cnt = 0; unsigned int cnt = 0;
...@@ -16,20 +16,20 @@ index 49f070f..621b5a3 100644 ...@@ -16,20 +16,20 @@ index 49f070f..621b5a3 100644
/* Finally, try the default path. */ /* Finally, try the default path. */
if (fd == -1 if (fd == -1
&& ((l = loader ?: GL(dl_ns)[nsid]._ns_loaded) == NULL && ((l = loader ?: GL(dl_ns)[nsid]._ns_loaded) == NULL
- || __builtin_expect (!(l->l_flags_1 & DF_1_NODEFLIB), 1)) - || __glibc_likely (!(l->l_flags_1 & DF_1_NODEFLIB)))
+ || __builtin_expect (!((l->l_flags_1 & DF_1_NODEFLIB) || + || __glibc_likely (!(l->l_flags_1 & DF_1_NODEFLIB)) ||
+ GLRO(dl_no_default_dirs)), 1)) + GLRO(dl_no_default_dirs))
&& rtld_search_dirs.dirs != (void *) -1) && rtld_search_dirs.dirs != (void *) -1)
fd = open_path (name, namelen, mode & __RTLD_SECURE, &rtld_search_dirs, fd = open_path (name, namelen, mode & __RTLD_SECURE, &rtld_search_dirs,
&realname, &fb, l, LA_SER_DEFAULT, &found_other_class); &realname, &fb, l, LA_SER_DEFAULT, &found_other_class);
@@ -2487,7 +2489,7 @@ _dl_rtld_di_serinfo (struct link_map *loader, Dl_serinfo *si, bool counting) @@ -2487,7 +2489,7 @@ _dl_rtld_di_serinfo (struct link_map *loader, Dl_serinfo *si, bool counting)
a way to indicate that in the results for Dl_serinfo. */ a way to indicate that in the results for Dl_serinfo. */
/* Finally, try the default path. */ /* Finally, try the default path. */
- if (!(loader->l_flags_1 & DF_1_NODEFLIB)) - if (!(loader->l_flags_1 & DF_1_NODEFLIB))
+ if (!((loader->l_flags_1 & DF_1_NODEFLIB) || GLRO(dl_no_default_dirs))) + if (!((loader->l_flags_1 & DF_1_NODEFLIB) || GLRO(dl_no_default_dirs)))
add_path (&rtld_search_dirs, XXX_default); add_path (&p, &rtld_search_dirs, XXX_default);
if (counting) if (counting)
diff --git a/elf/dl-support.c b/elf/dl-support.c diff --git a/elf/dl-support.c b/elf/dl-support.c
index 723814a..fccc1d4 100644 index 723814a..fccc1d4 100644
...@@ -38,31 +38,31 @@ index 723814a..fccc1d4 100644 ...@@ -38,31 +38,31 @@ index 723814a..fccc1d4 100644
@@ -61,6 +61,9 @@ const char *_dl_inhibit_rpath; @@ -61,6 +61,9 @@ const char *_dl_inhibit_rpath;
/* prefix to be added to all RUNPATHs and RPATHs */ /* prefix to be added to all RUNPATHs and RPATHs */
const char *_dl_rpath_prefix = NULL; const char *_dl_rpath_prefix = NULL;
+/* flag: don't search default directories if set. */ +/* flag: don't search default directories if set. */
+int _dl_no_default_dirs = 0; +int _dl_no_default_dirs = 0;
+ +
/* The map for the object we will profile. */ /* The map for the object we will profile. */
struct link_map *_dl_profile_map; struct link_map *_dl_profile_map;
diff --git a/elf/rtld.c b/elf/rtld.c diff --git a/elf/rtld.c b/elf/rtld.c
index ea3af55..75a2415 100644 index ea3af55..75a2415 100644
--- a/elf/rtld.c --- a/elf/rtld.c
+++ b/elf/rtld.c +++ b/elf/rtld.c
@@ -976,6 +976,15 @@ dl_main (const ElfW(Phdr) *phdr, @@ -976,6 +976,15 @@ dl_main (const ElfW(Phdr) *phdr,
--_dl_argc; --_dl_argc;
++INTUSE(_dl_argv); ++_dl_argv;
} }
+ else if (! strcmp (INTUSE(_dl_argv)[1], "--nodefaultdirs") + else if (! strcmp (_dl_argv[1], "--nodefaultdirs")
+ && _dl_argc > 2) + && _dl_argc > 2)
+ { + {
+ GLRO(dl_no_default_dirs) = 1; + GLRO(dl_no_default_dirs) = 1;
+ +
+ ++_dl_skip_args; + ++_dl_skip_args;
+ --_dl_argc; + --_dl_argc;
+ ++INTUSE(_dl_argv); + ++_dl_argv;
+ } + }
else if (! strcmp (INTUSE(_dl_argv)[1], "--library-path") else if (! strcmp (_dl_argv[1], "--library-path")
&& _dl_argc > 2) && _dl_argc > 2)
{ {
@@ -1034,6 +1043,7 @@ of this helper program; chances are you did not intend to run this program.\n\ @@ -1034,6 +1043,7 @@ of this helper program; chances are you did not intend to run this program.\n\
...@@ -80,7 +80,7 @@ index 3116188..0759694 100644 ...@@ -80,7 +80,7 @@ index 3116188..0759694 100644
@@ -559,6 +559,8 @@ struct rtld_global_ro @@ -559,6 +559,8 @@ struct rtld_global_ro
platforms. */ platforms. */
EXTERN uint64_t _dl_hwcap2; EXTERN uint64_t _dl_hwcap2;
+ EXTERN int _dl_no_default_dirs; + EXTERN int _dl_no_default_dirs;
+ +
#ifdef SHARED #ifdef SHARED
......
...@@ -13,7 +13,7 @@ Index: eglibc-2.19/elf/dl-load.c ...@@ -13,7 +13,7 @@ Index: eglibc-2.19/elf/dl-load.c
size_t nelems = 0; size_t nelems = 0;
@@ -520,9 +520,23 @@ fillin_rpath (char *rpath, struct r_sear @@ -520,9 +520,23 @@ fillin_rpath (char *rpath, struct r_sear
} }
/* See if this directory is already known. */ /* See if this directory is already known. */
- for (dirp = GL(dl_all_dirs); dirp != NULL; dirp = dirp->next) - for (dirp = GL(dl_all_dirs); dirp != NULL; dirp = dirp->next)
- if (dirp->dirnamelen == len && memcmp (cp, dirp->dirname, len) == 0) - if (dirp->dirnamelen == len && memcmp (cp, dirp->dirname, len) == 0)
...@@ -35,7 +35,7 @@ Index: eglibc-2.19/elf/dl-load.c ...@@ -35,7 +35,7 @@ Index: eglibc-2.19/elf/dl-load.c
+ if (dirp->dirnamelen == len && memcmp (cp, dirp->dirname, len) == 0) + if (dirp->dirnamelen == len && memcmp (cp, dirp->dirname, len) == 0)
+ break; + break;
+ } + }
if (dirp != NULL) if (dirp != NULL)
{ {
@@ -540,22 +554,43 @@ fillin_rpath (char *rpath, struct r_sear @@ -540,22 +554,43 @@ fillin_rpath (char *rpath, struct r_sear
...@@ -45,12 +45,12 @@ Index: eglibc-2.19/elf/dl-load.c ...@@ -45,12 +45,12 @@ Index: eglibc-2.19/elf/dl-load.c
+ size_t rpath_prefix_len = 0; + size_t rpath_prefix_len = 0;
+ +
+ if (__builtin_expect (rpath_prefix != NULL, 0) + if (__builtin_expect (rpath_prefix != NULL, 0)
+ && !INTUSE(__libc_enable_secure)) + && !__libc_enable_secure)
+ { + {
+ rpath_prefix_len = strlen (rpath_prefix); + rpath_prefix_len = strlen (rpath_prefix);
+ if (*cp != '/') rpath_prefix_len++; /* need to add a '/' */ + if (*cp != '/') rpath_prefix_len++; /* need to add a '/' */
+ } + }
/* It's a new directory. Create an entry and add it. */ /* It's a new directory. Create an entry and add it. */
dirp = (struct r_search_path_elem *) dirp = (struct r_search_path_elem *)
malloc (sizeof (*dirp) + ncapstr * sizeof (enum r_dir_status) malloc (sizeof (*dirp) + ncapstr * sizeof (enum r_dir_status)
...@@ -59,7 +59,7 @@ Index: eglibc-2.19/elf/dl-load.c ...@@ -59,7 +59,7 @@ Index: eglibc-2.19/elf/dl-load.c
if (dirp == NULL) if (dirp == NULL)
_dl_signal_error (ENOMEM, NULL, NULL, _dl_signal_error (ENOMEM, NULL, NULL,
N_("cannot create cache for search path")); N_("cannot create cache for search path"));
dirp->dirname = ((char *) dirp + sizeof (*dirp) dirp->dirname = ((char *) dirp + sizeof (*dirp)
+ ncapstr * sizeof (enum r_dir_status)); + ncapstr * sizeof (enum r_dir_status));
- *((char *) __mempcpy ((char *) dirp->dirname, cp, len)) = '\0'; - *((char *) __mempcpy ((char *) dirp->dirname, cp, len)) = '\0';
...@@ -79,18 +79,18 @@ Index: eglibc-2.19/elf/dl-load.c ...@@ -79,18 +79,18 @@ Index: eglibc-2.19/elf/dl-load.c
+ *((char *) __mempcpy (prefixend, cp, len)) = '\0'; + *((char *) __mempcpy (prefixend, cp, len)) = '\0';
+ } + }
+ dirp->dirnamelen = len + rpath_prefix_len; + dirp->dirnamelen = len + rpath_prefix_len;
- if (len > max_dirnamelen) - if (len > max_dirnamelen)
- max_dirnamelen = len; - max_dirnamelen = len;
+ if ((len + rpath_prefix_len) > max_dirnamelen) + if ((len + rpath_prefix_len) > max_dirnamelen)
+ max_dirnamelen = len + rpath_prefix_len; + max_dirnamelen = len + rpath_prefix_len;
/* We have to make sure all the relative directories are /* We have to make sure all the relative directories are
never ignored. The current directory might change and never ignored. The current directory might change and
@@ -566,7 +601,8 @@ fillin_rpath (char *rpath, struct r_sear @@ -566,7 +601,8 @@ fillin_rpath (char *rpath, struct r_sear
dirp->what = what; dirp->what = what;
if (__builtin_expect (where != NULL, 1)) if (__glibc_likely (where != NULL))
- dirp->where = memcpy ((char *) dirp + sizeof (*dirp) + len + 1 - dirp->where = memcpy ((char *) dirp + sizeof (*dirp) + len + 1
+ dirp->where = memcpy ((char *) dirp + sizeof (*dirp) + dirp->where = memcpy ((char *) dirp + sizeof (*dirp)
+ + rpath_prefix_len + len + 1 + + rpath_prefix_len + len + 1
...@@ -100,19 +100,19 @@ Index: eglibc-2.19/elf/dl-load.c ...@@ -100,19 +100,19 @@ Index: eglibc-2.19/elf/dl-load.c
@@ -668,7 +704,7 @@ decompose_rpath (struct r_search_path_st @@ -668,7 +704,7 @@ decompose_rpath (struct r_search_path_st
_dl_signal_error (ENOMEM, NULL, NULL, errstring); _dl_signal_error (ENOMEM, NULL, NULL, errstring);
} }
- fillin_rpath (copy, result, ":", 0, what, where, l); - fillin_rpath (copy, result, ":", 0, what, where, l);
+ fillin_rpath (copy, result, ":", 0, what, where, l, GLRO(dl_rpath_prefix)); + fillin_rpath (copy, result, ":", 0, what, where, l, GLRO(dl_rpath_prefix));
/* Free the copied RPATH string. `fillin_rpath' make own copies if /* Free the copied RPATH string. `fillin_rpath' make own copies if
necessary. */ necessary. */
@@ -871,7 +907,7 @@ _dl_init_paths (const char *llp) @@ -871,7 +907,7 @@ _dl_init_paths (const char *llp)
(void) fillin_rpath (llp_tmp, env_path_list.dirs, ":;", (void) fillin_rpath (llp_tmp, env_path_list.dirs, ":;",
INTUSE(__libc_enable_secure), "LD_LIBRARY_PATH", __libc_enable_secure, "LD_LIBRARY_PATH",
- NULL, l); - NULL, l);
+ NULL, l, NULL/*no prefix*/); + NULL, l, NULL/*no prefix*/);
if (env_path_list.dirs[0] == NULL) if (env_path_list.dirs[0] == NULL)
{ {
Index: eglibc-2.19/elf/dl-support.c Index: eglibc-2.19/elf/dl-support.c
...@@ -122,33 +122,33 @@ Index: eglibc-2.19/elf/dl-support.c ...@@ -122,33 +122,33 @@ Index: eglibc-2.19/elf/dl-support.c
@@ -61,6 +61,9 @@ const char *_dl_profile_output; @@ -61,6 +61,9 @@ const char *_dl_profile_output;
ignored. */ ignored. */
const char *_dl_inhibit_rpath; const char *_dl_inhibit_rpath;
+/* prefix to be added to all RUNPATHs and RPATHs */ +/* prefix to be added to all RUNPATHs and RPATHs */
+const char *_dl_rpath_prefix = NULL; +const char *_dl_rpath_prefix = NULL;
+ +
/* The map for the object we will profile. */ /* The map for the object we will profile. */
struct link_map *_dl_profile_map; struct link_map *_dl_profile_map;
Index: eglibc-2.19/elf/rtld.c Index: eglibc-2.19/elf/rtld.c
=================================================================== ===================================================================
--- eglibc-2.19.orig/elf/rtld.c --- eglibc-2.19.orig/elf/rtld.c
+++ eglibc-2.19/elf/rtld.c +++ eglibc-2.19/elf/rtld.c
@@ -991,6 +991,15 @@ dl_main (const ElfW(Phdr) *phdr, @@ -991,6 +991,15 @@ dl_main (const ElfW(Phdr) *phdr,
_dl_argc -= 2; _dl_argc -= 2;
INTUSE(_dl_argv) += 2; _dl_argv += 2;
} }
+ else if (! strcmp (INTUSE(_dl_argv)[1], "--rpath-prefix") + else if (! strcmp (_dl_argv[1], "--rpath-prefix")
+ && _dl_argc > 2) + && _dl_argc > 2)
+ { + {
+ GLRO(dl_rpath_prefix) = INTUSE(_dl_argv)[2]; + GLRO(dl_rpath_prefix) = _dl_argv[2];
+ +
+ _dl_skip_args += 2; + _dl_skip_args += 2;
+ _dl_argc -= 2; + _dl_argc -= 2;
+ INTUSE(_dl_argv) += 2; + _dl_argv += 2;
+ } + }
else if (! strcmp (INTUSE(_dl_argv)[1], "--audit") && _dl_argc > 2) else if (! strcmp (_dl_argv[1], "--audit") && _dl_argc > 2)
{ {
process_dl_audit (INTUSE(_dl_argv)[2]); process_dl_audit (_dl_argv[2]);
@@ -1025,6 +1034,7 @@ of this helper program; chances are you @@ -1025,6 +1034,7 @@ of this helper program; chances are you
--inhibit-cache Do not use " LD_SO_CACHE "\n\ --inhibit-cache Do not use " LD_SO_CACHE "\n\
--library-path PATH use given PATH instead of content of the environment\n\ --library-path PATH use given PATH instead of content of the environment\n\
......
diff -ru glibc-2.13/csu/Makefile glibc-2.13-no-timestamping/csu/Makefile
--- glibc-2.13/csu/Makefile 2011-01-18 05:34:07.000000000 +0100
+++ glibc-2.13-no-timestamping/csu/Makefile 2011-08-23 17:07:34.363191368 +0200
@@ -234,8 +234,8 @@
if [ -z "$$os" ]; then \
os=Linux; \
fi; \
- printf '"Compiled on a %s %s system on %s.\\n"\n' \
- "$$os" "$$version" "`date +%Y-%m-%d`";; \
+ printf '"Compiled on OBS, see rpm -q glibc for more information\\n"\n' \
+ ;; \
*) ;; \
esac; \
files="$(all-Banner-files)"; \
Only in glibc-2.13-no-timestamping/csu: Makefile~
diff -ru glibc-2.13/nscd/nscd_stat.c glibc-2.13-no-timestamping/nscd/nscd_stat.c diff -ru glibc-2.13/nscd/nscd_stat.c glibc-2.13-no-timestamping/nscd/nscd_stat.c
--- glibc-2.13/nscd/nscd_stat.c 2011-08-24 07:43:18.419464199 +0200 --- glibc-2.13/nscd/nscd_stat.c 2011-08-24 07:43:18.419464199 +0200
+++ glibc-2.13-no-timestamping/nscd/nscd_stat.c 2011-08-24 07:43:52.837209224 +0200 +++ glibc-2.13-no-timestamping/nscd/nscd_stat.c 2011-08-24 07:43:52.837209224 +0200
@@ -38,7 +38,7 @@ @@ -38,7 +38,7 @@
/* We use this to make sure the receiver is the same. */ /* We use this to make sure the receiver is the same. */
-static const char compilation[21] = __DATE__ " " __TIME__; -static const char compilation[21] = __DATE__ " " __TIME__;
+static const char compilation[21] = "built on OBS"; +static const char compilation[21] = "built on OBS";
/* Statistic data for one database. */ /* Statistic data for one database. */
struct dbstat struct dbstat
<
...@@ -4,7 +4,7 @@ diff -ur glibc-2.14.1+p3/nscd/connections.c glibc-2.14.1/nscd/connections.c ...@@ -4,7 +4,7 @@ diff -ur glibc-2.14.1+p3/nscd/connections.c glibc-2.14.1/nscd/connections.c
@@ -502,6 +502,20 @@ @@ -502,6 +502,20 @@
return 0; return 0;
} }
+int __nscd_get_socket_path(char *buf, size_t bufsiz) +int __nscd_get_socket_path(char *buf, size_t bufsiz)
+{ +{
+ const char *ext_nscd_socket_path = getenv ("NSCD_SOCKET_PATH"); + const char *ext_nscd_socket_path = getenv ("NSCD_SOCKET_PATH");
...@@ -19,7 +19,7 @@ diff -ur glibc-2.14.1+p3/nscd/connections.c glibc-2.14.1/nscd/connections.c ...@@ -19,7 +19,7 @@ diff -ur glibc-2.14.1+p3/nscd/connections.c glibc-2.14.1/nscd/connections.c
+ return 0; + return 0;
+} +}
+ +
#ifdef O_CLOEXEC #ifdef O_CLOEXEC
# define EXTRA_O_FLAGS O_CLOEXEC # define EXTRA_O_FLAGS O_CLOEXEC