[PATCH gnumach v3 1/3] add xfloat thread state interface

2024-09-04 Thread Luca Dariz
* i386/i386/fpu.c: extend current getter and setter to support the extended state; move the struct casting here to reuse the locking and allocation logic for the thread state; make sure the new state is set as valid, otherwise it won't be applied; add i386_get_xstate_size() to dynamically r

[PATCH gnumach 3/3] x86_64: fix double fault handler

2024-09-04 Thread Luca Dariz
* x86_64/locore.S: adjust to the changes in the thread state structure (segment registers), and add the missing opcode. --- x86_64/locore.S | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x86_64/locore.S b/x86_64/locore.S index 8f39a677..376f41c1 100644 --- a/x86_64/locore.S

[PATCH gnumach v3 2/3] add tests for FLOAT/XFLOAT state

2024-09-04 Thread Luca Dariz
--- tests/include/testlib.h | 1 + tests/test-thread-state-fp.c | 240 +++ tests/testlib.c | 16 +++ tests/user-qemu.mk | 3 +- 4 files changed, 259 insertions(+), 1 deletion(-) create mode 100644 tests/test-thread-state-fp.c diff

Re: [PATCH gnumach 2/3] add tests for FLOAT/XFLOAT state

2024-08-24 Thread Luca Dariz
Il 23/08/24 11:50, Sergey Bugaev ha scritto: On Wed, Aug 21, 2024 at 7:37 PM Luca Dariz wrote: +#include + +static void printx(struct i386_xfloat_state *state, int size) +{ + printf("xfloat init %d fp %d exc %d\n", + state->initialized, state->fpkind, state->exc

Re: [PATCH v2 gnumach 1/3] add xfloat thread state interface

2024-08-24 Thread Luca Dariz
Il 22/08/24 23:26, Samuel Thibault ha scritto: Hello, Thanks for the improved version! Luca Dariz, le mer. 21 août 2024 18:36:14 +0200, a ecrit: @@ -495,10 +534,11 @@ ASSERT_IPL(SPL0); * concurrent fpu_set_state or fpu_get_state. */ kern_return_t -fpu_get_state(const thread_t thread

Re: [PATCH v2 gnumach 1/3] add xfloat thread state interface

2024-08-24 Thread Luca Dariz
Il 22/08/24 23:51, Samuel Thibault ha scritto: Luca Dariz, le mer. 21 août 2024 18:36:14 +0200, a ecrit: + } else if (flavor == i386_XFLOAT_STATE) { + int i; + struct i386_xfp_save *user_fp_state = (struct i386_xfp_save *) &xfstate->hw_state[0

Re: [PATCH v2 gnumach 1/3] add xfloat thread state interface

2024-08-24 Thread Luca Dariz
Il 22/08/24 23:44, Samuel Thibault ha scritto: Luca Dariz, le mer. 21 août 2024 18:36:14 +0200, a ecrit: diff --git a/i386/include/mach/i386/mach_i386.defs b/i386/include/mach/i386/mach_i386.defs index 965d5c3b..61fed222 100644 --- a/i386/include/mach/i386/mach_i386.defs +++ b/i386/include

[PATCH gnumach 3/3] add rpc interrupted test

2024-08-21 Thread Luca Dariz
* tests/test-machmsg.c: add two use cases used by glibc during signal handling * tests/include/testlib.h * tests/testlib.c: add new wait_thread_terminated() helper --- tests/include/testlib.h | 1 + tests/test-machmsg.c| 80 + tests/testlib.c

[PATCH gnumach 2/3] add tests for FLOAT/XFLOAT state

2024-08-21 Thread Luca Dariz
--- tests/include/testlib.h | 1 + tests/test-thread-state-fp.c | 232 +++ tests/testlib.c | 16 +++ tests/user-qemu.mk | 3 +- 4 files changed, 251 insertions(+), 1 deletion(-) create mode 100644 tests/test-thread-state-fp.c diff

[PATCH v2 gnumach 1/3] add xfloat thread state interface

2024-08-21 Thread Luca Dariz
* i386/i386/fpu.c: extend current getter and setter to support the extended state; move the struct casting here to reuse the locking and allocation logic for the thread state; make sure the new state is set as valid, otherwise it won't be applied; add i386_get_xstate_size() to dynamically r

Re: [PATCH] add xfloat thread state interface

2024-08-17 Thread Luca Dariz
Hi, Il 05/08/24 20:28, Sergey Bugaev ha scritto: On Mon, Aug 5, 2024 at 9:23 PM Samuel Thibault wrote: Luca Dariz, le lun. 05 août 2024 14:52:24 +0200, a ecrit: Il 05/08/24 00:32, Samuel Thibault ha scritto: Luca Dariz, le ven. 02 août 2024 17:32:34 +0200, a ecrit: +#define XFP_STATE_BYTES

Re: [PATCH] add xfloat thread state interface

2024-08-05 Thread Luca Dariz
Il 05/08/24 00:32, Samuel Thibault ha scritto: Hello, Luca Dariz, le ven. 02 août 2024 17:32:34 +0200, a ecrit: +#define XFP_STATE_BYTES (sizeof (struct i386_xfp_save)) That is not sufficient: depending on the sse level and the saving style, we have various amount of data to store. See

[PATCH] add xfloat thread state interface

2024-08-02 Thread Luca Dariz
* i386/i386/fpu.c: extend current getter and setter to support the extended state; move the struct casting here to reuse the locking and allocation logic for the thread state. * i386/i386/fpu.h: update prototypes to accept generic thread state * i386/i386/pcb.c: forward raw thread state to gett

[PATCH 2/2] tests/machmsg: check rx message size on different code paths

2024-06-11 Thread Luca Dariz
* tests/test-machmsg.c: add more combinations to existing cases: - make tx and rx ports independent in the send/receive tests - add two more variants for send/receive tests, using two separate system calls, using different code paths in mach_msg(). --- tests/test-machmsg.c | 117 ++

[PATCH 1/2] x86_64: fix msg size forwarding in case it's not set by userspace

2024-06-11 Thread Luca Dariz
* ipc/copy_user.c: recent MIG stubs should always fill the size correctly in the msg header, but we shouldn't rely on that. Instead, we use the size that was correctly copied-in, overwriting the value in the header. This is already done by the 32-bit copyinmsg(), and was missing in the 64-b

Re: [PATCH 1/2] RFC enhance tracing utilities

2024-03-09 Thread Luca Dariz
Il 09/03/24 16:24, Etienne Brateau ha scritto: Le sam. 9 mars 2024 à 15:03, Luca Dariz diff --git a/i386/i386/debug.h b/i386/i386/debug.h index 84397ba8..eff330c6 100644 --- a/i386/i386/debug.h +++ b/i386/i386/debug.h @@ -54,6 +54,7 @@ void debug_trace_dump(void

[PATCH 2/2] RFC: add kernel trace utilities

2024-03-09 Thread Luca Dariz
These are some utilities I used to decode and control the kernel trace, compiled as part of gnumach just so it's easier to build them. I'm not sure if they should be in their own package, for now they complement the kernel tracing patch so it can be tested more easily. With ktrace we can collect t

[PATCH 3/3] move x86 copy_user.[ch] to ipc/ and make it arch-indipendent

2024-03-09 Thread Luca Dariz
From: LD --- Makefrag.am| 2 ++ i386/Makefrag.am | 1 - {x86_64 => ipc}/copy_user.c| 7 +-- {i386/i386 => ipc}/copy_user.h | 18 +- ipc/ipc_kmsg.c | 2 +- ipc/ipc_mqueue.c | 2 +- ipc/mach_msg.c

[PATCH 1/2] RFC enhance tracing utilities

2024-03-09 Thread Luca Dariz
This extends the previous debug utility to trace system calls with more events and the ability to control the tracing from userspace, collecting a trace of the whole systems. This tool was quite useful in porting the rpc format to 64 bit and handle the 32to64 translation, but also to debug user-sp

[PATCH 1/3] x86_64: split SET_KERNEL_SEGMENTS() for NCPU > 1

2024-03-09 Thread Luca Dariz
This allows 32on64 to work again. Also, it's a clearer indication of a missing part. --- x86_64/locore.S | 10 +++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/x86_64/locore.S b/x86_64/locore.S index 806762bb..8f39a677 100644 --- a/x86_64/locore.S +++ b/x86_64/locore.S @@ -

[PATCH 2/3] remove machine/machspl.h as it duplicates machine/spl.h

2024-03-09 Thread Luca Dariz
From: LD --- device/chario.c | 2 +- device/ds_routines.c | 4 ++-- device/net_io.c | 4 ++-- i386/Makefrag_x86.am | 1 - i386/i386/db_interface.c | 2 +- i386/i386/db_trace.c | 2 +- i386/i386/fpu.c

[PATCH 02/11] add mach_host tests

2024-01-11 Thread Luca Dariz
--- tests/test-mach_host.c | 81 ++ tests/user-qemu.mk | 3 +- 2 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 tests/test-mach_host.c diff --git a/tests/test-mach_host.c b/tests/test-mach_host.c new file mode 100644 index .

[PATCH 09/11] add raw mach_msg tests

2024-01-11 Thread Luca Dariz
--- tests/test-machmsg.c | 405 +++ tests/user-qemu.mk | 3 +- 2 files changed, 407 insertions(+), 1 deletion(-) create mode 100644 tests/test-machmsg.c diff --git a/tests/test-machmsg.c b/tests/test-machmsg.c new file mode 100644 index ..60f3f

[PATCH 03/11] add gsync tests

2024-01-11 Thread Luca Dariz
--- tests/test-gsync.c | 122 + tests/user-qemu.mk | 3 +- 2 files changed, 124 insertions(+), 1 deletion(-) create mode 100644 tests/test-gsync.c diff --git a/tests/test-gsync.c b/tests/test-gsync.c new file mode 100644 index ..a5160651 ---

[PATCH 06/11] add basic vm tests

2024-01-11 Thread Luca Dariz
--- tests/test-vm.c| 85 ++ tests/user-qemu.mk | 3 +- 2 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 tests/test-vm.c diff --git a/tests/test-vm.c b/tests/test-vm.c new file mode 100644 index ..4ece792e --- /dev/null +

[PATCH 11/11] add basic thread tests

2024-01-11 Thread Luca Dariz
--- tests/test-threads.c | 104 +++ tests/user-qemu.mk | 3 +- 2 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 tests/test-threads.c diff --git a/tests/test-threads.c b/tests/test-threads.c new file mode 100644 index ..06630

[PATCH 05/11] adjust range when changing memory pageability

2024-01-11 Thread Luca Dariz
* vm/vm_map.c: use actual limits instead of min/max boundaries to change pageability of the currently mapped memory. This caused the initial vm_wire_all(host, task VM_WIRE_ALL) in glibc startup to fail with KERN_NO_SPACE. --- vm/vm_map.c | 31 ++- 1 file changed, 26

[PATCH 01/11] add basic user-space tests with qemu

2024-01-11 Thread Luca Dariz
* configure.ac: move test fragment to have USER32 * tests/Makefrag.am: add user tests * tests/README: add basic info on how to run and debug user tests * tests/configfrag.ac: allow the test compiler/flags to be autoconfigured or customized * tests/grub.cfg.single.template: add minimal grub config

[PATCH 10/11] add basic task tests

2024-01-11 Thread Luca Dariz
--- tests/test-task.c | 171 + tests/user-qemu.mk | 3 +- 2 files changed, 173 insertions(+), 1 deletion(-) create mode 100644 tests/test-task.c diff --git a/tests/test-task.c b/tests/test-task.c new file mode 100644 index ..cbc75e23 --- /de

[PATCH 07/11] add thread creation helper to tests

2024-01-11 Thread Luca Dariz
--- tests/include/testlib.h | 1 + tests/testlib_thread_start.c | 86 tests/user-qemu.mk | 1 + 3 files changed, 88 insertions(+) create mode 100644 tests/testlib_thread_start.c diff --git a/tests/include/testlib.h b/tests/include/testlib.h i

[PATCH 08/11] add syscall tests

2024-01-11 Thread Luca Dariz
--- tests/test-syscalls.c | 166 ++ tests/user-qemu.mk| 3 +- 2 files changed, 168 insertions(+), 1 deletion(-) create mode 100644 tests/test-syscalls.c diff --git a/tests/test-syscalls.c b/tests/test-syscalls.c new file mode 100644 index ..b

[PATCH 04/11] add mach_port tests

2024-01-11 Thread Luca Dariz
--- tests/test-mach_port.c | 121 + tests/user-qemu.mk | 3 +- 2 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 tests/test-mach_port.c diff --git a/tests/test-mach_port.c b/tests/test-mach_port.c new file mode 100644 index 000

Re: [PATCH 11/14] add raw mach_msg tests

2024-01-06 Thread Luca Dariz
Il 29/12/23 15:20, Samuel Thibault ha scritto: Luca Dariz, le jeu. 28 déc. 2023 20:42:58 +0100, a ecrit: + +#define align_inline(val, n) { val = align(val, n); } Rather name it ALIGN_INLINE, so people don't mistake this for a function (that doesn't have side-effects on its paramet

Re: [PATCH 08/14] add thread creation helper to tests

2024-01-06 Thread Luca Dariz
Il 29/12/23 15:14, Samuel Thibault ha scritto: Luca Dariz, le jeu. 28 déc. 2023 20:42:55 +0100, a ecrit: diff --git a/tests/testlib.c b/tests/testlib.c index 6abe8c4d..e6be46ee 100644 --- a/tests/testlib.c +++ b/tests/testlib.c @@ -95,3 +95,56 @@ void _start() printf("%s: test %s exit

Re: [PATCH 07/14] add basic vm tests

2024-01-06 Thread Luca Dariz
Il 29/12/23 15:09, Samuel Thibault ha scritto: Luca Dariz, le jeu. 28 déc. 2023 20:42:54 +0100, a ecrit: + // this emulates maptime() + struct mapped_time_value *mtime; + mach_port_t device, memobj; + int err = device_open (device_priv(), 0, "time", &device); + ASSERT_RET(err

Re: [PATCH 06/14] adjust range when changing memory pageabilityg

2024-01-06 Thread Luca Dariz
Il 29/12/23 15:06, Samuel Thibault ha scritto: Luca Dariz, le jeu. 28 déc. 2023 20:42:53 +0100, a ecrit: * vm/vm_map.c: if the start address is not in the map, try to find the nearest entry instead of failing. This caused the initial vm_wire_all(host, task VM_WIRE_ALL) in glibc startup to

Re: [PATCH 05/14] add mach_port tests

2024-01-06 Thread Luca Dariz
Il 29/12/23 15:01, Samuel Thibault ha scritto: Luca Dariz, le jeu. 28 déc. 2023 20:42:52 +0100, a ecrit: + mach_port_t newname = 123; Why initializing it? the idea was to check that the value it's actually set, I'll fix it by using a valid port name. + err = mach_por

Re: [PATCH 04/14] add gsync tests

2023-12-29 Thread Luca Dariz
Il 29/12/23 14:56, Samuel Thibault ha scritto: Luca Dariz, le jeu. 28 déc. 2023 20:42:51 +0100, a ecrit: +static void single_t2(void *arg) +{ + int err; + msleep(100); + err = gsync_wake(mach_task_self(), (vm_offset_t)&single_shared, 0, 0); + ASSERT_RET(err, "gsync_wake t2&qu

Re: [PATCH 03/14] add mach_host tests

2023-12-29 Thread Luca Dariz
Il 29/12/23 14:44, Samuel Thibault ha scritto: Luca Dariz, le jeu. 28 déc. 2023 20:42:50 +0100, a ecrit: --- tests/test-mach_host.c | 54 ++ 1 file changed, 54 insertions(+) create mode 100644 tests/test-mach_host.c diff --git a/tests/test

Re: [PATCH 02/14] add basic user-space tests with qemu

2023-12-29 Thread Luca Dariz
Il 29/12/23 14:57, Samuel Thibault ha scritto: Luca Dariz, le ven. 29 déc. 2023 14:51:31 +0100, a ecrit: Il 29/12/23 14:37, Samuel Thibault ha scritto: Luca Dariz, le jeu. 28 déc. 2023 20:42:49 +0100, a ecrit: new file mode 100644 index ..4cf25891 --- /dev/null +++ b/tests/README

Re: [PATCH 02/14] add basic user-space tests with qemu

2023-12-29 Thread Luca Dariz
Hi, Il 29/12/23 14:37, Samuel Thibault ha scritto: Hello, Thanks, this looks good! Luca Dariz, le jeu. 28 déc. 2023 20:42:49 +0100, a ecrit: new file mode 100644 index ..4cf25891 --- /dev/null +++ b/tests/README @@ -0,0 +1,37 @@ + +There are some basic tests that can be run qith qemu

[PATCH 14/14] add tests to make check

2023-12-28 Thread Luca Dariz
--- tests/user-qemu.mk | 10 +- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/tests/user-qemu.mk b/tests/user-qemu.mk index 50b04736..669eb77a 100644 --- a/tests/user-qemu.mk +++ b/tests/user-qemu.mk @@ -178,7 +178,15 @@ clean-test-%: USER_TESTS := \ - tests/test-

[PATCH 11/14] add raw mach_msg tests

2023-12-28 Thread Luca Dariz
--- tests/test-machmsg.c | 390 +++ 1 file changed, 390 insertions(+) create mode 100644 tests/test-machmsg.c diff --git a/tests/test-machmsg.c b/tests/test-machmsg.c new file mode 100644 index ..c262f5f4 --- /dev/null +++ b/tests/test-machmsg.c @@

[PATCH 12/14] add basic task tests

2023-12-28 Thread Luca Dariz
--- tests/test-task.c | 149 ++ 1 file changed, 149 insertions(+) create mode 100644 tests/test-task.c diff --git a/tests/test-task.c b/tests/test-task.c new file mode 100644 index ..da9289ff --- /dev/null +++ b/tests/test-task.c @@ -0,0 +1,149

[PATCH 13/14] add basic thread tests

2023-12-28 Thread Luca Dariz
--- tests/test-threads.c | 88 1 file changed, 88 insertions(+) create mode 100644 tests/test-threads.c diff --git a/tests/test-threads.c b/tests/test-threads.c new file mode 100644 index ..659aaf3b --- /dev/null +++ b/tests/test-threads.c @@

[PATCH v2 00/14] add user tests to gnumach

2023-12-28 Thread Luca Dariz
ll be definitely useful in case of new architectures, if supported by qemu. Currently I ran the tests only on GNU/Linux as qemu does not run yet on the Hurd. Luca Dariz (14): USER32: change default to disabled and make it a general option add basic user-space tests with qemu add mach_host tests

[PATCH 03/14] add mach_host tests

2023-12-28 Thread Luca Dariz
--- tests/test-mach_host.c | 54 ++ 1 file changed, 54 insertions(+) create mode 100644 tests/test-mach_host.c diff --git a/tests/test-mach_host.c b/tests/test-mach_host.c new file mode 100644 index ..99fc4aca --- /dev/null +++ b/tests/test-mach_ho

[PATCH 09/14] add syscall tests

2023-12-28 Thread Luca Dariz
--- tests/test-syscalls.c | 149 ++ 1 file changed, 149 insertions(+) create mode 100644 tests/test-syscalls.c diff --git a/tests/test-syscalls.c b/tests/test-syscalls.c new file mode 100644 index ..7e4234ac --- /dev/null +++ b/tests/test-syscalls.

[PATCH 07/14] add basic vm tests

2023-12-28 Thread Luca Dariz
--- tests/test-vm.c | 52 + 1 file changed, 52 insertions(+) create mode 100644 tests/test-vm.c diff --git a/tests/test-vm.c b/tests/test-vm.c new file mode 100644 index ..ba52876b --- /dev/null +++ b/tests/test-vm.c @@ -0,0 +1,52 @@ + +#in

[PATCH 02/14] add basic user-space tests with qemu

2023-12-28 Thread Luca Dariz
* configure.ac: move test fragment to have USER32 * tests/Makefrag.am: add user tests * tests/README: add basic info on how to run and debug user tests * tests/configfrag.ac: allow the test compiler/flags to be autoconfigured or customized * tests/grub.cfg.single.template: add minimal grub config

[PATCH 06/14] adjust range when changing memory pageability

2023-12-28 Thread Luca Dariz
* vm/vm_map.c: if the start address is not in the map, try to find the nearest entry instead of failing. This caused the initial vm_wire_all(host, task VM_WIRE_ALL) in glibc startup to fail with KERN_NO_SPACE. --- vm/vm_map.c | 21 - 1 file changed, 16 insertions(+), 5 delet

[PATCH 10/14] expose MACH_MSG_USER_ALIGNMENT for manually-built messages

2023-12-28 Thread Luca Dariz
--- include/mach/message.h | 19 ++- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/include/mach/message.h b/include/mach/message.h index 0b8b34d4..9790ef98 100644 --- a/include/mach/message.h +++ b/include/mach/message.h @@ -401,6 +401,16 @@ typedef integer_t mach_

[PATCH 08/14] add thread creation helper to tests

2023-12-28 Thread Luca Dariz
--- tests/include/testlib.h | 1 + tests/testlib.c | 53 + 2 files changed, 54 insertions(+) diff --git a/tests/include/testlib.h b/tests/include/testlib.h index 2b7a67c0..52605047 100644 --- a/tests/include/testlib.h +++ b/tests/include/testlib.h

[PATCH 04/14] add gsync tests

2023-12-28 Thread Luca Dariz
--- tests/test-gsync.c | 87 ++ 1 file changed, 87 insertions(+) create mode 100644 tests/test-gsync.c diff --git a/tests/test-gsync.c b/tests/test-gsync.c new file mode 100644 index ..80701606 --- /dev/null +++ b/tests/test-gsync.c @@ -0,0 +1,

[PATCH 01/14] USER32: change default to disabled and make it a general option

2023-12-28 Thread Luca Dariz
* configfrag.ac: add the global option USER32; although it makes sense for 64-bit versions only, it can be used by future 64-bit architectiures and not only x86_64. Also, change the default setting to be disabled; now that we have a working full 64-bit system, it makes sense to consider it

[PATCH 05/14] add mach_port tests

2023-12-28 Thread Luca Dariz
--- tests/test-mach_port.c | 80 ++ 1 file changed, 80 insertions(+) create mode 100644 tests/test-mach_port.c diff --git a/tests/test-mach_port.c b/tests/test-mach_port.c new file mode 100644 index ..4f095047 --- /dev/null +++ b/tests/test-mach_po

Re: [RFC PATCH 1/2] add basic user-space tests with qemu

2023-10-28 Thread Luca Dariz
Hi, Il 22/10/23 17:19, Samuel Thibault ha scritto: Luca Dariz, le jeu. 19 oct. 2023 20:57:46 +0200, a ecrit: * tests/configfrag.ac: add MIGUSER, required for user-space tests as it might be different from the one used to ubild the kernel. Can't we just automatically select the prope

[RFC PATCH 2/2] add mach_host tests

2023-10-19 Thread Luca Dariz
--- tests/Makefrag.am | 4 +++- tests/test-mach_host.c | 54 ++ 2 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 tests/test-mach_host.c diff --git a/tests/Makefrag.am b/tests/Makefrag.am index c16326e8..cb946bc7 100644 --- a/tests/

[RFC PATCH 0/2] gnumach testing

2023-10-19 Thread Luca Dariz
sting environment is settled I can adapt other tests I currently have. Luca Dariz (2): add basic user-space tests with qemu add mach_host tests tests/Makefrag.am| 127 +++ tests/README | 37 + tests/configfr

[RFC PATCH 1/2] add basic user-space tests with qemu

2023-10-19 Thread Luca Dariz
* tests/Makefrag.am: add rules to build simple user-space test modules, including generating mig stubs. The tests reuse some kernel code (the printf(), mach_atoi(), mem*(), str*() functions) so we can use the freestanding environment and not depend on glibc. * tests/README: add basic info on

Re: [PATCH 5/5] x86_64: remove unneeded segment selectors handling on full 64 bit

2023-08-09 Thread Luca Dariz
Il 04/08/23 23:50, Samuel Thibault ha scritto: Luca Dariz, le sam. 29 juil. 2023 19:47:53 +0200, a ecrit: @@ -803,10 +809,7 @@ kern_return_t thread_getstatus( == 0) saved_state->efl &=

[PATCH v2] x86_64: install emergency handler for double fault

2023-07-29 Thread Luca Dariz
* i386/i386/idt.c: add selector for the interrupt-specific stack * i386/i386/ktss.c: configure ist1 to use a dedicated stack * i386/i386/trap.c: add double fault handler, which just prints the state and panics. There is not much else to do in this case but it's useful for troubleshooting * x86_

[PATCH 3/5] x86_64: format pusha/popa macros for readability

2023-07-29 Thread Luca Dariz
--- x86_64/locore.S | 37 +++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/x86_64/locore.S b/x86_64/locore.S index 413d43c4..7127957b 100644 --- a/x86_64/locore.S +++ b/x86_64/locore.S @@ -39,8 +39,41 @@ #include #include -#define pusha pus

[PATCH 2/5] x86_64: disable V86 mode on full 64-bit configuration

2023-07-29 Thread Luca Dariz
* i386/i386/pcb.c: simplify exception stack location and adapt thread gettrs/setters * i386/i386/thread.h: don't include V86 fields on full 64-bit * x86_64/locore.S: don't include checks for V86 mode on full 64-bit --- i386/i386/pcb.c| 35 ++- i386/i386/thread

[PATCH 4/5] x86_64: refactor segment register handling

2023-07-29 Thread Luca Dariz
The actual values are not saved together with the rest of the thread state, both because it would be quite espensive (reading MSR, unless rdfsbase instructions are supported, but that's optional) and not really needed. The only way the user has to change its value is with a specific RPC, so we can

[PATCH 5/5] x86_64: remove unneeded segment selectors handling on full 64 bit

2023-07-29 Thread Luca Dariz
* i386/i386/db_interface.c: don't set unused segment selectors on full 64-bit * i386/i386/db_trace.c: likewise. * i386/i386/i386asm.sym: likewise. * i386/i386/pcb.c:: likewise. * i386/i386/thread.h: remove ES/DS/FS/GS from thread state on !USER32, as they are unused in this configuration. Only

[PATCH 1/5] x86_64: fix stack handling on recursive interrupts for USER32

2023-07-29 Thread Luca Dariz
* x86_64/locore.S: ensure the thread state is filled completely even on recursive interrups. The value of the segment selectors is not very important in this case, but we still need to align the stack to the bottom of i386_interrupt_state. --- x86_64/locore.S | 16 +++- 1 file ch

Re: [PATCH 2/3] x86_64: install emergency handler for double fault

2023-06-19 Thread Luca Dariz
Il 17/06/23 23:12, Samuel Thibault ha scritto: Luca Dariz, le jeu. 15 juin 2023 23:49:30 +0200, a ecrit: diff --git a/i386/i386/ktss.c b/i386/i386/ktss.c index 1d880167..52f3722c 100644 --- a/i386/i386/ktss.c +++ b/i386/i386/ktss.c @@ -61,6 +61,7 @@ ktss_fill(struct task_tss *myktss, struct

[PATCH 1/3] x86_64: use solid intstack already during bootstrap

2023-06-15 Thread Luca Dariz
* x86_64/boothdr.S: there is no reason to not use it right away --- x86_64/boothdr.S | 5 + 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/x86_64/boothdr.S b/x86_64/boothdr.S index d81f9a78..0ab9bd55 100644 --- a/x86_64/boothdr.S +++ b/x86_64/boothdr.S @@ -158,7 +158,7 @@ switch6

[PATCH 2/3] x86_64: install emergency handler for double fault

2023-06-15 Thread Luca Dariz
* i386/i386/idt.c: add selector for the interrupt-specific stack * i386/i386/ktss.c: configure ist1 * i386/i386/trap.c: add double fault handler, which just prints the state and panics. There is not much else to do in this case but it's useful for troubleshooting * x86_64/idt_inittab.S: allow t

[PATCH 3/3] x86_64: add a critical section on entry and exit from syscall/sysret

2023-06-15 Thread Luca Dariz
When entering a syscall we're still using the user stack, so we can't reliably handle exceptions or interrupts, otherwise a user thread can easily crash the machine with an invalid stack. Instead, disable interrupts and (hopefullly) avoid traps in the fragments where we need to have the user stack

[PATCH 0/3] 64-bit improvements (rump drivers, debug)

2023-05-26 Thread Luca Dariz
1 56 59 236k 12k Luca Dariz (3): pmap: only map lower BIOS memory 1:1 when using Linux drivers x86_64: enable code for managing interrupts x86_64: add 64-bit registers when dumping thread state device/ds_routines.c | 12 ++-- i386/i386/debug_i386.c | 14

[PATCH 3/3] x86_64: add 64-bit registers when dumping thread state

2023-05-26 Thread Luca Dariz
* i386/i386/debug_i386.c: when using a 64-bit userspace we need to use RAX and so on, and we can ignore most segments except FS/GS, but only the base address is useful. --- i386/i386/debug_i386.c | 14 ++ 1 file changed, 14 insertions(+) diff --git a/i386/i386/debug_i386.c b/i386/

[PATCH 2/3] x86_64: enable code for managing interrupts

2023-05-26 Thread Luca Dariz
* device/ds_routines.c: enable interrupt registration and acknowledge for x86_64. We can reuse the 32-bit mechanisms. --- device/ds_routines.c | 12 ++-- 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/device/ds_routines.c b/device/ds_routines.c index 1f0bacf4..ea880535 100

[PATCH 1/3] pmap: only map lower BIOS memory 1:1 when using Linux drivers

2023-05-26 Thread Luca Dariz
* i386/intel/pmap.c: add the check for LINUX_DEV; we could also check for !__x86_64__, as this config would break ther kernel map by removing the BIOS mem map, needed by the console and keyboard drivers, but hopefully we won't need to enable Linux drivers on x86_64. --- i386/intel/pmap.c |

[PATCH] x86_64: fix APIC initialization

2023-05-21 Thread Luca Dariz
* i386/i386at/acpi_parse_apic.c: use vm_offset_t instead of uint32_t for vm addresses * x86_64/Makefrag.am: support --enable-apic --- i386/i386at/acpi_parse_apic.c | 8 x86_64/Makefrag.am| 17 ++--- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a

[PATCH v2] x86_64: push user's VM_MAX_ADDRESS

2023-05-21 Thread Luca Dariz
* i386/include/mach/i386/vm_param.h: check for both KERNEL and USER32 to differentiate between user/kernel on x86_64, and push the upper limit of user address space to 128 TB. --- i386/include/mach/i386/vm_param.h | 24 1 file changed, 16 insertions(+), 8 deletions(-)

Re: [PATCH 2/3] x86_64: push user's VM_MAX_ADDRESS

2023-05-21 Thread Luca Dariz
Il 21/05/23 21:17, Samuel Thibault ha scritto: Luca Dariz, le dim. 21 mai 2023 10:57:57 +0200, a ecrit: +#if defined(KERNEL) && defined(USER32) +#define VM_MAX_ADDRESS (0xc000UL) +#else /* defined(KERNEL) && defined(USER32) */ +#define VM_MAX_ADDRESS (0

[PATCH 3/3] x86_64: fix descriptor loading for 64-bit addresses

2023-05-21 Thread Luca Dariz
* i386/i386/seg.h: use proper type for segment addresses. This is not impacting any functionality on 64-bit, as segments limits are ignored, but at least we silence a warning. --- i386/i386/seg.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/i386/i386/seg.h b/i386/i386/

[PATCH 1/3] pmap: dynamically allocate the whole user page tree map

2023-05-21 Thread Luca Dariz
* i386/intel/pmap.c: switch to dynamic allocation of all the page tree map levels for the user-space address range, using a separate kmem cache for each level. This allows to extend the usable memory space on x86_64 to use more than one L3 page for user space. The kernel address map is left

[PATCH 2/3] x86_64: push user's VM_MAX_ADDRESS

2023-05-21 Thread Luca Dariz
* i386/include/mach/i386/vm_param.h: check for both KERNEL and USER32 to differentiate between user/kernel on x86_64, and push the upper limit of user address space to 128 TB. --- i386/include/mach/i386/vm_param.h | 24 1 file changed, 16 insertions(+), 8 deletions(-)

[PATCH] fix fs/gs save/restore and USER32

2023-05-18 Thread Luca Dariz
* x86_64/locore.S: fix PUSH_FSGS -> _ISR and always make room for fsgsbase on a 64-bit kernel. --- x86_64/locore.S | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/x86_64/locore.S b/x86_64/locore.S index a782ec8a..d456b06b 100644 --- a/x86_64/locore.S +++ b/x86_64/locore.S

Re: [PATCH 5/5] add setting gs/fsbase

2023-04-24 Thread Luca Dariz
Il 24/04/23 17:19, Sergey Bugaev ha scritto: Resending without the attachment, because apparently the email did not make it into the list archive so maybe it didn't get to you either; and I'm too conscious about email just eating my letters without any notice or indication since that one time. If

Re: [PATCH 5/5] add setting gs/fsbase

2023-04-22 Thread Luca Dariz
Hi Sergey, Il 20/04/23 13:51, Sergey Bugaev ha scritto: On Wed, Apr 19, 2023 at 11:52 PM Sergey Bugaev wrote: We do reach the call to __thread_set_state (), but then it uses __mig_memcpy (), which is just 'return memcpy (...)'. And (because of the static build?), that memcpy () is the full real

Re: [PATCH 3/5] fix exception message format for 64-bit userspace

2023-04-20 Thread Luca Dariz
Hi Flavio, Il 20/04/23 04:04, Flávio Cruz ha scritto: On Wed, Apr 19, 2023 at 3:47 PM Luca Dariz <mailto:l...@orpolo.org>> wrote: * kern/exception.c: message fields need to be aligned to 8 bytes for a   64-bit userspace, so add the required padding if needed, as done by

[PATCH 4/5 (v4)] x86_64: add 64-bit syscall entry point

2023-04-19 Thread Luca Dariz
While theoretically we could still use the same call gate as for 32-bit userspace, it doesn't seem very common, and gcc seems to not encode properly the instruction. Instead we use syscall/sysret as other kernels (e.g. XNU,Linux). This version still has some limitations, but should be enough to sta

[PATCH 2/5] fix copyoutmsg for 64-bit userspace

2023-04-19 Thread Luca Dariz
* x86_64/copy_user.c: use the correct user/kernel msg structure --- x86_64/copy_user.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/x86_64/copy_user.c b/x86_64/copy_user.c index b5084996..f76e44c9 100644 --- a/x86_64/copy_user.c +++ b/x86_64/copy_user.c @@ -430,7 +430,7

[PATCH 3/5] fix exception message format for 64-bit userspace

2023-04-19 Thread Luca Dariz
* kern/exception.c: message fields need to be aligned to 8 bytes for a 64-bit userspace, so add the required padding if needed, as done by MIG. --- kern/exception.c | 6 ++ 1 file changed, 6 insertions(+) diff --git a/kern/exception.c b/kern/exception.c index 10435b5c..757f793e 100644 ---

[PATCH 5/5] add setting gs/fsbase

2023-04-19 Thread Luca Dariz
* i386/i386/i386asm.sym: add offsets for asm * i386/i386/pcb.c: switch FSBASE/GSBASE on context switch and implement accessors in thread setstatus/getstatus * i386/i386/thread.h: add new state to thread saved state * kern/thread.c: add i386_FSGS_BASE_STATE handler * x86_64/locore.S: fix fs/gs han

[PATCH 1/5] fix address fault for 32-on-64-bit syscall

2023-04-19 Thread Luca Dariz
* x86_64/locore.S: the faulty address is found in %rbp and not in %rsi, so copy that in CR2 --- x86_64/locore.S | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x86_64/locore.S b/x86_64/locore.S index 47d9085c..ea5c71d6 100644 --- a/x86_64/locore.S +++ b/x86_64/locore.S @@ -12

[PATCH v3 gnumach] x86_64: add 64-bit syscall entry point

2023-03-08 Thread Luca Dariz
While theoretically we could still use the same call gate as for 32-bit userspace, it doesn't seem very common, and gcc seems to not encode properly the instruction. Instead we use syscall/sysret as other kernels (e.g. XNU,Linux). This version still has some limitations, but should be enough to sta

Re: [PATCH 5/5 v2 gnumach] x86_64: add 64-bit syscall entry point

2023-03-02 Thread Luca Dariz
Il 02/03/23 14:14, Samuel Thibault ha scritto: Luca Dariz, le jeu. 02 mars 2023 09:20:15 +0100, a ecrit: Il 02/03/23 09:00, Samuel Thibault ha scritto: Luca Dariz, le jeu. 02 mars 2023 08:55:38 +0100, a ecrit: Il 01/03/23 21:18, Samuel Thibault ha scritto: Luca Dariz, le mer. 01 mars 2023 18

Re: [PATCH 5/5 v2 gnumach] x86_64: add 64-bit syscall entry point

2023-03-02 Thread Luca Dariz
Il 02/03/23 09:00, Samuel Thibault ha scritto: Luca Dariz, le jeu. 02 mars 2023 08:55:38 +0100, a ecrit: Il 01/03/23 21:18, Samuel Thibault ha scritto: Luca Dariz, le mer. 01 mars 2023 18:40:37 +0100, a ecrit: +asm volatile("wrmsr" + : + : "c

Re: [PATCH 5/5 v2 gnumach] x86_64: add 64-bit syscall entry point

2023-03-01 Thread Luca Dariz
Il 01/03/23 21:18, Samuel Thibault ha scritto: Luca Dariz, le mer. 01 mars 2023 18:40:37 +0100, a ecrit: +asm volatile("wrmsr" + : + : "c" (regaddr), "a" (low), "d" (high) + : "memory" /* w

[PATCH 5/5 v2 gnumach] x86_64: add 64-bit syscall entry point

2023-03-01 Thread Luca Dariz
While theoretically we could still use the same call gate as for 32-bit userspace, it doesn't seem very common, and gcc seems to not encode properly the instruction. Instead we use syscall/sysret as other kernels (e.g. XNU,Linux). This version still has some limitations, but should be enough to sta

Re: [PATCH 5/5] x86_64: add 64-bit syscall entry point

2023-02-28 Thread Luca Dariz
Il 28/02/23 15:14, Sergey Bugaev ha scritto: On Tue, Feb 28, 2023 at 4:26 PM Luca Dariz wrote: +/* check if we need to place some arguments on the stack */ +_syscall64_args_stack: +mov EXT(mach_trap_table)(%rax),%r10 /* get number of arguments */ +subq$6,%r10

Re: [PATCH 5/5] x86_64: add 64-bit syscall entry point

2023-02-28 Thread Luca Dariz
Il 28/02/23 07:39, Sergey Bugaev ha scritto: On Mon, Feb 27, 2023 at 11:46 PM Luca Dariz wrote: +static inline void wrmsr(uint32_t regaddr, uint64_t value) +{ +uint32_t low=(uint32_t)value, high=((uint32_t)(value >> 32)); I think it'd be more idiomatic in both GNU and Mach st

Re: [PATCH 5/5] x86_64: add 64-bit syscall entry point

2023-02-28 Thread Luca Dariz
Il 27/02/23 23:02, Samuel Thibault ha scritto: Luca Dariz, le lun. 27 févr. 2023 21:45:01 +0100, a ecrit: diff --git a/i386/i386/ldt.h b/i386/i386/ldt.h index b15f11a5..4490f99f 100644 --- a/i386/i386/ldt.h +++ b/i386/i386/ldt.h @@ -45,9 +45,14 @@ #define USER_SCALL 0x07

[PATCH 1/5] x86_64: allow compilation if ! USER32

2023-02-27 Thread Luca Dariz
* i386/intel/pmap.c: remove #error and allow compilation, keeping a reminder to fix the pmap module. --- i386/intel/pmap.c | 6 -- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/i386/intel/pmap.c b/i386/intel/pmap.c index 302a60cb..40f672b5 100644 --- a/i386/intel/pmap.c +++ b

[PATCH 2/5] fix copyin/outmsg header for ! USER32

2023-02-27 Thread Luca Dariz
* x86_64/copy_user.c: fix copyin/out, we already have a pointer to user/kernel buffers --- x86_64/copy_user.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/x86_64/copy_user.c b/x86_64/copy_user.c index dd9fe2d7..86d23525 100644 --- a/x86_64/copy_user.c +++ b/x86_64/copy

  1   2   >