bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [RFC PATCH glibc 15/34] hurd: Use uintptr_t for register values in t


From: Samuel Thibault
Subject: Re: [RFC PATCH glibc 15/34] hurd: Use uintptr_t for register values in trampoline.c
Date: Mon, 3 Apr 2023 01:13:32 +0200
User-agent: NeoMutt/20170609 (1.8.3)

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
> 

-- 
Samuel
---
Pour une évaluation indépendante, transparente et rigoureuse !
Je soutiens la Commission d'Évaluation de l'Inria.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]