diff options
author | Ulrich Drepper <drepper@redhat.com> | 2003-07-31 19:26:38 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2003-07-31 19:26:38 +0000 |
commit | d347a4ab1de71417b6d3e01ee8ace7553fff40fb (patch) | |
tree | 06bf9ebb335f9ee3ed36d642b727057f11d64b6c /sysdeps | |
parent | 1b26e9a566ce4729c0ce692f9aee1933e85c6d58 (diff) | |
download | glibc-d347a4ab1de71417b6d3e01ee8ace7553fff40fb.tar.gz glibc-d347a4ab1de71417b6d3e01ee8ace7553fff40fb.tar.xz glibc-d347a4ab1de71417b6d3e01ee8ace7553fff40fb.zip |
Update.
2003-07-31 Jakub Jelinek <jakub@redhat.com> * dlfcn/dlerror.c (once): New. (dlerror): Call __libc_once. (_dlerror_run): Remove once. 2003-07-31 Jakub Jelinek <jakub@redhat.com> * sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h (struct sigcontext): Sync with 2.5.7 and 2.5.73 kernel changes. 2003-07-31 Jakub Jelinek <jakub@redhat.com> * dlfcn/eval.c (funcall): Add noinline attribute to shut up warnings. * elf/rtld.c (dl_main): Cast ElfW(Addr) arguments with %Zx/%Zd formats to size_t. * elf/dl-lookup.c (_dl_debug_bindings): Likewise. * elf/tst-tls6.c (do_test): Use %zd format for l_tls_modid. * elf/tst-tls8.c (do_test): Use %zd format for modid1 and modid2. * gmon/tst-sprofil.c (main): Add parens to shut up warning. * iconv/tst-iconv3.c (main): Use %td instead of %zd for pointer difference argument. * stdio-common/tst-wc-printf.c (main): Cast arguments with %C format to wint_t. * stdlib/tst-limits.c (main): For WORD_BIT and LONG_BIT, use %d format and cast expected value to int. * sysdeps/generic/libc-start.c (STATIC): Add __attribute__((always_inline) if LIBC_START_MAIN is already defined. * sysdeps/powerpc/fpu/w_sqrt.c (a_nan, a_inf): Change from uint32_t to ieee_float_shape_type. (__sqrt): Avoid type punning. * sysdeps/powerpc/fpu/w_sqrtf.c (a_nan, a_inf): Change from uint32_t to ieee_float_shape_type. (__sqrtf): Avoid type punning. * sysdeps/s390/s390-32/dl-machine.h (elf_machine_rela): Don't define refsym if in dl-conflict.c. * sysdeps/s390/s390-64/dl-machine.h (elf_machine_rela): Likewise. * sysdeps/unix/sysv/linux/i386/semctl.c (union semun): Add __old_buf. (__new_semctl): Shut up warning. * sysdeps/unix/sysv/linux/semctl.c (union semun): Add __old_buf. (__new_semctl): Shut up warning. * sysdeps/unix/sysv/linux/shmctl.c (__new_shmctl): Wrap long lines. Change old into union of __old_shmid_ds and __old_shminfo structs. Adjust all users. * wcsmbs/wcsmbs-tst1.c (main): Cast arguments with %C format to wint_t. 2003-07-31 Jakub Jelinek <jakub@redhat.com> * sysdeps/unix/sysv/linux/utimes.c (__utimes): Fix actime and modtime computation. * sysdeps/unix/sysv/linux/futimes.c (__futimes): Likewise. * sysdeps/posix/utimes.c (__utimes): Likewise.
Diffstat (limited to 'sysdeps')
-rw-r--r-- | sysdeps/generic/libc-start.c | 2 | ||||
-rw-r--r-- | sysdeps/posix/utimes.c | 6 | ||||
-rw-r--r-- | sysdeps/powerpc/fpu/w_sqrt.c | 8 | ||||
-rw-r--r-- | sysdeps/powerpc/fpu/w_sqrtf.c | 10 | ||||
-rw-r--r-- | sysdeps/s390/s390-32/dl-machine.h | 2 | ||||
-rw-r--r-- | sysdeps/s390/s390-64/dl-machine.h | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/futimes.c | 6 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/i386/semctl.c | 5 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h | 4 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/semctl.c | 5 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/shmctl.c | 69 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/utimes.c | 4 |
12 files changed, 69 insertions, 54 deletions
diff --git a/sysdeps/generic/libc-start.c b/sysdeps/generic/libc-start.c index 04dae1d9f3..e297b0a424 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 ee945b0715..21da94751b 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 7347e61760..ff0331725c 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 20fbebc06e..8eb94d8e3b 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 5c60a355f3..3b3d5bf36e 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 b40c7c341d..0e98226ad9 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 e7ca99b077..f43f568ec1 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 8d41d7fff1..84edf052b0 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 d67576f242..74c60e024d 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 a3d9e588a0..07b1e6b4fa 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 ad64075b44..2bd92469c1 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 6e08c95397..e4798ce83c 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; |