* sysdeps/alpha/dl-machine.h (RTLD_START): Fix top-of-stack backtrace. * sysdeps/unix/sysv/linux/alpha/clone.S: Likewise. * sysdeps/alpha/elf/start.S: Likewise. Remove pointless allocation. * sysdeps/unix/sysv/linux/alpha/rt_sigaction.S: Use standard ldgp entry sequence and explicit relocs. Add unwind info for sigreturn and rt_sigreturn. * configure.in (libc_cv_asm_cfi_directives): Test .cfi_remember_state. * configure: Regenerate.

* sysdeps/alpha/dl-machine.h (RTLD_START): Fix top-of-stack backtrace.
        * sysdeps/unix/sysv/linux/alpha/clone.S: Likewise.
        * sysdeps/alpha/elf/start.S: Likewise.  Remove pointless allocation.
        * sysdeps/unix/sysv/linux/alpha/rt_sigaction.S: Use standard ldgp
        entry sequence and explicit relocs.  Add unwind info for sigreturn
        and rt_sigreturn.
        * configure.in (libc_cv_asm_cfi_directives): Test .cfi_remember_state.
        * configure: Regenerate.
This commit is contained in:
Richard Henderson 2003-06-06 05:54:15 +00:00
parent a56e4568df
commit f212e8dcf8
8 changed files with 116 additions and 39 deletions

View File

@ -1,5 +1,14 @@
2003-06-04 Richard Henderson <rth@redhat.com>
* sysdeps/alpha/dl-machine.h (RTLD_START): Fix top-of-stack backtrace.
* sysdeps/unix/sysv/linux/alpha/clone.S: Likewise.
* sysdeps/alpha/elf/start.S: Likewise. Remove pointless allocation.
* sysdeps/unix/sysv/linux/alpha/rt_sigaction.S: Use standard ldgp
entry sequence and explicit relocs. Add unwind info for sigreturn
and rt_sigreturn.
* configure.in (libc_cv_asm_cfi_directives): Test .cfi_remember_state.
* configure: Regenerate.
* sysdeps/unix/sysv/linux/alpha/syscalls.list (semtimedop): New.
Annotate some parameters.
* sysdeps/unix/sysv/linux/alpha/sysdep.h (__NR_semtimedop): New.

1
configure vendored
View File

@ -5736,6 +5736,7 @@ else
.type func,@function
func:
.cfi_startproc
.cfi_remember_state
.cfi_endproc
EOF
if { ac_try='${CC-cc} $ASFLAGS -c conftest.s 1>&5'

View File

@ -1529,6 +1529,7 @@ cat > conftest.s <<EOF
.type func,@function
func:
.cfi_startproc
.cfi_remember_state
.cfi_endproc
EOF
if AC_TRY_COMMAND(${CC-cc} $ASFLAGS -c conftest.s 1>&AS_MESSAGE_LOG_FD); then

View File

@ -303,6 +303,7 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
.globl _start \n\
.ent _start \n\
_start: \n\
.frame $31,0,$31,0 \n\
br $gp, 0f \n\
0: ldgp $gp, 0($gp) \n\
.prologue 0 \n\
@ -314,7 +315,7 @@ _start: \n\
.globl _dl_start_user \n\
.ent _dl_start_user \n\
_dl_start_user: \n\
.frame $30,0,$31,0 \n\
.frame $31,0,$31,0 \n\
.prologue 0 \n\
/* Save the user entry point address in s0. */ \n\
mov $0, $9 \n\

View File

@ -1,5 +1,6 @@
/* Startup code for Alpha/ELF.
Copyright (C) 1993,1995,1996,1997,1998,2000,2001, 2002 Free Software Foundation, Inc.
Copyright (C) 1993, 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003
Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Richard Henderson <rth@tamu.edu>
@ -26,8 +27,7 @@
.ent _start, 0
.type _start,@function
_start:
.frame fp, 0, zero
mov zero, fp
.frame $31, 0, $31
br gp, 1f
1: ldgp gp, 0(gp)
subq sp, 16, sp
@ -65,6 +65,5 @@ weak_alias(_start, __start)
.data
.globl __data_start
__data_start:
.long 0
.weak data_start
data_start = __data_start

View File

@ -56,6 +56,12 @@
# define cfi_def_cfa_offset(off) .cfi_def_cfa_offset off
# define cfi_adjust_cfa_offset(off) .cfi_adjust_cfa_offset off
# define cfi_offset(reg, off) .cfi_offset reg, off
# define cfi_register(r1, r2) .cfi_register r1, r2
# define cfi_return_column(reg) .cfi_return_column reg
# define cfi_restore(reg) .cfi_restore reg
# define cfi_undefined(reg) .cfi_undefined reg
# define cfi_remember_state .cfi_remember_state
# define cfi_restore_state .cfi_restore_state
# else
# define cfi_startproc
# define cfi_endproc
@ -64,6 +70,12 @@
# define cfi_def_cfa_offset(off)
# define cfi_adjust_cfa_offset(off)
# define cfi_offset(reg, off)
# define cfi_register(r1, r2)
# define cfi_return_column(reg)
# define cfi_restore(reg)
# define cfi_undefined(reg)
# define cfi_remember_state
# define cfi_restore_state
# endif
#else /* ! ASSEMBLER */
@ -82,6 +94,18 @@
".cfi_adjust_cfa_offset " CFI_STRINGIFY(off)
# define CFI_OFFSET(reg, off) \
".cfi_offset " CFI_STRINGIFY(reg) "," CFI_STRINGIFY(off)
# define CFI_REGISTER(r1, r2) \
".cfi_register " CFI_STRINGIFY(r1) "," CFI_STRINGIFY(r2)
# define CFI_RETURN_COLUMN(reg) \
".cfi_return_column " CFI_STRINGIFY(reg)
# define CFI_RESTORE(reg) \
".cfi_restore " CFI_STRINGIFY(reg)
# define CFI_UNDEFINED(reg) \
".cfi_undefined " CFI_STRINGIFY(reg)
# define CFI_REMEMBER_STATE \
".cfi_remember_state"
# define CFI_RESTORE_STATE \
".cfi_restore_state"
# else
# define CFI_STARTPROC
# define CFI_ENDPROC
@ -90,6 +114,12 @@
# define CFI_DEF_CFA_OFFSET(off)
# define CFI_ADJUST_CFA_OFFSET(off)
# define CFI_OFFSET(reg, off)
# define CFI_REGISTER(r1, r2)
# define CFI_RETURN_COLUMN(reg)
# define CFI_RESTORE(reg)
# define CFI_UNDEFINED(reg)
# define CFI_REMEMBER_STATE
# define CFI_RESTORE_STATE
# endif
#endif /* __ASSEMBLER__ */

View File

@ -83,8 +83,7 @@ $error:
.ent thread_start
thread_start:
.frame fp,0,zero,0
mov zero,fp
.frame zero,0,zero,0
.prologue 0
/* Load up the arguments. */

View File

@ -1,4 +1,4 @@
/* 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 Richard Henderson <rth@cygnus.com>, 1998
@ -28,55 +28,92 @@
#ifdef __NR_rt_sigaction
.text
ENTRY(__syscall_rt_sigaction)
.frame sp,0,ra,0
#ifdef PROF
ldgp gp,0(pv)
#ifdef PROF
.set noat
lda AT, _mcount
jsr AT, (AT), _mcount
.set at
#endif
/* Indicate non-standard use of our PV. */
.prologue 2
.prologue 1
beq a1, 0f
ldl t0, 8(a1) # sa_flags
lda a4, sigreturn-__syscall_rt_sigaction(pv)
lda t1, rt_sigreturn-__syscall_rt_sigaction(pv)
ldah a4, sigreturn(gp) !gprelhigh
ldah t1, rt_sigreturn(gp) !gprelhigh
lda a4, sigreturn(a4) !gprellow
lda t1, rt_sigreturn(a4) !gprellow
and t0, 0x00000040, t0 # SA_SIGINFO
cmovne t0, t1, a4
0: ldi v0, __NR_rt_sigaction
callsys
bne a3,1f
bne a3, SYSCALL_ERROR_LABEL
ret
1:
#ifndef PROF
br gp,2f
2: ldgp gp,0(gp)
#endif
SYSCALL_ERROR_HANDLER
PSEUDO_END(__syscall_rt_sigaction)
END(__syscall_rt_sigaction)
/* To enable unwinding through the signal frame without special hackery
elsewhere, describe the entire struct sigcontext with unwind info.
Note that we begin the unwind info one instruction before the start
of the function; the unwinder will subtract one from the return address
attempting to find the call instruction that led us here, since we
didn't get here via a normal call. */
.align 5
.ent sigreturn
.macro SIGCONTEXT_REGS_I base, from=0
cfi_offset (\from, \base + (4 + \from) * 8)
.if 30-\from
SIGCONTEXT_REGS_I \base, "(\from+1)"
.endif
.endm
.macro SIGCONTEXT_REGS_F base, from=32
cfi_offset (\from, \base + (4 + 1 + \from) * 8)
.if 62-\from
SIGCONTEXT_REGS_F \base, "(\from+1)"
.endif
.endm
.macro SIGCONTEXT_REGS base
SIGCONTEXT_REGS_I \base
SIGCONTEXT_REGS_F \base
cfi_offset (63, \base + (4 + 32 + 1 + 32) * 8)
cfi_offset (64, \base + 2 * 8)
.endm
.align 4
nop
nop
nop
cfi_startproc
cfi_return_column (64)
SIGCONTEXT_REGS -648
cfi_def_cfa_offset (648)
nop
sigreturn:
.prologue 0
mov sp, a0
ldi v0, __NR_sigreturn
callsys
.end sigreturn
cfi_endproc
.size sigreturn, .-sigreturn
.type sigreturn, @function
.align 4
.ent rt_sigreturn
cfi_startproc
cfi_return_column (64)
SIGCONTEXT_REGS -648
cfi_def_cfa_offset (176 + 648)
nop
rt_sigreturn:
.prologue 0
mov sp,a0
ldi v0,__NR_rt_sigreturn
callsys
.end rt_sigreturn
cfi_endproc
.size rt_sigreturn, .-rt_sigreturn
.type rt_sigreturn, @function
#else
ENTRY(__syscall_rt_sigaction)
ldgp $29,0($27)