Figured it out and submitted a new KLEE PR to fix a test failure in
the Nix sandbox.

https://github.com/klee/klee/pull/1385
https://github.com/klee/klee/pull/1471
https://github.com/NixOS/nixpkgs/pull/156413

Thanks for the help. I'll do a subsequent PR to update documentation
on https://klee.github.io/.

Morgan

On Sun, Jan 23, 2022 at 6:55 PM Morgan <m...@numin.it> wrote:
>
> Martin,
>
> Thanks, that got me closer. Here's the pull request with some
> improvements to the KLEE Nix package:
>
> https://github.com/NixOS/nixpkgs/pull/156413
>
> I'm currently dealing with an error in the test suite using
> klee-uclibc. Have any of you seen this?
>
> ******************** TEST 'KLEE ::
> Runtime/POSIX/MixedConcreteSymbolic.c' FAILED ********************
> Script:
> --
> : 'RUN: at line 1';
> /nix/store/js3xavmfccyzr8nzp7cg8gf3rlyqd7q5-clang-wrapper-9.0.1/bin/clang
> -I/build/source/include
> /build/source/test/Runtime/POSIX/MixedConcreteSymbolic.c -emit
> -llvm -O0 -Xclang -disable-O0-optnone -c -o
> /build/source/build/test/Runtime/POSIX/Output/MixedConcreteSymbolic.c.tmp.bc
> : 'RUN: at line 2';   rm -rf
> /build/source/build/test/Runtime/POSIX/Output/MixedConcreteSymbolic.c.tmp.klee-out
> : 'RUN: at line 3';   /build/source/build/bin/klee
> --output-dir=/build/source/build/test/Runtime/POSIX/Output/MixedConcreteSymbolic.c.tmp.klee-out
> --external-calls=all --exit-on-erro
> r --libc=uclibc --posix-runtime
> /build/source/build/test/Runtime/POSIX/Output/MixedConcreteSymbolic.c.tmp.bc
> --sym-stdin 10
> 2>/build/source/build/test/Runtime/POSIX/Output/MixedConc
> reteSymbolic.c.tmp.log | FileCheck
> /build/source/test/Runtime/POSIX/MixedConcreteSymbolic.c
> --
> Exit Code: 2
>
> Command Output (stdout):
> --
> $ ":" "RUN: at line 1"
> $ "/nix/store/js3xavmfccyzr8nzp7cg8gf3rlyqd7q5-clang-wrapper-9.0.1/bin/clang"
> "-I/build/source/include"
> "/build/source/test/Runtime/POSIX/MixedConcreteSymbolic.c"
> "-emit-llvm" "-O0"
> "-Xclang" "-disable-O0-optnone" "-c" "-o"
> "/build/source/build/test/Runtime/POSIX/Output/MixedConcreteSymbolic.c.tmp.bc"
> $ ":" "RUN: at line 2"
> $ "rm" "-rf" 
> "/build/source/build/test/Runtime/POSIX/Output/MixedConcreteSymbolic.c.tmp.klee-out"
> $ ":" "RUN: at line 3"
> $ "/build/source/build/bin/klee"
> "--output-dir=/build/source/build/test/Runtime/POSIX/Output/MixedConcreteSymbolic.c.tmp.klee-out"
> "--external-calls=all" "--exit-on-error" "--libc=uc
> libc" "--posix-runtime"
> "/build/source/build/test/Runtime/POSIX/Output/MixedConcreteSymbolic.c.tmp.bc"
> "--sym-stdin" "10"
> # redirected output from
> '/build/source/build/test/Runtime/POSIX/Output/MixedConcreteSymbolic.c.tmp.log':
> KLEE: NOTE: Using POSIX model:
> /build/source/build/runtime/lib/libkleeRuntimePOSIX64_Debug.bca
> KLEE: NOTE: Using klee-uclibc : 
> /build/source/build/runtime/lib/klee-uclibc.bca
> KLEE: output directory is
> "/build/source/build/test/Runtime/POSIX/Output/MixedConcreteSymbolic.c.tmp.klee-out"
> KLEE: Using STP solver backend
> error: Linking globals named '__xstat': symbol multiply defined!
>
> note: command had no output on stdout or stderr
> error: command failed with exit status: 1
> $ "FileCheck" "/build/source/test/Runtime/POSIX/MixedConcreteSymbolic.c"
> # redirected output from
> '/build/source/build/test/Runtime/POSIX/Output/MixedConcreteSymbolic.c.tmp.log':
> KLEE: NOTE: Using POSIX model:
> /build/source/build/runtime/lib/libkleeRuntimePOSIX64_Debug.bca
> KLEE: NOTE: Using klee-uclibc : 
> /build/source/build/runtime/lib/klee-uclibc.bca
> KLEE: output directory is
> "/build/source/build/test/Runtime/POSIX/Output/MixedConcreteSymbolic.c.tmp.klee-out"
> KLEE: Using STP solver backend
> error: Linking globals named '__xstat': symbol multiply defined!
>
> # command stderr:
> FileCheck error: '-' is empty.
> FileCheck command line:  FileCheck
> /build/source/test/Runtime/POSIX/MixedConcreteSymbolic.c
>
> error: command failed with exit status: 2
>
> --
>
> Thanks,
> Morgan
>
> On Mon, Jan 17, 2022 at 3:15 AM Nowack, Martin <m.now...@imperial.ac.uk> 
> wrote:
> >
> > Hi Morgan,
> >
> > On 17. Jan 2022, at 10:23, Morgan <m...@numin.it> wrote:
> >
> > In the meantime, I'm having trouble building klee-uclibc. I got past
> > the locale download (had to set
> > UCLIBC_DOWNLOAD_PREGENERATED_LOCALE_DATA=n and copy it over after
> > configure since it builds in the Nix sandbox) but this seems to be
> > happening now.
> >
> >
> > That sounds like a good approach.
> > If I remember correctly, with `UCLIBC_DOWNLOAD_PREGENERATED_LOCALE_DATA=y`,
> > it would only download the data if it is not available locally yet.
> > So, you could download/add it first before you start the configure part.
> >
> > ----
> >
> > # include_next <limits.h>
> >               ^~~~~~~~~~
> > 1 error generated.
> > make: *** [Makerules:175: libcrypt/des.os] Error 1
> >
> >       For full logs, run 'nix log
> > /nix/store/r52lifnjkgn0n7fc5gxa877hnsyzpjsf-klee-uclibc-1.2.drv'.
> > error: 1 dependencies of derivation
> > '/nix/store/55dr6nb1cfq1hx8sr3ci4kvkzr2x8s2m-klee-2.2.drv' failed to
> > build
> >
> > ----
> >
> > My CC is LLVM/clang 9. Seems similar to this issue, but I can't figure
> > out what's going on.
> >
> > https://github.com/klee/klee-uclibc/issues/7
> >
> >
> > The problem with this one is that systems headers are not found.
> > Can you add them to your sandbox?
> > You have to workaround this issues:
> >  
> > https://github.com/NixOS/nixpkgs/blob/3ddd960a3b575bf3230d0e59f42614b71f9e0db9/pkgs/build-support/cc-wrapper/default.nix#L338
> >
> > Best,
> > Martin
> >
> >
> >
> > Morgan
> >
> > On Tue, Jan 11, 2022 at 2:30 AM Nowack, Martin <m.now...@imperial.ac.uk> 
> > wrote:
> >
> >
> > Hi Morgan,
> >
> > Just looked at the build instructions:
> >
> > https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/science/logic/klee/default.nix#L53
> >
> > "-DKLEE_RUNTIME_BUILD_TYPE=${buildType}"
> >
> > I would recommend to handle the build type for the 
> > `KLEE_RUNTIME_BUILD_TYPE` separate from the `CMAKE_BUILD_TYPE`. They are 
> > independent.
> > The runtime is linked to your software under test and often should contain 
> > debug information for better stack traces reported as part of the generated 
> > test cases, even with release builds of KLEE.
> >
> > Great effort!
> >
> > Best,
> > Martin
> >
> > On 8. Jan 2022, at 23:08, Morgan <m...@numin.it> wrote:
> >
> > Also, do these build flags look halfway reasonable? Is there anything
> > that users should be able to customize? In Nix, all packages are
> > functions, and we can call the functions with various extra arguments
> > (like debug ? false) in the package.
> >
> > https://github.com/NixOS/nixpkgs/blob/5f8f72c10c43514a4e9093efb9029cf3f8a9ec00/pkgs/applications/science/logic/klee/default.nix#L48
> >
> > Currently we're not building klee-uclibc as I ran into some weird
> > issues with it, but that's next on my todo list.
> >
> > I'm hoping that this package dramatically reduces the barrier to entry
> > to using KLEE. If users have Nix or are running NixOS, they should
> > just be able to use `nix-shell -p klee` or `nix-shell -p
> > 'klee.override {debug = true;}'` or whatever they want to drop into a
> > shell with KLEE available.
> >
> > Morgan
> >
> > On Sat, Jan 8, 2022 at 2:49 PM Morgan <m...@numin.it> wrote:
> >
> >
> > Somewhat related, I'm having trouble building KLEE on aarch64. Here's
> > the failing part:
> >
> > -- Build files have been written to: /build/source/build
> > cmake: enabled parallel building
> > building
> > build flags: -j4 -l4
> > SHELL=/nix/store/fbf5n09drbi3bxv9rb9fgf58dm4da4a8-bash-5.1-p12/bin/bash
> > [  1%] Building CXX object lib/Basic/CMakeFiles/kleeBasic.dir/KTest.cpp.o
> > [  1%] Building CXX object
> > lib/Support/CMakeFiles/kleeSupport.dir/CompressionStream.cpp.o
> > [  1%] Building CXX object 
> > lib/Expr/CMakeFiles/kleaverExpr.dir/ArrayCache.cpp.o
> > [  1%] Building C object
> > runtime/Runtest/CMakeFiles/kleeRuntest.dir/intrinsics.c.o
> > [  1%] Building CXX object
> > runtime/Runtest/CMakeFiles/kleeRuntest.dir/__/__/lib/Basic/KTest.cpp.o
> > [  1%] Building CXX object 
> > lib/Basic/CMakeFiles/kleeBasic.dir/Statistics.cpp.o
> > [  1%] Linking CXX shared library ../../lib/libkleeRuntest.so
> > [  1%] Built target kleeRuntest
> > [  1%] Building CXX object
> > lib/Support/CMakeFiles/kleeSupport.dir/ErrorHandling.cpp.o
> > [  1%] Linking CXX static library ../libkleeBasic.a
> > [  1%] Built target kleeBasic
> > [  1%] Building CXX object
> > lib/Expr/CMakeFiles/kleaverExpr.dir/ArrayExprOptimizer.cpp.o
> > [  2%] Generating memset64_Release.bc
> > [  2%] Generating stubs64_Release.bc
> > [  2%] Building CXX object
> > lib/Support/CMakeFiles/kleeSupport.dir/FileHandling.cpp.o
> > [  2%] Generating fortify-fs64_Release.bc
> > [  2%] Generating memcmp64_Release.bc
> > [  2%] Generating fd64_Release.bc
> > [  3%] Generating memcpy64_Release.bc
> > /build/source/runtime/POSIX/fd.c:98:18: error: use of undeclared
> > identifier '__NR_access'
> > return syscall(__NR_access, __concretize_string(pathname), mode);
> >                ^
> > /build/source/runtime/POSIX/fd.c:194:25: error: use of undeclared
> > identifier '__NR_open'; did you mean '__fd_open'?
> >   int os_fd = syscall(__NR_open, __concretize_string(pathname), flags, 
> > mode);
> >                       ^~~~~~~~~
> >                       __fd_open
> > /build/source/runtime/POSIX/fd.c:141:5: note: '__fd_open' declared here
> > int __fd_open(const char *pathname, int flags, mode_t mode) {
> >   ^
> > /build/source/runtime/POSIX/fd.c:286:18: error: use of undeclared
> > identifier '__NR_utimes'
> > return syscall(__NR_utimes, __concretize_string(path), times);
> >                ^
> > /build/source/runtime/POSIX/fd.c:308:18: error: use of undeclared
> > identifier '__NR_futimesat'
> > return syscall(__NR_futimesat, (long)fd,
> >
> > <...>
> >
> > Is there some syscall-relevant include I'm missing?
> >
> > Morgan
> >
> >
> > On Sat, Jan 8, 2022 at 2:19 PM Morgan <m...@numin.it> wrote:
> >
> >
> > Is this also the issue you ran into? If yes, maybe you want try the
> > patches from the PR I linked above. If not and are you having a
> > different problem, maybe you could try to provide some more details?
> > Then I will try and see if can help resolve them.
> >
> >
> > This is the problem. No tests discovered. That patch fixed it, thanks a ton!
> > Hydra will be running the full KLEE system and unit test suite from now on.
> >
> >
> > Morgan
> >
> > On Wed, Jan 5, 2022 at 2:48 AM Cristian Cadar <c.ca...@imperial.ac.uk> 
> > wrote:
> >
> >
> > Hi all,
> >
> > Indeed, it would be great to update
> > https://klee.github.io/getting-started/ (via a PR at
> > https://github.com/klee/klee.github.io) to mention the Fedora and Nix
> > packages.  And thanks to everyone who is maintaining KLEE packages!
> >
> > Best,
> > Cristian
> >
> > On 05/01/2022 10:01, Julian Büning wrote:
> >
> > Hi Lukas,
> >
> > nice and thanks for letting me know!
> >
> > I was briefly considering to go the same route, but didn't encounter
> > your fix. But as it turns out, not using gtest_main (which I understand
> > is more or less offered for convenience) has certain other advantages
> > for KLEE (e.g. stack traces; reducing the number of combinations between
> > vanilla Google Test, LLVM's Google Test, llvm-lit, and their respective
> > versions). Still, it's certainly a nice addition for llvm-lit, hopefully
> > somebody with commit access will pick it up soon!
> >
> > Thanks to your email I also found out that there is actually a Fedora
> > package for KLEE in the main repository. Awesome! I'm not sure how I
> > missed that. You should definitely get it mentioned on klee.github.io!
> >
> > Best,
> > Julian
> >
> > On 1/5/22 10:15, Lukas Zaoral wrote:
> >
> > Hi Julian,
> > I've encountered the same problem with lit and latest gtest when
> > I was packaging KLEE for Fedora as I had to use gtest from repos
> > due to Fedora's packaging guidelines.
> >
> > I sent a patch to LLVM to fix this incompatibility at the beginning
> > of last April and it was finally accepted last month [1].  It still needs
> > to be committed, though.
> >
> > Sincerely,
> > Lukas
> >
> > [1] https://reviews.llvm.org/D100043
> >
> > On Wed, Jan 5, 2022 at 9:44 AM Julian Büning
> > <julian.buen...@rwth-aachen.de> wrote:
> >
> >
> > Hi Morgan,
> >
> > nice to see your packaging efforts for KLEE!
> >
> > I recently ran into some issues with more recent versions of Google Test
> > when building KLEE (and running unit tests). I just opened a PR that
> > addresses these: https://github.com/klee/klee/pull/1458
> >
> > Among these issues is one that I image you may also have run into (as I
> > assume your package will not be built against Google Test 1.7.0), but it
> > differs quite a bit from the issue that you linked. Thus, I will go
> > ahead and describe what I experienced (hoping you can tell me if that
> > matches what you saw).
> >
> > When building KLEE with Google Test 1.7.0 and running the unit tests, I
> > get 36 successfully passed tests. When instead using a newer Google Test
> > version, like 1.11.0, I get the same number of passed tests, but the
> > following 10 unresolved tests in addition:
> >
> > Unresolved Tests (10):
> >   KLEE Unit tests :: ./AssignmentTest/Running main() from
> > /some/absolute/path/to/gtest_main.cc
> >   KLEE Unit tests :: ./DiscretePDFTest/Running main() from
> > /some/absolute/path/to/gtest_main.cc
> >   KLEE Unit tests :: ./ExprTest/Running main() from
> > /some/absolute/path/to/gtest_main.cc
> >   KLEE Unit tests :: ./RNGTest/Running main() from
> > /some/absolute/path/to/gtest_main.cc
> >   KLEE Unit tests :: ./RefTest/Running main() from
> > /some/absolute/path/to/gtest_main.cc
> >   KLEE Unit tests :: ./SearcherTest/Running main() from
> > /some/absolute/path/to/gtest_main.cc
> >   KLEE Unit tests :: ./SolverTest/Running main() from
> > /some/absolute/path/to/gtest_main.cc
> >   KLEE Unit tests :: ./TimeTest/Running main() from
> > /some/absolute/path/to/gtest_main.cc
> >   KLEE Unit tests :: ./TreeStreamTest/Running main() from
> > /some/absolute/path/to/gtest_main.cc
> >   KLEE Unit tests :: ./Z3SolverTest/Running main() from
> > /some/absolute/path/to/gtest_main.cc
> >
> > For each of these "tests" I see some earlier output like this:
> >
> > UNRESOLVED: KLEE Unit tests :: ./AssignmentTest/Running main() from
> > /some/absolute/path/to/gtest_main.cc (1 of 46)
> > ******************** TEST 'KLEE Unit tests :: ./AssignmentTest/Running
> > main() from /some/absolute/path/to/gtest_main.cc' FAILED
> > ********************
> > Unable to find '[  PASSED  ] 1 test.' in gtest output:
> >
> > Running main() from /some/absolute/path/to/gtest_main.cc
> > Note: Google Test filter = Running main() from
> > /some/absolute/path/to/gtest_main.cc
> > [==========] Running 0 tests from 0 test cases.
> > [==========] 0 tests from 0 test cases ran. (0 ms total)
> > [  PASSED  ] 0 tests.
> >
> > ********************
> >
> > The last 3 lines look similar to the output in the issue you linked. But
> > this is simply the output of Google Test when there are no `TEST()`s
> > next to `main()` in an executable. The rest stems from a different
> > problem (detailed below).
> >
> > Is this also the issue you ran into? If yes, maybe you want try the
> > patches from the PR I linked above. If not and are you having a
> > different problem, maybe you could try to provide some more details?
> > Then I will try and see if can help resolve them.
> >
> > --- BEGIN: More details ---
> >
> > The issue we see above actually stems from llvm-lit, not from Google
> > Test itself. Starting from 1.8.1, Google Test's gtest_main.cc uses
> > `__FILE__` [1] instead of a fixed string [2] to output a line like this:
> >
> > Running main() from /some/absolute/path/to/gtest_main.cc
> >
> >
> > To determine which tests exist, llvm-lit will call each executable with
> > the `--gtest_list_tests` argument. However, the (usually) first line
> > will be the above "Running main()" output. To skip this, each line is
> > compared to "Running main() from gtest_main.cc" [3], which is a fixed
> > string assuming the behavior of 1.8.0 and before.
> >
> > Hence, the line with path will be recorded as a test, and result in a
> > corresponding call to the test executable with `--gtest_filter` set
> > accordingly. As there is no test that matches the given pattern, we see
> > the output shown above. As it does not include the expected "[  PASSED
> > ] 1 test." line, it is counted as unresolved.
> >
> > [1]
> > https://github.com/google/googletest/blob/release-1.8.1/googletest/src/gtest_main.cc
> >
> >
> > [2]
> > https://github.com/google/googletest/blob/release-1.8.0/googletest/src/gtest_main.cc
> >
> >
> > [3]
> > https://github.com/llvm/llvm-project/blob/llvmorg-13.0.0/llvm/utils/lit/lit/formats/googletest.py#L60-L64
> >
> >
> > --- END:   More details ---
> >
> > Looking forward to your answer!
> >
> > Best,
> > Julian
> >
> >
> >
> > On 1/1/22 01:28, Morgan wrote:
> >
> > Hey there,
> >
> > I like Klee and have been trying to package it in nixpkgs so more
> > people can reproducibly use it without resorting to things like setup
> > scripts or Docker. Here are the cmake flags I'm using:
> >
> > https://github.com/NixOS/nixpkgs/pull/153014/files#diff-cb8d40a4e82c0c50ce6ec4031c12e06a4dac4bded86b9f01afcb2b4f22532dbbR46
> >
> >
> > Everything works including the system tests, which is a very good
> > sign. However, I'm having trouble with the unit tests that resembles
> > this problem:
> >
> > https://github.com/google/googletest/issues/2157
> >
> > Has anyone else run into this?
> >
> > Thanks!
> > Morgan
> >
> > _______________________________________________
> > klee-dev mailing list
> > klee-dev@imperial.ac.uk
> > https://mailman.ic.ac.uk/mailman/listinfo/klee-dev
> >
> >
> >
> > _______________________________________________
> > klee-dev mailing list
> > klee-dev@imperial.ac.uk
> > https://mailman.ic.ac.uk/mailman/listinfo/klee-dev
> >
> >
> >
> >
> > _______________________________________________
> > klee-dev mailing list
> > klee-dev@imperial.ac.uk
> > https://mailman.ic.ac.uk/mailman/listinfo/klee-dev
> >
> >
> > _______________________________________________
> > klee-dev mailing list
> > klee-dev@imperial.ac.uk
> > https://mailman.ic.ac.uk/mailman/listinfo/klee-dev
> >
> >
> > _______________________________________________
> > klee-dev mailing list
> > klee-dev@imperial.ac.uk
> > https://mailman.ic.ac.uk/mailman/listinfo/klee-dev
> >
> >
> >

_______________________________________________
klee-dev mailing list
klee-dev@imperial.ac.uk
https://mailman.ic.ac.uk/mailman/listinfo/klee-dev

Reply via email to