[analyzer] Be less pessimistic about invalidation of global variables as a result of a call.
Global variables, which come in from system libraries should not be
invalidated by all calls. Also, non-system globals should not be
invalidated by system calls.
The following solution to invalidation of globals seems flexible enough
for taint (does not invalidate stdin) and should not lead to too
many false positives. We split globals into 3 classes:
- immutable - values are preserved by calls (unless the specific
global is passed in as a parameter):
A : Most system globals and const scalars
- invalidated by functions defined in system headers: B: errno
- invalidated by all other functions (note, these functions may in
turn contain system calls):
B: errno C: all other globals (which are not in A nor B)