[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[commits] r3647 - in /fsf/trunk/libc: ./ elf/ iconvdata/ include/ localedata/ localedata/charmaps/ sysdeps/generic/
- To: commits@xxxxxxxxxx
- Subject: [commits] r3647 - in /fsf/trunk/libc: ./ elf/ iconvdata/ include/ localedata/ localedata/charmaps/ sysdeps/generic/
- From: eglibc@xxxxxxxxxx
- Date: Sat, 29 Sep 2007 07:03:40 -0000
Author: eglibc
Date: Sat Sep 29 00:03:39 2007
New Revision: 3647
Log:
Import glibc-mainline for 2007-09-29
Added:
fsf/trunk/libc/iconvdata/koi8-ru.c
fsf/trunk/libc/localedata/charmaps/KOI8-RU
Modified:
fsf/trunk/libc/ChangeLog
fsf/trunk/libc/elf/dl-close.c
fsf/trunk/libc/elf/dl-deps.c
fsf/trunk/libc/elf/dl-fini.c
fsf/trunk/libc/elf/dl-lookup.c
fsf/trunk/libc/elf/dl-open.c
fsf/trunk/libc/iconvdata/Makefile
fsf/trunk/libc/iconvdata/TESTS
fsf/trunk/libc/iconvdata/gconv-modules
fsf/trunk/libc/iconvdata/koi8-r.c
fsf/trunk/libc/iconvdata/tst-tables.sh
fsf/trunk/libc/include/link.h
fsf/trunk/libc/localedata/ChangeLog
fsf/trunk/libc/sysdeps/generic/ldsodefs.h
Modified: fsf/trunk/libc/ChangeLog
==============================================================================
--- fsf/trunk/libc/ChangeLog (original)
+++ fsf/trunk/libc/ChangeLog Sat Sep 29 00:03:39 2007
@@ -1,3 +1,37 @@
+2007-09-24 Jakub Jelinek <jakub@xxxxxxxxxx>
+
+ * sysdeps/generic/ldsodefs.h (struct dl_scope_free_list): Store
+ void * pointers instead of struct link_map **.
+ (_dl_scope_free): Change argument type to void *.
+ * include/link.h (struct link_map): Change type of l_reldeps
+ to struct link_map_reldeps, move l_reldepsact into that
+ struct too.
+ * elf/dl-deps.c: Include atomic.h.
+ (_dl_map_object_deps): Only change l->l_initfini when it is
+ fully populated, use _dl_scope_free for freeing it. Optimize
+ removal of libs from reldeps by using l_reserved flag, when
+ some removal is needed, allocate a new list instead of
+ reallocating and free the old with _dl_scope_free. Adjust
+ for l_reldeps and l_reldepsact changes.
+ * elf/dl-lookup.c (add_dependency): Likewise. Reorganize to allow
+ searching in l_initfini and l_reldeps without holding dl_load_lock.
+ * elf/dl-fini.c (_dl_sort_fini): Adjust for l_reldeps and
+ l_reldepsact changes.
+ * elf/dl-close.c (_dl_close_worker): Likewise.
+ * elf/dl-open.c (_dl_scope_free): Change argument type to void *.
+
+2007-09-28 Ulrich Drepper <drepper@xxxxxxxxxx>
+
+ * iconvdata/Makefile (modules): Add KOI8-RU.
+ (distribute): Add koi8-ru.c.
+ (gen-8bit-gap-modules): Add koi8-ru.
+ * iconvdata/koi8-ru.c: New file.
+ * iconvdata/gconv-modules: Add entries for KOI8-RU.
+ * iconvdata/TESTS: Likewise.
+ * iconvdata/tst-tables.sh: Likewise.
+
+ * iconvdata/koi8-r.c (HAS_HOLES): Define to 0.
+
2007-09-26 Jakub Jelinek <jakub@xxxxxxxxxx>
* misc/sys/cdefs.h (__warndecl, __errordecl): For GCC 4.3+ define
Modified: fsf/trunk/libc/elf/dl-close.c
==============================================================================
--- fsf/trunk/libc/elf/dl-close.c (original)
+++ fsf/trunk/libc/elf/dl-close.c Sat Sep 29 00:03:39 2007
@@ -203,9 +203,9 @@
}
/* And the same for relocation dependencies. */
if (l->l_reldeps != NULL)
- for (unsigned int j = 0; j < l->l_reldepsact; ++j)
+ for (unsigned int j = 0; j < l->l_reldeps->act; ++j)
{
- struct link_map *jmap = l->l_reldeps[j];
+ struct link_map *jmap = l->l_reldeps->list[j];
if (jmap->l_idx != IDX_STILL_USED)
{
@@ -497,7 +497,7 @@
THREAD_GSCOPE_WAIT ();
/* Now we can free any queued old scopes. */
- struct dl_scope_free_list *fsl = GL(dl_scope_free_list);
+ struct dl_scope_free_list *fsl = GL(dl_scope_free_list);
if (fsl != NULL)
while (fsl->count > 0)
free (fsl->list[--fsl->count]);
Modified: fsf/trunk/libc/elf/dl-deps.c
==============================================================================
--- fsf/trunk/libc/elf/dl-deps.c (original)
+++ fsf/trunk/libc/elf/dl-deps.c Sat Sep 29 00:03:39 2007
@@ -1,5 +1,6 @@
/* Load the dependencies of a mapped object.
- Copyright (C) 1996-2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ Copyright (C) 1996-2003, 2004, 2005, 2006, 2007
+ 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
@@ -17,6 +18,7 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
+#include <atomic.h>
#include <assert.h>
#include <dlfcn.h>
#include <errno.h>
@@ -465,15 +467,17 @@
{
needed[nneeded++] = NULL;
- l->l_initfini = (struct link_map **)
+ struct link_map **l_initfini = (struct link_map **)
malloc ((2 * nneeded + 1) * sizeof needed[0]);
- if (l->l_initfini == NULL)
+ if (l_initfini == NULL)
_dl_signal_error (ENOMEM, map->l_name, NULL,
N_("cannot allocate dependency list"));
- l->l_initfini[0] = l;
- memcpy (&l->l_initfini[1], needed, nneeded * sizeof needed[0]);
- memcpy (&l->l_initfini[nneeded + 1], l->l_initfini,
+ l_initfini[0] = l;
+ memcpy (&l_initfini[1], needed, nneeded * sizeof needed[0]);
+ memcpy (&l_initfini[nneeded + 1], l_initfini,
nneeded * sizeof needed[0]);
+ atomic_write_barrier ();
+ l->l_initfini = l_initfini;
}
/* If we have no auxiliary objects just go on to the next map. */
@@ -487,25 +491,26 @@
if (errno == 0 && errno_saved != 0)
__set_errno (errno_saved);
+ struct link_map **old_l_initfini = NULL;
if (map->l_initfini != NULL && map->l_type == lt_loaded)
{
/* This object was previously loaded as a dependency and we have
a separate l_initfini list. We don't need it anymore. */
assert (map->l_searchlist.r_list == NULL);
- free (map->l_initfini);
+ old_l_initfini = map->l_initfini;
}
/* Store the search list we built in the object. It will be used for
searches in the scope of this object. */
- map->l_initfini =
+ struct link_map **l_initfini =
(struct link_map **) malloc ((2 * nlist + 1)
* sizeof (struct link_map *));
- if (map->l_initfini == NULL)
+ if (l_initfini == NULL)
_dl_signal_error (ENOMEM, map->l_name, NULL,
N_("cannot allocate symbol search list"));
- map->l_searchlist.r_list = &map->l_initfini[nlist + 1];
+ map->l_searchlist.r_list = &l_initfini[nlist + 1];
map->l_searchlist.r_nlist = nlist;
for (nlist = 0, runp = known; runp; runp = runp->next)
@@ -546,10 +551,10 @@
Filters not supported with LD_TRACE_PRELINKING"));
}
- cnt = _dl_build_local_scope (map->l_initfini, l);
+ cnt = _dl_build_local_scope (l_initfini, l);
assert (cnt <= nlist);
for (j = 0; j < cnt; j++)
- map->l_initfini[j]->l_reserved = 0;
+ l_initfini[j]->l_reserved = 0;
l->l_local_scope[0] =
(struct r_scope_elem *) malloc (sizeof (struct r_scope_elem)
@@ -561,35 +566,50 @@
l->l_local_scope[0]->r_nlist = cnt;
l->l_local_scope[0]->r_list =
(struct link_map **) (l->l_local_scope[0] + 1);
- memcpy (l->l_local_scope[0]->r_list, map->l_initfini,
+ memcpy (l->l_local_scope[0]->r_list, l_initfini,
cnt * sizeof (struct link_map *));
}
}
/* Maybe we can remove some relocation dependencies now. */
assert (map->l_searchlist.r_list[0] == map);
- for (i = 0; i < map->l_reldepsact; ++i)
- {
- unsigned int j;
-
- for (j = 1; j < nlist; ++j)
- if (map->l_searchlist.r_list[j] == map->l_reldeps[i])
+ struct link_map_reldeps *l_reldeps = NULL;
+ if (map->l_reldeps != NULL)
+ {
+ for (i = 1; i < nlist; ++i)
+ map->l_searchlist.r_list[i]->l_reserved = 1;
+
+ struct link_map **list = &map->l_reldeps->list[0];
+ for (i = 0; i < map->l_reldeps->act; ++i)
+ if (list[i]->l_reserved)
{
- /* A direct or transitive dependency is also on the list
- of relocation dependencies. Remove the latter. */
- for (j = i + 1; j < map->l_reldepsact; ++j)
- map->l_reldeps[j - 1] = map->l_reldeps[j];
-
- --map->l_reldepsact;
-
- /* Account for the '++i' performed by the 'for'. */
- --i;
- break;
+ /* Need to allocate new array of relocation dependencies. */
+ struct link_map_reldeps *l_reldeps;
+ l_reldeps = malloc (sizeof (*l_reldeps)
+ + map->l_reldepsmax
+ * sizeof (struct link_map *));
+ if (l_reldeps == NULL)
+ /* Bad luck, keep the reldeps duplicated between
+ map->l_reldeps->list and map->l_initfini lists. */
+ ;
+ else
+ {
+ unsigned int j = i;
+ memcpy (&l_reldeps->list[0], &list[0],
+ i * sizeof (struct link_map *));
+ for (i = i + 1; i < map->l_reldeps->act; ++i)
+ if (!list[i]->l_reserved)
+ l_reldeps->list[j++] = list[i];
+ l_reldeps->act = j;
+ }
}
+
+ for (i = 1; i < nlist; ++i)
+ map->l_searchlist.r_list[i]->l_reserved = 0;
}
/* Now determine the order in which the initialization has to happen. */
- memcpy (map->l_initfini, map->l_searchlist.r_list,
+ memcpy (l_initfini, map->l_searchlist.r_list,
nlist * sizeof (struct link_map *));
/* We can skip looking for the binary itself which is at the front
of the search list. Look through the list backward so that circular
@@ -602,7 +622,7 @@
/* Find the place in the initfini list where the map is currently
located. */
- for (j = 1; map->l_initfini[j] != l; ++j)
+ for (j = 1; l_initfini[j] != l; ++j)
;
/* Find all object for which the current one is a dependency and
@@ -611,19 +631,18 @@
{
struct link_map **runp;
- runp = map->l_initfini[k]->l_initfini;
+ runp = l_initfini[k]->l_initfini;
if (runp != NULL)
{
while (*runp != NULL)
if (__builtin_expect (*runp++ == l, 0))
{
- struct link_map *here = map->l_initfini[k];
+ struct link_map *here = l_initfini[k];
/* Move it now. */
- memmove (&map->l_initfini[j] + 1,
- &map->l_initfini[j],
+ memmove (&l_initfini[j] + 1, &l_initfini[j],
(k - j) * sizeof (struct link_map *));
- map->l_initfini[j] = here;
+ l_initfini[j] = here;
/* Don't insert further matches before the last
entry moved to the front. */
@@ -635,7 +654,18 @@
}
}
/* Terminate the list of dependencies. */
- map->l_initfini[nlist] = NULL;
+ l_initfini[nlist] = NULL;
+ atomic_write_barrier ();
+ map->l_initfini = l_initfini;
+ if (l_reldeps != NULL)
+ {
+ atomic_write_barrier ();
+ void *old_l_reldeps = map->l_reldeps;
+ map->l_reldeps = l_reldeps;
+ _dl_scope_free (old_l_reldeps);
+ }
+ if (old_l_initfini != NULL)
+ _dl_scope_free (old_l_initfini);
if (errno_reason)
_dl_signal_error (errno_reason == -1 ? 0 : errno_reason, objname,
Modified: fsf/trunk/libc/elf/dl-fini.c
==============================================================================
--- fsf/trunk/libc/elf/dl-fini.c (original)
+++ fsf/trunk/libc/elf/dl-fini.c Sat Sep 29 00:03:39 2007
@@ -82,8 +82,8 @@
if (__builtin_expect (maps[k]->l_reldeps != NULL, 0))
{
- unsigned int m = maps[k]->l_reldepsact;
- struct link_map **relmaps = maps[k]->l_reldeps;
+ unsigned int m = maps[k]->l_reldeps->act;
+ struct link_map **relmaps = &maps[k]->l_reldeps->list[0];
while (m-- > 0)
{
Modified: fsf/trunk/libc/elf/dl-lookup.c
==============================================================================
--- fsf/trunk/libc/elf/dl-lookup.c (original)
+++ fsf/trunk/libc/elf/dl-lookup.c Sat Sep 29 00:03:39 2007
@@ -88,20 +88,50 @@
internal_function
add_dependency (struct link_map *undef_map, struct link_map *map, int flags)
{
- struct link_map **list;
struct link_map *runp;
- unsigned int act;
unsigned int i;
int result = 0;
- unsigned long long int serial;
/* Avoid self-references and references to objects which cannot be
unloaded anyway. */
if (undef_map == map)
return 0;
+ /* Avoid references to objects which cannot be unloaded anyway. */
+ assert (map->l_type == lt_loaded);
+ if ((map->l_flags_1 & DF_1_NODELETE) != 0)
+ return 0;
+
+ struct link_map_reldeps *l_reldeps
+ = atomic_forced_read (undef_map->l_reldeps);
+
+ /* Make sure l_reldeps is read before l_initfini. */
+ atomic_read_barrier ();
+
+ /* Determine whether UNDEF_MAP already has a reference to MAP. First
+ look in the normal dependencies. */
+ struct link_map **l_initfini = atomic_forced_read (undef_map->l_initfini);
+ if (l_initfini != NULL)
+ {
+ for (i = 0; l_initfini[i] != NULL; ++i)
+ if (l_initfini[i] == map)
+ return 0;
+ }
+
+ /* No normal dependency. See whether we already had to add it
+ to the special list of dynamic dependencies. */
+ unsigned int l_reldepsact = 0;
+ if (l_reldeps != NULL)
+ {
+ struct link_map **list = &l_reldeps->list[0];
+ l_reldepsact = l_reldeps->act;
+ for (i = 0; i < l_reldepsact; ++i)
+ if (list[i] == map)
+ return 0;
+ }
+
/* Save serial number of the target MAP. */
- serial = map->l_serial;
+ unsigned long long serial = map->l_serial;
/* Make sure nobody can unload the object while we are at it. */
if (__builtin_expect (flags & DL_LOOKUP_GSCOPE_LOCK, 0))
@@ -110,38 +140,52 @@
here, that can result in ABBA deadlock. */
THREAD_GSCOPE_RESET_FLAG ();
__rtld_lock_lock_recursive (GL(dl_load_lock));
- THREAD_GSCOPE_SET_FLAG ();
/* While MAP value won't change, after THREAD_GSCOPE_RESET_FLAG ()
it can e.g. point to unallocated memory. So avoid the optimizer
treating the above read from MAP->l_serial as ensurance it
can safely dereference it. */
map = atomic_forced_read (map);
+
+ /* From this point on it is unsafe to dereference MAP, until it
+ has been found in one of the lists. */
+
+ /* Redo the l_initfini check in case undef_map's l_initfini
+ changed in the mean time. */
+ if (undef_map->l_initfini != l_initfini
+ && undef_map->l_initfini != NULL)
+ {
+ l_initfini = undef_map->l_initfini;
+ for (i = 0; l_initfini[i] != NULL; ++i)
+ if (l_initfini[i] == map)
+ goto out_check;
+ }
+
+ /* Redo the l_reldeps check if undef_map's l_reldeps changed in
+ the mean time. */
+ if (undef_map->l_reldeps != NULL)
+ {
+ if (undef_map->l_reldeps != l_reldeps)
+ {
+ struct link_map **list = &undef_map->l_reldeps->list[0];
+ l_reldepsact = undef_map->l_reldeps->act;
+ for (i = 0; i < l_reldepsact; ++i)
+ if (list[i] == map)
+ goto out_check;
+ }
+ else if (undef_map->l_reldeps->act > l_reldepsact)
+ {
+ struct link_map **list
+ = &undef_map->l_reldeps->list[0];
+ i = l_reldepsact;
+ l_reldepsact = undef_map->l_reldeps->act;
+ for (; i < l_reldepsact; ++i)
+ if (list[i] == map)
+ goto out_check;
+ }
+ }
}
else
__rtld_lock_lock_recursive (GL(dl_load_lock));
-
- /* From this point on it is unsafe to dereference MAP, until it
- has been found in one of the lists. */
-
- /* Determine whether UNDEF_MAP already has a reference to MAP. First
- look in the normal dependencies. */
- if (undef_map->l_initfini != NULL)
- {
- list = undef_map->l_initfini;
-
- for (i = 0; list[i] != NULL; ++i)
- if (list[i] == map)
- goto out_check;
- }
-
- /* No normal dependency. See whether we already had to add it
- to the special list of dynamic dependencies. */
- list = undef_map->l_reldeps;
- act = undef_map->l_reldepsact;
-
- for (i = 0; i < act; ++i)
- if (list[i] == map)
- goto out_check;
/* The object is not yet in the dependency list. Before we add
it make sure just one more time the object we are about to
@@ -161,8 +205,8 @@
if (map->l_serial != serial)
goto out_check;
- /* Avoid references to objects which cannot be unloaded anyway. */
- assert (map->l_type == lt_loaded);
+ /* Redo the NODELETE check, as when dl_load_lock wasn't held
+ yet this could have changed. */
if ((map->l_flags_1 & DF_1_NODELETE) != 0)
goto out;
@@ -177,33 +221,46 @@
}
/* Add the reference now. */
- if (__builtin_expect (act >= undef_map->l_reldepsmax, 0))
+ if (__builtin_expect (l_reldepsact >= undef_map->l_reldepsmax, 0))
{
/* Allocate more memory for the dependency list. Since this
can never happen during the startup phase we can use
`realloc'. */
- void *newp;
-
- undef_map->l_reldepsmax += 5;
- newp = realloc (undef_map->l_reldeps,
- undef_map->l_reldepsmax
- * sizeof (struct link_map *));
-
- if (__builtin_expect (newp != NULL, 1))
- undef_map->l_reldeps = (struct link_map **) newp;
+ struct link_map_reldeps *newp;
+ unsigned int max
+ = undef_map->l_reldepsmax ? undef_map->l_reldepsmax * 2 : 10;
+
+ newp = malloc (sizeof (*newp) + max * sizeof (struct link_map *));
+ if (newp == NULL)
+ {
+ /* If we didn't manage to allocate memory for the list this is
+ no fatal problem. We simply make sure the referenced object
+ cannot be unloaded. This is semantically the correct
+ behavior. */
+ map->l_flags_1 |= DF_1_NODELETE;
+ goto out;
+ }
else
- /* Correct the addition. */
- undef_map->l_reldepsmax -= 5;
- }
-
- /* If we didn't manage to allocate memory for the list this is
- no fatal mistake. We simply make sure the referenced object
- cannot be unloaded. This is semantically the correct
- behavior. */
- if (__builtin_expect (act < undef_map->l_reldepsmax, 1))
- undef_map->l_reldeps[undef_map->l_reldepsact++] = map;
+ {
+ if (l_reldepsact)
+ memcpy (&newp->list[0], &undef_map->l_reldeps->list[0],
+ l_reldepsact * sizeof (struct link_map *));
+ newp->list[l_reldepsact] = map;
+ newp->act = l_reldepsact + 1;
+ atomic_write_barrier ();
+ void *old = undef_map->l_reldeps;
+ undef_map->l_reldeps = newp;
+ undef_map->l_reldepsmax = max;
+ if (old)
+ _dl_scope_free (old);
+ }
+ }
else
- map->l_flags_1 |= DF_1_NODELETE;
+ {
+ undef_map->l_reldeps->list[l_reldepsact] = map;
+ atomic_write_barrier ();
+ undef_map->l_reldeps->act = l_reldepsact + 1;
+ }
/* Display information if we are debugging. */
if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_FILES, 0))
@@ -222,6 +279,9 @@
out:
/* Release the lock. */
__rtld_lock_unlock_recursive (GL(dl_load_lock));
+
+ if (__builtin_expect (flags & DL_LOOKUP_GSCOPE_LOCK, 0))
+ THREAD_GSCOPE_SET_FLAG ();
return result;
Modified: fsf/trunk/libc/elf/dl-open.c
==============================================================================
--- fsf/trunk/libc/elf/dl-open.c (original)
+++ fsf/trunk/libc/elf/dl-open.c Sat Sep 29 00:03:39 2007
@@ -166,7 +166,7 @@
}
int
-_dl_scope_free (struct r_scope_elem **old)
+_dl_scope_free (void *old)
{
struct dl_scope_free_list *fsl;
#define DL_SCOPE_FREE_LIST_SIZE (sizeof (fsl->list) / sizeof (fsl->list[0]))
Modified: fsf/trunk/libc/iconvdata/Makefile
==============================================================================
--- fsf/trunk/libc/iconvdata/Makefile (original)
+++ fsf/trunk/libc/iconvdata/Makefile Sat Sep 29 00:03:39 2007
@@ -59,7 +59,7 @@
IBM1149 IBM1166 IBM1167 IBM4517 IBM4899 IBM4909 IBM4971 \
IBM5347 IBM9030 IBM9066 IBM9448 IBM12712 IBM16804 \
IBM1364 IBM1371 IBM1388 IBM1390 IBM1399 ISO_11548-1 MIK BRF \
- MAC-CENTRALEUROPE
+ MAC-CENTRALEUROPE KOI8-RU
modules.so := $(addsuffix .so, $(modules))
@@ -240,7 +240,7 @@
iso-ir-197 tis-620 koi8-u ibm874 cp10007 koi8-t \
georgian-ps georgian-academy iso-ir-209 mac-sami \
iso8859-11 ibm866nav pt154 rk1048 mik brf \
- mac-centraleurope
+ mac-centraleurope koi8-ru
gen-special-modules := iso8859-7jp
Modified: fsf/trunk/libc/iconvdata/TESTS
==============================================================================
--- fsf/trunk/libc/iconvdata/TESTS (original)
+++ fsf/trunk/libc/iconvdata/TESTS Sat Sep 29 00:03:39 2007
@@ -169,3 +169,4 @@
BRF BRF - UTF8
MAC-SAMI MAC-SAMI Y UTF8
MAC-CENTRALEUROPE MAC-CENTRALEUROPE Y UTF8
+KOI8-RU KOI8-RU Y UTF8
Modified: fsf/trunk/libc/iconvdata/gconv-modules
==============================================================================
--- fsf/trunk/libc/iconvdata/gconv-modules (original)
+++ fsf/trunk/libc/iconvdata/gconv-modules Sat Sep 29 00:03:39 2007
@@ -1916,3 +1916,7 @@
alias CP1282// MAC-CENTRALEUROPE//
module MAC-CENTRALEUROPE// INTERNAL MAC-CENTRALEUROPE 1
module INTERNAL MAC-CENTRALEUROPE// MAC-CENTRALEUROPE 1
+
+# from to module cost
+module KOI8-RU// INTERNAL KOI8-RU 1
+module INTERNAL KOI8-RU// KOI8-RU 1
Modified: fsf/trunk/libc/iconvdata/koi8-r.c
==============================================================================
--- fsf/trunk/libc/iconvdata/koi8-r.c (original)
+++ fsf/trunk/libc/iconvdata/koi8-r.c Sat Sep 29 00:03:39 2007
@@ -1,5 +1,5 @@
/* Conversion from and to KOI8-R.
- Copyright (C) 1997, 1998 Free Software Foundation, Inc.
+ Copyright (C) 1997, 1998, 2007 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@xxxxxxxxxx>, 1997.
@@ -24,6 +24,6 @@
#define TABLES <koi8-r.h>
#define CHARSET_NAME "KOI8-R//"
-#define HAS_HOLES 1 /* Not all 256 character are defined. */
+#define HAS_HOLES 0 /* All 256 character are defined. */
#include <8bit-gap.c>
Added: fsf/trunk/libc/iconvdata/koi8-ru.c
==============================================================================
--- fsf/trunk/libc/iconvdata/koi8-ru.c (added)
+++ fsf/trunk/libc/iconvdata/koi8-ru.c Sat Sep 29 00:03:39 2007
@@ -1,0 +1,29 @@
+/* Conversion from and to KOI8-RU.
+ Copyright (C) 2007 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@xxxxxxxxxx>, 20077.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#include <stdint.h>
+
+/* Specify the conversion table. */
+#define TABLES <koi8-ru.h>
+
+#define CHARSET_NAME "KOI8-RU//"
+#define HAS_HOLES 0 /* All 256 character are defined. */
+
+#include <8bit-gap.c>
Modified: fsf/trunk/libc/iconvdata/tst-tables.sh
==============================================================================
--- fsf/trunk/libc/iconvdata/tst-tables.sh (original)
+++ fsf/trunk/libc/iconvdata/tst-tables.sh Sat Sep 29 00:03:39 2007
@@ -210,6 +210,7 @@
MIK
BRF
MAC-CENTRALEUROPE
+ KOI8-RU
#
# Multibyte encodings come here
#
Modified: fsf/trunk/libc/include/link.h
==============================================================================
--- fsf/trunk/libc/include/link.h (original)
+++ fsf/trunk/libc/include/link.h Sat Sep 29 00:03:39 2007
@@ -240,8 +240,11 @@
/* List of the dependencies introduced through symbol binding. */
unsigned int l_reldepsmax;
- unsigned int l_reldepsact;
- struct link_map **l_reldeps;
+ struct link_map_reldeps
+ {
+ unsigned int act;
+ struct link_map *list[];
+ } *l_reldeps;
/* Various flag words. */
ElfW(Word) l_feature_1;
Modified: fsf/trunk/libc/localedata/ChangeLog
==============================================================================
--- fsf/trunk/libc/localedata/ChangeLog (original)
+++ fsf/trunk/libc/localedata/ChangeLog Sat Sep 29 00:03:39 2007
@@ -1,3 +1,7 @@
+2007-09-28 Ulrich Drepper <drepper@xxxxxxxxxx>
+
+ * charmaps/KOI8-RU: New file.
+
2007-09-23 Ulrich Drepper <drepper@xxxxxxxxxx>
[BZ #4556]
Added: fsf/trunk/libc/localedata/charmaps/KOI8-RU
==============================================================================
--- fsf/trunk/libc/localedata/charmaps/KOI8-RU (added)
+++ fsf/trunk/libc/localedata/charmaps/KOI8-RU Sat Sep 29 00:03:39 2007
@@ -1,0 +1,264 @@
+<code_set_name> KOI8-RU
+<comment_char> %
+<escape_char> /
+% version: 1.0
+% source: Draft RFC rfc-draft-koi8-ru.txt
+
+CHARMAP
+<U0000> /x00 NULL (NUL)
+<U0001> /x01 START OF HEADING (SOH)
+<U0002> /x02 START OF TEXT (STX)
+<U0003> /x03 END OF TEXT (ETX)
+<U0004> /x04 END OF TRANSMISSION (EOT)
+<U0005> /x05 ENQUIRY (ENQ)
+<U0006> /x06 ACKNOWLEDGE (ACK)
+<U0007> /x07 BELL (BEL)
+<U0008> /x08 BACKSPACE (BS)
+<U0009> /x09 CHARACTER TABULATION (HT)
+<U000A> /x0a LINE FEED (LF)
+<U000B> /x0b LINE TABULATION (VT)
+<U000C> /x0c FORM FEED (FF)
+<U000D> /x0d CARRIAGE RETURN (CR)
+<U000E> /x0e SHIFT OUT (SO)
+<U000F> /x0f SHIFT IN (SI)
+<U0010> /x10 DATALINK ESCAPE (DLE)
+<U0011> /x11 DEVICE CONTROL ONE (DC1)
+<U0012> /x12 DEVICE CONTROL TWO (DC2)
+<U0013> /x13 DEVICE CONTROL THREE (DC3)
+<U0014> /x14 DEVICE CONTROL FOUR (DC4)
+<U0015> /x15 NEGATIVE ACKNOWLEDGE (NAK)
+<U0016> /x16 SYNCHRONOUS IDLE (SYN)
+<U0017> /x17 END OF TRANSMISSION BLOCK (ETB)
+<U0018> /x18 CANCEL (CAN)
+<U0019> /x19 END OF MEDIUM (EM)
+<U001A> /x1a SUBSTITUTE (SUB)
+<U001B> /x1b ESCAPE (ESC)
+<U001C> /x1c FILE SEPARATOR (IS4)
+<U001D> /x1d GROUP SEPARATOR (IS3)
+<U001E> /x1e RECORD SEPARATOR (IS2)
+<U001F> /x1f UNIT SEPARATOR (IS1)
+<U0020> /x20 SPACE
+<U0021> /x21 EXCLAMATION MARK
+<U0022> /x22 QUOTATION MARK
+<U0023> /x23 NUMBER SIGN
+<U0024> /x24 DOLLAR SIGN
+<U0025> /x25 PERCENT SIGN
+<U0026> /x26 AMPERSAND
+<U0027> /x27 APOSTROPHE
+<U0028> /x28 LEFT PARENTHESIS
+<U0029> /x29 RIGHT PARENTHESIS
+<U002A> /x2a ASTERISK
+<U002B> /x2b PLUS SIGN
+<U002C> /x2c COMMA
+<U002D> /x2d HYPHEN-MINUS
+<U002E> /x2e FULL STOP
+<U002F> /x2f SOLIDUS
+<U0030> /x30 DIGIT ZERO
+<U0031> /x31 DIGIT ONE
+<U0032> /x32 DIGIT TWO
+<U0033> /x33 DIGIT THREE
+<U0034> /x34 DIGIT FOUR
+<U0035> /x35 DIGIT FIVE
+<U0036> /x36 DIGIT SIX
+<U0037> /x37 DIGIT SEVEN
+<U0038> /x38 DIGIT EIGHT
+<U0039> /x39 DIGIT NINE
+<U003A> /x3a COLON
+<U003B> /x3b SEMICOLON
+<U003C> /x3c LESS-THAN SIGN
+<U003D> /x3d EQUALS SIGN
+<U003E> /x3e GREATER-THAN SIGN
+<U003F> /x3f QUESTION MARK
+<U0040> /x40 COMMERCIAL AT
+<U0041> /x41 LATIN CAPITAL LETTER A
+<U0042> /x42 LATIN CAPITAL LETTER B
+<U0043> /x43 LATIN CAPITAL LETTER C
+<U0044> /x44 LATIN CAPITAL LETTER D
+<U0045> /x45 LATIN CAPITAL LETTER E
+<U0046> /x46 LATIN CAPITAL LETTER F
+<U0047> /x47 LATIN CAPITAL LETTER G
+<U0048> /x48 LATIN CAPITAL LETTER H
+<U0049> /x49 LATIN CAPITAL LETTER I
+<U004A> /x4a LATIN CAPITAL LETTER J
+<U004B> /x4b LATIN CAPITAL LETTER K
+<U004C> /x4c LATIN CAPITAL LETTER L
+<U004D> /x4d LATIN CAPITAL LETTER M
+<U004E> /x4e LATIN CAPITAL LETTER N
+<U004F> /x4f LATIN CAPITAL LETTER O
+<U0050> /x50 LATIN CAPITAL LETTER P
+<U0051> /x51 LATIN CAPITAL LETTER Q
+<U0052> /x52 LATIN CAPITAL LETTER R
+<U0053> /x53 LATIN CAPITAL LETTER S
+<U0054> /x54 LATIN CAPITAL LETTER T
+<U0055> /x55 LATIN CAPITAL LETTER U
+<U0056> /x56 LATIN CAPITAL LETTER V
+<U0057> /x57 LATIN CAPITAL LETTER W
+<U0058> /x58 LATIN CAPITAL LETTER X
+<U0059> /x59 LATIN CAPITAL LETTER Y
+<U005A> /x5a LATIN CAPITAL LETTER Z
+<U005B> /x5b LEFT SQUARE BRACKET
+<U005C> /x5c REVERSE SOLIDUS
+<U005D> /x5d RIGHT SQUARE BRACKET
+<U005E> /x5e CIRCUMFLEX ACCENT
+<U005F> /x5f LOW LINE
+<U0060> /x60 GRAVE ACCENT
+<U0061> /x61 LATIN SMALL LETTER A
+<U0062> /x62 LATIN SMALL LETTER B
+<U0063> /x63 LATIN SMALL LETTER C
+<U0064> /x64 LATIN SMALL LETTER D
+<U0065> /x65 LATIN SMALL LETTER E
+<U0066> /x66 LATIN SMALL LETTER F
+<U0067> /x67 LATIN SMALL LETTER G
+<U0068> /x68 LATIN SMALL LETTER H
+<U0069> /x69 LATIN SMALL LETTER I
+<U006A> /x6a LATIN SMALL LETTER J
+<U006B> /x6b LATIN SMALL LETTER K
+<U006C> /x6c LATIN SMALL LETTER L
+<U006D> /x6d LATIN SMALL LETTER M
+<U006E> /x6e LATIN SMALL LETTER N
+<U006F> /x6f LATIN SMALL LETTER O
+<U0070> /x70 LATIN SMALL LETTER P
+<U0071> /x71 LATIN SMALL LETTER Q
+<U0072> /x72 LATIN SMALL LETTER R
+<U0073> /x73 LATIN SMALL LETTER S
+<U0074> /x74 LATIN SMALL LETTER T
+<U0075> /x75 LATIN SMALL LETTER U
+<U0076> /x76 LATIN SMALL LETTER V
+<U0077> /x77 LATIN SMALL LETTER W
+<U0078> /x78 LATIN SMALL LETTER X
+<U0079> /x79 LATIN SMALL LETTER Y
+<U007A> /x7a LATIN SMALL LETTER Z
+<U007B> /x7b LEFT CURLY BRACKET
+<U007C> /x7c VERTICAL LINE
+<U007D> /x7d RIGHT CURLY BRACKET
+<U007E> /x7e TILDE
+<U007F> /x7f DELETE (DEL)
+<U2500> /x80 BOX DRAWINGS LIGHT HORIZONTAL
+<U2502> /x81 BOX DRAWINGS LIGHT VERTICAL
+<U250C> /x82 BOX DRAWINGS LIGHT DOWN AND RIGHT
+<U2510> /x83 BOX DRAWINGS LIGHT DOWN AND LEFT
+<U2514> /x84 BOX DRAWINGS LIGHT UP AND RIGHT
+<U2518> /x85 BOX DRAWINGS LIGHT UP AND LEFT
+<U251C> /x86 BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+<U2524> /x87 BOX DRAWINGS LIGHT VERTICAL AND LEFT
+<U252C> /x88 BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+<U2534> /x89 BOX DRAWINGS LIGHT UP AND HORIZONTAL
+<U253C> /x8a BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+<U2580> /x8b UPPER HALF BLOCK
+<U2584> /x8c LOWER HALF BLOCK
+<U2588> /x8d FULL BLOCK
+<U258C> /x8e LEFT HALF BLOCK
+<U2590> /x8f RIGHT HALF BLOCK
+<U2591> /x90 LIGHT SHADE
+<U2592> /x91 MEDIUM SHADE
+<U2593> /x92 DARK SHADE
+<U201C> /x93 LEFT DOUBLE QUOTATION MARK
+<U25A0> /x94 BLACK SQUARE
+<U2219> /x95 BULLET OPERATOR
+<U201D> /x96 RIGHT DOUBLE QUOTATION MARK
+<U2014> /x97 EM DASH
+<U2116> /x98 NUMERO SIGN
+<U2122> /x99 TRADE MARK SIGN
+<U00A0> /x9a NO-BREAK SPACE
+<U00BB> /x9b RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+<U00AE> /x9c REGISTERED SIGN
+<U00AB> /x9d LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+<U00B7> /x9e MIDDLE DOT
+<U00A4> /x9f CURRENCY SIGN
+<U2550> /xa0 BOX DRAWINGS DOUBLE HORIZONTAL
+<U2551> /xa1 BOX DRAWINGS DOUBLE VERTICAL
+<U2552> /xa2 BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+<U0451> /xa3 CYRILLIC SMALL LETTER IO
+<U0454> /xa4 CYRILLIC SMALL LETTER UKRAINIAN IE
+<U2554> /xa5 BOX DRAWINGS DOUBLE DOWN AND RIGHT
+<U0456> /xa6 CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+<U0457> /xa7 CYRILLIC SMALL LETTER YI
+<U2557> /xa8 BOX DRAWINGS DOUBLE DOWN AND LEFT
+<U2558> /xa9 BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+<U2559> /xaa BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+<U255A> /xab BOX DRAWINGS DOUBLE UP AND RIGHT
+<U255B> /xac BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+<U0491> /xad CYRILLIC SMALL LETTER GHE WITH UPTURN
+<U045E> /xae CYRILLIC SMALL LETTER SHORT U
+<U255E> /xaf BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+<U255F> /xb0 BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+<U2560> /xb1 BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+<U2561> /xb2 BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+<U0401> /xb3 CYRILLIC CAPITAL LETTER IO
+<U0404> /xb4 CYRILLIC CAPITAL LETTER UKRAINIAN IE
+<U2563> /xb5 BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+<U0406> /xb6 CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+<U0407> /xb7 CYRILLIC CAPITAL LETTER YI
+<U2566> /xb8 BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+<U2567> /xb9 BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+<U2568> /xba BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+<U2569> /xbb BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+<U256A> /xbc BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+<U0490> /xbd CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+<U040E> /xbe CYRILLIC CAPITAL LETTER SHORT U
+<U00A9> /xbf COPYRIGHT SIGN
+<U044E> /xc0 CYRILLIC SMALL LETTER YU
+<U0430> /xc1 CYRILLIC SMALL LETTER A
+<U0431> /xc2 CYRILLIC SMALL LETTER BE
+<U0446> /xc3 CYRILLIC SMALL LETTER TSE
+<U0434> /xc4 CYRILLIC SMALL LETTER DE
+<U0435> /xc5 CYRILLIC SMALL LETTER IE
+<U0444> /xc6 CYRILLIC SMALL LETTER EF
+<U0433> /xc7 CYRILLIC SMALL LETTER GHE
+<U0445> /xc8 CYRILLIC SMALL LETTER HA
+<U0438> /xc9 CYRILLIC SMALL LETTER I
+<U0439> /xca CYRILLIC SMALL LETTER SHORT I
+<U043A> /xcb CYRILLIC SMALL LETTER KA
+<U043B> /xcc CYRILLIC SMALL LETTER EL
+<U043C> /xcd CYRILLIC SMALL LETTER EM
+<U043D> /xce CYRILLIC SMALL LETTER EN
+<U043E> /xcf CYRILLIC SMALL LETTER O
+<U043F> /xd0 CYRILLIC SMALL LETTER PE
+<U044F> /xd1 CYRILLIC SMALL LETTER YA
+<U0440> /xd2 CYRILLIC SMALL LETTER ER
+<U0441> /xd3 CYRILLIC SMALL LETTER ES
+<U0442> /xd4 CYRILLIC SMALL LETTER TE
+<U0443> /xd5 CYRILLIC SMALL LETTER U
+<U0436> /xd6 CYRILLIC SMALL LETTER ZHE
+<U0432> /xd7 CYRILLIC SMALL LETTER VE
+<U044C> /xd8 CYRILLIC SMALL LETTER SOFT SIGN
+<U044B> /xd9 CYRILLIC SMALL LETTER YERU
+<U0437> /xda CYRILLIC SMALL LETTER ZE
+<U0448> /xdb CYRILLIC SMALL LETTER SHA
+<U044D> /xdc CYRILLIC SMALL LETTER E
+<U0449> /xdd CYRILLIC SMALL LETTER SHCHA
+<U0447> /xde CYRILLIC SMALL LETTER CHE
+<U044A> /xdf CYRILLIC SMALL LETTER HARD SIGN
+<U042E> /xe0 CYRILLIC CAPITAL LETTER YU
+<U0410> /xe1 CYRILLIC CAPITAL LETTER A
+<U0411> /xe2 CYRILLIC CAPITAL LETTER BE
+<U0426> /xe3 CYRILLIC CAPITAL LETTER TSE
+<U0414> /xe4 CYRILLIC CAPITAL LETTER DE
+<U0415> /xe5 CYRILLIC CAPITAL LETTER IE
+<U0424> /xe6 CYRILLIC CAPITAL LETTER EF
+<U0413> /xe7 CYRILLIC CAPITAL LETTER GHE
+<U0425> /xe8 CYRILLIC CAPITAL LETTER HA
+<U0418> /xe9 CYRILLIC CAPITAL LETTER I
+<U0419> /xea CYRILLIC CAPITAL LETTER SHORT I
+<U041A> /xeb CYRILLIC CAPITAL LETTER KA
+<U041B> /xec CYRILLIC CAPITAL LETTER EL
+<U041C> /xed CYRILLIC CAPITAL LETTER EM
+<U041D> /xee CYRILLIC CAPITAL LETTER EN
+<U041E> /xef CYRILLIC CAPITAL LETTER O
+<U041F> /xf0 CYRILLIC CAPITAL LETTER PE
+<U042F> /xf1 CYRILLIC CAPITAL LETTER YA
+<U0420> /xf2 CYRILLIC CAPITAL LETTER ER
+<U0421> /xf3 CYRILLIC CAPITAL LETTER ES
+<U0422> /xf4 CYRILLIC CAPITAL LETTER TE
+<U0423> /xf5 CYRILLIC CAPITAL LETTER U
+<U0416> /xf6 CYRILLIC CAPITAL LETTER ZHE
+<U0412> /xf7 CYRILLIC CAPITAL LETTER VE
+<U042C> /xf8 CYRILLIC CAPITAL LETTER SOFT SIGN
+<U042B> /xf9 CYRILLIC CAPITAL LETTER YERU
+<U0417> /xfa CYRILLIC CAPITAL LETTER ZE
+<U0428> /xfb CYRILLIC CAPITAL LETTER SHA
+<U042D> /xfc CYRILLIC CAPITAL LETTER E
+<U0429> /xfd CYRILLIC CAPITAL LETTER SHCHA
+<U0427> /xfe CYRILLIC CAPITAL LETTER CHE
+<U042A> /xff CYRILLIC CAPITAL LETTER HARD SIGN
+END CHARMAP
Modified: fsf/trunk/libc/sysdeps/generic/ldsodefs.h
==============================================================================
--- fsf/trunk/libc/sysdeps/generic/ldsodefs.h (original)
+++ fsf/trunk/libc/sysdeps/generic/ldsodefs.h Sat Sep 29 00:03:39 2007
@@ -491,7 +491,7 @@
EXTERN struct dl_scope_free_list
{
size_t count;
- struct r_scope_elem **list[50];
+ void *list[50];
} *_dl_scope_free_list;
#ifdef SHARED
};
@@ -1058,7 +1058,7 @@
/* Free or queue for freeing scope OLD. If other threads might be
in the middle of _dl_fixup, _dl_profile_fixup or dl*sym using the
old scope, OLD can't be freed until no thread is using it. */
-extern int _dl_scope_free (struct r_scope_elem **old) attribute_hidden;
+extern int _dl_scope_free (void *) attribute_hidden;
/* Add module to slot information data. */
extern void _dl_add_to_slotinfo (struct link_map *l) attribute_hidden;