|
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 = ¤t->ptrace |
656 |
adds r2=IA64_TASK_PTRACE_OFFSET,r13 // r2 = ¤t->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 |