Closed karoliineh closed 1 year ago
Absolutely, thanks for identifying it! Usually the parsing issues with CIL can be fixed without requiring major reworking, I can have a look at that once we're back from the AVM workshop next week.
A few comments:
enum
definition. You can use Goblint's pre.keep
and look in .goblint
to see what the preprocessed code that we parse looks like.main
function) to analyze. Looks like it might include a command-line program as well, so that's what we'll have to analyze.One project that seemed promising is libvips, "a fast image processing library with low memory needs", which is also part of the PARSEC benchmark (a benchmark suite composed of multithreaded programs).
We looked into it today and noticed it didn't use pthreads at all. Looks like it uses glib's threading instead: https://libsoup.org/glib/glib-Threads.html. It should be possible to add LibraryFunctions
support for these into Goblint, but that's just extra work on top of the parsing error.
While reading papers, I looked into some projects that have been used for benchmarking. One project that seemed promising is libvips, "a fast image processing library with low memory needs", which is also part of the PARSEC benchmark (a benchmark suite composed of multithreaded programs).
By this paper, lipvips has 269975 LOC, and running a quick
git ls-files | xargs wc -l
in lipvips/lipvips gave a total of 269249.It also seems well maintained, with the first commit from 2007 and constant contributions with the latest being just today.
Unfortunately, on the latest commit currently (3191e5c), Goblint will not succeed with parsing:
The code in
gspawn.h[76:0-21]
being:Would this be worth a try?