profile
viewpoint
If you are wondering where the data of this site comes from, please visit https://api.github.com/users/MackieLoeffel/events. GitMemory does not store any data, but only uses NGINX to cache data for a period of time. The idea behind GitMemory is simply to give users a better reading experience.

MackieLoeffel/avr-vm 106

VM with JIT-compiler for ATMega32 written in Rust

MackieLoeffel/rusty-jvm 6

An experiment to create a JVM in Rust

MackieLoeffel/rust-os 2

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

Deanamic/UPC2-PDF 0

UPC2 PDF

MackieLoeffel/atom-build 0

:hammer: Build your project directly from the Atom editor

MackieLoeffel/atom-node-debugger 0

A Nodejs Debugger For Atom

MackieLoeffel/BattleShip 0

Das beste Spiel, was je geschaffen wurde und je geschaffen werden wird!

push eventrems-project/cerberus

Christopher Pulte

commit sha bf61e6778f6eb7855804a8be69766341c20aee68

move distinction between points-to and unitialised/memory-block into the index term language

view details

Christopher Pulte

commit sha e008c510ea6fc559f7e9d6e4de5241be535f84e9

Merge branch 'master' of https://github.com/rems-project/cerberus

view details

push time in 9 hours

push eventrems-project/isla

Brian Campbell

commit sha 33233a02b449254e133efcbdd44debd5a5a3797a

Add register reset to isla-execute-function It doesn't call model initialisation so do the register reset explicitly.

view details

push time in 12 hours

push eventrems-project/cerberus

pes20

commit sha a176d20eb142847abb348fd258297b6c8cd8ed13

copy of core.ott to start work on mucore paper type system

view details

push time in 16 hours

push eventrems-project/cerberus

Christopher Pulte

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

view details

push time in 4 days

push eventrems-project/cerberus

Christopher Pulte

commit sha a1fe8e7bcbeef0095b335606a342aa7d4b43ea39

add name-parameterised index terms (morally functions)

view details

push time in 5 days

push eventrems-project/isla

Brian Campbell

commit sha c8055d3d921f2ce5c45768ccc6230690fa1e66a1

Tidy smt parser a little

view details

push time in 5 days

push eventrems-project/isla

Brian Campbell

commit sha 5876ddddac7fdc8f5cfb061bb0f8c16b0638e530

Add Distinct to smt, allow nice syntax for "= and or" in smt parser

view details

push time in 5 days

push eventrems-project/isla

Brian Campbell

commit sha d8fc322bf97a0d281f9e0269246e85ce3d4f4dca

Add option to footprint to constrain variables in partial instructions

view details

push time in 6 days

push eventrems-project/isla

Brian Campbell

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.

view details

push time in 6 days

push eventrems-project/cerberus

Christopher Pulte

commit sha c3ddfd0b494fc769c48a838b20bf38c40402cc65

clean up

view details

push time in 7 days

push eventrems-project/cerberus

Christopher Pulte

commit sha f065a98a522560f96b11a1e27648d03e9b88b7cf

add option type and index terms

view details

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

Missing globals in Core

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

Make step button green

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

Error with [typeof_enum]

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

support attribute declaration

"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

Attributes in the Ail AST

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

TODO: abst, Union (as value)

#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