• Stars
    star
    305
  • Rank 136,879 (Top 3 %)
  • Language
    C
  • License
    Other
  • Created over 11 years ago
  • Updated almost 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Semantics of C in K

See INSTALL.md for installation instructions and LICENSE for licensing information.

If this readme isn't enough, consider checking out these papers to better understand this project:

Quick overview

  • kcc is meant to act a lot like gcc. You use it and run programs the same way. If your system provides a command kcc already (of which there are several possible), we also provide the synonym kclang.
  • The programs kcc generates act like normal programs. Both the output to stdout (e.g., printf), as well as the return value of the program should be what you expect. In terms of operational behavior, a correct program compiled with kcc should act the same as one compiled with gcc.
  • Take a look at kcc -h for some compile-time options. For most programs, you only need to run kcc program.c and everything will work.
  • After compiling a program and generating an output file a.out, the resulting program is a native executable and can be run on any platform provided it has access to the runtime libraries required by the dynamic linker.
  • If you try to run a program that is undefined (or one for which we are missing semantics), the program will get stuck. The message should tell you where it got stuck and may give a hint as to why. If you want help deciphering the output, or help understanding why the program is undefined, please send your final configuration to us. If you are using default settings, this configuration is located in the file config in the current directory if the program got stuck while executing, or can be generated using kcc -d in case of compile-time errors.

Runtime features

Once kcc has been run on C source files, it should produce an executable script (a.out by default).

Testing the semantics

The tests directory includes many of the tests we've used to build confidence in the correctness of our semantics. To run the basic set of tests, run make check from the top-level directory. For performance reasons, you may first wish to run kserver in the background, and pass a -j flag to make to get the desired level of parallelism.

A note on libraries

KCC comes by default with relatively limited support for the C library. If you are compiling and linking a program that makes use of many library functions, you may likely run into CV-CID1 and UB-TDR2 errors, signifying respectively that the function you are calling was not declared in the appropriate header file, or that it was declared, but no definition exists currently in the semantics.

We recommend if you wish to execute such programs that you contact Runtime Verification, Inc, which licenses a tool RV-Match based on this semantics which is capable of executing such programs by linking against the native code provided on your system for these libraries. For more information, contact https://runtimeverification.com/support.

Project structure

Directories:

  • examples: some simple example programs for demonstrating the undefinedness that we can catch.

  • x86-gcc-limited-libc: library headers and some library sources for functions that aren't defined directly in the semantics itself.

  • parser: the lightly modified OCaml CIL C parser.

  • scripts: e.g., the kcc script and program-runner, the script that becomes a.out.

  • semantics: the K C semantics.

  • tests: undefinedness, gcc-torture, juliet, llvm, etc.

  • dist: created during the build process, this is where the final products go. For convenience, consider adding this directory to your $PATH.

During the build process, three versions of the semantics are built using kompile with different flags: a "deterministic" version, a version for supporting non-deterministic expression sequencing, and another with non-deterministic thread-interleaving. These all get copied to dist/ along with the contents of x86-gcc-limited-libc/include and the scripts/kcc script. Finally, make runs kcc -s -shared on all the libc source files in x86-gcc-limited-libc/src.

The kcc script is the primary interface to our semantics. Invoking kcc myprogram.c results in the contents of the parameter C source file being piped through, consecutively:

  1. the GNU C preprocessor, resulting in the C program with all preprocessor macros expanded;
  2. the CIL C parser (cparser), resulting in a KAST term;

The root of this AST is a single TranslationUnit term, which is then interpreted by our "translation" semantics.

See semantics/c/README.md for more details.

More Repositories

1

k-legacy

The K tools (deprecated, see README)
Java
146
star
2

X86-64-semantics

Semantics of x86-64 in K
Assembly
140
star
3

javascript-semantics

KJS: A Complete Formal Semantics of JavaScript
JavaScript
85
star
4

llvm-semantics

Formal semantics of LLVM IR in K
LLVM
44
star
5

vyper-semantics

KVyper: Semantics of Vyper in K
Python
41
star
6

solidity-semantics

Semantics of Solidity in K
Shell
29
star
7

haskell-core-semantics

Haskell's Core in K.
Haskell
20
star
8

java-semantics

The semantics of Java in K
Java
19
star
9

p4-semantics

Formal Semantics of P4 in K
P4
18
star
10

matching-logic-prover

SMT
15
star
11

semantic-approaches

A comprehensive experiments-based survey on various approaches to program semantics.
Haskell
11
star
12

k-in-k

Defining the semantics of K in K
Python
11
star
13

jvm-semantics

Semantics of the Java Virtual Machine.
Java
5
star
14

kweb

Online extensible IDE for the K Framework and other formal verification projects. Example deployment at http://kframework.org/kweb/
Python
5
star
15

boogie-semantics

Boogie
5
star
16

kale

kale backend
Scala
4
star
17

orc-semantics

Csound
4
star
18

kat

Standard ML
3
star
19

homebrew-k

K Homebrew tap
3
star
20

aadl-semantics

Formal semantics of AADL in K
2
star
21

cink-semantics

Cink is a kernel of the C++ language we used to experiment with K. The language is used an example for teaching classes and is referred in several research papers.
2
star
22

rust-metamath

A Rust Implementation of Metamath
Rust
2
star
23

alk-semantics

An executable algorithmic language. The algorithms are executed over abstract data types like arrays, structures, cons lists (viewed as abstractions of simple linked lists).
1
star