diff options
author | Sergey Bugaev <bugaevc@gmail.com> | 2023-05-17 22:14:30 +0300 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2023-05-17 22:56:23 +0200 |
commit | 01f317e98f7e36b597905a7ad267ce6b59d463ee (patch) | |
tree | bbbdf78bba95c131553e62fe56bff1b8dc845598 /mach/mach.h | |
parent | be9c1b9cf4b5c1e436d08e189ea4305e57082a89 (diff) | |
download | glibc-01f317e98f7e36b597905a7ad267ce6b59d463ee.tar glibc-01f317e98f7e36b597905a7ad267ce6b59d463ee.tar.gz glibc-01f317e98f7e36b597905a7ad267ce6b59d463ee.tar.bz2 glibc-01f317e98f7e36b597905a7ad267ce6b59d463ee.zip |
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 <bugaevc@gmail.com>
Message-Id: <20230517191436.73636-5-bugaevc@gmail.com>
Diffstat (limited to 'mach/mach.h')
-rw-r--r-- | mach/mach.h | 6 |
1 files changed, 5 insertions, 1 deletions
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); |