|
@@ -341,6 +341,31 @@ struct sigcontext {
|
|
|
__u64 rip;
|
|
|
__u64 eflags; /* RFLAGS */
|
|
|
__u16 cs;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Prior to 2.5.64 ("[PATCH] x86-64 updates for 2.5.64-bk3"),
|
|
|
+ * Linux saved and restored fs and gs in these slots. This
|
|
|
+ * was counterproductive, as fsbase and gsbase were never
|
|
|
+ * saved, so arch_prctl was presumably unreliable.
|
|
|
+ *
|
|
|
+ * These slots should never be reused without extreme caution:
|
|
|
+ *
|
|
|
+ * - Some DOSEMU versions stash fs and gs in these slots manually,
|
|
|
+ * thus overwriting anything the kernel expects to be preserved
|
|
|
+ * in these slots.
|
|
|
+ *
|
|
|
+ * - If these slots are ever needed for any other purpose,
|
|
|
+ * there is some risk that very old 64-bit binaries could get
|
|
|
+ * confused. I doubt that many such binaries still work,
|
|
|
+ * though, since the same patch in 2.5.64 also removed the
|
|
|
+ * 64-bit set_thread_area syscall, so it appears that there
|
|
|
+ * is no TLS API beyond modify_ldt that works in both pre-
|
|
|
+ * and post-2.5.64 kernels.
|
|
|
+ *
|
|
|
+ * If the kernel ever adds explicit fs, gs, fsbase, and gsbase
|
|
|
+ * save/restore, it will most likely need to be opt-in and use
|
|
|
+ * different context slots.
|
|
|
+ */
|
|
|
__u16 gs;
|
|
|
__u16 fs;
|
|
|
__u16 __pad0;
|