View | Details | Raw Unified | Return to bug 65236
Collapse All | Expand All

(-)linux-2.4.21-277/arch/ia64/kernel/entry.S (-7 / +19 lines)
Lines 46-53 Link Here
46
	 * setup a null register window frame.
46
	 * setup a null register window frame.
47
	 */
47
	 */
48
ENTRY(ia64_execve)
48
ENTRY(ia64_execve)
49
	.prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(3)
49
	/*
50
	alloc loc1=ar.pfs,3,2,4,0
50
	 * Allocate 8 input registers since ptrace() may clobber them
51
	 */
52
	.prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(8)
53
	alloc loc1=ar.pfs,8,2,4,0
51
	mov loc0=rp
54
	mov loc0=rp
52
	.body
55
	.body
53
	mov out0=in0			// filename
56
	mov out0=in0			// filename
Lines 89-96 ENTRY(ia64_execve) Link Here
89
END(ia64_execve)
92
END(ia64_execve)
90
93
91
GLOBAL_ENTRY(sys_clone2)
94
GLOBAL_ENTRY(sys_clone2)
92
	.prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(2)
95
	/*
93
	alloc r16=ar.pfs,3,2,4,0
96
	 * Allocate 8 input registers since ptrace() may clobber them
97
	 */
98
	.prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(8)
99
	alloc r16=ar.pfs,8,2,4,0
94
	DO_SAVE_SWITCH_STACK
100
	DO_SAVE_SWITCH_STACK
95
	mov loc0=rp
101
	mov loc0=rp
96
	mov loc1=r16				// save ar.pfs across do_fork
102
	mov loc1=r16				// save ar.pfs across do_fork
Lines 108-115 GLOBAL_ENTRY(sys_clone2) Link Here
108
END(sys_clone2)
114
END(sys_clone2)
109
115
110
GLOBAL_ENTRY(sys_clone)
116
GLOBAL_ENTRY(sys_clone)
111
	.prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(2)
117
	/*
112
	alloc r16=ar.pfs,2,2,4,0
118
	 * Allocate 8 input registers since ptrace() may clobber them
119
	 */
120
	.prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(8)
121
	alloc r16=ar.pfs,8,2,4,0
113
	DO_SAVE_SWITCH_STACK
122
	DO_SAVE_SWITCH_STACK
114
	mov loc0=rp
123
	mov loc0=rp
115
	mov loc1=r16				// save ar.pfs across do_fork
124
	mov loc1=r16				// save ar.pfs across do_fork
Lines 938-944 END(sys_rt_sigsuspend) Link Here
938
947
939
ENTRY(sys_rt_sigreturn)
948
ENTRY(sys_rt_sigreturn)
940
	PT_REGS_UNWIND_INFO(0)
949
	PT_REGS_UNWIND_INFO(0)
941
	alloc r2=ar.pfs,0,0,1,0
950
	/*
951
	 * Allocate 8 input registers since ptrace() may clobber them
952
	 */
953
	alloc r2=ar.pfs,8,0,1,0
942
	.prologue
954
	.prologue
943
	PT_REGS_SAVES(16)
955
	PT_REGS_SAVES(16)
944
	adds sp=-16,sp
956
	adds sp=-16,sp
(-)linux-2.4.21-277/arch/ia64/kernel/ivt.S (-32 / +44 lines)
Lines 44-49 Link Here
44
#include <asm/ptrace.h>
44
#include <asm/ptrace.h>
45
#include <asm/system.h>
45
#include <asm/system.h>
46
#include <asm/unistd.h>
46
#include <asm/unistd.h>
47
#include <asm/errno.h>
47
48
48
#if 1
49
#if 1
49
# define PSR_DEFAULT_BITS	psr.ac
50
# define PSR_DEFAULT_BITS	psr.ac
Lines 658-669 ENTRY(break_fault) Link Here
658
	movl r15=ia64_ret_from_syscall
659
	movl r15=ia64_ret_from_syscall
659
(p7)	adds r16=(__NR_ni_syscall-1024)*8,r16	// force __NR_ni_syscall
660
(p7)	adds r16=(__NR_ni_syscall-1024)*8,r16	// force __NR_ni_syscall
660
	;;
661
	;;
661
	ld8 r16=[r16]				// load address of syscall entry point
662
(p9)	ld8 r16=[r16]				// load address of syscall entry point
662
	mov rp=r15				// set the real return addr
663
	mov rp=r15				// set the real return addr
663
	;;
664
	;;
664
	ld8 r2=[r2]				// r2 = current->ptrace
665
	ld8 r2=[r2]				// r2 = current->ptrace
665
	mov r19=PT_TRACEAUDITMASK		// r19 = PT_TRACESYS|PT_AUDITED
666
	mov r19=PT_TRACEAUDITMASK		// r19 = PT_TRACESYS|PT_AUDITED
666
	mov b6=r16
667
(p9)	mov b6=r16
667
668
668
	// arrange things so we skip over break instruction when returning:
669
	// arrange things so we skip over break instruction when returning:
669
670
Lines 687-727 ENTRY(break_fault) Link Here
687
	dep r18=r20,r18,41,2			// insert new ei into cr.isr
688
	dep r18=r20,r18,41,2			// insert new ei into cr.isr
688
	;;
689
	;;
689
	st8 [r16]=r18				// store new value for cr.isr
690
	st8 [r16]=r18				// store new value for cr.isr
690
691
(p10)	br.cond.spnt.many ia64_ret_from_syscall
691
(p8)	br.call.sptk.many b6=b6			// ignore this return addr
692
(p8)	br.call.sptk.many b6=b6			// ignore this return addr
692
	br.cond.sptk ia64_trace_syscall
693
	br.cond.sptk ia64_trace_syscall
693
	// NOT REACHED
694
	// NOT REACHED
694
END(break_fault)
695
END(break_fault)
695
696
696
ENTRY(demine_args)
697
	alloc r2=ar.pfs,8,0,0,0
698
	tnat.nz p8,p0=in0
699
	tnat.nz p9,p0=in1
700
	;;
701
(p8)	mov in0=-1
702
	tnat.nz p10,p0=in2
703
	tnat.nz p11,p0=in3
704
705
(p9)	mov in1=-1
706
	tnat.nz p12,p0=in4
707
	tnat.nz p13,p0=in5
708
	;;
709
(p10)	mov in2=-1
710
	tnat.nz p14,p0=in6
711
	tnat.nz p15,p0=in7
712
713
(p11)	mov in3=-1
714
	tnat.nz p8,p0=r15	// demining r15 is not a must, but it is safer
715
716
(p12)	mov in4=-1
717
(p13)	mov in5=-1
718
	;;
719
(p14)	mov in6=-1
720
(p15)	mov in7=-1
721
(p8)	mov r15=-1
722
	br.ret.sptk.many rp
723
END(demine_args)
724
725
	.align 1024
697
	.align 1024
726
/////////////////////////////////////////////////////////////////////////////////////////
698
/////////////////////////////////////////////////////////////////////////////////////////
727
// 0x3000 Entry 12 (size 64 bundles) External Interrupt (4)
699
// 0x3000 Entry 12 (size 64 bundles) External Interrupt (4)
Lines 755-760 END(interrupt) Link Here
755
	DBG_FAULT(13)
727
	DBG_FAULT(13)
756
	FAULT(13)
728
	FAULT(13)
757
729
730
// Ensure that the syscall arguments plus r15 (syscall number) are valid.
731
// Exit with r2 containing the frame size when the syscall was issued.
732
// This function belongs to break_fault and can live anywhere (even outside
733
// the IVT); it's being placed here just to save a little space.
734
// On exit:
735
//	- p10: TRUE if syscall is invoked with more than 8 out
736
//	       Registers or r15's Nat is true
737
//	- p9:  !(p10)
738
ENTRY(demine_args)
739
	alloc r2=ar.pfs,8,0,0,0
740
	tnat.nz p8,p0=in0
741
	tnat.nz p9,p0=in1
742
	;;
743
	and r18=0x7f,r2				// get sof of issuer's cfm
744
	extr.u r17=r2,7,7			// get sol of issuer's cfm
745
	tnat.nz p10,p0=in2
746
(p8)	mov in0=-1
747
	tnat.nz p11,p0=in3
748
	tnat.nz p12,p0=in4
749
	;;
750
(p9)	mov in1=-1
751
	tnat.nz p13,p0=in5
752
	add r17=8,r17				// sol + 8
753
(p10)	mov in2=-1
754
	tnat.nz p14,p0=in6
755
	tnat.nz p15,p0=in7
756
	;;
757
	cmp.lt p10,p9=r17,r18			// frame size can't be more than local+8
758
(p11)	mov in3=-1
759
(p12)	mov in4=-1
760
	;;
761
(p13)	mov in5=-1
762
(p9)	tnat.nz p10,p9=r15	// demining r15 is not a must, but it is safer
763
(p14)	mov in6=-1
764
	;;
765
(p15)	mov in7=-1
766
(p10)	mov r8=-EINVAL
767
	br.ret.sptk.many rp
768
END(demine_args)
769
758
	.align 1024
770
	.align 1024
759
/////////////////////////////////////////////////////////////////////////////////////////
771
/////////////////////////////////////////////////////////////////////////////////////////
760
// 0x3800 Entry 14 (size 64 bundles) Reserved
772
// 0x3800 Entry 14 (size 64 bundles) Reserved
(-)linux-2.4.21-277/arch/ia64/kernel/process.c (-1 / +1 lines)
Lines 455-461 dump_fpu (struct pt_regs *pt, elf_fpregs Link Here
455
	return 1;	/* f0-f31 are always valid so we always return 1 */
455
	return 1;	/* f0-f31 are always valid so we always return 1 */
456
}
456
}
457
457
458
asmlinkage long
458
long
459
sys_execve (char *filename, char **argv, char **envp, struct pt_regs *regs)
459
sys_execve (char *filename, char **argv, char **envp, struct pt_regs *regs)
460
{
460
{
461
	int error;
461
	int error;

Return to bug 65236