diff options
| author | Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it> | 2006-03-31 05:30:23 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-31 15:18:52 -0500 |
| commit | dd77aec07aec5cb81aed3b4ef79c1ff8bd0e2a68 (patch) | |
| tree | 2f1e75e362acce09b789a309b685a1d791b35a24 | |
| parent | aa6758d4867cd07bd76105ade6177fe6148e559a (diff) | |
[PATCH] uml: tls support: hack to make it compile on any host
Copy the definition of struct user_desc (with another name) for use by
userspace sources (where we use the host headers, and we can't be sure about
their content) to make sure UML compiles.
Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
Acked-by: Jeff Dike <jdike@addtoit.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
| -rw-r--r-- | arch/um/include/os.h | 7 | ||||
| -rw-r--r-- | arch/um/include/sysdep-i386/tls.h | 28 | ||||
| -rw-r--r-- | arch/um/include/sysdep-x86_64/tls.h | 29 | ||||
| -rw-r--r-- | arch/um/os-Linux/tls.c | 15 |
4 files changed, 68 insertions, 11 deletions
diff --git a/arch/um/include/os.h b/arch/um/include/os.h index e9e1db1e08d0..1b780b5dacbe 100644 --- a/arch/um/include/os.h +++ b/arch/um/include/os.h | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | #include "kern_util.h" | 13 | #include "kern_util.h" |
| 14 | #include "skas/mm_id.h" | 14 | #include "skas/mm_id.h" |
| 15 | #include "irq_user.h" | 15 | #include "irq_user.h" |
| 16 | #include "sysdep/tls.h" | ||
| 16 | 17 | ||
| 17 | #define OS_TYPE_FILE 1 | 18 | #define OS_TYPE_FILE 1 |
| 18 | #define OS_TYPE_DIR 2 | 19 | #define OS_TYPE_DIR 2 |
| @@ -238,10 +239,10 @@ extern int helper_wait(int pid); | |||
| 238 | 239 | ||
| 239 | 240 | ||
| 240 | /* tls.c */ | 241 | /* tls.c */ |
| 241 | extern int os_set_thread_area(void *data, int pid); | 242 | extern int os_set_thread_area(user_desc_t *info, int pid); |
| 242 | extern int os_get_thread_area(void *data, int pid); | 243 | extern int os_get_thread_area(user_desc_t *info, int pid); |
| 243 | /* umid.c */ | ||
| 244 | 244 | ||
| 245 | /* umid.c */ | ||
| 245 | extern int umid_file_name(char *name, char *buf, int len); | 246 | extern int umid_file_name(char *name, char *buf, int len); |
| 246 | extern int set_umid(char *name); | 247 | extern int set_umid(char *name); |
| 247 | extern char *get_umid(void); | 248 | extern char *get_umid(void); |
diff --git a/arch/um/include/sysdep-i386/tls.h b/arch/um/include/sysdep-i386/tls.h new file mode 100644 index 000000000000..938f953b26cc --- /dev/null +++ b/arch/um/include/sysdep-i386/tls.h | |||
| @@ -0,0 +1,28 @@ | |||
| 1 | #ifndef _SYSDEP_TLS_H | ||
| 2 | #define _SYSDEP_TLS_H | ||
| 3 | |||
| 4 | # ifndef __KERNEL__ | ||
| 5 | |||
| 6 | /* Change name to avoid conflicts with the original one from <asm/ldt.h>, which | ||
| 7 | * may be named user_desc (but in 2.4 and in header matching its API was named | ||
| 8 | * modify_ldt_ldt_s). */ | ||
| 9 | |||
| 10 | typedef struct um_dup_user_desc { | ||
| 11 | unsigned int entry_number; | ||
| 12 | unsigned int base_addr; | ||
| 13 | unsigned int limit; | ||
| 14 | unsigned int seg_32bit:1; | ||
| 15 | unsigned int contents:2; | ||
| 16 | unsigned int read_exec_only:1; | ||
| 17 | unsigned int limit_in_pages:1; | ||
| 18 | unsigned int seg_not_present:1; | ||
| 19 | unsigned int useable:1; | ||
| 20 | } user_desc_t; | ||
| 21 | |||
| 22 | # else /* __KERNEL__ */ | ||
| 23 | |||
| 24 | # include <asm/ldt.h> | ||
| 25 | typedef struct user_desc user_desc_t; | ||
| 26 | |||
| 27 | # endif /* __KERNEL__ */ | ||
| 28 | #endif /* _SYSDEP_TLS_H */ | ||
diff --git a/arch/um/include/sysdep-x86_64/tls.h b/arch/um/include/sysdep-x86_64/tls.h new file mode 100644 index 000000000000..35f19f25bd3b --- /dev/null +++ b/arch/um/include/sysdep-x86_64/tls.h | |||
| @@ -0,0 +1,29 @@ | |||
| 1 | #ifndef _SYSDEP_TLS_H | ||
| 2 | #define _SYSDEP_TLS_H | ||
| 3 | |||
| 4 | # ifndef __KERNEL__ | ||
| 5 | |||
| 6 | /* Change name to avoid conflicts with the original one from <asm/ldt.h>, which | ||
| 7 | * may be named user_desc (but in 2.4 and in header matching its API was named | ||
| 8 | * modify_ldt_ldt_s). */ | ||
| 9 | |||
| 10 | typedef struct um_dup_user_desc { | ||
| 11 | unsigned int entry_number; | ||
| 12 | unsigned int base_addr; | ||
| 13 | unsigned int limit; | ||
| 14 | unsigned int seg_32bit:1; | ||
| 15 | unsigned int contents:2; | ||
| 16 | unsigned int read_exec_only:1; | ||
| 17 | unsigned int limit_in_pages:1; | ||
| 18 | unsigned int seg_not_present:1; | ||
| 19 | unsigned int useable:1; | ||
| 20 | unsigned int lm:1; | ||
| 21 | } user_desc_t; | ||
| 22 | |||
| 23 | # else /* __KERNEL__ */ | ||
| 24 | |||
| 25 | # include <asm/ldt.h> | ||
| 26 | typedef struct user_desc user_desc_t; | ||
| 27 | |||
| 28 | # endif /* __KERNEL__ */ | ||
| 29 | #endif /* _SYSDEP_TLS_H */ | ||
diff --git a/arch/um/os-Linux/tls.c b/arch/um/os-Linux/tls.c index 63dfcf709377..642db553ab60 100644 --- a/arch/um/os-Linux/tls.c +++ b/arch/um/os-Linux/tls.c | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | #include <errno.h> | 1 | #include <errno.h> |
| 2 | #include <sys/ptrace.h> | 2 | #include <sys/ptrace.h> |
| 3 | #include <asm/ldt.h> | 3 | #include <asm/ldt.h> |
| 4 | #include "sysdep/tls.h" | ||
| 4 | #include "uml-config.h" | 5 | #include "uml-config.h" |
| 5 | 6 | ||
| 6 | /* TLS support - we basically rely on the host's one.*/ | 7 | /* TLS support - we basically rely on the host's one.*/ |
| @@ -18,9 +19,8 @@ | |||
| 18 | #define PTRACE_SET_THREAD_AREA 26 | 19 | #define PTRACE_SET_THREAD_AREA 26 |
| 19 | #endif | 20 | #endif |
| 20 | 21 | ||
| 21 | int os_set_thread_area(void *data, int pid) | 22 | int os_set_thread_area(user_desc_t *info, int pid) |
| 22 | { | 23 | { |
| 23 | struct user_desc *info = data; | ||
| 24 | int ret; | 24 | int ret; |
| 25 | 25 | ||
| 26 | ret = ptrace(PTRACE_SET_THREAD_AREA, pid, info->entry_number, | 26 | ret = ptrace(PTRACE_SET_THREAD_AREA, pid, info->entry_number, |
| @@ -32,9 +32,8 @@ int os_set_thread_area(void *data, int pid) | |||
| 32 | 32 | ||
| 33 | #ifdef UML_CONFIG_MODE_SKAS | 33 | #ifdef UML_CONFIG_MODE_SKAS |
| 34 | 34 | ||
| 35 | int os_get_thread_area(void *data, int pid) | 35 | int os_get_thread_area(user_desc_t *info, int pid) |
| 36 | { | 36 | { |
| 37 | struct user_desc *info = data; | ||
| 38 | int ret; | 37 | int ret; |
| 39 | 38 | ||
| 40 | ret = ptrace(PTRACE_GET_THREAD_AREA, pid, info->entry_number, | 39 | ret = ptrace(PTRACE_GET_THREAD_AREA, pid, info->entry_number, |
| @@ -49,10 +48,10 @@ int os_get_thread_area(void *data, int pid) | |||
| 49 | #ifdef UML_CONFIG_MODE_TT | 48 | #ifdef UML_CONFIG_MODE_TT |
| 50 | #include "linux/unistd.h" | 49 | #include "linux/unistd.h" |
| 51 | 50 | ||
| 52 | _syscall1(int, get_thread_area, struct user_desc *, u_info); | 51 | _syscall1(int, get_thread_area, user_desc_t *, u_info); |
| 53 | _syscall1(int, set_thread_area, struct user_desc *, u_info); | 52 | _syscall1(int, set_thread_area, user_desc_t *, u_info); |
| 54 | 53 | ||
| 55 | int do_set_thread_area_tt(struct user_desc *info) | 54 | int do_set_thread_area_tt(user_desc_t *info) |
| 56 | { | 55 | { |
| 57 | int ret; | 56 | int ret; |
| 58 | 57 | ||
| @@ -63,7 +62,7 @@ int do_set_thread_area_tt(struct user_desc *info) | |||
| 63 | return ret; | 62 | return ret; |
| 64 | } | 63 | } |
| 65 | 64 | ||
| 66 | int do_get_thread_area_tt(struct user_desc *info) | 65 | int do_get_thread_area_tt(user_desc_t *info) |
| 67 | { | 66 | { |
| 68 | int ret; | 67 | int ret; |
| 69 | 68 | ||
