diff options
-rw-r--r-- | arch/x86/kernel/entry_64.S | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S index 7cc2de796146..6aa6932e21b1 100644 --- a/arch/x86/kernel/entry_64.S +++ b/arch/x86/kernel/entry_64.S | |||
@@ -1365,10 +1365,8 @@ END(do_hypervisor_callback) | |||
1365 | # with its current contents: any discrepancy means we in category 1. | 1365 | # with its current contents: any discrepancy means we in category 1. |
1366 | */ | 1366 | */ |
1367 | ENTRY(xen_failsafe_callback) | 1367 | ENTRY(xen_failsafe_callback) |
1368 | #if 1 | 1368 | framesz = (RIP-0x30) /* workaround buggy gas */ |
1369 | ud2a | 1369 | _frame framesz |
1370 | #else | ||
1371 | _frame (RIP-0x30) | ||
1372 | CFI_REL_OFFSET rcx, 0 | 1370 | CFI_REL_OFFSET rcx, 0 |
1373 | CFI_REL_OFFSET r11, 8 | 1371 | CFI_REL_OFFSET r11, 8 |
1374 | movw %ds,%cx | 1372 | movw %ds,%cx |
@@ -1391,8 +1389,13 @@ ENTRY(xen_failsafe_callback) | |||
1391 | CFI_RESTORE r11 | 1389 | CFI_RESTORE r11 |
1392 | addq $0x30,%rsp | 1390 | addq $0x30,%rsp |
1393 | CFI_ADJUST_CFA_OFFSET -0x30 | 1391 | CFI_ADJUST_CFA_OFFSET -0x30 |
1394 | movq $11,%rdi /* SIGSEGV */ | 1392 | pushq $0 |
1395 | jmp do_exit | 1393 | CFI_ADJUST_CFA_OFFSET 8 |
1394 | pushq %r11 | ||
1395 | CFI_ADJUST_CFA_OFFSET 8 | ||
1396 | pushq %rcx | ||
1397 | CFI_ADJUST_CFA_OFFSET 8 | ||
1398 | jmp general_protection | ||
1396 | CFI_RESTORE_STATE | 1399 | CFI_RESTORE_STATE |
1397 | 1: /* Segment mismatch => Category 1 (Bad segment). Retry the IRET. */ | 1400 | 1: /* Segment mismatch => Category 1 (Bad segment). Retry the IRET. */ |
1398 | movq (%rsp),%rcx | 1401 | movq (%rsp),%rcx |
@@ -1406,7 +1409,6 @@ ENTRY(xen_failsafe_callback) | |||
1406 | SAVE_ALL | 1409 | SAVE_ALL |
1407 | jmp error_exit | 1410 | jmp error_exit |
1408 | CFI_ENDPROC | 1411 | CFI_ENDPROC |
1409 | #endif | ||
1410 | END(xen_failsafe_callback) | 1412 | END(xen_failsafe_callback) |
1411 | 1413 | ||
1412 | #endif /* CONFIG_XEN */ | 1414 | #endif /* CONFIG_XEN */ |