rellic
rellic copied to clipboard
Rellic produces goto-free C output from LLVM bitcode
Rellic will sometimes forget signedess and emit unsigned casts for signed integers. Simple example below: signed.c: ```c #include bool signed_less_than_1(signed short v) { return v < 1; } ``` Compile:...
We will eventually have to handle address space casts to support things like `__thread` and various memory specifications for embedded platforms. How to properly handle these is very machine context...
[https://llvm.org/docs/LangRef.html#undefined-values](url) Relates to #158
```c *(unsigned int *)*(unsigned int *)&_sroa_3_sroa_3[3U] + ((unsigned int)arg0
[input.zip](https://github.com/lifting-bits/rellic/files/6817601/input.zip)
Preprocessing with `llvm-reduce` is encouraged.
The `enable_pin` function is non-empty in the bitcode, but empty in the decompiled source. ```llvm ; ModuleID = '/tmp/challenge-3/program_c/src/gpio.ll' source_filename = "gpio.c" target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-pc-linux-gnu-elf"...
```llvm ; ModuleID = '/tmp/challenge-3/program_c/src/main.ll' source_filename = "main.c" target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-pc-linux-gnu-elf" %struct._IO_FILE = type { i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*,...
Related to [this TODO](https://github.com/lifting-bits/rellic/blob/76d8fa1787d2368a35f62e1f5884eef905f87ef8/rellic/AST/Z3ConvVisitor.cpp#L785)