diff options
author | Luca Dariz <luca@orpolo.org> | 2023-02-16 22:33:18 +0100 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2023-02-16 23:28:09 +0100 |
commit | 1b8d96d72b6978b6d2b0f734f1307d6c054e1a0d (patch) | |
tree | 92c295b4c88f7d4dc659b8ea7630b701fcba3fdd /i386 | |
parent | 68945d0b2b858dedf5481b1df2b0ce44ce92e0b6 (diff) | |
download | gnumach-1b8d96d72b6978b6d2b0f734f1307d6c054e1a0d.tar.gz gnumach-1b8d96d72b6978b6d2b0f734f1307d6c054e1a0d.tar.bz2 gnumach-1b8d96d72b6978b6d2b0f734f1307d6c054e1a0d.zip |
x86_64: set user segments as 64-bit if ! USER32
* i386/i386/ldt.c: set the L bit if user-space is 64-bit
Message-Id: <20230216213318.2048699-4-luca@orpolo.org>
Diffstat (limited to 'i386')
-rw-r--r-- | i386/i386/ldt.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/i386/i386/ldt.c b/i386/i386/ldt.c index 70fa24e2..b86a0e3c 100644 --- a/i386/i386/ldt.c +++ b/i386/i386/ldt.c @@ -45,6 +45,12 @@ extern #endif /* MACH_PV_DESCRIPTORS */ struct real_descriptor ldt[LDTSZ]; +#if defined(__x86_64__) && ! defined(USER32) +#define USER_SEGMENT_SIZEBITS SZ_64 +#else +#define USER_SEGMENT_SIZEBITS SZ_32 +#endif + void ldt_fill(struct real_descriptor *myldt, struct real_descriptor *mygdt) { @@ -67,11 +73,11 @@ ldt_fill(struct real_descriptor *myldt, struct real_descriptor *mygdt) VM_MIN_USER_ADDRESS, VM_MAX_USER_ADDRESS-VM_MIN_USER_ADDRESS-4096, /* XXX LINEAR_... */ - ACC_PL_U|ACC_CODE_R, SZ_32); + ACC_PL_U|ACC_CODE_R, USER_SEGMENT_SIZEBITS); fill_ldt_descriptor(myldt, USER_DS, VM_MIN_USER_ADDRESS, VM_MAX_USER_ADDRESS-VM_MIN_USER_ADDRESS-4096, - ACC_PL_U|ACC_DATA_W, SZ_32); + ACC_PL_U|ACC_DATA_W, USER_SEGMENT_SIZEBITS); /* Activate the LDT. */ #ifdef MACH_PV_DESCRIPTORS |