My commits for PR23160,PR14690 have caused a regression in the way privilege-testing of elaboration of embedded-c tapset functions is handled. New code changes the timing at which the /* unprivileged */ type pragmas are processed. Now they can fail for functions like kernel_string() even though they are not called, even transitively, from the end-user script. This breaks e.g. the unprivileged-myproc test cases. It turns out we run symbol elaboration in an overly inclusive manner. Any function defined in a tapset file chosen for inclusion is fully processed, even though it may not be transitively called at all. This represents perhaps considerable wasted translation effort, esp. considering expensive constructs like @cast(). We should not spend any serious efforts processing parts of tapsets that are not reachable from the end-user script. This suggests the resolve_syms pass must be iterative/relaxation-based, like the optimization passes later on.
+1 for the change "resolve_syms pass must be iterative/relaxation-based". I also need it badly for passing stat/array references around via explicit assignments (`=`).