Thanks. I pushed it. I'll update the RTEMS source builder as soon as I have tested whether I get the hash right.

Am 14.02.22 um 17:06 schrieb Joel Sherrill:
I think this looks ok

On Mon, Feb 14, 2022, 9:44 AM Christian Mauderer <christian.maude...@embedded-brains.de <mailto:christian.maude...@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@rtems.org <mailto:devel@rtems.org>
    http://lists.rtems.org/mailman/listinfo/devel
    <http://lists.rtems.org/mailman/listinfo/devel>


--
--------------------------------------------
embedded brains GmbH
Herr Christian MAUDERER
Dornierstr. 4
82178 Puchheim
Germany
email: christian.maude...@embedded-brains.de
phone: +49-89-18 94 741 - 18
fax:   +49-89-18 94 741 - 08

Registergericht: Amtsgericht München
Registernummer: HRB 157899
Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler
Unsere Datenschutzerklärung finden Sie hier:
https://embedded-brains.de/datenschutzerklaerung/
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to