3feb88562d
If running on a host not supporting TLS (for instance 2.4) we should report that cleanly to the user, instead of printing not comprehensible "error 5" for that. Additionally, i386 and x86_64 support different ranges for user_desc->entry_number, and we must account for that; we couldn't pass ourselves -1 because we need to override previously existing TLS descriptors which glibc has possibly set, so test at startup the range to use. x86 and x86_64 existing ranges are hardcoded. 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>
33 lines
769 B
C
33 lines
769 B
C
#ifndef _SYSDEP_TLS_H
|
|
#define _SYSDEP_TLS_H
|
|
|
|
# ifndef __KERNEL__
|
|
|
|
/* Change name to avoid conflicts with the original one from <asm/ldt.h>, which
|
|
* may be named user_desc (but in 2.4 and in header matching its API was named
|
|
* modify_ldt_ldt_s). */
|
|
|
|
typedef struct um_dup_user_desc {
|
|
unsigned int entry_number;
|
|
unsigned int base_addr;
|
|
unsigned int limit;
|
|
unsigned int seg_32bit:1;
|
|
unsigned int contents:2;
|
|
unsigned int read_exec_only:1;
|
|
unsigned int limit_in_pages:1;
|
|
unsigned int seg_not_present:1;
|
|
unsigned int useable:1;
|
|
} user_desc_t;
|
|
|
|
# else /* __KERNEL__ */
|
|
|
|
# include <asm/ldt.h>
|
|
typedef struct user_desc user_desc_t;
|
|
|
|
# endif /* __KERNEL__ */
|
|
|
|
#define GDT_ENTRY_TLS_MIN_I386 6
|
|
#define GDT_ENTRY_TLS_MIN_X86_64 12
|
|
|
|
#endif /* _SYSDEP_TLS_H */
|