diff options
author | Roland McGrath <roland@gnu.org> | 2002-08-05 01:21:25 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 2002-08-05 01:21:25 +0000 |
commit | a816b435dd0b8dde7dc2f8d995bd290998801317 (patch) | |
tree | 07a52658122b19c7a08eacba7eaeb01cdc39b741 /elf/dl-minimal.c | |
parent | 581dc54b74e8131acbb06f7ebb8887815f1914c8 (diff) | |
download | glibc-a816b435dd0b8dde7dc2f8d995bd290998801317.tar.gz |
* Makerules (cpp-srcs-left): When setting this to run
cppflags-iterator.mk, must append .c to $(tests) and $(xtests)
words. Combine the two loops into one on the concatenated list,
including those as well as $(test-srcs).
* elf/dl-minimal.c (__libc_memalign): Guts of malloc moved here,
since we align here with optimally minimal waste anyway.
(malloc): Just call that.
* sysdeps/generic/libc-tls.c (__libc_setup_tls): Set l_tls_offset to
the right variable.
* elf/dl-load.c (_dl_map_object_from_fd): Use p_vaddr, not p_offset,
to compute memory location for l_tls_initimage.
* elf/rtld.c (_dl_start): Likewise.
* sysdeps/generic/libc-tls.c (__libc_setup_tls): Likewise.
* libio/oldiopopen.c: Move #include's before #if SHLIB_COMPAT,
because the .d file is generated in the non-shared case and
so fails to catch them otherwise.
* sysdeps/generic/dl-tls.c (_dl_allocate_tls_storage): New function,
split out of _dl_allocate_tls.
(_dl_allocate_tls_init): Likewise.
(_dl_allocate_tls): Call those.
* sysdeps/generic/ldsodefs.h: Declare them with attribute_hidden.
* elf/rtld.c (dl_main): Call them separately instead of calling
_dl_allocate_tls. Delay _dl_allocate_tls_init until after relocation
is finished, so that the initializer data has been relocated before we
copy it into the main thread's TLS block.
* sysdeps/generic/dl-tls.c (_dl_allocate_tls): Fix off-by-one error in
loop conditions, prevented the last used module from being initialized.
Diffstat (limited to 'elf/dl-minimal.c')
-rw-r--r-- | elf/dl-minimal.c | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/elf/dl-minimal.c b/elf/dl-minimal.c index 2e45fc0a65..893a3b1f2e 100644 --- a/elf/dl-minimal.c +++ b/elf/dl-minimal.c @@ -46,8 +46,9 @@ extern unsigned long int weak_function strtoul (const char *nptr, char **endptr, int base); +/* Allocate an aligned memory block. */ void * weak_function -malloc (size_t n) +__libc_memalign (size_t align, size_t n) { #ifdef MAP_ANON #define _dl_zerofd (-1) @@ -70,8 +71,8 @@ malloc (size_t n) } /* Make sure the allocation pointer is ideally aligned. */ - alloc_ptr = (void *) 0 + (((alloc_ptr - (void *) 0) + sizeof (double) - 1) - & ~(sizeof (double) - 1)); + alloc_ptr = (void *) 0 + (((alloc_ptr - (void *) 0) + align - 1) + & ~(align - 1)); if (alloc_ptr + n >= alloc_end) { @@ -91,6 +92,12 @@ malloc (size_t n) return alloc_last_block; } +void * weak_function +malloc (size_t n) +{ + return __libc_memalign (sizeof (double), n); +} + /* We use this function occasionally since the real implementation may be optimized when it can assume the memory it returns already is set to NUL. */ @@ -124,15 +131,6 @@ realloc (void *ptr, size_t n) assert (new == ptr); return new; } - -/* Return alligned memory block. */ -void * weak_function -__libc_memalign (size_t align, size_t n) -{ - void *newp = malloc (n + align - 1); - - return (void *) roundup ((uintptr_t) newp, align); -} /* Avoid signal frobnication in setjmp/longjmp. Keeps things smaller. */ |