Very well written, but my question relates to the demystification. The “COMMON” section still just magically appears.
You’ll note that the .bss section also includes *(COMMON) . This is a special input section where the compiler puts global unitialized variables that go beyond file scope.
Where is this documented? I am still curious by some linker script content. I now understand 99% (reading a script) of a script but coming up with one is a still a huge challenge. I guess it is like makefiles, you never create one from scratch.