PERFORCE change 100717 for review
Roman Divacky
rdivacky at FreeBSD.org
Thu Jul 6 11:02:15 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=100717
Change 100717 by rdivacky at rdivacky_witten on 2006/07/06 11:01:59
BSDL version of the segment translation macros.
Affected files ...
.. //depot/projects/soc2006/rdivacky_linuxolator/i386/linux/linux.h#5 edit
Differences ...
==== //depot/projects/soc2006/rdivacky_linuxolator/i386/linux/linux.h#5 (text+ko) ====
@@ -718,4 +718,55 @@
l_uint useable:1;
};
+#define LINUX_LOWERWORD 0x0000ffff
+
+/* macros which does the same thing as those in linux include/asm-um/ldt-i386.h
+ * these convert linux user-space descriptor to machine one
+ */
+#define LDT_entry_a(info) \
+ ((((info)->base_addr & LINUX_LOWERWORD) << 16) | ((info)->limit & LINUX_LOWERWORD))
+
+#define ENTRY_B_READ_EXEC_ONLY 9
+#define ENTRY_B_CONTENTS 10
+#define ENTRY_B_SEG_NOT_PRESENT 15
+#define ENTRY_B_BASE_ADDR 16
+#define ENTRY_B_USEABLE 20
+#define ENTRY_B_SEG32BIT 22
+#define ENTRY_B_LIMIT 23
+
+#define LDT_entry_b(info) \
+ (((info)->base_addr & 0xff000000) | \
+ ((info)->limit & 0xf0000) | \
+ ((info)->contents << ENTRY_B_CONTENTS) | \
+ (((info)->seg_not_present == 0) << ENTRY_B_SEG_NOT_PRESENT) | \
+ (((info)->base_addr & 0x00ff0000) >> ENTRY_B_BASE_ADDR) | \
+ (((info)->read_exec_only == 0) << ENTRY_B_READ_EXEC_ONLY) | \
+ ((info)->seg_32bit << ENTRY_B_SEG32BIT) | \
+ ((info)->useable << ENTRY_B_USEABLE) | \
+ ((info)->limit_in_pages << ENTRY_B_LIMIT) | 0x7000)
+
+#define LDT_empty(info) (\
+ (info)->base_addr == 0 && \
+ (info)->limit == 0 && \
+ (info)->contents == 0 && \
+ (info)->seg_not_present == 1 && \
+ (info)->read_exec_only == 1 && \
+ (info)->seg_32bit == 0 && \
+ (info)->limit_in_pages == 0 && \
+ (info)->useable == 0 )
+
+/* modeled after similar structure in NetBSD
+ * this will be extended as we need more functionality
+ */
+struct linux_emuldata {
+ pid_t pid;
+
+ int *child_set_tid; /* in clone(): Child's TID to set on clone */
+ int *child_clear_tid; /* in clone(): Child's TID to clear on exit */
+ int *set_tid; /* in clone(): Own TID to set on clone */
+ int *clear_tid; /* Own TID to clear on exit */
+
+ SLIST_ENTRY(linux_emuldata) emuldatas;
+};
+
#endif /* !_I386_LINUX_LINUX_H_ */
More information about the p4-projects
mailing list