| From d103475875858ab8a2e6b53ce178bb2f63883d4c Mon Sep 17 00:00:00 2001 |
| From: Khem Raj <raj.khem@gmail.com> |
| Date: Wed, 5 Jul 2017 17:37:56 -0700 |
| Subject: [PATCH 3/3] tests/seg_override: Replace __modify_ldt() with syscall() |
| |
| __modify_ldt() is specific to glibc, replacing it with syscall() |
| makes it more portable. |
| |
| Signed-off-by: Khem Raj <raj.khem@gmail.com> |
| --- |
| Upstream-Status: Submitted |
| |
| none/tests/x86-linux/seg_override.c | 15 ++++++--------- |
| 1 file changed, 6 insertions(+), 9 deletions(-) |
| |
| diff --git a/none/tests/x86-linux/seg_override.c b/none/tests/x86-linux/seg_override.c |
| index b7619c9..c89874b 100644 |
| --- a/none/tests/x86-linux/seg_override.c |
| +++ b/none/tests/x86-linux/seg_override.c |
| @@ -2,6 +2,8 @@ |
| #include <stdio.h> |
| #include <errno.h> |
| #include <string.h> |
| +#include <unistd.h> |
| +#include <syscall.h> |
| |
| /* Stuff from Wine. */ |
| |
| @@ -52,14 +54,11 @@ inline static unsigned int wine_ldt_get_limit( const LDT_ENTRY *ent ) |
| /* our copy of the ldt */ |
| LDT_ENTRY ldt_copy[8192]; |
| |
| -/* System call to set LDT entry. */ |
| -//extern int __modify_ldt (int, struct modify_ldt_ldt_s *, size_t); |
| -extern int __modify_ldt (int, void *, size_t); |
| - |
| void print_ldt ( void ) |
| { |
| int res; |
| - res = __modify_ldt( 0, ldt_copy, 8192*sizeof(LDT_ENTRY) ); |
| + /* System call to set LDT entry. */ |
| + res = syscall(SYS_modify_ldt, 0, ldt_copy, 8192*sizeof(LDT_ENTRY) ); |
| printf("got %d bytes\n", res ); |
| perror("error is"); |
| } |
| @@ -83,9 +82,6 @@ struct modify_ldt_ldt_s |
| unsigned int empty:25; |
| }; |
| |
| -/* System call to set LDT entry. */ |
| -//extern int __modify_ldt (int, struct modify_ldt_ldt_s *, size_t); |
| - |
| void set_ldt1 ( void* base ) |
| { |
| int stat; |
| @@ -102,7 +98,8 @@ void set_ldt1 ( void* base ) |
| ldt_entry.read_exec_only = 0; |
| ldt_entry.limit_in_pages = 0; |
| ldt_entry.seg_not_present = 0; |
| - stat = __modify_ldt (1, &ldt_entry, sizeof (ldt_entry)); |
| + /* System call to set LDT entry. */ |
| + stat = syscall(SYS_modify_ldt, 1, &ldt_entry, sizeof (ldt_entry)); |
| printf("stat = %d\n", stat); |
| } |
| |
| -- |
| 2.13.2 |
| |