diff options
Diffstat (limited to 'arch/x86_64/kernel/entry.S')
-rw-r--r-- | arch/x86_64/kernel/entry.S | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/arch/x86_64/kernel/entry.S b/arch/x86_64/kernel/entry.S index b8285cf1a9c3..38a7b2d528e2 100644 --- a/arch/x86_64/kernel/entry.S +++ b/arch/x86_64/kernel/entry.S | |||
@@ -535,6 +535,8 @@ END(stub_rt_sigreturn) | |||
535 | 1: incl %gs:pda_irqcount | 535 | 1: incl %gs:pda_irqcount |
536 | cmoveq %gs:pda_irqstackptr,%rsp | 536 | cmoveq %gs:pda_irqstackptr,%rsp |
537 | push %rbp # backlink for old unwinder | 537 | push %rbp # backlink for old unwinder |
538 | CFI_ADJUST_CFA_OFFSET 8 | ||
539 | CFI_REL_OFFSET rbp,0 | ||
538 | /* | 540 | /* |
539 | * We entered an interrupt context - irqs are off: | 541 | * We entered an interrupt context - irqs are off: |
540 | */ | 542 | */ |
@@ -978,6 +980,11 @@ ENTRY(kernel_thread) | |||
978 | call do_fork | 980 | call do_fork |
979 | movq %rax,RAX(%rsp) | 981 | movq %rax,RAX(%rsp) |
980 | xorl %edi,%edi | 982 | xorl %edi,%edi |
983 | test %rax,%rax | ||
984 | jnz 1f | ||
985 | /* terminate stack in child */ | ||
986 | movq %rdi,RIP(%rsp) | ||
987 | 1: | ||
981 | 988 | ||
982 | /* | 989 | /* |
983 | * It isn't worth to check for reschedule here, | 990 | * It isn't worth to check for reschedule here, |
@@ -1169,6 +1176,7 @@ ENTRY(call_softirq) | |||
1169 | incl %gs:pda_irqcount | 1176 | incl %gs:pda_irqcount |
1170 | cmove %gs:pda_irqstackptr,%rsp | 1177 | cmove %gs:pda_irqstackptr,%rsp |
1171 | push %rbp # backlink for old unwinder | 1178 | push %rbp # backlink for old unwinder |
1179 | CFI_ADJUST_CFA_OFFSET 8 | ||
1172 | call __do_softirq | 1180 | call __do_softirq |
1173 | leaveq | 1181 | leaveq |
1174 | CFI_DEF_CFA_REGISTER rsp | 1182 | CFI_DEF_CFA_REGISTER rsp |