poke-devel
[Top][All Lists]
Advanced

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

Re: [PATCH 1/2] pvm: wrap string literals in named global variables


From: Jose E. Marchesi
Subject: Re: [PATCH 1/2] pvm: wrap string literals in named global variables
Date: Wed, 11 Jan 2023 13:39:14 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux)

Hi Mohammad.

> Accessing any non-wrapped global object/function will lead to UB
> in Jitter.  This commit wraps globals for `formatf{32,64}`
> instructions.

Thanks for realizing this before the pre-release :)
OK for master!


>
> 2023-01-11  Mohammad-Reza Nabipoor  <mnabipoor@gnu.org>
>
>       * libpoke/pvm.jitter (wrapped-globals): Add
>       pvm_literal_formatf_{fmt,styles} to the list.
>       (pvm_literal_formatf_fmt): Define global variable for wrapping
>       format string in `formatf{32,64}' (we cannot directly use string
>       literals in advanced modes).
>       (pvm_literal_formatf_styles): Likewise.
>       (FORMATF): Use new wrapped globals.  Remove % operator.
> ---
>  ChangeLog          | 10 ++++++++++
>  libpoke/pvm.jitter |  9 ++++++---
>  2 files changed, 16 insertions(+), 3 deletions(-)
>
> diff --git a/ChangeLog b/ChangeLog
> index e1762b12..e9a306f5 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,3 +1,13 @@
> +2023-01-11  Mohammad-Reza Nabipoor  <mnabipoor@gnu.org>
> +
> +     * libpoke/pvm.jitter (wrapped-globals): Add
> +     pvm_literal_formatf_{fmt,styles} to the list.
> +     (pvm_literal_formatf_fmt): Define global variable for wrapping
> +     format string in `formatf{32,64}' (we cannot directly use string
> +     literals in advanced modes).
> +     (pvm_literal_formatf_styles): Likewise.
> +     (FORMATF): Use new wrapped globals.  Remove % operator.
> +
>  2023-01-11  Mohammad-Reza Nabipoor  <mnabipoor@gnu.org>
>  
>       * libpoke/pvm.jitter (formatf32): Add literal parameter to the
> diff --git a/libpoke/pvm.jitter b/libpoke/pvm.jitter
> index e59490e0..0e547786 100644
> --- a/libpoke/pvm.jitter
> +++ b/libpoke/pvm.jitter
> @@ -163,6 +163,8 @@ wrapped-globals
>    pvm_literal_eindex
>    pvm_literal_notmappable
>    pvm_literal_newline
> +  pvm_literal_formatf_fmt
> +  pvm_literal_formatf_styles
>    libpoke_term_if
>    pvm_exception_names
>  end
> @@ -878,7 +880,6 @@ late-header-c
>  #define FORMATF(RESULT,NUM,PREC,STYLE,TYPEF)                                \
>    do                                                                        \
>      {                                                                       \
> -      static const char STYLES[] = { 'f', 'e', 'g' };                       \
>        TYPEF x;                                                              \
>        int n;                                                                \
>        char fmt[16];                                                         \
> @@ -887,8 +888,8 @@ late-header-c
>        PVM_ASSERT ((STYLE) < 3);                                             \
>                                                                              \
>        memcpy (&x, &(NUM), sizeof (NUM));                                    \
> -      n = snprintf (fmt, sizeof (fmt), "%%.%u%c", (unsigned)(PREC),         \
> -                    STYLES[(STYLE) % 3]);                                   \
> +      n = snprintf (fmt, sizeof (fmt), pvm_literal_formatf_fmt,             \
> +                    (unsigned)(PREC), pvm_literal_formatf_styles[(STYLE)]); \
>        if (n == -1)                                                          \
>          PVM_RAISE_DFL (PVM_E_CONV);                                         \
>        n = asprintf (&(RESULT), fmt, x);                                     \
> @@ -931,6 +932,8 @@ late-c
>      static const char *pvm_literal_eindex = "invalid index in ains";
>      static const char *pvm_literal_notmappable = "not mappable value";
>      static const char *pvm_literal_newline = "\n";
> +    static const char *pvm_literal_formatf_fmt = "%%.%u%c";
> +    static const char pvm_literal_formatf_styles[3] = { 'f', 'e', 'g' };
>  
>  #define E(key) [PVM_E_##key] = PVM_E_##key##_NAME,
>      static const char *pvm_exception_names[] = {



reply via email to

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