* sysdeps/unix/sysv/linux/x86_64/register-dump.h (register_dump):
	Fix completely broken impleentation.  The second parameter is of
	type struct ucontext*.

	* sysdeps/x86_64/dl-machine.h (elf_machine_runtime_setup): Always
	inline.

	* sysdeps/i386/i686/dl-hash.h: Don't inline _dl_elf_hash.
	* sysdeps/generic/dl-hash.h: Likewise.

	* sysdeps/generic/memcmp.c: Remove inline from
	memcmp_common_alignment and memcmp_not_common_alignment definition.
This commit is contained in:
Ulrich Drepper 2003-06-18 19:34:34 +00:00
parent f6c93bd9c8
commit 50441a984d
11 changed files with 140 additions and 102 deletions

View file

@ -1,5 +1,18 @@
2003-06-18 Ulrich Drepper <drepper@redhat.com>
* sysdeps/unix/sysv/linux/x86_64/register-dump.h (register_dump):
Fix completely broken impleentation. The second parameter is of
type struct ucontext*.
* sysdeps/x86_64/dl-machine.h (elf_machine_runtime_setup): Always
inline.
* sysdeps/i386/i686/dl-hash.h: Don't inline _dl_elf_hash.
* sysdeps/generic/dl-hash.h: Likewise.
* sysdeps/generic/memcmp.c: Remove inline from
memcmp_common_alignment and memcmp_not_common_alignment definition.
* intl/localealias.c (read_alias_file): Determine whether line is
read incompletely early, before we modify the line.

View file

@ -1,5 +1,14 @@
2003-06-18 Ulrich Drepper <drepper@redhat.com>
* sysdeps/unix/sysv/linux/timer_settime.c: Add prototype for
compat_timer_settime.
* sysdeps/unix/sysv/linux/timer_gettime.c: Add prototype for
compat_timer_gettime.
* sysdeps/unix/sysv/linux/timer_getoverr.c: Add prototype for
compat_timer_getoverrun.o
* sysdeps/unix/sysv/linux/timer_delete.c: Add prototype for
compat_timer_delete.
* pthread_mutex_destroy.c (__pthread_mutex_destroy): For
error-checking mutex detect busy mutexes.

View file

@ -27,6 +27,7 @@
#ifdef __NR_timer_delete
# ifndef __ASSUME_POSIX_TIMERS
static int compat_timer_delete (timer_t timerid);
# define timer_delete static compat_timer_delete
# include <nptl/sysdeps/pthread/timer_delete.c>
# undef timer_delete

View file

@ -26,6 +26,7 @@
#ifdef __NR_timer_getoverrun
# ifndef __ASSUME_POSIX_TIMERS
static int compat_timer_getoverrun (timer_t timerid);
# define timer_getoverrun static compat_timer_getoverrun
# include <nptl/sysdeps/pthread/timer_getoverr.c>
# undef timer_getoverrun

View file

@ -27,6 +27,7 @@
#ifdef __NR_timer_gettime
# ifndef __ASSUME_POSIX_TIMERS
static int compat_timer_gettime (timer_t timerid, struct itimerspec *value);
# define timer_gettime static compat_timer_gettime
# include <nptl/sysdeps/pthread/timer_gettime.c>
# undef timer_gettime

View file

@ -27,6 +27,9 @@
#ifdef __NR_timer_settime
# ifndef __ASSUME_POSIX_TIMERS
static int compat_timer_settime (timer_t timerid, int flags,
const struct itimerspec *value,
struct itimerspec *ovalue);
# define timer_settime static compat_timer_settime
# include <nptl/sysdeps/pthread/timer_settime.c>
# undef timer_settime

View file

@ -1,5 +1,5 @@
/* Compute hash value for given string according to ELF standard.
Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
Copyright (C) 1995, 1996, 1997, 1998, 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
@ -24,7 +24,7 @@
/* This is the hashing function specified by the ELF ABI. In the
first five operations no overflow is possible so we optimized it a
bit. */
static inline unsigned int
static unsigned int
_dl_elf_hash (const unsigned char *name)
{
unsigned long int hash = 0;

View file

@ -1,4 +1,4 @@
/* Copyright (C) 1991, 1993, 1995, 1997, 1998 Free Software Foundation, Inc.
/* Copyright (C) 1991,1993,1995,1997,1998,2003 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Torbjorn Granlund (tege@sics.se).
@ -131,9 +131,6 @@ static int memcmp_common_alignment __P((long, long, size_t));
/* memcmp_common_alignment -- Compare blocks at SRCP1 and SRCP2 with LEN `op_t'
objects (not LEN bytes!). Both SRCP1 and SRCP2 should be aligned for
memory operations on `op_t's. */
#ifdef __GNUC__
__inline
#endif
static int
memcmp_common_alignment (srcp1, srcp2, len)
long int srcp1;
@ -221,9 +218,6 @@ static int memcmp_not_common_alignment __P((long, long, size_t));
/* memcmp_not_common_alignment -- Compare blocks at SRCP1 and SRCP2 with LEN
`op_t' objects (not LEN bytes!). SRCP2 should be aligned for memory
operations on `op_t', but SRCP1 *should be unaligned*. */
#ifdef __GNUC__
__inline
#endif
static int
memcmp_not_common_alignment (srcp1, srcp2, len)
long int srcp1;

View file

@ -1,5 +1,5 @@
/* Compute hash alue for given string according to ELF standard.
Copyright (C) 1998 Free Software Foundation, Inc.
Copyright (C) 1998, 2003 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
@ -26,7 +26,7 @@
optimized for the PII processors. Though it will run on i586 it
would be much slower than the generic C implementation. So don't
use it. */
static inline unsigned int
static unsigned int
_dl_elf_hash (const unsigned char *name)
{
unsigned int result;
@ -71,10 +71,9 @@ _dl_elf_hash (const unsigned char *name)
"jnz 2b\n"
"1:\t"
: "=&r" (result), "=r" (name), "=&c" (temp0), "=&r" (temp1)
: "0" (0), "1" (name));
: "0" (0), "1" (name));
return result;
}
#endif /* dl-hash.h */

View file

@ -1,5 +1,5 @@
/* Dump registers.
Copyright (C) 2001, 2002 Free Software Foundation, Inc.
Copyright (C) 2001, 2002, 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
@ -65,7 +65,7 @@ hexvalue (unsigned long int value, char *buf, size_t len)
}
static void
register_dump (int fd, struct sigcontext *ctx)
register_dump (int fd, struct ucontext *ctx)
{
char regs[25][16];
char fpregs[30][8];
@ -84,33 +84,33 @@ register_dump (int fd, struct sigcontext *ctx)
++nr
/* Generate strings of register contents. */
hexvalue (ctx->rax, regs[0], 16);
hexvalue (ctx->rbx, regs[1], 16);
hexvalue (ctx->rcx, regs[2], 16);
hexvalue (ctx->rdx, regs[3], 16);
hexvalue (ctx->rsi, regs[4], 16);
hexvalue (ctx->rdi, regs[5], 16);
hexvalue (ctx->rbp, regs[6], 16);
hexvalue (ctx->r8, regs[7], 16);
hexvalue (ctx->r9, regs[8], 16);
hexvalue (ctx->r10, regs[9], 16);
hexvalue (ctx->r11, regs[10], 16);
hexvalue (ctx->r12, regs[11], 16);
hexvalue (ctx->r13, regs[12], 16);
hexvalue (ctx->r14, regs[13], 16);
hexvalue (ctx->r15, regs[14], 16);
hexvalue (ctx->rsp, regs[15], 16);
hexvalue (ctx->rip, regs[16], 16);
hexvalue (ctx->uc_mcontext.gregs[REG_RAX], regs[0], 16);
hexvalue (ctx->uc_mcontext.gregs[REG_RBX], regs[1], 16);
hexvalue (ctx->uc_mcontext.gregs[REG_RCX], regs[2], 16);
hexvalue (ctx->uc_mcontext.gregs[REG_RDX], regs[3], 16);
hexvalue (ctx->uc_mcontext.gregs[REG_RSI], regs[4], 16);
hexvalue (ctx->uc_mcontext.gregs[REG_RDI], regs[5], 16);
hexvalue (ctx->uc_mcontext.gregs[REG_RBP], regs[6], 16);
hexvalue (ctx->uc_mcontext.gregs[REG_R8], regs[7], 16);
hexvalue (ctx->uc_mcontext.gregs[REG_R9], regs[8], 16);
hexvalue (ctx->uc_mcontext.gregs[REG_R10], regs[9], 16);
hexvalue (ctx->uc_mcontext.gregs[REG_R11], regs[10], 16);
hexvalue (ctx->uc_mcontext.gregs[REG_R12], regs[11], 16);
hexvalue (ctx->uc_mcontext.gregs[REG_R13], regs[12], 16);
hexvalue (ctx->uc_mcontext.gregs[REG_R14], regs[13], 16);
hexvalue (ctx->uc_mcontext.gregs[REG_R15], regs[14], 16);
hexvalue (ctx->uc_mcontext.gregs[REG_RSP], regs[15], 16);
hexvalue (ctx->uc_mcontext.gregs[REG_RIP], regs[16], 16);
hexvalue (ctx->eflags, regs[17], 8);
hexvalue (ctx->cs, regs[18], 4);
hexvalue (ctx->fs, regs[19], 4);
hexvalue (ctx->gs, regs[20], 4);
hexvalue (ctx->uc_mcontext.gregs[REG_EFL], regs[17], 8);
hexvalue (ctx->uc_mcontext.gregs[REG_CSGSFS] & 0xffff, regs[18], 4);
hexvalue ((ctx->uc_mcontext.gregs[REG_CSGSFS] >> 16) & 0xffff, regs[19], 4);
hexvalue ((ctx->uc_mcontext.gregs[REG_CSGSFS] >> 32) & 0xffff, regs[20], 4);
/* hexvalue (ctx->ss, regs[23], 4); */
hexvalue (ctx->trapno, regs[21], 8);
hexvalue (ctx->err, regs[22], 8);
hexvalue (ctx->oldmask, regs[23], 8);
hexvalue (ctx->cr2, regs[24], 8);
hexvalue (ctx->uc_mcontext.gregs[REG_TRAPNO], regs[21], 8);
hexvalue (ctx->uc_mcontext.gregs[REG_ERR], regs[22], 8);
hexvalue (ctx->uc_mcontext.gregs[REG_OLDMASK], regs[23], 8);
hexvalue (ctx->uc_mcontext.gregs[REG_CR2], regs[24], 8);
/* Generate the output. */
ADD_STRING ("Register dump:\n\n RAX: ");
@ -168,15 +168,15 @@ register_dump (int fd, struct sigcontext *ctx)
ADD_STRING (" CR2: ");
ADD_MEM (regs[24], 8);
if (ctx->fpstate != NULL)
if (ctx->uc_mcontext.fpregs != NULL)
{
/* Generate output for the FPU control/status registers. */
hexvalue (ctx->fpstate->cwd, fpregs[0], 8);
hexvalue (ctx->fpstate->swd, fpregs[1], 8);
hexvalue (ctx->fpstate->ftw, fpregs[2], 8);
hexvalue (ctx->fpstate->rip, fpregs[3], 8);
hexvalue (ctx->fpstate->rdp, fpregs[4], 8);
hexvalue (ctx->uc_mcontext.fpregs->cwd, fpregs[0], 8);
hexvalue (ctx->uc_mcontext.fpregs->swd, fpregs[1], 8);
hexvalue (ctx->uc_mcontext.fpregs->ftw, fpregs[2], 8);
hexvalue (ctx->uc_mcontext.fpregs->rip, fpregs[3], 8);
hexvalue (ctx->uc_mcontext.fpregs->rdp, fpregs[4], 8);
ADD_STRING ("\n\n FPUCW: ");
ADD_MEM (fpregs[0], 8);
@ -190,54 +190,71 @@ register_dump (int fd, struct sigcontext *ctx)
ADD_MEM (fpregs[4], 8);
/* Now the real FPU registers. */
hexvalue (ctx->fpstate->_st[0].exponent, fpregs[5], 8);
hexvalue (ctx->fpstate->_st[0].significand[3] << 16
| ctx->fpstate->_st[0].significand[2], fpregs[6], 8);
hexvalue (ctx->fpstate->_st[0].significand[1] << 16
| ctx->fpstate->_st[0].significand[0], fpregs[7], 8);
hexvalue (ctx->fpstate->_st[1].exponent, fpregs[8], 8);
hexvalue (ctx->fpstate->_st[1].significand[3] << 16
| ctx->fpstate->_st[1].significand[2], fpregs[9], 8);
hexvalue (ctx->fpstate->_st[1].significand[1] << 16
| ctx->fpstate->_st[1].significand[0], fpregs[10], 8);
hexvalue (ctx->fpstate->_st[2].exponent, fpregs[11], 8);
hexvalue (ctx->fpstate->_st[2].significand[3] << 16
| ctx->fpstate->_st[2].significand[2], fpregs[12], 8);
hexvalue (ctx->fpstate->_st[2].significand[1] << 16
| ctx->fpstate->_st[2].significand[0], fpregs[13], 8);
hexvalue (ctx->fpstate->_st[3].exponent, fpregs[14], 8);
hexvalue (ctx->fpstate->_st[3].significand[3] << 16
| ctx->fpstate->_st[3].significand[2], fpregs[15], 8);
hexvalue (ctx->fpstate->_st[3].significand[1] << 16
| ctx->fpstate->_st[3].significand[0], fpregs[16], 8);
hexvalue (ctx->fpstate->_st[4].exponent, fpregs[17], 8);
hexvalue (ctx->fpstate->_st[4].significand[3] << 16
| ctx->fpstate->_st[4].significand[2], fpregs[18], 8);
hexvalue (ctx->fpstate->_st[4].significand[1] << 16
| ctx->fpstate->_st[4].significand[0], fpregs[19], 8);
hexvalue (ctx->fpstate->_st[5].exponent, fpregs[20], 8);
hexvalue (ctx->fpstate->_st[5].significand[3] << 16
| ctx->fpstate->_st[5].significand[2], fpregs[21], 8);
hexvalue (ctx->fpstate->_st[5].significand[1] << 16
| ctx->fpstate->_st[5].significand[0], fpregs[22], 8);
hexvalue (ctx->fpstate->_st[6].exponent, fpregs[23], 8);
hexvalue (ctx->fpstate->_st[6].significand[3] << 16
| ctx->fpstate->_st[6].significand[2], fpregs[24], 8);
hexvalue (ctx->fpstate->_st[6].significand[1] << 16
| ctx->fpstate->_st[6].significand[0], fpregs[25], 8);
hexvalue (ctx->fpstate->_st[7].exponent, fpregs[26], 8);
hexvalue (ctx->fpstate->_st[7].significand[3] << 16
| ctx->fpstate->_st[7].significand[2], fpregs[27], 8);
hexvalue (ctx->fpstate->_st[7].significand[1] << 16
| ctx->fpstate->_st[7].significand[0], fpregs[28], 8);
hexvalue (ctx->uc_mcontext.fpregs->_st[0].exponent, fpregs[5], 8);
hexvalue (ctx->uc_mcontext.fpregs->_st[0].significand[3] << 16
| ctx->uc_mcontext.fpregs->_st[0].significand[2], fpregs[6],
8);
hexvalue (ctx->uc_mcontext.fpregs->_st[0].significand[1] << 16
| ctx->uc_mcontext.fpregs->_st[0].significand[0], fpregs[7],
8);
hexvalue (ctx->uc_mcontext.fpregs->_st[1].exponent, fpregs[8], 8);
hexvalue (ctx->uc_mcontext.fpregs->_st[1].significand[3] << 16
| ctx->uc_mcontext.fpregs->_st[1].significand[2], fpregs[9],
8);
hexvalue (ctx->uc_mcontext.fpregs->_st[1].significand[1] << 16
| ctx->uc_mcontext.fpregs->_st[1].significand[0], fpregs[10],
8);
hexvalue (ctx->uc_mcontext.fpregs->_st[2].exponent, fpregs[11], 8);
hexvalue (ctx->uc_mcontext.fpregs->_st[2].significand[3] << 16
| ctx->uc_mcontext.fpregs->_st[2].significand[2], fpregs[12],
8);
hexvalue (ctx->uc_mcontext.fpregs->_st[2].significand[1] << 16
| ctx->uc_mcontext.fpregs->_st[2].significand[0], fpregs[13],
8);
hexvalue (ctx->uc_mcontext.fpregs->_st[3].exponent, fpregs[14], 8);
hexvalue (ctx->uc_mcontext.fpregs->_st[3].significand[3] << 16
| ctx->uc_mcontext.fpregs->_st[3].significand[2], fpregs[15],
8);
hexvalue (ctx->uc_mcontext.fpregs->_st[3].significand[1] << 16
| ctx->uc_mcontext.fpregs->_st[3].significand[0], fpregs[16],
8);
hexvalue (ctx->uc_mcontext.fpregs->_st[4].exponent, fpregs[17], 8);
hexvalue (ctx->uc_mcontext.fpregs->_st[4].significand[3] << 16
| ctx->uc_mcontext.fpregs->_st[4].significand[2], fpregs[18],
8);
hexvalue (ctx->uc_mcontext.fpregs->_st[4].significand[1] << 16
| ctx->uc_mcontext.fpregs->_st[4].significand[0], fpregs[19],
8);
hexvalue (ctx->uc_mcontext.fpregs->_st[5].exponent, fpregs[20], 8);
hexvalue (ctx->uc_mcontext.fpregs->_st[5].significand[3] << 16
| ctx->uc_mcontext.fpregs->_st[5].significand[2], fpregs[21],
8);
hexvalue (ctx->uc_mcontext.fpregs->_st[5].significand[1] << 16
| ctx->uc_mcontext.fpregs->_st[5].significand[0], fpregs[22],
8);
hexvalue (ctx->uc_mcontext.fpregs->_st[6].exponent, fpregs[23], 8);
hexvalue (ctx->uc_mcontext.fpregs->_st[6].significand[3] << 16
| ctx->uc_mcontext.fpregs->_st[6].significand[2], fpregs[24],
8);
hexvalue (ctx->uc_mcontext.fpregs->_st[6].significand[1] << 16
| ctx->uc_mcontext.fpregs->_st[6].significand[0], fpregs[25],
8);
hexvalue (ctx->uc_mcontext.fpregs->_st[7].exponent, fpregs[26], 8);
hexvalue (ctx->uc_mcontext.fpregs->_st[7].significand[3] << 16
| ctx->uc_mcontext.fpregs->_st[7].significand[2], fpregs[27],
8);
hexvalue (ctx->uc_mcontext.fpregs->_st[7].significand[1] << 16
| ctx->uc_mcontext.fpregs->_st[7].significand[0], fpregs[28],
8);
hexvalue (ctx->fpstate->mxcsr, fpregs[29], 4);
hexvalue (ctx->uc_mcontext.fpregs->mxcsr, fpregs[29], 4);
for (i = 0; i < 16; i++)
hexvalue (ctx->fpstate->_xmm[i].element[3] << 24
| ctx->fpstate->_xmm[i].element[2] << 16
| ctx->fpstate->_xmm[i].element[1] << 8
| ctx->fpstate->_xmm[i].element[0], xmmregs[i], 32);
hexvalue (ctx->uc_mcontext.fpregs->_xmm[i].element[3] << 24
| ctx->uc_mcontext.fpregs->_xmm[i].element[2] << 16
| ctx->uc_mcontext.fpregs->_xmm[i].element[1] << 8
| ctx->uc_mcontext.fpregs->_xmm[i].element[0], xmmregs[i],
32);
ADD_STRING ("\n\n ST(0) ");
@ -284,25 +301,25 @@ register_dump (int fd, struct sigcontext *ctx)
ADD_STRING ("\n mxcsr: ");
ADD_MEM (fpregs[29], 4);
ADD_STRING ("\n XMM0: ");
ADD_STRING ("\n XMM0: ");
ADD_MEM (xmmregs[0], 32);
ADD_STRING (" XMM1: ");
ADD_STRING (" XMM1: ");
ADD_MEM (xmmregs[0], 32);
ADD_STRING ("\n XMM2: ");
ADD_STRING ("\n XMM2: ");
ADD_MEM (xmmregs[0], 32);
ADD_STRING (" XMM3: ");
ADD_STRING (" XMM3: ");
ADD_MEM (xmmregs[0], 32);
ADD_STRING ("\n XMM4: ");
ADD_STRING ("\n XMM4: ");
ADD_MEM (xmmregs[0], 32);
ADD_STRING (" XMM5: ");
ADD_STRING (" XMM5: ");
ADD_MEM (xmmregs[0], 32);
ADD_STRING ("\n XMM6: ");
ADD_STRING ("\n XMM6: ");
ADD_MEM (xmmregs[0], 32);
ADD_STRING (" XMM7: ");
ADD_STRING (" XMM7: ");
ADD_MEM (xmmregs[0], 32);
ADD_STRING ("\n XMM8: ");
ADD_STRING ("\n XMM8: ");
ADD_MEM (xmmregs[0], 32);
ADD_STRING (" XMM9: ");
ADD_STRING (" XMM9: ");
ADD_MEM (xmmregs[0], 32);
ADD_STRING ("\n XMM10: ");
ADD_MEM (xmmregs[0], 32);

View file

@ -81,7 +81,7 @@ elf_machine_load_address (void)
/* Set up the loaded object described by L so its unrelocated PLT
entries will jump to the on-demand fixup code in dl-runtime.c. */
static inline int __attribute__ ((unused))
static inline int __attribute__ ((unused, always_inline))
elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
{
Elf64_Addr *got;