On Oct 8, 2014, at 2:44 AM, Cristian Cadar <[email protected]> wrote:

> Indeed, I don't think we need to optimize the memory consumption of the test 
> suite, it is not excessive.
> 

It seems I didn’t explain myself very well. 

I would like to be able to run Klee on bit code with a different data layout, 
in particular a different pointer size. To test if my changes break anything I 
would like to run the test suite, however the test suite depends on calling 
external functions. And when external functions are needed/used it means that 
the data layout has to match with Klee. 

By adding support for an internal printf I was hoping to be able to run the 
test suite to see if my changes break other parts of Klee, besides external 
function calls. (Which they do: test/Feature/FunctionPointer.c breaks and can 
be fixed with minor changes to legalFunctions)

(As a side effect it seems that memory is allocated twice for use with external 
functions, which could be disabled when external functions are not needed, but 
this is a minor issue to me at the moment).




I will do more work on testing if Klee can be made to support running bit code 
with a different data layout and if I am successful revisit this topic. It 
seems that there is no general benefit to having an internal printf at this 
point.



> The ability to deal with external calls is one of the most important 
> strengths of dynamic symbolic execution.  However, as Dan pointed out, there 
> is the option of disallowing such calls if needed.  I could understand the  
> need to special case printf and I'd be happy to consider such a patch, but 
> this should be an option to KLEE, which should not require any changes to the 
> test suite.
> 

Would adding a klee_internal_printf to the intrinsic functions which get 
aliased to printf when running with external functions disabled be acceptable?



Regards,
    Willem





> Best,
> Cristian
> 
> On 08/10/14 10:34, Daniel Liew wrote:
>> On 7 October 2014 23:47, Willem Pinckaers
>> <[email protected]> wrote:
>>> Hi List,
>>> 
>>> Currently most tests for Klee depend on an externally provided printf 
>>> function. Support for external functions has some side effects, among them:
>>> 
>>> - Memory usage is doubled for all non symbolic allocations.
>>> - The bitcode being tested has to have the same data layout as the compiled 
>>> version of Klee.
>> 
>> For the test suite I really don't think the memory usage matters. They
>> are mostly small programs and testing external function calls is
>> important because it is an important feature of KLEE because real
>> world code inevitably needs to call into a C library or make system
>> calls at some point.
>> 
>>> Without support for external functions Klee memory usage for non symbolic 
>>> allocations can be reduced by about 50% and Klee could be made to analyze 
>>> bit code that uses a different data layout.
>> 
>> Outside of the test suite I could see these being potentially useful
>> but if you really need this wouldn't it be simpler if your program had
>> no external function calls? If your program has external calls and you
>> disable external call support in KLEE your program probably isn't
>> going to run.
>> 
>> 
>>>   This currently hits a bug in llvm 3.4 and 3.5 where lli with 
>>> force-interpreter=true does not properly execute va_start. But (after 
>>> adopting the tests to link in the new printf) most test cases pass using 
>>> force-interpreter=false.
>> 
>> Could you report that to the LLVM developers?
>> 
>> Thanks,
>> Dan.
>> 
>> _______________________________________________
>> klee-dev mailing list
>> [email protected]
>> https://mailman.ic.ac.uk/mailman/listinfo/klee-dev
>> 
> 
> _______________________________________________
> klee-dev mailing list
> [email protected]
> https://mailman.ic.ac.uk/mailman/listinfo/klee-dev


_______________________________________________
klee-dev mailing list
[email protected]
https://mailman.ic.ac.uk/mailman/listinfo/klee-dev

Reply via email to