SPRAB89A September 2011 – March 2014
The default visibility for global symbols is STV_INTERNAL. That is, symbols that are imported or exported must be explicitly declared as such. Symbol preemption is not supported. The one definition rule is not honored for symbols with vague linkage (vtbls, rtti type info etc) across shared objects. The bare-metal model uses forced static binding. That is, the linker forces that imported references are bound to their definitions during static linking.
In the dynamic symbol table all symbols with STV_DEFAULT visibility are marked STB_GLOBAL. That is, weak symbols are converted to global symbols if they have default visibility. This is to simplify the loader implementation.