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

(-)/usr/src/linux-2.4.21-286/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
(-)/usr/src/linux-2.4.21-286/arch/ia64/kernel/ivt.S (-29 / +40 lines)
Lines 647-659 ENTRY(break_fault) Link Here
647
	SAVE_REST
647
	SAVE_REST
648
	br.call.sptk.many rp=demine_args	// clear NaT bits in (potential) syscall args
648
	br.call.sptk.many rp=demine_args	// clear NaT bits in (potential) syscall args
649
649
650
// demine_args exits with r2 containing the frame marker when the syscall was issued.
651
	and r18=0x7f,r2				// get sof of issuer's cfm
652
	extr.u r17=r2,7,7			// get sol of issuer's cfm
653
650
	mov r3=255
654
	mov r3=255
651
	adds r15=-1024,r15			// r15 contains the syscall number---subtract 1024
655
	adds r15=-1024,r15			// r15 contains the syscall number---subtract 1024
652
	adds r2=IA64_TASK_PTRACE_OFFSET,r13	// r2 = &current->ptrace
656
	adds r2=IA64_TASK_PTRACE_OFFSET,r13	// r2 = &current->ptrace
653
	;;
657
	;;
658
	add r17=8,r17				// sol + 8
654
	cmp.geu p6,p7=r3,r15		// (syscall > 0 && syscall <= 1024+255) ?
659
	cmp.geu p6,p7=r3,r15		// (syscall > 0 && syscall <= 1024+255) ?
655
	movl r16=sys_call_table
660
	movl r16=sys_call_table
656
	;;
661
	;;
662
(p6)	cmp.lt p7,p6=r17,r18			// frame size can't be more than local+8
663
	;;
657
(p6)	shladd r16=r15,3,r16
664
(p6)	shladd r16=r15,3,r16
658
	movl r15=ia64_ret_from_syscall
665
	movl r15=ia64_ret_from_syscall
659
(p7)	adds r16=(__NR_ni_syscall-1024)*8,r16	// force __NR_ni_syscall
666
(p7)	adds r16=(__NR_ni_syscall-1024)*8,r16	// force __NR_ni_syscall
Lines 693-727 ENTRY(break_fault) Link Here
693
	// NOT REACHED
700
	// NOT REACHED
694
END(break_fault)
701
END(break_fault)
695
702
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
703
	.align 1024
726
/////////////////////////////////////////////////////////////////////////////////////////
704
/////////////////////////////////////////////////////////////////////////////////////////
727
// 0x3000 Entry 12 (size 64 bundles) External Interrupt (4)
705
// 0x3000 Entry 12 (size 64 bundles) External Interrupt (4)
Lines 755-760 END(interrupt) Link Here
755
	DBG_FAULT(13)
733
	DBG_FAULT(13)
756
	FAULT(13)
734
	FAULT(13)
757
735
736
// Ensure that the syscall arguments plus r15 (syscall number) are valid.
737
// Exit with r2 containing the frame size when the syscall was issued.
738
// This function belongs to break_fault and can live anywhere (even outside
739
// the IVT); it's being placed here just to save a little space.
740
ENTRY(demine_args)
741
	alloc r2=ar.pfs,8,0,0,0
742
	tnat.nz p8,p0=in0
743
	tnat.nz p9,p0=in1
744
	;;
745
(p8)	mov in0=-1
746
	tnat.nz p10,p0=in2
747
	tnat.nz p11,p0=in3
748
749
(p9)	mov in1=-1
750
	tnat.nz p12,p0=in4
751
	tnat.nz p13,p0=in5
752
	;;
753
(p10)	mov in2=-1
754
	tnat.nz p14,p0=in6
755
	tnat.nz p15,p0=in7
756
757
(p11)	mov in3=-1
758
	tnat.nz p8,p0=r15	// demining r15 is not a must, but it is safer
759
760
(p12)	mov in4=-1
761
(p13)	mov in5=-1
762
	;;
763
(p14)	mov in6=-1
764
(p15)	mov in7=-1
765
(p8)	mov r15=-1
766
	br.ret.sptk.many rp
767
END(demine_args)
768
758
	.align 1024
769
	.align 1024
759
/////////////////////////////////////////////////////////////////////////////////////////
770
/////////////////////////////////////////////////////////////////////////////////////////
760
// 0x3800 Entry 14 (size 64 bundles) Reserved
771
// 0x3800 Entry 14 (size 64 bundles) Reserved
(-)/usr/src/linux-2.4.21-286/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