diff options
| -rw-r--r-- | arch/i386/kernel/entry.S | 25 | ||||
| -rw-r--r-- | arch/x86_64/kernel/entry.S | 19 | ||||
| -rw-r--r-- | include/linux/linkage.h | 6 |
3 files changed, 25 insertions, 25 deletions
diff --git a/arch/i386/kernel/entry.S b/arch/i386/kernel/entry.S index 87f9f60b80..ba22ec8fab 100644 --- a/arch/i386/kernel/entry.S +++ b/arch/i386/kernel/entry.S | |||
| @@ -591,11 +591,9 @@ ENTRY(name) \ | |||
| 591 | /* The include is where all of the SMP etc. interrupts come from */ | 591 | /* The include is where all of the SMP etc. interrupts come from */ |
| 592 | #include "entry_arch.h" | 592 | #include "entry_arch.h" |
| 593 | 593 | ||
| 594 | ENTRY(divide_error) | 594 | KPROBE_ENTRY(page_fault) |
| 595 | RING0_INT_FRAME | 595 | RING0_EC_FRAME |
| 596 | pushl $0 # no error code | 596 | pushl $do_page_fault |
| 597 | CFI_ADJUST_CFA_OFFSET 4 | ||
| 598 | pushl $do_divide_error | ||
| 599 | CFI_ADJUST_CFA_OFFSET 4 | 597 | CFI_ADJUST_CFA_OFFSET 4 |
| 600 | ALIGN | 598 | ALIGN |
| 601 | error_code: | 599 | error_code: |
| @@ -645,6 +643,7 @@ error_code: | |||
| 645 | call *%edi | 643 | call *%edi |
| 646 | jmp ret_from_exception | 644 | jmp ret_from_exception |
| 647 | CFI_ENDPROC | 645 | CFI_ENDPROC |
| 646 | KPROBE_END(page_fault) | ||
| 648 | 647 | ||
| 649 | ENTRY(coprocessor_error) | 648 | ENTRY(coprocessor_error) |
| 650 | RING0_INT_FRAME | 649 | RING0_INT_FRAME |
| @@ -720,7 +719,8 @@ debug_stack_correct: | |||
| 720 | call do_debug | 719 | call do_debug |
| 721 | jmp ret_from_exception | 720 | jmp ret_from_exception |
| 722 | CFI_ENDPROC | 721 | CFI_ENDPROC |
| 723 | .previous .text | 722 | KPROBE_END(debug) |
| 723 | |||
| 724 | /* | 724 | /* |
| 725 | * NMI is doubly nasty. It can happen _while_ we're handling | 725 | * NMI is doubly nasty. It can happen _while_ we're handling |
| 726 | * a debug fault, and the debug fault hasn't yet been able to | 726 | * a debug fault, and the debug fault hasn't yet been able to |
| @@ -816,7 +816,7 @@ KPROBE_ENTRY(int3) | |||
| 816 | call do_int3 | 816 | call do_int3 |
| 817 | jmp ret_from_exception | 817 | jmp ret_from_exception |
| 818 | CFI_ENDPROC | 818 | CFI_ENDPROC |
| 819 | .previous .text | 819 | KPROBE_END(int3) |
| 820 | 820 | ||
| 821 | ENTRY(overflow) | 821 | ENTRY(overflow) |
| 822 | RING0_INT_FRAME | 822 | RING0_INT_FRAME |
| @@ -881,7 +881,7 @@ KPROBE_ENTRY(general_protection) | |||
| 881 | CFI_ADJUST_CFA_OFFSET 4 | 881 | CFI_ADJUST_CFA_OFFSET 4 |
| 882 | jmp error_code | 882 | jmp error_code |
| 883 | CFI_ENDPROC | 883 | CFI_ENDPROC |
| 884 | .previous .text | 884 | KPROBE_END(general_protection) |
| 885 | 885 | ||
| 886 | ENTRY(alignment_check) | 886 | ENTRY(alignment_check) |
| 887 | RING0_EC_FRAME | 887 | RING0_EC_FRAME |
| @@ -890,13 +890,14 @@ ENTRY(alignment_check) | |||
| 890 | jmp error_code | 890 | jmp error_code |
| 891 | CFI_ENDPROC | 891 | CFI_ENDPROC |
| 892 | 892 | ||
| 893 | KPROBE_ENTRY(page_fault) | 893 | ENTRY(divide_error) |
| 894 | RING0_EC_FRAME | 894 | RING0_INT_FRAME |
| 895 | pushl $do_page_fault | 895 | pushl $0 # no error code |
| 896 | CFI_ADJUST_CFA_OFFSET 4 | ||
| 897 | pushl $do_divide_error | ||
| 896 | CFI_ADJUST_CFA_OFFSET 4 | 898 | CFI_ADJUST_CFA_OFFSET 4 |
| 897 | jmp error_code | 899 | jmp error_code |
| 898 | CFI_ENDPROC | 900 | CFI_ENDPROC |
| 899 | .previous .text | ||
| 900 | 901 | ||
| 901 | #ifdef CONFIG_X86_MCE | 902 | #ifdef CONFIG_X86_MCE |
| 902 | ENTRY(machine_check) | 903 | ENTRY(machine_check) |
diff --git a/arch/x86_64/kernel/entry.S b/arch/x86_64/kernel/entry.S index 2092f565aa..780f9b2616 100644 --- a/arch/x86_64/kernel/entry.S +++ b/arch/x86_64/kernel/entry.S | |||
| @@ -819,7 +819,7 @@ paranoid_schedule\trace: | |||
| 819 | * Exception entry point. This expects an error code/orig_rax on the stack | 819 | * Exception entry point. This expects an error code/orig_rax on the stack |
| 820 | * and the exception handler in %rax. | 820 | * and the exception handler in %rax. |
| 821 | */ | 821 | */ |
| 822 | ENTRY(error_entry) | 822 | KPROBE_ENTRY(error_entry) |
| 823 | _frame RDI | 823 | _frame RDI |
| 824 | /* rdi slot contains rax, oldrax contains error code */ | 824 | /* rdi slot contains rax, oldrax contains error code */ |
| 825 | cld | 825 | cld |
| @@ -903,7 +903,7 @@ error_kernelspace: | |||
| 903 | cmpq $gs_change,RIP(%rsp) | 903 | cmpq $gs_change,RIP(%rsp) |
| 904 | je error_swapgs | 904 | je error_swapgs |
| 905 | jmp error_sti | 905 | jmp error_sti |
| 906 | END(error_entry) | 906 | KPROBE_END(error_entry) |
| 907 | 907 | ||
| 908 | /* Reload gs selector with exception handling */ | 908 | /* Reload gs selector with exception handling */ |
| 909 | /* edi: new selector */ | 909 | /* edi: new selector */ |
| @@ -1025,8 +1025,7 @@ ENDPROC(execve) | |||
| 1025 | 1025 | ||
| 1026 | KPROBE_ENTRY(page_fault) | 1026 | KPROBE_ENTRY(page_fault) |
| 1027 | errorentry do_page_fault | 1027 | errorentry do_page_fault |
| 1028 | END(page_fault) | 1028 | KPROBE_END(page_fault) |
| 1029 | .previous .text | ||
| 1030 | 1029 | ||
| 1031 | ENTRY(coprocessor_error) | 1030 | ENTRY(coprocessor_error) |
| 1032 | zeroentry do_coprocessor_error | 1031 | zeroentry do_coprocessor_error |
| @@ -1047,8 +1046,7 @@ KPROBE_ENTRY(debug) | |||
| 1047 | CFI_ADJUST_CFA_OFFSET 8 | 1046 | CFI_ADJUST_CFA_OFFSET 8 |
| 1048 | paranoidentry do_debug, DEBUG_STACK | 1047 | paranoidentry do_debug, DEBUG_STACK |
| 1049 | paranoidexit | 1048 | paranoidexit |
| 1050 | END(debug) | 1049 | KPROBE_END(debug) |
| 1051 | .previous .text | ||
| 1052 | 1050 | ||
| 1053 | /* runs on exception stack */ | 1051 | /* runs on exception stack */ |
| 1054 | KPROBE_ENTRY(nmi) | 1052 | KPROBE_ENTRY(nmi) |
| @@ -1062,8 +1060,7 @@ KPROBE_ENTRY(nmi) | |||
| 1062 | jmp paranoid_exit1 | 1060 | jmp paranoid_exit1 |
| 1063 | CFI_ENDPROC | 1061 | CFI_ENDPROC |
| 1064 | #endif | 1062 | #endif |
| 1065 | END(nmi) | 1063 | KPROBE_END(nmi) |
| 1066 | .previous .text | ||
| 1067 | 1064 | ||
| 1068 | KPROBE_ENTRY(int3) | 1065 | KPROBE_ENTRY(int3) |
| 1069 | INTR_FRAME | 1066 | INTR_FRAME |
| @@ -1072,8 +1069,7 @@ KPROBE_ENTRY(int3) | |||
| 1072 | paranoidentry do_int3, DEBUG_STACK | 1069 | paranoidentry do_int3, DEBUG_STACK |
| 1073 | jmp paranoid_exit1 | 1070 | jmp paranoid_exit1 |
| 1074 | CFI_ENDPROC | 1071 | CFI_ENDPROC |
| 1075 | END(int3) | 1072 | KPROBE_END(int3) |
| 1076 | .previous .text | ||
| 1077 | 1073 | ||
| 1078 | ENTRY(overflow) | 1074 | ENTRY(overflow) |
| 1079 | zeroentry do_overflow | 1075 | zeroentry do_overflow |
| @@ -1121,8 +1117,7 @@ END(stack_segment) | |||
| 1121 | 1117 | ||
| 1122 | KPROBE_ENTRY(general_protection) | 1118 | KPROBE_ENTRY(general_protection) |
| 1123 | errorentry do_general_protection | 1119 | errorentry do_general_protection |
| 1124 | END(general_protection) | 1120 | KPROBE_END(general_protection) |
| 1125 | .previous .text | ||
| 1126 | 1121 | ||
| 1127 | ENTRY(alignment_check) | 1122 | ENTRY(alignment_check) |
| 1128 | errorentry do_alignment_check | 1123 | errorentry do_alignment_check |
diff --git a/include/linux/linkage.h b/include/linux/linkage.h index 932021f872..6c9873f882 100644 --- a/include/linux/linkage.h +++ b/include/linux/linkage.h | |||
| @@ -35,9 +35,13 @@ | |||
| 35 | #endif | 35 | #endif |
| 36 | 36 | ||
| 37 | #define KPROBE_ENTRY(name) \ | 37 | #define KPROBE_ENTRY(name) \ |
| 38 | .section .kprobes.text, "ax"; \ | 38 | .pushsection .kprobes.text, "ax"; \ |
| 39 | ENTRY(name) | 39 | ENTRY(name) |
| 40 | 40 | ||
| 41 | #define KPROBE_END(name) \ | ||
| 42 | END(name); \ | ||
| 43 | .popsection | ||
| 44 | |||
| 41 | #ifndef END | 45 | #ifndef END |
| 42 | #define END(name) \ | 46 | #define END(name) \ |
| 43 | .size name, .-name | 47 | .size name, .-name |
