aboutsummaryrefslogtreecommitdiff
path: root/sysdeps
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/generic/libc-start.c2
-rw-r--r--sysdeps/posix/utimes.c6
-rw-r--r--sysdeps/powerpc/fpu/w_sqrt.c8
-rw-r--r--sysdeps/powerpc/fpu/w_sqrtf.c10
-rw-r--r--sysdeps/s390/s390-32/dl-machine.h2
-rw-r--r--sysdeps/s390/s390-64/dl-machine.h2
-rw-r--r--sysdeps/unix/sysv/linux/futimes.c6
-rw-r--r--sysdeps/unix/sysv/linux/i386/semctl.c5
-rw-r--r--sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h4
-rw-r--r--sysdeps/unix/sysv/linux/semctl.c5
-rw-r--r--sysdeps/unix/sysv/linux/shmctl.c69
-rw-r--r--sysdeps/unix/sysv/linux/utimes.c4
12 files changed, 69 insertions, 54 deletions
diff --git a/sysdeps/generic/libc-start.c b/sysdeps/generic/libc-start.c
index 04dae1d..e297b0a 100644
--- a/sysdeps/generic/libc-start.c
+++ b/sysdeps/generic/libc-start.c
@@ -45,7 +45,7 @@ extern void __pthread_initialize_minimal (void)
#ifdef LIBC_START_MAIN
-# define STATIC static inline
+# define STATIC static inline __attribute__ ((always_inline))
#else
# define STATIC
# define LIBC_START_MAIN BP_SYM (__libc_start_main)
diff --git a/sysdeps/posix/utimes.c b/sysdeps/posix/utimes.c
index ee945b0..21da947 100644
--- a/sysdeps/posix/utimes.c
+++ b/sysdeps/posix/utimes.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995, 1997, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 1997, 2000, 2003 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
@@ -31,8 +31,8 @@ __utimes (const char *file, const struct timeval tvp[2])
if (tvp)
{
times = &buf;
- times->actime = tvp[0].tv_sec + tvp[0].tv_usec / 1000000;
- times->modtime = tvp[1].tv_sec + tvp[1].tv_usec / 1000000;
+ buf.actime = tvp[0].tv_sec + (tvp[0].tv_usec + 500000) / 1000000;
+ buf.modtime = tvp[1].tv_sec + (tvp[1].tv_usec + 500000) / 1000000;
}
else
times = NULL;
diff --git a/sysdeps/powerpc/fpu/w_sqrt.c b/sysdeps/powerpc/fpu/w_sqrt.c
index 7347e61..ff03317 100644
--- a/sysdeps/powerpc/fpu/w_sqrt.c
+++ b/sysdeps/powerpc/fpu/w_sqrt.c
@@ -23,8 +23,8 @@
#include <inttypes.h>
static const double almost_half = 0.5000000000000001; /* 0.5 + 2^-53 */
-static const uint32_t a_nan = 0x7fc00000;
-static const uint32_t a_inf = 0x7f800000;
+static const ieee_float_shape_type a_nan = { .word = 0x7fc00000 };
+static const ieee_float_shape_type a_inf = { .word = 0x7f800000 };
static const float two108 = 3.245185536584267269e+32;
static const float twom54 = 5.551115123125782702e-17;
extern const float __t_sqrt[1024];
@@ -45,7 +45,7 @@ extern const float __t_sqrt[1024];
double
__sqrt(double x)
{
- const float inf = *(const float *)&a_inf;
+ const float inf = a_inf.value;
/* x = f_wash(x); *//* This ensures only one exception for SNaN. */
if (x > 0)
{
@@ -130,7 +130,7 @@ __sqrt(double x)
x = __kernel_standard(x,x,26);
else
#endif
- x = *(const float*)&a_nan;
+ x = a_nan.value;
}
return f_wash(x);
}
diff --git a/sysdeps/powerpc/fpu/w_sqrtf.c b/sysdeps/powerpc/fpu/w_sqrtf.c
index 20fbebc..8eb94d8 100644
--- a/sysdeps/powerpc/fpu/w_sqrtf.c
+++ b/sysdeps/powerpc/fpu/w_sqrtf.c
@@ -1,5 +1,5 @@
/* Single-precision floating point square root.
- Copyright (C) 1997 Free Software Foundation, Inc.
+ Copyright (C) 1997, 2003 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
@@ -23,8 +23,8 @@
#include <inttypes.h>
static const float almost_half = 0.50000006; /* 0.5 + 2^-24 */
-static const uint32_t a_nan = 0x7fc00000;
-static const uint32_t a_inf = 0x7f800000;
+static const ieee_float_shape_type a_nan = { .word = 0x7fc00000 };
+static const ieee_float_shape_type a_inf = { .word = 0x7f800000 };
static const float two48 = 281474976710656.0;
static const float twom24 = 5.9604644775390625e-8;
extern const float __t_sqrt[1024];
@@ -45,7 +45,7 @@ extern const float __t_sqrt[1024];
float
__sqrtf(float x)
{
- const float inf = *(const float *)&a_inf;
+ const float inf = a_inf.value;
/* x = f_washf(x); *//* This ensures only one exception for SNaN. */
if (x > 0)
{
@@ -125,7 +125,7 @@ __sqrtf(float x)
x = __kernel_standard(x,x,126);
else
#endif
- x = *(const float*)&a_nan;
+ x = a_nan.value;
}
return f_washf(x);
}
diff --git a/sysdeps/s390/s390-32/dl-machine.h b/sysdeps/s390/s390-32/dl-machine.h
index 5c60a35..3b3d5bf 100644
--- a/sysdeps/s390/s390-32/dl-machine.h
+++ b/sysdeps/s390/s390-32/dl-machine.h
@@ -405,7 +405,9 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
return;
else
{
+#ifndef RESOLVE_CONFLICT_FIND_MAP
const Elf32_Sym *const refsym = sym;
+#endif
#if defined USE_TLS && !defined RTLD_BOOTSTRAP
struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type);
Elf32_Addr value = sym == NULL ? 0 : sym_map->l_addr + sym->st_value;
diff --git a/sysdeps/s390/s390-64/dl-machine.h b/sysdeps/s390/s390-64/dl-machine.h
index b40c7c3..0e98226 100644
--- a/sysdeps/s390/s390-64/dl-machine.h
+++ b/sysdeps/s390/s390-64/dl-machine.h
@@ -373,7 +373,9 @@ elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc,
return;
else
{
+#ifndef RESOLVE_CONFLICT_FIND_MAP
const Elf64_Sym *const refsym = sym;
+#endif
#if defined USE_TLS && !defined RTLD_BOOTSTRAP
struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type);
Elf64_Addr value = sym == NULL ? 0 : sym_map->l_addr + sym->st_value;
diff --git a/sysdeps/unix/sysv/linux/futimes.c b/sysdeps/unix/sysv/linux/futimes.c
index e7ca99b..f43f568 100644
--- a/sysdeps/unix/sysv/linux/futimes.c
+++ b/sysdeps/unix/sysv/linux/futimes.c
@@ -1,4 +1,4 @@
-/* futimes -- change access and modification times of open file. Stub version.
+/* futimes -- change access and modification times of open file. Linux version.
Copyright (C) 2002, 2003 Free Software Foundation, Inc.
This file is part of the GNU C Library.
@@ -58,8 +58,8 @@ __futimes (int fd, const struct timeval tvp[2])
if (tvp != NULL)
{
times = &buf;
- buf.actime = tvp[0].tv_sec + tvp[0].tv_usec >= 500000;
- buf.modtime = tvp[1].tv_sec + tvp[1].tv_usec >= 500000;
+ buf.actime = tvp[0].tv_sec + (tvp[0].tv_usec + 500000) / 1000000;
+ buf.modtime = tvp[1].tv_sec + (tvp[1].tv_usec + 500000) / 1000000;
}
else
times = NULL;
diff --git a/sysdeps/unix/sysv/linux/i386/semctl.c b/sysdeps/unix/sysv/linux/i386/semctl.c
index 8d41d7f..84edf05 100644
--- a/sysdeps/unix/sysv/linux/i386/semctl.c
+++ b/sysdeps/unix/sysv/linux/i386/semctl.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995, 1997, 1998, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 1997, 1998, 2000, 2003 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
@@ -48,6 +48,7 @@ union semun
struct semid_ds *buf; /* buffer for IPC_STAT & IPC_SET */
unsigned short int *array; /* array for GETALL & SETALL */
struct seminfo *__buf; /* buffer for IPC_INFO */
+ struct __old_semid_ds *__old_buf;
};
#include <bp-checks.h>
@@ -145,7 +146,7 @@ __new_semctl (int semid, int semnum, int cmd, ...)
#endif
buf = arg.buf;
- arg.buf = (struct semid_ds *)&old;
+ arg.__old_buf = &old;
if (cmd == IPC_SET)
{
old.sem_perm.uid = buf->sem_perm.uid;
diff --git a/sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h b/sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h
index d67576f..74c60e0 100644
--- a/sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h
+++ b/sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h
@@ -50,7 +50,9 @@ struct sigcontext
struct ia64_fpreg sc_fr[128]; /* floating-point registers */
unsigned long int sc_rbs_base;/* NULL or new base of sighandler's rbs */
unsigned long int sc_loadrs; /* see description above */
- unsigned long int sc_rsvd[14];/* reserved for future use */
+ unsigned long int sc_ar25; /* cmp8xchg16 uses this */
+ unsigned long int sc_ar26; /* rsvd for scratch use */
+ unsigned long int sc_rsvd[12];/* reserved for future use */
/* sc_mask is actually an sigset_t but we don't want to
* include the kernel headers here. */
diff --git a/sysdeps/unix/sysv/linux/semctl.c b/sysdeps/unix/sysv/linux/semctl.c
index a3d9e58..07b1e6b 100644
--- a/sysdeps/unix/sysv/linux/semctl.c
+++ b/sysdeps/unix/sysv/linux/semctl.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995, 1997, 1998, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 1997, 1998, 2000, 2003 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
@@ -48,6 +48,7 @@ union semun
struct semid_ds *buf; /* buffer for IPC_STAT & IPC_SET */
unsigned short int *array; /* array for GETALL & SETALL */
struct seminfo *__buf; /* buffer for IPC_INFO */
+ struct __old_semid_ds *__old_buf;
};
#include <bp-checks.h>
@@ -152,7 +153,7 @@ __new_semctl (int semid, int semnum, int cmd, ...)
__set_errno(save_errno);
buf = arg.buf;
- arg.buf = (struct semid_ds *)&old;
+ arg.__old_buf = &old;
if (cmd == IPC_SET)
{
old.sem_perm.uid = buf->sem_perm.uid;
diff --git a/sysdeps/unix/sysv/linux/shmctl.c b/sysdeps/unix/sysv/linux/shmctl.c
index ad64075..2bd9246 100644
--- a/sysdeps/unix/sysv/linux/shmctl.c
+++ b/sysdeps/unix/sysv/linux/shmctl.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995, 1997, 1998, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 1997, 1998, 2000, 2003 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
@@ -74,7 +74,8 @@ int
__new_shmctl (int shmid, int cmd, struct shmid_ds *buf)
{
#if __ASSUME_IPC64 > 0
- return INLINE_SYSCALL (ipc, 5, IPCOP_shmctl, shmid, cmd | __IPC_64, 0, CHECK_1 (buf));
+ return INLINE_SYSCALL (ipc, 5, IPCOP_shmctl, shmid, cmd | __IPC_64, 0,
+ CHECK_1 (buf));
#else
switch (cmd) {
case SHM_STAT:
@@ -85,63 +86,69 @@ __new_shmctl (int shmid, int cmd, struct shmid_ds *buf)
#endif
break;
default:
- return INLINE_SYSCALL (ipc, 5, IPCOP_shmctl, shmid, cmd, 0, CHECK_1 (buf));
+ return INLINE_SYSCALL (ipc, 5, IPCOP_shmctl, shmid, cmd, 0,
+ CHECK_1 (buf));
}
{
int save_errno = errno, result;
- struct __old_shmid_ds old;
+ union
+ {
+ struct __old_shmid_ds ds;
+ struct __old_shminfo info;
+ } old;
/* Unfortunately there is no way how to find out for sure whether
we should use old or new shmctl. */
- result = INLINE_SYSCALL (ipc, 5, IPCOP_shmctl, shmid, cmd | __IPC_64, 0, CHECK_1 (buf));
+ result = INLINE_SYSCALL (ipc, 5, IPCOP_shmctl, shmid, cmd | __IPC_64, 0,
+ CHECK_1 (buf));
if (result != -1 || errno != EINVAL)
return result;
__set_errno(save_errno);
if (cmd == IPC_SET)
{
- old.shm_perm.uid = buf->shm_perm.uid;
- old.shm_perm.gid = buf->shm_perm.gid;
- old.shm_perm.mode = buf->shm_perm.mode;
- if (old.shm_perm.uid != buf->shm_perm.uid ||
- old.shm_perm.gid != buf->shm_perm.gid)
+ old.ds.shm_perm.uid = buf->shm_perm.uid;
+ old.ds.shm_perm.gid = buf->shm_perm.gid;
+ old.ds.shm_perm.mode = buf->shm_perm.mode;
+ if (old.ds.shm_perm.uid != buf->shm_perm.uid ||
+ old.ds.shm_perm.gid != buf->shm_perm.gid)
{
__set_errno (EINVAL);
return -1;
}
}
- result = INLINE_SYSCALL (ipc, 5, IPCOP_shmctl, shmid, cmd, 0, __ptrvalue (&old));
+ result = INLINE_SYSCALL (ipc, 5, IPCOP_shmctl, shmid, cmd, 0,
+ __ptrvalue (&old.ds));
if (result != -1 && (cmd == SHM_STAT || cmd == IPC_STAT))
{
memset(buf, 0, sizeof(*buf));
- buf->shm_perm.__key = old.shm_perm.__key;
- buf->shm_perm.uid = old.shm_perm.uid;
- buf->shm_perm.gid = old.shm_perm.gid;
- buf->shm_perm.cuid = old.shm_perm.cuid;
- buf->shm_perm.cgid = old.shm_perm.cgid;
- buf->shm_perm.mode = old.shm_perm.mode;
- buf->shm_perm.__seq = old.shm_perm.__seq;
- buf->shm_atime = old.shm_atime;
- buf->shm_dtime = old.shm_dtime;
- buf->shm_ctime = old.shm_ctime;
- buf->shm_segsz = old.shm_segsz;
- buf->shm_nattch = old.shm_nattch;
- buf->shm_cpid = old.shm_cpid;
- buf->shm_lpid = old.shm_lpid;
+ buf->shm_perm.__key = old.ds.shm_perm.__key;
+ buf->shm_perm.uid = old.ds.shm_perm.uid;
+ buf->shm_perm.gid = old.ds.shm_perm.gid;
+ buf->shm_perm.cuid = old.ds.shm_perm.cuid;
+ buf->shm_perm.cgid = old.ds.shm_perm.cgid;
+ buf->shm_perm.mode = old.ds.shm_perm.mode;
+ buf->shm_perm.__seq = old.ds.shm_perm.__seq;
+ buf->shm_atime = old.ds.shm_atime;
+ buf->shm_dtime = old.ds.shm_dtime;
+ buf->shm_ctime = old.ds.shm_ctime;
+ buf->shm_segsz = old.ds.shm_segsz;
+ buf->shm_nattch = old.ds.shm_nattch;
+ buf->shm_cpid = old.ds.shm_cpid;
+ buf->shm_lpid = old.ds.shm_lpid;
}
#if __WORDSIZE != 32
else if (result != -1 && cmd == IPC_INFO)
{
- struct __old_shminfo *oldi = (struct __old_shminfo *)&old;
struct shminfo *i = (struct shminfo *)buf;
memset(i, 0, sizeof(*i));
- i->shmmax = oldi->shmmax;
- i->shmmin = oldi->shmmin;
- i->shmmni = oldi->shmmni;
- i->shmseg = oldi->shmseg;
- i->shmall = oldi->shmall;
+ i->shmmax = old.info.shmmax;
+ i->shmmin = old.info.shmmin;
+ i->shmmni = old.info.shmmni;
+ i->shmseg = old.info.shmseg;
+ i->shmall = old.info.shmall;
}
#endif
return result;
diff --git a/sysdeps/unix/sysv/linux/utimes.c b/sysdeps/unix/sysv/linux/utimes.c
index 6e08c95..e4798ce 100644
--- a/sysdeps/unix/sysv/linux/utimes.c
+++ b/sysdeps/unix/sysv/linux/utimes.c
@@ -47,8 +47,8 @@ __utimes (const char *file, const struct timeval tvp[2])
if (tvp != NULL)
{
times = &buf;
- buf.actime = tvp[0].tv_sec + tvp[0].tv_usec >= 500000;
- buf.modtime = tvp[1].tv_sec + tvp[1].tv_usec >= 500000;
+ buf.actime = tvp[0].tv_sec + (tvp[0].tv_usec + 500000) / 1000000;
+ buf.modtime = tvp[1].tv_sec + (tvp[1].tv_usec + 500000) / 1000000;
}
else
times = NULL;