Don't take the address of a void object.

GCC 4.5 warns about "extern void _end; &end;".
Use char[] instead, as that also doesn't fall foul
of a target's .sdata optimizations.

Signed-off-by: Richard Henderson <rth@twiddle.net>
This commit is contained in:
Richard Henderson 2010-03-26 09:16:21 -07:00
parent 07f9ca32a9
commit b1c1949e60
4 changed files with 16 additions and 9 deletions

View File

@ -1,3 +1,10 @@
2010-03-26 Richard Henderson <rth@redhat.com>
* csu/gmon-start.c (ENTRY_POINT, etext): Declare as char[], not void.
* elf/dl-sysdep.c (_end): Likewise.
* sysdeps/unix/sysv/dl-sysdep.c (frob_brk): Likewise with locally
declared _end, and associated variables.
2010-03-26 Ulrich Drepper <drepper@redhat.com>
* sysdeps/posix/getaddrinfo.c (gaih_inet): Don't assume success always

View File

@ -31,9 +31,9 @@
#ifdef ENTRY_POINT_DECL
ENTRY_POINT_DECL(extern)
#else
extern void ENTRY_POINT;
extern char ENTRY_POINT[];
#endif
extern void etext;
extern char etext[];
#ifndef TEXT_START
# ifdef ENTRY_POINT_DECL

View File

@ -47,7 +47,7 @@
#endif
extern char **_environ attribute_hidden;
extern void _end attribute_hidden;
extern char _end[] attribute_hidden;
/* Protect SUID program against misuse of file descriptors. */
extern void __libc_check_standard_fds (void);
@ -226,14 +226,14 @@ _dl_sysdep_start (void **start_argptr,
if (GLRO(dl_platform) != NULL)
GLRO(dl_platformlen) = strlen (GLRO(dl_platform));
if (__sbrk (0) == &_end)
if (__sbrk (0) == _end)
/* The dynamic linker was run as a program, and so the initial break
starts just after our bss, at &_end. The malloc in dl-minimal.c
will consume the rest of this page, so tell the kernel to move the
break up that far. When the user program examines its break, it
will see this new value and not clobber our data. */
__sbrk (GLRO(dl_pagesize)
- ((&_end - (void *) 0) & (GLRO(dl_pagesize) - 1)));
- ((_end - (char *) 0) & (GLRO(dl_pagesize) - 1)));
/* If this is a SUID program we make sure that FDs 0, 1, and 2 are
allocated. If necessary we are doing it ourself. If it is not

View File

@ -47,12 +47,12 @@ frob_brk (void)
Later Linux kernels have changed this behavior so that the initial
break value is rounded up to the page boundary before we start. */
extern void *__curbrk attribute_hidden;
extern void _end attribute_hidden;
void *const endpage = (void *) 0 + (((__curbrk - (void *) 0)
extern char *__curbrk attribute_hidden;
extern char _end[] attribute_hidden;
char *const endpage = (void *) 0 + (((__curbrk - (char *) 0)
+ GLRO(dl_pagesize) - 1)
& -GLRO(dl_pagesize));
if (__builtin_expect (__curbrk >= &_end && __curbrk < endpage, 0))
if (__builtin_expect (__curbrk >= _end && __curbrk < endpage, 0))
__brk (endpage);
#endif
}