You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.6 KiB
62 lines
1.6 KiB
/*
|
|
* Copyright 2002-2019 Intel Corporation.
|
|
*
|
|
* This software is provided to you as Sample Source Code as defined in the accompanying
|
|
* End User License Agreement for the Intel(R) Software Development Products ("Agreement")
|
|
* section 1.L.
|
|
*
|
|
* This software and the related documents are provided as is, with no express or implied
|
|
* warranties, other than those that are expressly stated in the License.
|
|
*/
|
|
|
|
#
|
|
# Test for iretq in 64 bit mode.
|
|
# The code for iretd is commented out, since I haven't been able to find
|
|
# a coherent description of what it is supposed to do. (Working to the SDM description
|
|
# gives code that SEGVs)
|
|
#
|
|
|
|
# iretd_func:
|
|
# mov $-1,%rax
|
|
# .byte 0xcf
|
|
|
|
# .type iretdTest, @function
|
|
# .global iretdTest
|
|
# iretdTest:
|
|
# # We have to build the stack frame ourselves
|
|
# sub $12,%rsp
|
|
# mov $-1, %rax
|
|
# mov %eax,8(%rsp) # Write the flags to one
|
|
# mov %cs, %rax
|
|
# mov %eax,4(%rsp)
|
|
# lea here,%rax
|
|
# mov %eax,0(%rsp)
|
|
# jmp iretd_func
|
|
# here:
|
|
# ret
|
|
|
|
iret_func:
|
|
mov $-1,%rax
|
|
iretq
|
|
|
|
#ifndef TARGET_MAC
|
|
.type iretTest, @function
|
|
#endif
|
|
.global iretTest
|
|
iretTest:
|
|
push %rbx
|
|
# Move the stack pointer down, so that we can check that the stack pointer
|
|
# is correctly restored by the iretq
|
|
mov %rsp,%rbx
|
|
sub $80,%rsp
|
|
mov %ss,%rax
|
|
push %rax
|
|
push %rbx # Restored stack pointer
|
|
pushfq
|
|
mov %cs,%rax
|
|
push %rax
|
|
call iret_func
|
|
pop %rbx
|
|
ret
|
|
|