mirror of
https://sourceware.org/git/glibc.git
synced 2025-01-03 00:10:10 +00:00
* sysdeps/unix/sysv/linux/libc_pthread_init.c (__libc_pthread_init):
Avoid warning by using may_alias attribute on ptrhack.
This commit is contained in:
parent
4ec77f72fe
commit
f521be31b9
52
gmon/gmon.c
52
gmon/gmon.c
@ -40,6 +40,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <stddef.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <libc-internal.h>
|
#include <libc-internal.h>
|
||||||
#include <not-cancel.h>
|
#include <not-cancel.h>
|
||||||
@ -180,10 +181,18 @@ write_hist (fd)
|
|||||||
int fd;
|
int fd;
|
||||||
{
|
{
|
||||||
u_char tag = GMON_TAG_TIME_HIST;
|
u_char tag = GMON_TAG_TIME_HIST;
|
||||||
struct gmon_hist_hdr thdr __attribute__ ((aligned (__alignof__ (char *))));
|
|
||||||
|
|
||||||
if (_gmonparam.kcountsize > 0)
|
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] =
|
struct iovec iov[3] =
|
||||||
{
|
{
|
||||||
{ &tag, sizeof (tag) },
|
{ &tag, sizeof (tag) },
|
||||||
@ -191,11 +200,25 @@ write_hist (fd)
|
|||||||
{ _gmonparam.kcount, _gmonparam.kcountsize }
|
{ _gmonparam.kcount, _gmonparam.kcountsize }
|
||||||
};
|
};
|
||||||
|
|
||||||
*(char **) thdr.low_pc = (char *) _gmonparam.lowpc;
|
if (sizeof (thdr) != sizeof (struct gmon_hist_hdr)
|
||||||
*(char **) thdr.high_pc = (char *) _gmonparam.highpc;
|
|| (offsetof (struct real_gmon_hist_hdr, low_pc)
|
||||||
*(int32_t *) thdr.hist_size = (_gmonparam.kcountsize
|
!= offsetof (struct gmon_hist_hdr, low_pc))
|
||||||
/ sizeof (HISTCOUNTER));
|
|| (offsetof (struct real_gmon_hist_hdr, high_pc)
|
||||||
*(int32_t *) thdr.prof_rate = __profile_frequency ();
|
!= 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));
|
strncpy (thdr.dimen, "seconds", sizeof (thdr.dimen));
|
||||||
thdr.dimen_abbrev = 's';
|
thdr.dimen_abbrev = 's';
|
||||||
|
|
||||||
@ -318,7 +341,6 @@ write_bb_counts (fd)
|
|||||||
static void
|
static void
|
||||||
write_gmon (void)
|
write_gmon (void)
|
||||||
{
|
{
|
||||||
struct gmon_hdr ghdr __attribute__ ((aligned (__alignof__ (int))));
|
|
||||||
int fd = -1;
|
int fd = -1;
|
||||||
char *env;
|
char *env;
|
||||||
|
|
||||||
@ -350,9 +372,21 @@ write_gmon (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* write gmon.out header: */
|
/* 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));
|
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_not_cancel (fd, &ghdr, sizeof (struct gmon_hdr));
|
||||||
|
|
||||||
/* write PC histogram: */
|
/* write PC histogram: */
|
||||||
|
@ -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.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
|
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. */
|
/* Too long. */
|
||||||
return NULL;
|
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;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -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.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
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;
|
sf._sbf._f._lock = NULL;
|
||||||
#endif
|
#endif
|
||||||
_IO_no_init (&sf._sbf._f, _IO_USER_LOCK, -1, NULL, NULL);
|
_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);
|
_IO_str_init_static_internal (&sf, string, -1, string);
|
||||||
ret = INTUSE(_IO_vfprintf) ((_IO_FILE *) &sf._sbf, format, args);
|
ret = INTUSE(_IO_vfprintf) (&sf._sbf._f, format, args);
|
||||||
_IO_putc_unlocked ('\0', (_IO_FILE *) &sf._sbf);
|
_IO_putc_unlocked ('\0', &sf._sbf._f);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
INTDEF2(__IO_vsprintf, _IO_vsprintf)
|
INTDEF2(__IO_vsprintf, _IO_vsprintf)
|
||||||
|
@ -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.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
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;
|
sf._sbf._f._lock = NULL;
|
||||||
#endif
|
#endif
|
||||||
_IO_no_init (&sf._sbf._f, _IO_USER_LOCK, -1, NULL, NULL);
|
_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);
|
_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;
|
return ret;
|
||||||
}
|
}
|
||||||
ldbl_weak_alias (_IO_vsscanf, __vsscanf)
|
ldbl_weak_alias (_IO_vsscanf, __vsscanf)
|
||||||
|
@ -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.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
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_streambuf
|
||||||
{
|
{
|
||||||
struct _IO_FILE _f;
|
struct _IO_FILE _f;
|
||||||
const void *_vtable;
|
const struct _IO_jump_t *vtable;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct _IO_strfile_
|
typedef struct _IO_strfile_
|
||||||
|
@ -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.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
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
|
#ifdef _IO_MTSAFE_IO
|
||||||
sf._sbf._f._lock = NULL;
|
sf._sbf._f._lock = NULL;
|
||||||
#endif
|
#endif
|
||||||
_IO_no_init ((_IO_FILE *) &sf._sbf, _IO_USER_LOCK, -1, NULL, NULL);
|
_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, init_string_size, string);
|
_IO_str_init_static_internal (&sf, string, init_string_size, string);
|
||||||
sf._sbf._f._flags &= ~_IO_USER_BUF;
|
sf._sbf._f._flags &= ~_IO_USER_BUF;
|
||||||
sf._s._allocate_buffer = (_IO_alloc_type) malloc;
|
sf._s._allocate_buffer = (_IO_alloc_type) malloc;
|
||||||
|
@ -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.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
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_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';
|
string[0] = '\0';
|
||||||
_IO_str_init_static_internal (&sf.f, string, maxlen - 1, string);
|
_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)
|
if (sf.f._sbf._f._IO_buf_base != sf.overflow_buf)
|
||||||
*sf.f._sbf._f._IO_write_ptr = '\0';
|
*sf.f._sbf._f._IO_write_ptr = '\0';
|
||||||
|
@ -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>
|
2009-04-22 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
[BZ #10090]
|
[BZ #10090]
|
||||||
|
@ -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.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||||
|
|
||||||
@ -56,10 +56,10 @@ __libc_pthread_init (ptr, reclaim, functions)
|
|||||||
union ptrhack
|
union ptrhack
|
||||||
{
|
{
|
||||||
struct pthread_functions pf;
|
struct pthread_functions pf;
|
||||||
void *parr[1];
|
|
||||||
} const *src;
|
|
||||||
union ptrhack *dest;
|
|
||||||
# define NPTRS (sizeof (struct pthread_functions) / sizeof (void *))
|
# define NPTRS (sizeof (struct pthread_functions) / sizeof (void *))
|
||||||
|
void *parr[NPTRS];
|
||||||
|
} __attribute__ ((may_alias)) const *src;
|
||||||
|
union ptrhack *dest;
|
||||||
|
|
||||||
src = (const void *) functions;
|
src = (const void *) functions;
|
||||||
dest = (void *) &__libc_pthread_functions;
|
dest = (void *) &__libc_pthread_functions;
|
||||||
|
@ -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.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
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;
|
sf._sbf._f._lock = NULL;
|
||||||
#endif
|
#endif
|
||||||
_IO_no_init (&sf._sbf._f, _IO_USER_LOCK, -1, NULL, NULL);
|
_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);
|
_IO_str_init_static_internal (&sf, (char*)string, 0, NULL);
|
||||||
sf._sbf._f._flags2 |= _IO_FLAGS2_SCANF_STD;
|
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;
|
return ret;
|
||||||
}
|
}
|
||||||
libc_hidden_def (__isoc99_vsscanf)
|
libc_hidden_def (__isoc99_vsscanf)
|
||||||
|
@ -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];
|
struct locale_data *current = loc->__locales[LC_MONETARY];
|
||||||
_IO_strfile f;
|
_IO_strfile f;
|
||||||
#ifdef _IO_MTSAFE_IO
|
|
||||||
_IO_lock_t lock;
|
|
||||||
#endif
|
|
||||||
struct printf_info info;
|
struct printf_info info;
|
||||||
char *dest; /* Pointer so copy the output. */
|
char *dest; /* Pointer so copy the output. */
|
||||||
const char *fmt; /* Pointer that walks through format. */
|
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. */
|
/* Print the number. */
|
||||||
#ifdef _IO_MTSAFE_IO
|
#ifdef _IO_MTSAFE_IO
|
||||||
f._sbf._f._lock = &lock;
|
f._sbf._f._lock = NULL;
|
||||||
#endif
|
#endif
|
||||||
INTUSE(_IO_init) ((_IO_FILE *) &f, 0);
|
INTUSE(_IO_init) (&f._sbf._f, 0);
|
||||||
_IO_JUMPS ((struct _IO_FILE_plus *) &f) = &_IO_str_jumps;
|
_IO_JUMPS (&f._sbf) = &_IO_str_jumps;
|
||||||
INTUSE(_IO_str_init_static) ((_IO_strfile *) &f, dest,
|
INTUSE(_IO_str_init_static) (&f, dest,
|
||||||
(s + maxsize) - dest, dest);
|
(s + maxsize) - dest, dest);
|
||||||
/* We clear the last available byte so we can find out whether
|
/* We clear the last available byte so we can find out whether
|
||||||
the numeric representation is too long. */
|
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. */
|
info.extra = 1; /* This means use values from LC_MONETARY. */
|
||||||
|
|
||||||
ptr = &fpnum;
|
ptr = &fpnum;
|
||||||
done = __printf_fp ((FILE *) &f, &info, &ptr);
|
done = __printf_fp (&f._sbf._f, &info, &ptr);
|
||||||
if (done < 0)
|
if (done < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
@ -27,8 +27,10 @@
|
|||||||
#include <bp-checks.h>
|
#include <bp-checks.h>
|
||||||
#include <kernel-features.h>
|
#include <kernel-features.h>
|
||||||
|
|
||||||
|
#ifndef __ASSUME_COMPLETE_READV_WRITEV
|
||||||
static ssize_t __atomic_readv_replacement (int, __const struct iovec *,
|
static ssize_t __atomic_readv_replacement (int, __const struct iovec *,
|
||||||
int) internal_function;
|
int) internal_function;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Not all versions of the kernel support the large number of records. */
|
/* Not all versions of the kernel support the large number of records. */
|
||||||
|
@ -27,8 +27,10 @@
|
|||||||
#include <bp-checks.h>
|
#include <bp-checks.h>
|
||||||
#include <kernel-features.h>
|
#include <kernel-features.h>
|
||||||
|
|
||||||
|
#ifndef __ASSUME_COMPLETE_READV_WRITEV
|
||||||
static ssize_t __atomic_writev_replacement (int, const struct iovec *,
|
static ssize_t __atomic_writev_replacement (int, const struct iovec *,
|
||||||
int) internal_function;
|
int) internal_function;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Not all versions of the kernel support the large number of records. */
|
/* Not all versions of the kernel support the large number of records. */
|
||||||
|
Loading…
Reference in New Issue
Block a user