36 const char test_title[] =
"Memory operand and segment emulation tests";
40 unsigned long (*
fn)(
unsigned long);
45 #define GP EXINFO_SYM(GP, 0) 46 #define SS EXINFO_SYM(SS, 0) 51 { stub_none_eax,
"(%eax)", GP },
52 { stub_none_ecx,
"(%ecx)", GP },
53 { stub_none_edx,
"(%edx)", GP },
54 { stub_none_ebx,
"(%ebx)", GP },
55 { stub_none_esp,
"(%esp)",
SS },
56 { stub_none_ebp,
"(%ebp)", SS },
57 { stub_none_esi,
"(%esi)", GP },
58 { stub_none_edi,
"(%edi)", GP },
61 { stub_es_eax,
"%es:(%eax)", GP },
62 { stub_es_ecx,
"%es:(%ecx)", GP },
63 { stub_es_edx,
"%es:(%edx)", GP },
64 { stub_es_ebx,
"%es:(%ebx)", GP },
65 { stub_es_esp,
"%es:(%esp)", GP },
66 { stub_es_ebp,
"%es:(%ebp)", GP },
67 { stub_es_esi,
"%es:(%esi)", GP },
68 { stub_es_edi,
"%es:(%edi)", GP },
71 { stub_cs_eax,
"%cs:(%eax)", GP },
72 { stub_cs_ecx,
"%cs:(%ecx)", GP },
73 { stub_cs_edx,
"%cs:(%edx)", GP },
74 { stub_cs_ebx,
"%cs:(%ebx)", GP },
75 { stub_cs_esp,
"%cs:(%esp)", GP },
76 { stub_cs_ebp,
"%cs:(%ebp)", GP },
77 { stub_cs_esi,
"%cs:(%esi)", GP },
78 { stub_cs_edi,
"%cs:(%edi)", GP },
81 { stub_ss_eax,
"%ss:(%eax)", SS },
82 { stub_ss_ecx,
"%ss:(%ecx)", SS },
83 { stub_ss_edx,
"%ss:(%edx)", SS },
84 { stub_ss_ebx,
"%ss:(%ebx)", SS },
85 { stub_ss_esp,
"%ss:(%esp)", SS },
86 { stub_ss_ebp,
"%ss:(%ebp)", SS },
87 { stub_ss_esi,
"%ss:(%esi)", SS },
88 { stub_ss_edi,
"%ss:(%edi)", SS },
91 { stub_ds_eax,
"%ds:(%eax)", GP },
92 { stub_ds_ecx,
"%ds:(%ecx)", GP },
93 { stub_ds_edx,
"%ds:(%edx)", GP },
94 { stub_ds_ebx,
"%ds:(%ebx)", GP },
95 { stub_ds_esp,
"%ds:(%esp)", GP },
96 { stub_ds_ebp,
"%ds:(%ebp)", GP },
97 { stub_ds_esi,
"%ds:(%esi)", GP },
98 { stub_ds_edi,
"%ds:(%edi)", GP },
101 { stub_fs_eax,
"%fs:(%eax)", GP },
102 { stub_fs_ecx,
"%fs:(%ecx)", GP },
103 { stub_fs_edx,
"%fs:(%edx)", GP },
104 { stub_fs_ebx,
"%fs:(%ebx)", GP },
105 { stub_fs_esp,
"%fs:(%esp)", GP },
106 { stub_fs_ebp,
"%fs:(%ebp)", GP },
107 { stub_fs_esi,
"%fs:(%esi)", GP },
108 { stub_fs_edi,
"%fs:(%edi)", GP },
111 { stub_gs_eax,
"%gs:(%eax)", GP },
112 { stub_gs_ecx,
"%gs:(%ecx)", GP },
113 { stub_gs_edx,
"%gs:(%edx)", GP },
114 { stub_gs_ebx,
"%gs:(%ebx)", GP },
115 { stub_gs_esp,
"%gs:(%esp)", GP },
116 { stub_gs_ebp,
"%gs:(%ebp)", GP },
117 { stub_gs_esi,
"%gs:(%esi)", GP },
118 { stub_gs_edi,
"%gs:(%edi)", GP },
257 unsigned long addr = (~0ul & ~(~0ul >> 1)) +
GB(1);
265 GDTE_SYM(0, 0x7ffff, COMMON, CODE, DPL3, R, D));
270 GDTE_SYM(0, 0x7ffff, COMMON, DATA, DPL3, B, W));
282 " expected %pe, got %pe\n",
291 " expected %pe, got %pe\n",
unsigned long stub_ss_r9(unsigned long)
unsigned int exinfo_t
Packed exception and error code information.
unsigned long stub_es_rsi(unsigned long)
unsigned long stub_gs_rbx(unsigned long)
unsigned long exec_user_param(unsigned long(*fn)(unsigned long), unsigned long p1)
Execute fn(p1) at user privilege, passing its return value back.
unsigned long stub_gs_r10(unsigned long)
unsigned long stub_ss_rcx(unsigned long)
unsigned long stub_none_rbx(unsigned long)
unsigned long stub_ss_r14(unsigned long)
unsigned long stub_ss_rsi(unsigned long)
unsigned long stub_gs_r14(unsigned long)
unsigned long stub_gs_abs(unsigned long)
unsigned long stub_es_rcx(unsigned long)
unsigned long stub_gs_r11(unsigned long)
#define IS_DEFINED(x)
Evalute whether the CONFIG_ token x is defined.
unsigned long stub_none_r13(unsigned long)
unsigned long stub_ds_rax(unsigned long)
unsigned long stub_cs_r12(unsigned long)
unsigned long stub_cs_rsp(unsigned long)
unsigned long stub_cs_r15(unsigned long)
unsigned long stub_gs_r15(unsigned long)
unsigned long stub_cs_r9(unsigned long)
unsigned long stub_fs_rbp(unsigned long)
unsigned long stub_es_r9(unsigned long)
unsigned long stub_fs_r13(unsigned long)
unsigned long stub_cs_rdi(unsigned long)
unsigned long stub_none_rax(unsigned long)
unsigned long stub_gs_r8(unsigned long)
unsigned long stub_ds_rdi(unsigned long)
unsigned long exec_user_ss
unsigned long stub_gs_r12(unsigned long)
unsigned long stub_cs_abs(unsigned long)
unsigned long stub_cs_r10(unsigned long)
unsigned long stub_ds_rdx(unsigned long)
unsigned long stub_fs_rcx(unsigned long)
unsigned long stub_ds_abs(unsigned long)
unsigned long stub_ss_rax(unsigned long)
unsigned long stub_es_rax(unsigned long)
unsigned long stub_cs_r14(unsigned long)
unsigned long stub_ds_rbp(unsigned long)
unsigned long stub_ds_r9(unsigned long)
unsigned long stub_ss_rdi(unsigned long)
unsigned long stub_es_rbx(unsigned long)
unsigned long stub_gs_rax(unsigned long)
unsigned long stub_ss_r11(unsigned long)
unsigned long stub_es_r11(unsigned long)
unsigned long stub_gs_r9(unsigned long)
unsigned long stub_es_r10(unsigned long)
unsigned long stub_cs_rsi(unsigned long)
unsigned long stub_none_rsp(unsigned long)
unsigned long stub_ss_r15(unsigned long)
unsigned long stub_ss_r13(unsigned long)
bool xtf_has_fep
Boolean indicating whether generic Force Emulation Prefix support is available for the test to use...
unsigned long stub_fs_r15(unsigned long)
unsigned long stub_none_rdi(unsigned long)
unsigned long stub_es_r15(unsigned long)
unsigned long stub_ds_r12(unsigned long)
unsigned long stub_es_rbp(unsigned long)
unsigned long stub_gs_rdi(unsigned long)
unsigned long stub_none_r10(unsigned long)
unsigned long stub_none_rdx(unsigned long)
unsigned long stub_cs_rbx(unsigned long)
unsigned long stub_fs_r9(unsigned long)
unsigned long stub_fs_r11(unsigned long)
unsigned long stub_fs_r8(unsigned long)
void xtf_success(const char *fmt,...)
Report test success.
unsigned long stub_none_rbp(unsigned long)
unsigned long stub_cs_rbp(unsigned long)
unsigned long stub_es_rdi(unsigned long)
unsigned long stub_ds_r8(unsigned long)
unsigned long stub_cs_rax(unsigned long)
unsigned long stub_fs_rsp(unsigned long)
user_desc gdt[NR_GDT_ENTRIES]
void xtf_failure(const char *fmt,...)
Report a test failure.
void test_main(void)
To be implemented by each test, as its entry point.
unsigned long stub_es_r12(unsigned long)
unsigned long stub_fs_abs(unsigned long)
unsigned long stub_none_r14(unsigned long)
unsigned long stub_fs_r10(unsigned long)
unsigned long stub_ds_rsp(unsigned long)
unsigned long stub_none_rsi(unsigned long)
unsigned long stub_ss_r8(unsigned long)
unsigned long stub_fs_rsi(unsigned long)
unsigned long stub_fs_rdx(unsigned long)
unsigned long stub_ss_rsp(unsigned long)
unsigned long stub_none_rcx(unsigned long)
unsigned long stub_ss_r10(unsigned long)
static void update_desc(user_desc *ptr, const user_desc new)
Helper to update a live LDT/GDT entry.
unsigned long stub_ds_r14(unsigned long)
unsigned long stub_cs_r13(unsigned long)
unsigned long stub_es_r8(unsigned long)
unsigned long stub_none_r15(unsigned long)
const char test_title[]
The title of the test.
unsigned long stub_none_r11(unsigned long)
unsigned long stub_es_rdx(unsigned long)
unsigned long stub_gs_rdx(unsigned long)
unsigned long stub_es_r14(unsigned long)
unsigned long stub_cs_r11(unsigned long)
unsigned long stub_ds_rbx(unsigned long)
unsigned long stub_fs_r12(unsigned long)
unsigned long stub_none_r9(unsigned long)
unsigned long stub_fs_rdi(unsigned long)
unsigned long stub_es_rsp(unsigned long)
#define _p(v)
Express an abitrary integer v as void *.
unsigned long stub_es_abs(unsigned long)
unsigned long stub_ds_rsi(unsigned long)
unsigned long stub_fs_rbx(unsigned long)
unsigned long stub_ds_r11(unsigned long)
#define GB(num)
Express num in Gigabytes.
unsigned long stub_ds_rcx(unsigned long)
unsigned long stub_ds_r13(unsigned long)
unsigned long stub_ss_rdx(unsigned long)
unsigned long stub_ss_rbx(unsigned long)
unsigned long stub_es_r13(unsigned long)
unsigned long stub_ds_r10(unsigned long)
unsigned long(* fn)(unsigned long)
unsigned long stub_ss_rbp(unsigned long)
unsigned long stub_ss_r12(unsigned long)
unsigned long stub_gs_r13(unsigned long)
unsigned long stub_gs_rsp(unsigned long)
static const struct test tests[]
unsigned long stub_gs_rcx(unsigned long)
unsigned long stub_fs_r14(unsigned long)
unsigned long stub_cs_r8(unsigned long)
#define GDTE_SYM(base, limit,...)
As INIT_GDTE_SYM(), but creates a user_desc object.
unsigned long stub_none_abs(unsigned long)
unsigned long exec_user_cs
unsigned long stub_none_r8(unsigned long)
unsigned long stub_cs_rdx(unsigned long)
unsigned long stub_gs_rbp(unsigned long)
unsigned long stub_fs_rax(unsigned long)
unsigned long stub_ss_abs(unsigned long)
unsigned long stub_gs_rsi(unsigned long)
unsigned long stub_cs_rcx(unsigned long)
unsigned long stub_none_r12(unsigned long)
unsigned long stub_ds_r15(unsigned long)