summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2020-06-09Add splice.ml to libsailThomas Bauereiss
2020-06-05Generate nice error messages for patterns woth duplicate bindingsAlasdair
2020-06-03Update CHANGELOGAlasdair
2020-06-03Correct compiler version in CI scriptAlasdair
2020-06-03Add a workflow for latest released ocamlAlasdair
2020-06-03Update opam file to opam 2Alasdair
2020-06-03add docker makefile targetjp
2020-06-02Add m4 to 18.04 installAlasdair
It previously installed fine via the build-essential package, so no idea what changed! Plus 20.04 works fine with just build-essential
2020-06-02Add ubuntu 20.04 workflowAlasdair
2020-05-27Try to fix Github CIThomas Bauereiss
Add opam PPA when building on Ubuntu to get opam v2.
2020-05-27Update base64 and yojson dependenciesThomas Bauereiss
2020-05-22Fix atomicity of register field writesAlasdair
Previous merge commit caused some code that was generating register.field = value to instead generate temp = register temp.field = value register = temp This was caused by rewriter changes affecting the ANF form, and the Jib compilation was sensitive to small changes in the ANF form when compiling l-expressions. Rather than applying a band-aid fix in the rewriter this commit re-factors the ANF translation of l-expressions to ensure that the jib compilation is more robust and able to consistently generate the correct l-expressions without introducing additional read-modify-write expressions in the code.
2020-05-21Merge branch 'mono-tweaks' into sail2Alasdair
2020-05-21Merge branch 'mono-tweaks' of github.com:rems-project/sail into mono-tweaksAlasdair
2020-05-21Merge branch 'sail2' into mono-tweaksAlasdair
2020-05-19Update readme with min OCaml versionAlasdair Armstrong
2020-05-18Add a prefix option for generated coverage filesAlasdair
2020-05-18Add a header and a default page to the index in coverage reportsAlasdair
2020-05-15Merge pull request #67 from arichardson/add-staticAlasdair Armstrong
Add static to more C functions
2020-05-15Remove some left over debug statementsAlasdair
2020-05-15Generate index for coverageAlasdair
2020-05-15C backend: Only add static to model_{init,fini} if -static is passedAlex Richardson
Otherwise the C emulator doesn't build.
2020-05-15C backend: Add a static () helperAlex Richardson
This simplifies some of the code.
2020-05-15Fix more typosAlasdair
2020-05-15Tweak readmeAlasdair
2020-05-15Add colour options to sailcovAlasdair
Colours can be tweaked for aesthetics by setting hue and saturation individually or there is an --alt-colo[u]rs flag which switches to a yellow/blue mode that should be better for red/green colourblindness.
2020-05-15Add static to registers if -static is passedAlex Richardson
This was the final missing step for me to link two almost identical C files generated from sail into the same library.
2020-05-15Also make the letbinding C variables staticAlex Richardson
I was getting run-time failures when code generate from cheri128 and cheri64 in the same process. This was caused because my compiler defaults to -fcommon so it merged multiple variables (with conflicting types!). When initializing the second set of letbindings, the first one was overwritten (first variable was lbits, the other was uint64_t). Compiling with -fno-common exposes this problem.
2020-05-15Also allow adding static to model_{init,fini,main}()Alex Richardson
Without this I get the following linker error when trying to include both 64 and 128 bit sail-riscv code in the same binary: duplicate symbol '_model_init' in: libsail_wrapper128.a(sail_wrapper_128.c.o) libsail_wrapper128.a(sail_wrapper_64.c.o) duplicate symbol '_model_main' in: libsail_wrapper128.a(sail_wrapper_128.c.o) libsail_wrapper128.a(sail_wrapper_64.c.o) duplicate symbol '_model_fini' in: libsail_wrapper128.a(sail_wrapper_128.c.o) libsail_wrapper128.a(sail_wrapper_64.c.o) # Conflicts: # src/jib/c_backend.ml
2020-05-15Add static to more C functionsAlex Richardson
This allows me to compile sail-riscv64 and sail-riscv128 code in the same static library.
2020-05-15Add --tab-width option to sailcovAlasdair
2020-05-15Update type error messages for jenkinsAlasdair
Location info fixes changed the location reported for an expected type error very slightly
2020-05-15Move riscv_vmem_sv39 example to a separate page so it renders nicelyAlasdair
2020-05-15Add example output for coverage visualisationAlasdair
2020-05-15Add coverage headerAlasdair
2020-05-15Fix linksAlasdair
2020-05-15Add sailcov readmeAlasdair
2020-05-15Add coverage tracking toolAlasdair
See sailcov/README.md for a short description Fix many location info bugs discovered by eyeballing output
2020-05-14Output INT64_MIN in code generator for min 64-bit integer literalAlasdair
Fixes the warning generated because in C -X where X is the minimum integer is parsed as a positive integer which is then negated. This causes a (I believe spurious) warning that the integer literal is too large for the type. Also using INT64_C so we get either long or long long depending on platform
2020-05-14Merge remote-tracking branch 'origin' into codegenAlasdair
2020-05-14Re-activate some testsAlasdair
2020-05-14Attempt to fix CI errorAlasdair
2020-05-14Various bugfixes and improvements for updated codegenAlasdair
2020-05-13Add caching of calls to solve_uniqueThomas Bauereiss
2020-05-13Make Isabelle lemma generation work with grouped regstateThomas Bauereiss
2020-05-12Add support for instrumenting generated C with branch coverage metricsAlasdair
Will call: void sail_branch_reached(int branch_id, char *source_file, int l1, int c1, int l2, int c2); on each branch caused by a match or if statement in the source code For each branch that is taken, will call: void sail_branch_taken(int branch_id, char *source_file, int l1, int c1, int l2, int c2) Every branch gets a unique identifier, and the functions are called with the source file location and line/character information for the start and end of each match case or then/else branch. sail_branch_reached is given the location info for the whole match statement.
2020-05-12Support for user-defined state and headers in new codegenAlasdair
All the code-generator options can now be controlled via a json configuration file Extra fields can be added to the sail_state struct using a codegen.extra_state key in the configuration json for the code generator If primitives want to modify the state they can be specified via codegen.state_primops To import such state, codegen.extra_headers can be used to add user-defined headers to the generated .h file
2020-05-11Functorise and refactor C code generatorAlasdair
Currently uses the -c2 option Now generates a sail_state struct which is passed as a pointer to all generated functions. This contains all registers, letbindings, and the exception state. (Letbindings must be included as they can contain pointers to registers). This should make it possible to use sail models in a multi-threaded program by creating multiple sail_states, provided a suitable set of thread-safe memory builtins are provided. Currently the sail_state cannot be passed to the memory builtins. For foo.sail, now generate a foo.c, foo.h, and (optionally) a foo_emu.c. foo_emu.c wraps the generated library into an emulator that behaves the same as the one we previously generated. The sail_assert and sail_match_failure builtins are now in a separate file, as they must exist even when the RTS is not used. Name mangling can be controlled via the exports and exports_mangled fields of the configuration struct (currently not exposed outside of OCaml). exports allows specifying a name in C for any Sail identifier (before name mangling) and exports_mangled allows specifiying a name for a mangled Sail identifier - this is primarily useful for generic functions and data structures which have been specialised.
2020-05-08Only check int kids when simplifying nexpsThomas Bauereiss
2020-05-08Add another type annotation in bitvector cast rewriteThomas Bauereiss