Clean-up: consumer: consumer_metadata_cache_write is not const-correct
[lttng-tools.git] / src / lib / lttng-ctl / filter / filter-grammar-test.c
index 2b9a27dc299543beb38e3191ecd662c406121e40..70656e1a84f42f87b1b0a35bb1579f2b15e908c9 100644 (file)
@@ -3,20 +3,10 @@
  *
  * LTTng filter grammar test
  *
- * Copyright 2012 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ * Copyright 2012 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
  *
- * This library is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License, version 2.1 only,
- * as published by the Free Software Foundation.
+ * SPDX-License-Identifier: LGPL-2.1-only
  *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this library; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
 #include <stdio.h>
@@ -34,7 +24,8 @@ int main(int argc, char **argv)
 {
        struct filter_parser_ctx *ctx;
        int ret;
-       int print_xml = 0, generate_ir = 0, generate_bytecode = 0;
+       int print_xml = 0, generate_ir = 0, generate_bytecode = 0,
+               print_bytecode = 0;
        int i;
 
        for (i = 1; i < argc; i++) {
@@ -46,6 +37,24 @@ int main(int argc, char **argv)
                        generate_bytecode = 1;
                else if (strcmp(argv[i], "-d") == 0)
                        filter_parser_debug = 1;
+               else if (strcmp(argv[i], "-B") == 0)
+                       print_bytecode = 1;
+       }
+
+       /*
+        * Force generate the bytecode if the user asks to print the bytecode
+        * (can't print it without generating it first).
+        */
+       if (print_bytecode) {
+               generate_bytecode = 1;
+       }
+
+       /*
+        * Force generate the IR if the user asks to generate the bytecode
+        * (the bytecode is generated by visiting the IR).
+        */
+       if (generate_bytecode) {
+               generate_ir = 1;
        }
 
        ctx = filter_parser_ctx_alloc(stdin);
@@ -58,11 +67,6 @@ int main(int argc, char **argv)
                fprintf(stderr, "Parse error\n");
                goto parse_error;
        }
-       ret = filter_visitor_set_parent(ctx);
-       if (ret) {
-               fprintf(stderr, "Set parent error\n");
-               goto parse_error;
-       }
        if (print_xml) {
                ret = filter_visitor_print_xml(ctx, stdout, 0);
                if (ret) {
@@ -101,23 +105,28 @@ int main(int argc, char **argv)
                printf("Size of bytecode generated: %u bytes.\n",
                        bytecode_get_len(&ctx->bytecode->b));
        }
-#if 0
-       if (run_bytecode) {
-               int64_t retval;
 
-               printf("Interpreting bytecode... ");
-               fflush(stdout);
-               ret = bytecode_interpret(&ctx->bytecode->b, &retval, NULL);
-               if (ret) {
-                       fprintf(stderr, "Error interpreting bytecode\n");
-                       goto parse_error;
-               } else {
-                       printf("Bytecode interpret result: %" PRIi64 "\n",
-                               retval);
+       if (print_bytecode) {
+               unsigned int bytecode_len, len, i;
+
+               len = bytecode_get_len(&ctx->bytecode->b);
+               bytecode_len = ctx->bytecode->b.reloc_table_offset;
+               printf("Bytecode:\n");
+               for (i = 0; i < bytecode_len; i++) {
+                       printf("0x%X ",
+                               ((uint8_t *) ctx->bytecode->b.data)[i]);
                }
-               printf("done\n");
+               printf("\n");
+               printf("Reloc table:\n");
+               for (i = bytecode_len; i < len;) {
+                       printf("{ 0x%X, ",
+                               *(uint16_t *) &ctx->bytecode->b.data[i]);
+                       i += sizeof(uint16_t);
+                       printf("%s } ", &((char *) ctx->bytecode->b.data)[i]);
+                       i += strlen(&((char *) ctx->bytecode->b.data)[i]) + 1;
+               }
+               printf("\n");
        }
-#endif //0
 
        filter_bytecode_free(ctx);
        filter_ir_free(ctx);
This page took 0.024319 seconds and 4 git commands to generate.