On Wed, Apr 21, 2021 at 7:21 PM James Carter <jwcart2@xxxxxxxxx> wrote: > > For debugging purposes it would be useful to be able to write out > the CIL AST at various points in the build process. > > This patch set creates secil2tree which can write the CIL parse tree, > the CIL AST after the build phase, or the CIL AST after the resolve > phase (with names fully-qualified). > > Within CIL the function cil_print_tree() has existed from early in > CIL's development, but it was not exported in libsepol and there was no > way to use it except by adding a call to it where you wanted to print > out the CIL AST and then recompiling everything. It also used cil_log() > as its output, so other messages could be mixed in with the output. This > patch set moves all of this code to its own file, updates it, renames it > as cil_write_ast(), and adds libsepol functions that can be used to call > it after each one of the phases mentioned above. > > Both the parse and build CIL AST are valid CIL policies that can be > compiled with secilc, but the resolve CIL AST is not always a valid CIL > policy. The biggest problem is that fully-qualified names can contain > dots and CIL does not allow dots in declaration names. There are other > problems as well. It would be nice to get to the point where the output > for all of the trees are valid CIL, but that is a goal for the future. > > v3: > - -use "-ast-phase=<phase>" in the usage message and man pages instead > of "-ast-phase <phase>" > > v2: > - Remove whitespace errors in cil_write_ast.h > - Use "const char*" instead of just "char*" when dealing with string > literals to satisfy clang. > > James Carter (3): > libsepol/cil: Create functions to write the CIL AST > libsepol/cil: Add functions to make use of cil_write_ast() > secilc: Create the new program called secil2tree to write out CIL AST > > libsepol/cil/include/cil/cil.h | 3 + > libsepol/cil/src/cil.c | 92 ++ > libsepol/cil/src/cil_tree.c | 1471 ---------------------------- > libsepol/cil/src/cil_tree.h | 2 - > libsepol/cil/src/cil_write_ast.c | 1573 ++++++++++++++++++++++++++++++ > libsepol/cil/src/cil_write_ast.h | 46 + > libsepol/src/libsepol.map.in | 3 + > secilc/.gitignore | 2 + > secilc/Makefile | 20 +- > secilc/secil2tree.8.xml | 81 ++ > secilc/secil2tree.c | 206 ++++ > 11 files changed, 2024 insertions(+), 1475 deletions(-) > create mode 100644 libsepol/cil/src/cil_write_ast.c > create mode 100644 libsepol/cil/src/cil_write_ast.h > create mode 100644 secilc/secil2tree.8.xml > create mode 100644 secilc/secil2tree.c > > -- > 2.26.3 > I indeed missed the v2, sorry for this. These patches look good to me, thanks! Acked-by: Nicolas Iooss <nicolas.iooss@xxxxxxx>