[RFC,15/34] hurd: Use uintptr_t for register values in trampoline.c

Message ID 20230319151017.531737-16-bugaevc@gmail.com
State Committed, archived
Headers
Series The rest of the x86_64-gnu port |

Checks

Context Check Description
dj/TryBot-apply_patch success Patch applied to master at the time it was sent

Commit Message

Sergey Bugaev March 19, 2023, 3:09 p.m. UTC
  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

Samuel Thibault April 2, 2023, 11:13 p.m. UTC | #1
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
>
  

Patch

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;