source:
patches/eglibc-2.15-fixes-1.patch@
578f6796
Last change on this file since 578f6796 was 57b3f19, checked in by , 13 years ago | |
---|---|
|
|
File size: 3.8 KB |
-
elf/dl-close.c
Submitted By: Jonathan Norman (jonathan at bluesquarelinux dot co dot uk) Date: 2012-02-16 Initial Package Version: 2.15 Origin: http://sourceware.org/ml/libc-alpha/2011-06/msg00010.html Upstream Status: Submitted Description: Fixes segfault with sound devices / output. diff -Naur eglibc-2_15.orig/elf/dl-close.c eglibc-2_15/elf/dl-close.c
old new 119 119 if (map->l_direct_opencount > 0 || map->l_type != lt_loaded 120 120 || dl_close_state != not_pending) 121 121 { 122 if (map->l_direct_opencount == 0) 123 { 124 if (map->l_type == lt_loaded) 125 dl_close_state = rerun; 126 else if (map->l_type == lt_library) 127 { 128 struct link_map **oldp = map->l_initfini; 129 map->l_initfini = map->l_orig_initfini; 130 _dl_scope_free (oldp); 131 } 132 } 122 if (map->l_direct_opencount == 0 && map->l_type == lt_loaded) 123 dl_close_state = rerun; 133 124 134 125 /* There are still references to this object. Do nothing more. */ 135 126 if (__builtin_expect (GLRO_dl_debug_mask & DL_DEBUG_FILES, 0)) -
elf/dl-deps.c
diff -Naur eglibc-2_15.orig/elf/dl-deps.c eglibc-2_15/elf/dl-deps.c
old new 489 489 nneeded * sizeof needed[0]); 490 490 atomic_write_barrier (); 491 491 l->l_initfini = l_initfini; 492 l->l_free_initfini = 1; 493 492 494 } 493 495 494 496 /* If we have no auxiliary objects just go on to the next map. */ … … 689 691 l_initfini[nlist] = NULL; 690 692 atomic_write_barrier (); 691 693 map->l_initfini = l_initfini; 694 map->l_free_initfini = 1; 692 695 if (l_reldeps != NULL) 693 696 { 694 697 atomic_write_barrier (); … … 697 700 _dl_scope_free (old_l_reldeps); 698 701 } 699 702 if (old_l_initfini != NULL) 700 map->l_orig_initfini = old_l_initfini;703 _dl_scope_free (old_l_initfini); 701 704 702 705 if (errno_reason) 703 706 _dl_signal_error (errno_reason == -1 ? 0 : errno_reason, objname, -
elf/dl-libc.c
diff -Naur eglibc-2_15.orig/elf/dl-libc.c eglibc-2_15/elf/dl-libc.c
old new 284 284 if (! old->dont_free) 285 285 free (old); 286 286 } 287 288 /* Free the initfini dependency list. */ 289 if (l->l_free_initfini) 290 free (l->l_initfini); 287 291 } 288 292 289 293 if (__builtin_expect (GL(dl_ns)[ns]._ns_global_scope_alloc, 0) != 0 -
elf/rtld.c
diff -Naur eglibc-2_15.orig/elf/rtld.c eglibc-2_15/elf/rtld.c
old new 2277 2277 lnp->dont_free = 1; 2278 2278 lnp = lnp->next; 2279 2279 } 2280 l->l_free_initfini = 0; 2280 2281 2281 2282 if (l != &GL(dl_rtld_map)) 2282 2283 _dl_relocate_object (l, l->l_scope, GLRO(dl_lazy) ? RTLD_LAZY : 0, -
include/link.h
diff -Naur eglibc-2_15.orig/include/link.h eglibc-2_15/include/link.h
old new 192 192 during LD_TRACE_PRELINKING=1 193 193 contains any DT_SYMBOLIC 194 194 libraries. */ 195 unsigned int l_free_initfini:1; /* Nonzero if l_initfini can be 196 freed, ie. not allocated with 197 the dummy malloc in ld.so. */ 195 198 196 199 /* Collected information about own RPATH directories. */ 197 200 struct r_search_path_struct l_rpath_dirs; … … 240 243 241 244 /* List of object in order of the init and fini calls. */ 242 245 struct link_map **l_initfini; 243 /* The init and fini list generated at startup, saved when the244 object is also loaded dynamically. */245 struct link_map **l_orig_initfini;246 246 247 247 /* List of the dependencies introduced through symbol binding. */ 248 248 struct link_map_reldeps
Note:
See TracBrowser
for help on using the repository browser.