bug-hurd
[Top][All Lists]
Advanced

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

Re: ***UNCHECKED*** [PATCH mig] Update code generation to handle the new


From: Samuel Thibault
Subject: Re: ***UNCHECKED*** [PATCH mig] Update code generation to handle the new 64 bit ABI
Date: Mon, 25 Sep 2023 10:57:11 +0200
User-agent: NeoMutt/20170609 (1.8.3)

Applied, thanks!

Flavio Cruz, le mar. 16 mai 2023 23:04:18 -0400, a ecrit:
> Mostly, we don't set the fields that do not exist and avoid type
> mismatching (like casting unsigned short to unsigned char for
> msgt_name).
> 
> We also revamp type checking to compare mach_msg_type_t to uint64_t
> instead of just uint32_t as we now use the whole structure.
> ---
>  global.h |  2 ++
>  utils.c  | 27 +++++++++++++++++++--------
>  2 files changed, 21 insertions(+), 8 deletions(-)
> 
> diff --git a/global.h b/global.h
> index e3d42dd..11e772e 100644
> --- a/global.h
> +++ b/global.h
> @@ -71,6 +71,8 @@ extern size_t port_size;
>  extern size_t port_size_in_bits;
>  extern size_t complex_alignof;
>  
> +#define IS_64BIT_ABI (desired_complex_alignof == 8)
> +
>  extern void more_global(void);
>  
>  #ifndef NULL
> diff --git a/utils.c b/utils.c
> index 6d6bb9e..6198144 100644
> --- a/utils.c
> +++ b/utils.c
> @@ -78,7 +78,7 @@ WriteBogusDefines(FILE *file)
>  
>      fprintf(file, "#define BAD_TYPECHECK(type, check) mig_unlikely (({\\\n");
>      fprintf(file,
> -         "  union { mach_msg_type_t t; uint32_t w; } _t, _c;\\\n");
> +         "  union { mach_msg_type_t t; uint%d_t w; } _t, _c;\\\n", 
> desired_complex_alignof * 8);
>      fprintf(file,
>           "  _t.t = *(type); _c.t = *(check);_t.w != _c.w; }))\n");
>  }
> @@ -358,11 +358,21 @@ static void
>  WriteStaticLongDecl(FILE *file, const ipc_type_t *it,
>                   dealloc_t dealloc, bool inname, identifier_t name)
>  {
> +    const_string_t msgt_name = inname ? it->itInNameStr : it->itOutNameStr;
>      fprintf(file, "\tconst mach_msg_type_long_t %s = {\n", name);
>      fprintf(file, "\t\t.msgtl_header = {\n");
> -    fprintf(file, "\t\t\t.msgt_name =\t\t0,\n");
> -    fprintf(file, "\t\t\t.msgt_size =\t\t0,\n");
> -    fprintf(file, "\t\t\t.msgt_number =\t\t0,\n");
> +    if (IS_64BIT_ABI) {
> +        /* For the 64 bit ABI we don't really have mach_msg_type_long_t
> +          * so we fill mach_msg_type_long_t just like mach_msg_type_t.
> +          */
> +         fprintf(file, "\t\t\t.msgt_name =\t\t(unsigned char) %s,\n", 
> msgt_name);
> +         fprintf(file, "\t\t\t.msgt_size =\t\t%d,\n", it->itSize);
> +         fprintf(file, "\t\t\t.msgt_number =\t\t%d,\n", it->itNumber);
> +    } else {
> +         fprintf(file, "\t\t\t.msgt_name =\t\t0,\n");
> +         fprintf(file, "\t\t\t.msgt_size =\t\t0,\n");
> +         fprintf(file, "\t\t\t.msgt_number =\t\t0,\n");
> +    }
>      fprintf(file, "\t\t\t.msgt_inline =\t\t%s,\n",
>           strbool(it->itInLine));
>      fprintf(file, "\t\t\t.msgt_longform =\t\tTRUE,\n");
> @@ -370,10 +380,11 @@ WriteStaticLongDecl(FILE *file, const ipc_type_t *it,
>           strdealloc(dealloc));
>      fprintf(file, "\t\t\t.msgt_unused =\t\t0\n");
>      fprintf(file, "\t\t},\n");
> -    fprintf(file, "\t\t.msgtl_name =\t(unsigned short) %s,\n",
> -         inname ? it->itInNameStr : it->itOutNameStr);
> -    fprintf(file, "\t\t.msgtl_size =\t%d,\n", it->itSize);
> -    fprintf(file, "\t\t.msgtl_number =\t%d,\n", it->itNumber);
> +    if (!IS_64BIT_ABI) {
> +        fprintf(file, "\t\t.msgtl_name =\t(unsigned short) %s,\n", 
> msgt_name);
> +         fprintf(file, "\t\t.msgtl_size =\t%d,\n", it->itSize);
> +         fprintf(file, "\t\t.msgtl_number =\t%d,\n", it->itNumber);
> +    }
>      fprintf(file, "\t};\n");
>  }
>  
> -- 
> 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]