[klee-dev] adding setjmp/longjmp support?

Nowack, Martin m.nowack at imperial.ac.uk
Fri Jun 9 23:37:29 BST 2023


Hi Dan,

We are always looking for contributors and contributions ;)

A good starting point for KLEE development is: https://klee.github.io/docs/developers-guide/

>From a technical perspective, it is not trivial but not too hard either.
The main function you are interested in is `Executor::executeCall`: https://github.com/klee/klee/blob/b926b3d49d7650ba76c81f4dfe0fd9aad44150d2/lib/Core/Executor.cpp#L1679
Familiarise yourself with it to get an idea how it works.

In a nutshell for your project:
* Handle the `Setjmp` function call
	- resolve the buffer argument to a valid memory object
	- save the current ExectionState::prevPc into that buffer
	- save the current stack depth into this buffer
	- set the target value to `0`
* Handle the `Longjmp` function call:
	- resolve the buffer argument to a valid memory object
	- preserve the longmp value
	- load `prevPC`
	- load the targeted stack depth
	- unroll the stack by using the stack depth
	- set the PC to the loaded prevPC
	- set the result of the `Setjmp` argument to the longjmp argument value 
	

Those are all quite some steps but all this functionality should happen inside of this single function mentioned above.

I hope those will get you started.
Let us know, if anything is unclear.

All the best,
Martin



> On 3. Jun 2023, at 18:26, Dan Hoffman <dhoff749 at gmail.com> wrote:
> 
> I'm looking to apply KLEE to a program that heavily uses co-routines.
> These syscalls aren't implemented, so I'm investigating whether a
> patch can be written/upstreamed. This is my first patch for KLEE (but
> I have written patches for other large open-source projects). A few
> questions:
>  1. Are there any hard/technical reasons why this is
> impossible/impractical? Threading is impractical because the
> scheduling is another set of variables, but co-routines have
> deterministic scheduling by definition, so that shouldn't be an issue.
>  2. What are some good small/beginner issues to familiarize myself
> with the code and patch submission process? I'm somewhat familiar with
> LLVM internals from previous projects/my job.
> 
> Thanks!
> 
> _______________________________________________
> klee-dev mailing list
> klee-dev at imperial.ac.uk
> https://mailman.ic.ac.uk/mailman/listinfo/klee-dev




More information about the klee-dev mailing list