mirror of
git://sourceware.org/git/glibc.git
synced 2025-01-18 12:16:13 +08:00
tile BZ #15759: Fix bug in _dl_unmap
We returned without calling __munmap if not in the simulator.
Now we call a separate sim_dlclose() function to make the
control flow work correctly.
(cherry picked from commit 1fe2988f52
)
Conflicts:
NEWS
This commit is contained in:
parent
ca4023620a
commit
15256e58ad
2
NEWS
2
NEWS
@ -8,7 +8,7 @@ using `glibc' in the "product" field.
|
||||
Version 2.17.1
|
||||
|
||||
* The following bugs are resolved with this release:
|
||||
15003, 15006, 15122.
|
||||
15003, 15006, 15122, 15759.
|
||||
|
||||
|
||||
Version 2.17
|
||||
|
@ -1,3 +1,9 @@
|
||||
2013-07-22 Chris Metcalf <cmetcalf@tilera.com>
|
||||
|
||||
[BZ #15759]
|
||||
* sysdeps/tile/dl-runtime.c (sim_dlclose): New function.
|
||||
(_dl_unmap): Call sim_dlclose().
|
||||
|
||||
2013-06-12 Chris Metcalf <cmetcalf@tilera.com>
|
||||
|
||||
* sysdeps/tile/bits/endian.h (__BYTE_ORDER): Default to little.
|
||||
|
@ -127,8 +127,8 @@ _dl_after_load (struct link_map *l)
|
||||
}
|
||||
|
||||
/* Support notifying the simulator about removed objects prior to munmap(). */
|
||||
void internal_function
|
||||
_dl_unmap (struct link_map *l)
|
||||
static void
|
||||
sim_dlclose (ElfW(Addr) map_start)
|
||||
{
|
||||
int shift;
|
||||
|
||||
@ -144,9 +144,15 @@ _dl_unmap (struct link_map *l)
|
||||
DLPUTC ('0');
|
||||
DLPUTC ('x');
|
||||
for (shift = (int) sizeof (unsigned long) * 8 - 4; shift >= 0; shift -= 4)
|
||||
DLPUTC ("0123456789abcdef"[(l->l_map_start >> shift) & 0xF]);
|
||||
DLPUTC ("0123456789abcdef"[(map_start >> shift) & 0xF]);
|
||||
DLPUTC ('\0');
|
||||
#undef DLPUTC
|
||||
|
||||
#undef DLPUTC
|
||||
}
|
||||
|
||||
void internal_function
|
||||
_dl_unmap (struct link_map *l)
|
||||
{
|
||||
sim_dlclose (l->l_map_start);
|
||||
__munmap ((void *) l->l_map_start, l->l_map_end - l->l_map_start);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user