730
730
* %eax: prev task
731
731
* %edx: next task
732
732
*/
733
+ .pushsection .text , "ax"
733
734
SYM_CODE_START(__switch_to_asm)
734
735
/*
735
736
* Save callee-saved registers
@@ -776,6 +777,7 @@ SYM_CODE_START(__switch_to_asm)
776
777
777
778
jmp __switch_to
778
779
SYM_CODE_END(__switch_to_asm)
780
+ .popsection
779
781
780
782
/*
781
783
* The unwinder expects the last frame on the stack to always be at the same
@@ -784,6 +786,7 @@ SYM_CODE_END(__switch_to_asm)
784
786
* asmlinkage function so its argument has to be pushed on the stack. This
785
787
* wrapper creates a proper "end of stack" frame header before the call.
786
788
*/
789
+ .pushsection .text , "ax"
787
790
SYM_FUNC_START(schedule_tail_wrapper)
788
791
FRAME_BEGIN
789
792
@@ -794,13 +797,16 @@ SYM_FUNC_START(schedule_tail_wrapper)
794
797
FRAME_END
795
798
ret
796
799
SYM_FUNC_END(schedule_tail_wrapper)
800
+ .popsection
801
+
797
802
/*
798
803
* A newly forked process directly context switches into this address.
799
804
*
800
805
* eax: prev task we switched from
801
806
* ebx: kernel thread func (NULL for user thread)
802
807
* edi: kernel thread arg
803
808
*/
809
+ .pushsection .text , "ax"
804
810
SYM_CODE_START(ret_from_fork)
805
811
call schedule_tail_wrapper
806
812
@@ -825,6 +831,7 @@ SYM_CODE_START(ret_from_fork)
825
831
movl $0 , PT_EAX(%esp )
826
832
jmp 2b
827
833
SYM_CODE_END(ret_from_fork)
834
+ .popsection
828
835
829
836
/*
830
837
* Return to user mode is not as complex as all this looks,
@@ -1691,6 +1698,7 @@ SYM_CODE_START(general_protection)
1691
1698
jmp common_exception
1692
1699
SYM_CODE_END(general_protection)
1693
1700
1701
+ .pushsection .text , "ax"
1694
1702
SYM_CODE_START(rewind_stack_do_exit)
1695
1703
/* Prevent any naive code from trying to unwind to our caller. */
1696
1704
xorl %ebp , %ebp
@@ -1701,3 +1709,4 @@ SYM_CODE_START(rewind_stack_do_exit)
1701
1709
call do_exit
1702
1710
1: jmp 1b
1703
1711
SYM_CODE_END(rewind_stack_do_exit)
1712
+ .popsection
0 commit comments