Don't take the address of a void object.
authorRichard Henderson <rth@twiddle.net>
Fri, 26 Mar 2010 16:16:21 +0000 (09:16 -0700)
committerRichard Henderson <rth@twiddle.net>
Fri, 26 Mar 2010 16:16:21 +0000 (09:16 -0700)
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>
ChangeLog
csu/gmon-start.c
elf/dl-sysdep.c
sysdeps/unix/sysv/linux/dl-sysdep.c

index 8117882671ed2ae6316ab0d3bec38c384b39686d..72cbef6681fc2c9f7e7489b08030649b7e2f3f2f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
index d11c9b953226dcf76c5bf11469a237691636727e..7d585e135f86453240c1c394ad36631e0f1d7c39 100644 (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
index 5507e57b9629135e680a99ea768a197c25301354..160503dac5d9433da76c9ea9de12cae4d791bc4e 100644 (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
index 08ae9aa86d24f15fcb5b162e9e2afc3e5b0f45f9..34e88089286edc2839158c28882268b410ce2fc8 100644 (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
 }