[PATCH rtems-tools] bin2c: Add option for alignment

Joel Sherrill joel at rtems.org
Mon Feb 14 16:06:16 UTC 2022


I think this looks ok

On Mon, Feb 14, 2022, 9:44 AM Christian Mauderer <
christian.mauderer at embedded-brains.de> wrote:

> Sometimes it's useful if structures are aligned. This patch add a
>
>   -A alignment
>
> option. Note that this doesn't check for valid alignments. It accepts
> any positive number in decimal or hex format. If for example an
> alignment of 7 is specified, the compiler will complain that it is not a
> power of 2. But it's not really useful to duplicate this check here.
> ---
>  misc/bin2c/rtems-bin2c.c | 42 ++++++++++++++++++++++++++++++++++++----
>  1 file changed, 38 insertions(+), 4 deletions(-)
>
> diff --git a/misc/bin2c/rtems-bin2c.c b/misc/bin2c/rtems-bin2c.c
> index 462ecf0..8d0e6a1 100644
> --- a/misc/bin2c/rtems-bin2c.c
> +++ b/misc/bin2c/rtems-bin2c.c
> @@ -42,6 +42,7 @@ int verbose = 0;
>  int zeroterminated = 0;
>  int createC = 1;
>  int createH = 1;
> +unsigned int align = 0;
>
>  static void sanitize_file_name(char *p)
>  {
> @@ -175,11 +176,22 @@ void process(const char *ifname, const char *ofname,
> const char *forced_name)
>      /* print structure */
>      fprintf(
>        ocfile,
> -      "%s%sunsigned char %s[] = {\n  ",
> +      "%s%sunsigned char %s[] ",
>        ((usestatic) ? "static " : ""),
>        ((useconst) ? "const " : ""),
>        buf
>      );
> +    if (align > 0) {
> +      fprintf(
> +        ocfile,
> +        "__attribute__(( __aligned__(%d) )) ",
> +        align
> +      );
> +    }
> +    fprintf(
> +      ocfile,
> +      "= {\n  "
> +    );
>      int c, col = 1;
>      while ((c = myfgetc(ifile)) != EOF) {
>        if (col >= 78 - 6) {
> @@ -238,15 +250,22 @@ void process(const char *ifname, const char *ofname,
> const char *forced_name)
>      /* print structure */
>      fprintf(
>        ohfile,
> -      "extern %s%sunsigned char %s[];",
> +      "extern %s%sunsigned char %s[]",
>        ((usestatic) ? "static " : ""),
>        ((useconst) ? "const " : ""),
>        buf
>      );
> +    if (align > 0) {
> +      fprintf(
> +        ohfile,
> +        " __attribute__(( __aligned__(%d) ))",
> +        align
> +      );
> +    };
>      /* print sizeof */
>      fprintf(
>        ohfile,
> -      "\n"
> +      ";\n"
>        "extern %s%ssize_t %s_size;\n",
>        ((usestatic) ? "static " : ""),
>        ((useconst) ? "const " : ""),
> @@ -274,7 +293,7 @@ void usage(void)
>  {
>    fprintf(
>       stderr,
> -     "usage: bin2c [-csvzCH] [-N name] <input_file> <output_file>\n"
> +     "usage: bin2c [-csvzCH] [-N name] [-A alignment] <input_file>
> <output_file>\n"
>       "  <input_file> is the binary file to convert\n"
>       "  <output_file> should not have a .c or .h extension\n"
>       "\n"
> @@ -285,6 +304,7 @@ void usage(void)
>       "  -H - create c-header only\n"
>       "  -C - create c-source file only\n"
>       "  -N - force name of data array\n"
> +     "  -A - add alignment - parameter can be a hexadecimal or decimal
> number\n"
>      );
>    exit(1);
>  }
> @@ -329,6 +349,20 @@ int main(int argc, char **argv)
>        name = argv[1];
>        --argc;
>        ++argv;
> +    } else if (!strcmp(argv[1], "-A")) {
> +      --argc;
> +      ++argv;
> +      if (argc <= 1) {
> +        fprintf(stderr, "error: -A needs an alignment\n");
> +        usage();
> +      }
> +      align = strtoul(argv[1], NULL, 0);
> +      if (align == 0) {
> +        fprintf(stderr, "error: Couldn't convert argument of -A\n");
> +        usage();
> +      }
> +      --argc;
> +      ++argv;
>      } else {
>        usage();
>      }
> --
> 2.31.1
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
>


More information about the devel mailing list