[RFC,15/34] hurd: Use uintptr_t for register values in trampoline.c
Checks
Commit Message
This is more correct, if only because these fields are defined as having
the type unsigned int in the Mach headers, so casting them to a signed
int and then back is suboptimal.
Also, remove an extra reassignment of uesp -- this is another remnant of
the ecx kludge.
Signed-off-by: Sergey Bugaev <bugaevc@gmail.com>
---
sysdeps/mach/hurd/i386/trampoline.c | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)
Comments
Applied, thanks!
Sergey Bugaev, le dim. 19 mars 2023 18:09:58 +0300, a ecrit:
> This is more correct, if only because these fields are defined as having
> the type unsigned int in the Mach headers, so casting them to a signed
> int and then back is suboptimal.
>
> Also, remove an extra reassignment of uesp -- this is another remnant of
> the ecx kludge.
>
> Signed-off-by: Sergey Bugaev <bugaevc@gmail.com>
> ---
> sysdeps/mach/hurd/i386/trampoline.c | 13 ++++++-------
> 1 file changed, 6 insertions(+), 7 deletions(-)
>
> diff --git a/sysdeps/mach/hurd/i386/trampoline.c b/sysdeps/mach/hurd/i386/trampoline.c
> index 8f481e79..ab67fb9c 100644
> --- a/sysdeps/mach/hurd/i386/trampoline.c
> +++ b/sysdeps/mach/hurd/i386/trampoline.c
> @@ -270,24 +270,23 @@ _hurd_setup_sighandler (struct hurd_sigstate *ss, const struct sigaction *action
>
> _hurdsig_end_catch_fault ();
>
> - state->basic.eip = (int) rpc_wait_trampoline;
> + state->basic.eip = (uintptr_t) rpc_wait_trampoline;
> /* The reply-receiving trampoline code runs initially on the original
> user stack. We pass it the signal stack pointer in %ebx. */
> - state->basic.uesp = state->basic.esp; /* Restore mach_msg syscall SP. */
> - state->basic.ebx = (int) sigsp;
> + state->basic.ebx = (uintptr_t) sigsp;
> /* After doing the message receive, the trampoline code will need to
> update the %eax value to be restored by sigreturn. To simplify
> the assembly code, we pass the address of its slot in SCP to the
> trampoline code in %ecx. */
> - state->basic.ecx = (int) &scp->sc_eax;
> + state->basic.ecx = (uintptr_t) &scp->sc_eax;
> }
> else
> {
> - state->basic.eip = (int) trampoline;
> - state->basic.uesp = (int) sigsp;
> + state->basic.eip = (uintptr_t) trampoline;
> + state->basic.uesp = (uintptr_t) sigsp;
> }
> /* We pass the handler function to the trampoline code in %edx. */
> - state->basic.edx = (int) handler;
> + state->basic.edx = (uintptr_t) handler;
>
> /* The x86 ABI says the DF bit is clear on entry to any function. */
> state->basic.efl &= ~EFL_DF;
> --
> 2.39.2
>
@@ -270,24 +270,23 @@ _hurd_setup_sighandler (struct hurd_sigstate *ss, const struct sigaction *action
_hurdsig_end_catch_fault ();
- state->basic.eip = (int) rpc_wait_trampoline;
+ state->basic.eip = (uintptr_t) rpc_wait_trampoline;
/* The reply-receiving trampoline code runs initially on the original
user stack. We pass it the signal stack pointer in %ebx. */
- state->basic.uesp = state->basic.esp; /* Restore mach_msg syscall SP. */
- state->basic.ebx = (int) sigsp;
+ state->basic.ebx = (uintptr_t) sigsp;
/* After doing the message receive, the trampoline code will need to
update the %eax value to be restored by sigreturn. To simplify
the assembly code, we pass the address of its slot in SCP to the
trampoline code in %ecx. */
- state->basic.ecx = (int) &scp->sc_eax;
+ state->basic.ecx = (uintptr_t) &scp->sc_eax;
}
else
{
- state->basic.eip = (int) trampoline;
- state->basic.uesp = (int) sigsp;
+ state->basic.eip = (uintptr_t) trampoline;
+ state->basic.uesp = (uintptr_t) sigsp;
}
/* We pass the handler function to the trampoline code in %edx. */
- state->basic.edx = (int) handler;
+ state->basic.edx = (uintptr_t) handler;
/* The x86 ABI says the DF bit is clear on entry to any function. */
state->basic.efl &= ~EFL_DF;