loader: fix userboot's ability to detect a guest's interpreter
Some time after r338418, I believe with -Os/-Oz -ffunction-sections -fdata-sections, the bootprog_interp variable that held our "$Interpreter:" marker started getting strip from all loaders, with exception to userboot since it used bootprog_interp to determine what flavor of userboot it was. At some point, it had been brought to my attention that this was no longer working and I had worked up some potential solutions to use the variable that involved printing it out. My vague recollection is that this was rejected, and I forgot to explore the alternatives; I cannot find records of this discussion anymore. Fast forward to present day, Andrew reported that it was non-functional and offered (effectively) this patch (sans comment) to stop the compiler from optimizing it out by assigning it to a volatile variable. This removes concerns about user-facing change while retaining the interpreter marker. Furthermore, it could certainly be uglier. Reported and tested by: Andrew Gierth <andrew_tao173.riddles.org.uk> MFC after: 3 days
This commit is contained in:
parent
de6fa6b43b
commit
2583c3374d
@ -46,7 +46,16 @@ void
|
||||
interact(void)
|
||||
{
|
||||
static char input[256]; /* big enough? */
|
||||
const char * volatile interp_identifier;
|
||||
|
||||
/*
|
||||
* Because interp_identifier is volatile, it cannot be optimized out by
|
||||
* the compiler as it's considered an externally observable event. This
|
||||
* prevents the compiler from optimizing out our carefully placed
|
||||
* $Interpreter:4th string that userboot may use to determine that
|
||||
* we need to switch interpreters.
|
||||
*/
|
||||
interp_identifier = bootprog_interp;
|
||||
interp_init();
|
||||
|
||||
printf("\n");
|
||||
|
Loading…
Reference in New Issue
Block a user