Right now, GuardObject is in charge of both reading and writing to the guard
byte, and co-ordinating with the InitByte... classes. In order to improve
separation of concerns, create a separate class responsible for managing the
guard byte and use that inside GuardObject.
This is the 3rd of 5 changes to overhaul cxa_guard.
See D108343 for what the final result will be.
Depends on D110088
This is confusing me -- does the compiler really check the guard byte? Isn't it what we do in the library when we do guard_byte.load(std::_AO_Acquire) != UNSET?