* sysdeps/unix/sysv/linux/libc_pthread_init.c (__libc_pthread_init):
authorUlrich Drepper <drepper@redhat.com>
Sun, 26 Apr 2009 18:06:47 +0000 (18:06 +0000)
committerUlrich Drepper <drepper@redhat.com>
Sun, 26 Apr 2009 18:06:47 +0000 (18:06 +0000)
Avoid warning by using may_alias attribute on ptrhack.

13 files changed:
gmon/gmon.c
inet/inet6_option.c
libio/iovsprintf.c
libio/iovsscanf.c
libio/strfile.h
libio/vasprintf.c
libio/vsnprintf.c
nptl/ChangeLog
nptl/sysdeps/unix/sysv/linux/libc_pthread_init.c
stdio-common/isoc99_vsscanf.c
stdlib/strfmon_l.c
sysdeps/unix/sysv/linux/readv.c
sysdeps/unix/sysv/linux/writev.c

index 8e2eddd..af2ac1c 100644 (file)
@@ -40,6 +40,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <stddef.h>
 #include <unistd.h>
 #include <libc-internal.h>
 #include <not-cancel.h>
@@ -180,10 +181,18 @@ write_hist (fd)
      int fd;
 {
   u_char tag = GMON_TAG_TIME_HIST;
-  struct gmon_hist_hdr thdr __attribute__ ((aligned (__alignof__ (char *))));
 
   if (_gmonparam.kcountsize > 0)
     {
+      struct real_gmon_hist_hdr
+      {
+       char *low_pc;
+       char *high_pc;
+       int32_t hist_size;
+       int32_t prof_rate;
+       char dimen[15];
+       char dimen_abbrev;
+      } thdr;
       struct iovec iov[3] =
         {
          { &tag, sizeof (tag) },
@@ -191,11 +200,25 @@ write_hist (fd)
          { _gmonparam.kcount, _gmonparam.kcountsize }
        };
 
-      *(char **) thdr.low_pc = (char *) _gmonparam.lowpc;
-      *(char **) thdr.high_pc = (char *) _gmonparam.highpc;
-      *(int32_t *) thdr.hist_size = (_gmonparam.kcountsize
-                                    / sizeof (HISTCOUNTER));
-      *(int32_t *) thdr.prof_rate = __profile_frequency ();
+      if (sizeof (thdr) != sizeof (struct gmon_hist_hdr)
+         || (offsetof (struct real_gmon_hist_hdr, low_pc)
+             != offsetof (struct gmon_hist_hdr, low_pc))
+         || (offsetof (struct real_gmon_hist_hdr, high_pc)
+             != offsetof (struct gmon_hist_hdr, high_pc))
+         || (offsetof (struct real_gmon_hist_hdr, hist_size)
+             != offsetof (struct gmon_hist_hdr, hist_size))
+         || (offsetof (struct real_gmon_hist_hdr, prof_rate)
+             != offsetof (struct gmon_hist_hdr, prof_rate))
+         || (offsetof (struct real_gmon_hist_hdr, dimen)
+             != offsetof (struct gmon_hist_hdr, dimen))
+         || (offsetof (struct real_gmon_hist_hdr, dimen_abbrev)
+             != offsetof (struct gmon_hist_hdr, dimen_abbrev)))
+       abort ();
+
+      thdr.low_pc = (char *) _gmonparam.lowpc;
+      thdr.high_pc = (char *) _gmonparam.highpc;
+      thdr.hist_size = _gmonparam.kcountsize / sizeof (HISTCOUNTER);
+      thdr.prof_rate = __profile_frequency ();
       strncpy (thdr.dimen, "seconds", sizeof (thdr.dimen));
       thdr.dimen_abbrev = 's';
 
@@ -318,7 +341,6 @@ write_bb_counts (fd)
 static void
 write_gmon (void)
 {
-    struct gmon_hdr ghdr __attribute__ ((aligned (__alignof__ (int))));
     int fd = -1;
     char *env;
 
@@ -350,9 +372,21 @@ write_gmon (void)
       }
 
     /* write gmon.out header: */
-    memset (&ghdr, '\0', sizeof (struct gmon_hdr));
+    struct real_gmon_hdr
+    {
+      char cookie[4];
+      int32_t version;
+      char spare[3 * 4];
+    } ghdr;
+    if (sizeof (ghdr) != sizeof (struct gmon_hdr)
+       || (offsetof (struct real_gmon_hdr, cookie)
+           != offsetof (struct gmon_hdr, cookie))
+       || (offsetof (struct real_gmon_hdr, version)
+           != offsetof (struct gmon_hdr, version)))
+      abort ();
     memcpy (&ghdr.cookie[0], GMON_MAGIC, sizeof (ghdr.cookie));
-    *(int32_t *) ghdr.version = GMON_VERSION;
+    ghdr.version = GMON_VERSION;
+    memset (ghdr.spare, '\0', sizeof (ghdr.spare));
     write_not_cancel (fd, &ghdr, sizeof (struct gmon_hdr));
 
     /* write PC histogram: */
index b34eb22..aa693cc 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2006, 2009 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
 
@@ -216,7 +216,8 @@ option_alloc (struct cmsghdr *cmsg, int datalen, int multx, int plusy)
     /* Too long.  */
     return NULL;
 
-  ((struct ip6_ext *) CMSG_DATA (cmsg))->ip6e_len = len8b;
+  struct ip6_ext *ie = (void *) CMSG_DATA (cmsg);
+  ie->ip6e_len = len8b;
 
   return result;
 }
index 7fcd0a1..ab82411 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993, 1997-2003, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1997-2003, 2006, 2009 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -38,10 +38,10 @@ __IO_vsprintf (char *string, const char *format, _IO_va_list args)
   sf._sbf._f._lock = NULL;
 #endif
   _IO_no_init (&sf._sbf._f, _IO_USER_LOCK, -1, NULL, NULL);
-  _IO_JUMPS ((struct _IO_FILE_plus *) &sf._sbf) = &_IO_str_jumps;
+  _IO_JUMPS (&sf._sbf) = &_IO_str_jumps;
   _IO_str_init_static_internal (&sf, string, -1, string);
-  ret = INTUSE(_IO_vfprintf) ((_IO_FILE *) &sf._sbf, format, args);
-  _IO_putc_unlocked ('\0', (_IO_FILE *) &sf._sbf);
+  ret = INTUSE(_IO_vfprintf) (&sf._sbf._f, format, args);
+  _IO_putc_unlocked ('\0', &sf._sbf._f);
   return ret;
 }
 INTDEF2(__IO_vsprintf, _IO_vsprintf)
index 10e4b0a..6f8a826 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993, 1997-2003, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1997-2003, 2006, 2009 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -40,9 +40,9 @@ _IO_vsscanf (string, format, args)
   sf._sbf._f._lock = NULL;
 #endif
   _IO_no_init (&sf._sbf._f, _IO_USER_LOCK, -1, NULL, NULL);
-  _IO_JUMPS ((struct _IO_FILE_plus *) &sf._sbf) = &_IO_str_jumps;
+  _IO_JUMPS (&sf._sbf) = &_IO_str_jumps;
   _IO_str_init_static_internal (&sf, (char*)string, 0, NULL);
-  ret = INTUSE(_IO_vfscanf) ((_IO_FILE *) &sf._sbf, format, args, NULL);
+  ret = INTUSE(_IO_vfscanf) (&sf._sbf._f, format, args, NULL);
   return ret;
 }
 ldbl_weak_alias (_IO_vsscanf, __vsscanf)
index 53a36a3..21ea9a6 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993, 1997, 1998, 1999, 2005 Free Software Foundation, Inc.
+/* Copyright (C) 1993,1997,1998,1999,2005,2009 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -47,7 +47,7 @@ struct _IO_str_fields
 struct _IO_streambuf
 {
   struct _IO_FILE _f;
-  const void *_vtable;
+  const struct _IO_jump_t *vtable;
 };
 
 typedef struct _IO_strfile_
index 2fdb9f6..7e15eb0 100644 (file)
@@ -1,4 +1,5 @@
-/* Copyright (C) 1995,1997,1999-2002,2004,2006 Free Software Foundation, Inc.
+/* Copyright (C) 1995,1997,1999-2002,2004,2006,2009
+   Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -54,8 +55,8 @@ _IO_vasprintf (result_ptr, format, args)
 #ifdef _IO_MTSAFE_IO
   sf._sbf._f._lock = NULL;
 #endif
-  _IO_no_init ((_IO_FILE *) &sf._sbf, _IO_USER_LOCK, -1, NULL, NULL);
-  _IO_JUMPS ((struct _IO_FILE_plus *) &sf._sbf) = &_IO_str_jumps;
+  _IO_no_init (&sf._sbf._f, _IO_USER_LOCK, -1, NULL, NULL);
+  _IO_JUMPS (&sf._sbf) = &_IO_str_jumps;
   _IO_str_init_static_internal (&sf, string, init_string_size, string);
   sf._sbf._f._flags &= ~_IO_USER_BUF;
   sf._s._allocate_buffer = (_IO_alloc_type) malloc;
index 289160e..a05eb54 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1994,1997,1999-2003, 2004, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1994,1997,1999-2004,2006,2009 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -114,10 +114,10 @@ _IO_vsnprintf (string, maxlen, format, args)
     }
 
   _IO_no_init (&sf.f._sbf._f, _IO_USER_LOCK, -1, NULL, NULL);
-  _IO_JUMPS ((struct _IO_FILE_plus *) &sf.f._sbf) = &_IO_strn_jumps;
+  _IO_JUMPS (&sf.f._sbf) = &_IO_strn_jumps;
   string[0] = '\0';
   _IO_str_init_static_internal (&sf.f, string, maxlen - 1, string);
-  ret = INTUSE(_IO_vfprintf) ((_IO_FILE *) &sf.f._sbf, format, args);
+  ret = INTUSE(_IO_vfprintf) (&sf.f._sbf._f, format, args);
 
   if (sf.f._sbf._f._IO_buf_base != sf.overflow_buf)
     *sf.f._sbf._f._IO_write_ptr = '\0';
index 60bab85..5091c83 100644 (file)
@@ -1,3 +1,8 @@
+2009-04-26  Ulrich Drepper  <drepper@redhat.com>
+
+       * sysdeps/unix/sysv/linux/libc_pthread_init.c (__libc_pthread_init):
+       Avoid warning by using may_alias attribute on ptrhack.
+
 2009-04-22  Ulrich Drepper  <drepper@redhat.com>
 
        [BZ #10090]
index 4b614bd..8924c4f 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003, 2005, 2006, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 2002,2003,2005,2006,2007,2009 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -56,10 +56,10 @@ __libc_pthread_init (ptr, reclaim, functions)
   union ptrhack
   {
     struct pthread_functions pf;
-    void *parr[1];
-  } const *src;
-  union ptrhack *dest;
 # define NPTRS (sizeof (struct pthread_functions) / sizeof (void *))
+    void *parr[NPTRS];
+  } __attribute__ ((may_alias)) const *src;
+  union ptrhack *dest;
 
   src = (const void *) functions;
   dest = (void *) &__libc_pthread_functions;
index f10919c..b11cf60 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993, 1997-2003, 2006, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 1993,1997-2003,2006,2007,2009 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -38,10 +38,10 @@ __isoc99_vsscanf (const char *string, const char *format, _IO_va_list args)
   sf._sbf._f._lock = NULL;
 #endif
   _IO_no_init (&sf._sbf._f, _IO_USER_LOCK, -1, NULL, NULL);
-  _IO_JUMPS ((struct _IO_FILE_plus *) &sf._sbf) = &_IO_str_jumps;
+  _IO_JUMPS (&sf._sbf) = &_IO_str_jumps;
   _IO_str_init_static_internal (&sf, (char*)string, 0, NULL);
   sf._sbf._f._flags2 |= _IO_FLAGS2_SCANF_STD;
-  ret = INTUSE(_IO_vfscanf) ((_IO_FILE *) &sf._sbf, format, args, NULL);
+  ret = INTUSE(_IO_vfscanf) (&sf._sbf._f, format, args, NULL);
   return ret;
 }
 libc_hidden_def (__isoc99_vsscanf)
index 8e63d45..eb7a178 100644 (file)
@@ -90,9 +90,6 @@ __vstrfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format,
 {
   struct locale_data *current = loc->__locales[LC_MONETARY];
   _IO_strfile f;
-#ifdef _IO_MTSAFE_IO
-  _IO_lock_t lock;
-#endif
   struct printf_info info;
   char *dest;                  /* Pointer so copy the output.  */
   const char *fmt;             /* Pointer that walks through format.  */
@@ -517,11 +514,11 @@ __vstrfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format,
 
       /* Print the number.  */
 #ifdef _IO_MTSAFE_IO
-      f._sbf._f._lock = &lock;
+      f._sbf._f._lock = NULL;
 #endif
-      INTUSE(_IO_init) ((_IO_FILE *) &f, 0);
-      _IO_JUMPS ((struct _IO_FILE_plus *) &f) = &_IO_str_jumps;
-      INTUSE(_IO_str_init_static) ((_IO_strfile *) &f, dest,
+      INTUSE(_IO_init) (&f._sbf._f, 0);
+      _IO_JUMPS (&f._sbf) = &_IO_str_jumps;
+      INTUSE(_IO_str_init_static) (&f, dest,
                                   (s + maxsize) - dest, dest);
       /* We clear the last available byte so we can find out whether
         the numeric representation is too long.  */
@@ -537,7 +534,7 @@ __vstrfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format,
       info.extra = 1;          /* This means use values from LC_MONETARY.  */
 
       ptr = &fpnum;
-      done = __printf_fp ((FILE *) &f, &info, &ptr);
+      done = __printf_fp (&f._sbf._f, &info, &ptr);
       if (done < 0)
        return -1;
 
index bff4a3f..9425084 100644 (file)
 #include <bp-checks.h>
 #include <kernel-features.h>
 
+#ifndef __ASSUME_COMPLETE_READV_WRITEV
 static ssize_t __atomic_readv_replacement (int, __const struct iovec *,
                                           int) internal_function;
+#endif
 
 
 /* Not all versions of the kernel support the large number of records.  */
index 55e915d..8552856 100644 (file)
 #include <bp-checks.h>
 #include <kernel-features.h>
 
+#ifndef __ASSUME_COMPLETE_READV_WRITEV
 static ssize_t __atomic_writev_replacement (int, const struct iovec *,
                                            int) internal_function;
+#endif
 
 
 /* Not all versions of the kernel support the large number of records.  */