VM with JIT-compiler for ATMega32 written in Rust
An experiment to create a JVM in Rust
An exploration of rust for operating system development
MackieLoeffel/weltfairsteher 2
website for a project by CHANGE e.V.
MackieLoeffel/atom-auto-fold 1
Atom package for folding
UPC2 PDF
:hammer: Build your project directly from the Atom editor
MackieLoeffel/atom-node-debugger 0
A Nodejs Debugger For Atom
Das beste Spiel, was je geschaffen wurde und je geschaffen werden wird!
push eventrems-project/cerberus
commit sha bf61e6778f6eb7855804a8be69766341c20aee68
move distinction between points-to and unitialised/memory-block into the index term language
commit sha e008c510ea6fc559f7e9d6e4de5241be535f84e9
Merge branch 'master' of https://github.com/rems-project/cerberus
push time in 9 hours
push eventrems-project/isla
commit sha 33233a02b449254e133efcbdd44debd5a5a3797a
Add register reset to isla-execute-function It doesn't call model initialisation so do the register reset explicitly.
push time in 12 hours
push eventrems-project/cerberus
commit sha a176d20eb142847abb348fd258297b6c8cd8ed13
copy of core.ott to start work on mucore paper type system
push time in 16 hours
push eventrems-project/cerberus
commit sha a9b9eefbdf2d06e97c745138ba3ea29caf5bedbd
- replace SMT-arrays by parameterised index terms, - make typing rules around value-types work with logical constraints instead of defining index terms to support incompletely specified array values
push time in 4 days
push eventrems-project/cerberus
commit sha a1fe8e7bcbeef0095b335606a342aa7d4b43ea39
add name-parameterised index terms (morally functions)
push time in 5 days
push eventrems-project/isla
commit sha c8055d3d921f2ce5c45768ccc6230690fa1e66a1
Tidy smt parser a little
push time in 5 days
push eventrems-project/isla
commit sha 5876ddddac7fdc8f5cfb061bb0f8c16b0638e530
Add Distinct to smt, allow nice syntax for "= and or" in smt parser
push time in 5 days
push eventrems-project/isla
commit sha d8fc322bf97a0d281f9e0269246e85ce3d4f4dca
Add option to footprint to constrain variables in partial instructions
push time in 6 days
push eventrems-project/isla
commit sha 2cc44af57a8cea2f3c8196d4fd64f269c7655793
Add a mixed symbolic/concrete bitvector value These can be used by the symbolic execution but aren't introduced by it, instead they can be supplied as part of the initial state. The motivating example is that footprint can now produce (shorter) traces for instructions with (most) symbolic operands.
push time in 6 days
push eventrems-project/cerberus
commit sha c3ddfd0b494fc769c48a838b20bf38c40402cc65
clean up
push time in 7 days
push eventrems-project/cerberus
commit sha f065a98a522560f96b11a1e27648d03e9b88b7cf
add option type and index terms
push time in 7 days
issue openedrems-project/cerberus
Missing accesses in the memory trace
Traces printed using the --trace option doesn't show memory operations performed by printf() (and maybe filesystem steps?).
created time in 10 days
issue openedrems-project/cerberus
"Join" operation on integer types?
Currently, RefinedC rejects expressions of the form e1 == e2 in the case where e1 and e2 have different integer types T1 and T2. What I'd like to do is find out which of T1 or T2 is more general, and automatically insert a cast to it on the operand with the less general type. Is that a reasonable approach? And if yes, how can I determine which type is more general?
created time in 10 days
issue openedrems-project/cerberus
Some global definitions do not show up on the generated Core, for example:
union { // same problem with a struct
short c1, c2;
} d;
short *glob_bug = &d.c2; // this disappear at the level of Core
short *glob_ok;
The Core linking function Core_linking.merge_globs seems to be the culprit.
created time in 10 days
issue openedrems-project/cerberus
Clear displayed state when loading or editing a test.
UI bug: When I load a file (eg from PNVI tests), step through a bit, then load a new file, it doesn't clear the displayed memory graph. The same should happen if the source is edited live.
created time in 10 days
issue openedrems-project/cerberus
UI enhancement: When a new user sees an example in the UI, eg from a link, we'd usually like them to try stepping. That'd be more obvious if the "Step n: Forward" button was coloured green, as in the isla-axiomatic UI (https://isla-axiomatic.cl.cam.ac.uk/).
created time in 10 days
issue openedrems-project/cerberus
internal error: gentpying.annotate_expression: AilEident symbol couldn't be resolved
#include <assert.h>
#include <string.h>
int main() {
int i=42;
int *x= &i;
int *y= 0;
unsigned char buffer[sizeof(x)];
memcpy(buffer, &x, sizeof(x));
memcpy(&y, buffer, sizeof(x));
assert(x == y);
assert(*y==42);
}
https://cerberus.cl.cam.ac.uk/?short/4eef98
created time in 10 days
issue openedrems-project/cerberus
Fix the elaboration of compound literals
When occuring inside the body of a function, the lifetime of unnamed object should be automatic.
https://github.com/rems-project/cerberus-private/blob/b55da7eca19925d7cb0b76c8a3d660bf371caea5/frontend/model/translation.lem#L2681
created time in 10 days
issue openedrems-project/cerberus
Internal error: gentpying.annotate_expression
You get the error:
cerberus: internal error, uncaught exception:
(Failure "internal error: gentpying.annotate_expression: AilEident symbol couldn't be resolved")
if you run dune exec -- cerberus test.c where test.c is the file:
void f() {
int array[20];
_Static_assert(sizeof(array) < 100, "ERROR");
}
created time in 10 days
issue openedrems-project/cerberus
I am getting the following error when trying to use Ocaml_implementation.HafniumImml.typeof_enum:
internal error, uncaught exception:
(Failure "Hafnium impl => typeof_enum: 'Symbol(446, Just (\"e\"))' was not registered")
Any idea where this comes from? Is there any restriction for using this function?
created time in 10 days
issue openedrems-project/cerberus
Very confusing error message with unknown type
If you run the frontend on the following file (called test.c)
int main(){
uintptr_t i = 0;
return 0;
}
then you get the following error (file path shortened).
test.c:2:13: error: unexpected token 'i'
uintptr_t i = 0;
^
So what I thought seeing that is that there was a weird bug with the lexer or the parser. However, it turns out that I forgot to add #include <stding.h>, and so uintptr_t is unknown. Obviously the error message is suboptimal.
If I try gcc I get the following.
test.c: In function ‘main’:
test.c:2:3: error: unknown type name ‘uintptr_t’
2 | uintptr_t i = 0;
| ^~~~~~~~~
And with clang I get the following.
test.c:2:3: error: use of undeclared identifier 'uintptr_t'
uintptr_t i = 0;
^
1 error generated.
created time in 10 days
issue openedrems-project/cerberus
Support for flexible array member?
Is there any plan to support flexible array members? (At least up to typed ail.)
created time in 10 days
issue openedrems-project/cerberus
"attribute declaration" causes a runtime error:
int main(void) {
[[foo]];
}
It would be nice for it to be pushed to the Ail AST instead. rems-project/cerberus-old#46
created time in 10 days
issue openedrems-project/cerberus
Missing Ail attributes for tentative struct definitions
(Leaving this for later)
struct [[ AA ]] T2;
struct [[ BB ]] T2 { int x; } st2;
the Ail StructDef for T2 should have both AA and BB as annotations, but currently AA is missing.
created time in 10 days
issue openedrems-project/cerberus
Need proper error for incomplete tentative struct definition
// whole translation unit:
struct T st;
this should properly give an error: the tentative definition of struct T is still incomplete at the end of the translation unit.
Currently, cerby does:
cerberus: internal error, uncaught exception: (Failure "internal error: [Cabs_to_ail.mk_zeroInit_aux] - internal ERROR: Struct")
created time in 10 days
issue openedrems-project/cerberus
The Ail AST exposes attributes on function definitions, but not in several other places where @MackieLoeffel and I need them:
- on the definition of structures and unions,
- on their fields,
- on statements.
Would it be possible to add them, or alternatively tell me how to do it properly?
I tried to do the modifications myself, but I'm not quite sure how to do this right. And I don't want to spend the day figuring out which constructor I should extend at the Cabs level if someone else can do it in five minutes!
created time in 10 days
issue openedrems-project/cerberus
Handling of "continue" at the Ail level
I found something rather weird in the Ail AST that is generated by Cerberus. Apparently, a continue in C is translated to a AilSgoto "continueN" and an AilSlabel "continueN" where N is some unique number. However, I do not expect this translation to be made at the Ail level since it has an AilScontinue constructor.
Note that break is handled properly, with the AilSbreak constructor and no generated label.
created time in 10 days
issue openedrems-project/cerberus
Decoding of integer character constants with escape sequence is wrong
The integer character constant '\xFF' should have value -1 on implementations where char is signed (the default impl choice for cerby), and 255 otherwise. This is because (§6.4.4.4#10) says that the value of integer character constants containing an escape sequence is interpreted as a value of type char (then converted to int).
Currently cerby evaluates this to 255 because Decode_ocaml.decode_character_constant simply uses the integer constant decoding function for escape sequences.
Additionally, the following:
'\xFFF';
should result in a constraint violation according to (§6.4.4.4#9).
created time in 10 days
issue openedrems-project/cerberus
#include <stdio.h>
union {
int x[2];
struct { int y; int z; };
} foo;
static void f (int * p, int * q) {
if (p == q) {
*p = 1;
} else {
*q = 1;
}
}
int g() {
int * p = foo.x + 1; // In-bounds
int * q = &(foo.z); // In-bounds, should coincide with x[1]
f(p, q);
}
int main(void){ g(); }
This fails with TODO: abst, Union (as value). This seems related, but distinct from rems-project/cerberus-old#11 .
Edit: minor tweak to make the program interesting. Output from Cerberus unchanged.
created time in 10 days
issue openedrems-project/cerberus
Struct type compatibility across translation units
AilTypesAux.are_compatible is wrong for Struct/Union types from different translation units.
We need to replace the comparison of the tag symbol with a lookup of the associated string + tag definitions (for one-to-one correspondence).
Example of broken program:
// header.h
typedef struct T {
int x;
} mytype;
int f(mytype);
int (*fp)(mytype);
void init(void);
// first.c
#include "header.h"
int main(void)
{
init();
mytype st;
st.x = 10;
return fp(st);
}
// second.c
#include "header.h"
void init(void)
{
fp = f;
}
int f(mytype st) {
return st.x;
}
created time in 10 days