[RFC,04/34] hurd: Make exception subcode a long

Message ID 20230319151017.531737-5-bugaevc@gmail.com (mailing list archive)
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
  On EXC_BAD_ACCESS, exception subcode is used to pass the faulting memory
address, so it needs to be (at least) pointer-sized. Thus, make it into
a long. This matches the corresponding change in GNU Mach.
---
 hurd/catch-exc.c   | 2 +-
 hurd/hurd/signal.h | 5 +++--
 hurd/hurdfault.c   | 2 +-
 3 files changed, 5 insertions(+), 4 deletions(-)
  

Comments

Samuel Thibault April 2, 2023, 10:52 p.m. UTC | #1
Applied, thanks!

Sergey Bugaev, le dim. 19 mars 2023 18:09:47 +0300, a ecrit:
> On EXC_BAD_ACCESS, exception subcode is used to pass the faulting memory
> address, so it needs to be (at least) pointer-sized. Thus, make it into
> a long. This matches the corresponding change in GNU Mach.
> ---
>  hurd/catch-exc.c   | 2 +-
>  hurd/hurd/signal.h | 5 +++--
>  hurd/hurdfault.c   | 2 +-
>  3 files changed, 5 insertions(+), 4 deletions(-)
> 
> diff --git a/hurd/catch-exc.c b/hurd/catch-exc.c
> index e8a9c798..5ee2233a 100644
> --- a/hurd/catch-exc.c
> +++ b/hurd/catch-exc.c
> @@ -31,7 +31,7 @@ _S_catch_exception_raise (mach_port_t port,
>  			  mach_msg_type_number_t codeCnt
>  #else				/* Vanilla Mach 3.0 interface.  */
>  			  integer_t exception,
> -			  integer_t code, integer_t subcode
> +			  integer_t code, long_integer_t subcode
>  #endif
>  			  )
>  {
> diff --git a/hurd/hurd/signal.h b/hurd/hurd/signal.h
> index 4e9f79b1..c33f974b 100644
> --- a/hurd/hurd/signal.h
> +++ b/hurd/hurd/signal.h
> @@ -51,9 +51,10 @@ struct hurd_signal_preemptor;	/* <hurd/sigpreempt.h> */
>  struct hurd_signal_detail
>    {
>      /* Codes from origination Mach exception_raise message.  */
> -    integer_t exc, exc_code, exc_subcode;
> +    integer_t exc, exc_code;
> +    long_integer_t exc_subcode;
>      /* Sigcode as passed or computed from exception codes.  */
> -    integer_t code;
> +    long_integer_t code;
>      /* Error code as passed or extracted from exception codes.  */
>      error_t error;
>    };
> diff --git a/hurd/hurdfault.c b/hurd/hurdfault.c
> index 069c1c26..a81e7280 100644
> --- a/hurd/hurdfault.c
> +++ b/hurd/hurdfault.c
> @@ -45,7 +45,7 @@ _hurdsig_fault_catch_exception_raise (mach_port_t port,
>  				      mach_msg_type_number_t codeCnt
>  #else				/* Vanilla Mach 3.0 interface.  */
>  				      integer_t exception,
> -				      integer_t code, integer_t subcode
> +				      integer_t code, long_integer_t subcode
>  #endif
>  				      )
>  {
> -- 
> 2.39.2
>
  

Patch

diff --git a/hurd/catch-exc.c b/hurd/catch-exc.c
index e8a9c798..5ee2233a 100644
--- a/hurd/catch-exc.c
+++ b/hurd/catch-exc.c
@@ -31,7 +31,7 @@  _S_catch_exception_raise (mach_port_t port,
 			  mach_msg_type_number_t codeCnt
 #else				/* Vanilla Mach 3.0 interface.  */
 			  integer_t exception,
-			  integer_t code, integer_t subcode
+			  integer_t code, long_integer_t subcode
 #endif
 			  )
 {
diff --git a/hurd/hurd/signal.h b/hurd/hurd/signal.h
index 4e9f79b1..c33f974b 100644
--- a/hurd/hurd/signal.h
+++ b/hurd/hurd/signal.h
@@ -51,9 +51,10 @@  struct hurd_signal_preemptor;	/* <hurd/sigpreempt.h> */
 struct hurd_signal_detail
   {
     /* Codes from origination Mach exception_raise message.  */
-    integer_t exc, exc_code, exc_subcode;
+    integer_t exc, exc_code;
+    long_integer_t exc_subcode;
     /* Sigcode as passed or computed from exception codes.  */
-    integer_t code;
+    long_integer_t code;
     /* Error code as passed or extracted from exception codes.  */
     error_t error;
   };
diff --git a/hurd/hurdfault.c b/hurd/hurdfault.c
index 069c1c26..a81e7280 100644
--- a/hurd/hurdfault.c
+++ b/hurd/hurdfault.c
@@ -45,7 +45,7 @@  _hurdsig_fault_catch_exception_raise (mach_port_t port,
 				      mach_msg_type_number_t codeCnt
 #else				/* Vanilla Mach 3.0 interface.  */
 				      integer_t exception,
-				      integer_t code, integer_t subcode
+				      integer_t code, long_integer_t subcode
 #endif
 				      )
 {