From 01f317e98f7e36b597905a7ad267ce6b59d463ee Mon Sep 17 00:00:00 2001 From: Sergey Bugaev Date: Wed, 17 May 2023 22:14:30 +0300 Subject: mach: Add __mach_setup_thread_call () This is just like mach_setup_thread (), but it's suitable for making the thread call a function correctly, as opposed to explicitly setting the thread's stack and instruction pointers to the given values. Internally, it uses MACHINE_THREAD_STATE_SETUP_CALL. Unlike mach_setup_thread (), which is exported via mach.h for the benefit of the Hurd exec server, __mach_setup_thread_call () is private to glibc for the time being. Signed-off-by: Sergey Bugaev Message-Id: <20230517191436.73636-5-bugaevc@gmail.com> --- mach/mach.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'mach/mach.h') diff --git a/mach/mach.h b/mach/mach.h index d115f5a119..348f019686 100644 --- a/mach/mach.h +++ b/mach/mach.h @@ -88,7 +88,11 @@ extern FILE *mach_open_devstream (mach_port_t device_port, const char *mode); If STACK_BASE is not null it is filled in with the chosen stack base. If STACK_SIZE is not null it is filled in with the chosen stack size. Regardless, an extra page of red zone is allocated off the end; this - is not included in *STACK_SIZE. */ + is not included in *STACK_SIZE. + + Mote: this function is unsuitable for setting up the thread to call a + function at PC, since the architecture ABI may impose additional + requirements beyond setting PC and stack. */ kern_return_t __mach_setup_thread (task_t task, thread_t thread, void *pc, vm_address_t *stack_base, vm_size_t *stack_size); -- cgit v1.2.3