https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110709
--- Comment #3 from wangwen at microsoft dot com --- when the global pointer variety has an initialized value which is not NULL, then the value should be an address, so the initialized value should be recalculated when dynamically loaded. Now the problem is the array member and pointer member of struct data will be place at same section, then the loader would not know how to calculate the initialized value, because it has no idea the value is an address or is normal data. it is a long story if you are interested in how the problem is brought up. I pasted the link where we are trying to solve it. https://github.com/azure-rtos/threadx/issues/230