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

(-)linux-2.6.5-SLES9_SP1_BRANCH_20050311102304.orig/arch/ia64/kernel/entry.S (-7 / +19 lines)
Lines 51-58 Link Here
51
	 * setup a null register window frame.
51
	 * setup a null register window frame.
52
	 */
52
	 */
53
ENTRY(ia64_execve)
53
ENTRY(ia64_execve)
54
	.prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(3)
54
	/*
55
	alloc loc1=ar.pfs,3,2,4,0
55
	 * Allocate 8 input registers since ptrace() may clobber them
56
	 */
57
	.prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(8)
58
	alloc loc1=ar.pfs,8,2,4,0
56
	mov loc0=rp
59
	mov loc0=rp
57
	.body
60
	.body
58
	mov out0=in0			// filename
61
	mov out0=in0			// filename
Lines 113-120 END(ia64_execve) Link Here
113
 *	      u64 tls)
116
 *	      u64 tls)
114
 */
117
 */
115
GLOBAL_ENTRY(sys_clone2)
118
GLOBAL_ENTRY(sys_clone2)
116
	.prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(6)
119
	/*
117
	alloc r16=ar.pfs,6,2,6,0
120
	 * Allocate 8 input registers since ptrace() may clobber them
121
	 */
122
	.prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(8)
123
	alloc r16=ar.pfs,8,2,6,0
118
	DO_SAVE_SWITCH_STACK
124
	DO_SAVE_SWITCH_STACK
119
	adds r2=PT(R16)+IA64_SWITCH_STACK_SIZE+16,sp
125
	adds r2=PT(R16)+IA64_SWITCH_STACK_SIZE+16,sp
120
	mov loc0=rp
126
	mov loc0=rp
Lines 142-149 END(sys_clone2) Link Here
142
 *	Deprecated.  Use sys_clone2() instead.
148
 *	Deprecated.  Use sys_clone2() instead.
143
 */
149
 */
144
GLOBAL_ENTRY(sys_clone)
150
GLOBAL_ENTRY(sys_clone)
145
	.prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(5)
151
	/*
146
	alloc r16=ar.pfs,5,2,6,0
152
	 * Allocate 8 input registers since ptrace() may clobber them
153
	 */
154
	.prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(8)
155
	alloc r16=ar.pfs,8,2,6,0
147
	DO_SAVE_SWITCH_STACK
156
	DO_SAVE_SWITCH_STACK
148
	adds r2=PT(R16)+IA64_SWITCH_STACK_SIZE+16,sp
157
	adds r2=PT(R16)+IA64_SWITCH_STACK_SIZE+16,sp
149
	mov loc0=rp
158
	mov loc0=rp
Lines 1170-1176 END(sys_rt_sigsuspend) Link Here
1170
1179
1171
ENTRY(sys_rt_sigreturn)
1180
ENTRY(sys_rt_sigreturn)
1172
	PT_REGS_UNWIND_INFO(0)
1181
	PT_REGS_UNWIND_INFO(0)
1173
	alloc r2=ar.pfs,0,0,1,0
1182
	/*
1183
	 * Allocate 8 input registers since ptrace() may clobber them
1184
	 */
1185
	alloc r2=ar.pfs,8,0,1,0
1174
	.prologue
1186
	.prologue
1175
	PT_REGS_SAVES(16)
1187
	PT_REGS_SAVES(16)
1176
	adds sp=-16,sp
1188
	adds sp=-16,sp
(-)linux-2.6.5-SLES9_SP1_BRANCH_20050311102304.orig/arch/ia64/kernel/ivt.S (-10 / +18 lines)
Lines 51-56 Link Here
51
#include <asm/system.h>
51
#include <asm/system.h>
52
#include <asm/thread_info.h>
52
#include <asm/thread_info.h>
53
#include <asm/unistd.h>
53
#include <asm/unistd.h>
54
#include <asm/errno.h>
54
55
55
#if 1
56
#if 1
56
# define PSR_DEFAULT_BITS	psr.ac
57
# define PSR_DEFAULT_BITS	psr.ac
Lines 697-706 ENTRY(break_fault) Link Here
697
	ssm psr.ic | PSR_DEFAULT_BITS
698
	ssm psr.ic | PSR_DEFAULT_BITS
698
	;;
699
	;;
699
	srlz.i					// guarantee that interruption collection is on
700
	srlz.i					// guarantee that interruption collection is on
701
	mov r3=NR_syscalls - 1
700
	;;
702
	;;
701
(p15)	ssm psr.i				// restore psr.i
703
(p15)	ssm psr.i				// restore psr.i
704
	// p10==true means out registers are more than 8 or r15's Nat is true
705
(p10)	br.cond.spnt.many ia64_ret_from_syscall
702
	;;
706
	;;
703
	mov r3=NR_syscalls - 1
704
	movl r16=sys_call_table
707
	movl r16=sys_call_table
705
708
706
	adds r15=-1024,r15			// r15 contains the syscall number---subtract 1024
709
	adds r15=-1024,r15			// r15 contains the syscall number---subtract 1024
Lines 799-806 END(interrupt) Link Here
799
	 * On exit:
802
	 * On exit:
800
	 *	- executing on bank 1 registers
803
	 *	- executing on bank 1 registers
801
	 *	- psr.ic enabled, interrupts restored
804
	 *	- psr.ic enabled, interrupts restored
805
	 *	-  p10: TRUE if syscall is invoked with more than 8 out
806
	 *		registers or r15's Nat is true
802
	 *	-  r1: kernel's gp
807
	 *	-  r1: kernel's gp
803
	 *	-  r3: preserved (same as on entry)
808
	 *	-  r3: preserved (same as on entry)
809
	 *	-  r8: -EINVAL if p10 is true
804
	 *	- r12: points to kernel stack
810
	 *	- r12: points to kernel stack
805
	 *	- r13: points to current task
811
	 *	- r13: points to current task
806
	 *	- p15: TRUE if interrupts need to be re-enabled
812
	 *	- p15: TRUE if interrupts need to be re-enabled
Lines 826-836 GLOBAL_ENTRY(ia64_syscall_setup) Link Here
826
	st8 [r17]=r28,PT(AR_UNAT)-PT(CR_IIP)	// save cr.iip
832
	st8 [r17]=r28,PT(AR_UNAT)-PT(CR_IIP)	// save cr.iip
827
	mov r28=b0				// save b0 (2 cyc)
833
	mov r28=b0				// save b0 (2 cyc)
828
(p8)	mov in0=-1
834
(p8)	mov in0=-1
829
	;;
830
835
831
	st8 [r16]=r0,PT(AR_PFS)-PT(CR_IFS)	// clear cr.ifs
836
	st8 [r16]=r0,PT(AR_PFS)-PT(CR_IFS)	// clear cr.ifs
837
	extr.u r11=r19,7,7			// get sol of ar.pfs
838
	and r8=0x7f,r19				// get sof of ar.pfs
839
	;;
832
	st8 [r17]=r25,PT(AR_RSC)-PT(AR_UNAT)	// save ar.unat
840
	st8 [r17]=r25,PT(AR_RSC)-PT(AR_UNAT)	// save ar.unat
833
(p9)	mov in1=-1
841
(p9)	mov in1=-1
842
	add r11=8,r11
834
	;;
843
	;;
835
844
836
	st8 [r16]=r26,PT(AR_RNAT)-PT(AR_PFS)	// save ar.pfs
845
	st8 [r16]=r26,PT(AR_RNAT)-PT(AR_PFS)	// save ar.pfs
Lines 850-865 GLOBAL_ENTRY(ia64_syscall_setup) Link Here
850
	tnat.nz p13,p0=in5
859
	tnat.nz p13,p0=in5
851
	;;
860
	;;
852
(pUStk) st8 [r16]=r24,PT(PR)-PT(AR_RNAT)	// save ar.rnat
861
(pUStk) st8 [r16]=r24,PT(PR)-PT(AR_RNAT)	// save ar.rnat
853
(pUStk) st8 [r17]=r23,PT(B0)-PT(AR_BSPSTORE)	// save ar.bspstore
862
	cmp.lt p10,p9=r11,r8			// frame size can't be more than local+8
854
	shl r18=r18,16				// compute ar.rsc to be used for "loadrs"
863
	shl r18=r18,16				// compute ar.rsc to be used for "loadrs"
864
(pUStk) st8 [r17]=r23,PT(B0)-PT(AR_BSPSTORE)	// save ar.bspstore
855
	;;
865
	;;
866
(p12)	mov in4=-1
867
(p9)	tnat.nz p10,p0=r15
856
	st8 [r16]=r31,PT(LOADRS)-PT(PR)		// save predicates
868
	st8 [r16]=r31,PT(LOADRS)-PT(PR)		// save predicates
857
	st8 [r17]=r28,PT(R1)-PT(B0)		// save b0
869
	st8 [r17]=r28,PT(R1)-PT(B0)		// save b0
858
(p12)	mov in4=-1
870
(p13)	mov in5=-1
859
	;;
871
	;;
860
	st8 [r16]=r18,PT(R12)-PT(LOADRS)	// save ar.rsc value for "loadrs"
872
	st8 [r16]=r18,PT(R12)-PT(LOADRS)	// save ar.rsc value for "loadrs"
861
	st8.spill [r17]=r20,PT(R13)-PT(R1)	// save original r1
873
	st8.spill [r17]=r20,PT(R13)-PT(R1)	// save original r1
862
(p13)	mov in5=-1
874
(p10)	mov r8=-EINVAL
863
	;;
875
	;;
864
876
865
.mem.offset 0,0; st8.spill [r16]=r12,PT(AR_FPSR)-PT(R12)	// save r12
877
.mem.offset 0,0; st8.spill [r16]=r12,PT(AR_FPSR)-PT(R12)	// save r12
Lines 876-890 GLOBAL_ENTRY(ia64_syscall_setup) Link Here
876
888
877
	mov r13=r2				// establish `current'
889
	mov r13=r2				// establish `current'
878
	movl r1=__gp				// establish kernel global pointer
890
	movl r1=__gp				// establish kernel global pointer
879
	;;
880
(p8)	mov in7=-1
891
(p8)	mov in7=-1
881
	tnat.nz p9,p0=r15
882
883
	cmp.eq pSys,pNonSys=r0,r0		// set pSys=1, pNonSys=0
884
	movl r17=FPSR_DEFAULT
892
	movl r17=FPSR_DEFAULT
885
	;;
893
	;;
886
	mov.m ar.fpsr=r17			// set ar.fpsr to kernel default value
894
	mov.m ar.fpsr=r17			// set ar.fpsr to kernel default value
887
(p9)	mov r15=-1
895
	cmp.eq pSys,pNonSys=r0,r0		// set pSys=1, pNonSys=0
888
	br.ret.sptk.many b7
896
	br.ret.sptk.many b7
889
END(ia64_syscall_setup)
897
END(ia64_syscall_setup)
890
898
(-)linux-2.6.5-SLES9_SP1_BRANCH_20050311102304.orig/arch/ia64/kernel/gate.S (-1 / +3 lines)
Lines 81-86 GLOBAL_ENTRY(__kernel_syscall_via_epc) Link Here
81
	LOAD_FSYSCALL_TABLE(r14)
81
	LOAD_FSYSCALL_TABLE(r14)
82
82
83
	mov r16=IA64_KR(CURRENT)		// 12 cycle read latency
83
	mov r16=IA64_KR(CURRENT)		// 12 cycle read latency
84
	tnat.nz p10,p9=r15
84
	mov r19=NR_syscalls-1
85
	mov r19=NR_syscalls-1
85
	;;
86
	;;
86
	shladd r18=r17,3,r14
87
	shladd r18=r17,3,r14
Lines 119-125 GLOBAL_ENTRY(__kernel_syscall_via_epc) Link Here
119
#endif
120
#endif
120
121
121
	mov r10=-1
122
	mov r10=-1
122
	mov r8=ENOSYS
123
(p10)	mov r8=EINVAL
124
(p9)	mov r8=ENOSYS
123
	FSYS_RETURN
125
	FSYS_RETURN
124
END(__kernel_syscall_via_epc)
126
END(__kernel_syscall_via_epc)
125
127
(-)linux-2.6.5-SLES9_SP1_BRANCH_20050311102304.orig/arch/ia64/kernel/fsys.S (-2 / +3 lines)
Lines 614-621 GLOBAL_ENTRY(fsys_bubble_down) Link Here
614
	;;
614
	;;
615
	mov rp=r2				// set the real return addr
615
	mov rp=r2				// set the real return addr
616
	tbit.z p8,p0=r3,TIF_SYSCALL_TRACE
616
	tbit.z p8,p0=r3,TIF_SYSCALL_TRACE
617
617
	;;
618
(p8)	br.call.sptk.many b6=b6			// ignore this return addr
618
(p10)	br.cond.spnt.many ia64_ret_from_syscall	// p10==true means out registers are more than 8
619
(p8)	br.call.sptk.many b6=b6		// ignore this return addr
619
	br.cond.sptk ia64_trace_syscall
620
	br.cond.sptk ia64_trace_syscall
620
END(fsys_bubble_down)
621
END(fsys_bubble_down)
621
622
(-)linux-2.6.5-SLES9_SP1_BRANCH_20050311102304.orig/arch/ia64/kernel/process.c (-1 / +1 lines)
Lines 561-567 dump_fpu (struct pt_regs *pt, elf_fpregs Link Here
561
	return 1;	/* f0-f31 are always valid so we always return 1 */
561
	return 1;	/* f0-f31 are always valid so we always return 1 */
562
}
562
}
563
563
564
asmlinkage long
564
long
565
sys_execve (char *filename, char **argv, char **envp, struct pt_regs *regs)
565
sys_execve (char *filename, char **argv, char **envp, struct pt_regs *regs)
566
{
566
{
567
	int error;
567
	int error;
(-)linux-2.6.5-SLES9_SP1_BRANCH_20050311102304.orig/include/asm-ia64/unistd.h (-1 / +1 lines)
Lines 352-358 asmlinkage unsigned long sys_mmap2( Link Here
352
				int fd, long pgoff);
352
				int fd, long pgoff);
353
struct pt_regs;
353
struct pt_regs;
354
struct sigaction;
354
struct sigaction;
355
asmlinkage long sys_execve(char *filename, char **argv, char **envp,
355
long sys_execve(char *filename, char **argv, char **envp,
356
				struct pt_regs *regs);
356
				struct pt_regs *regs);
357
asmlinkage long sys_pipe(long arg0, long arg1, long arg2, long arg3,
357
asmlinkage long sys_pipe(long arg0, long arg1, long arg2, long arg3,
358
			long arg4, long arg5, long arg6, long arg7, long stack);
358
			long arg4, long arg5, long arg6, long arg7, long stack);

Return to bug 65236