https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84553
James Clarke <jrtc27 at jrtc27 dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jrtc27 at jrtc27 dot com --- Comment #1 from James Clarke <jrtc27 at jrtc27 dot com> --- This is a GCC bug. The function "d" here is non-static and thus exported as a dynamic symbol. On ia64, function descriptors for dynamic symbols are always allocated by the dynamic linker at runtime for canonicalisation (yes, there are other things you could do, but this is what was chosen), and therefore are not link-time constants, even though the contents of this function descriptor can be determined at link-time (since this is linking an executable). GCC should instead be placing this in a relro section like you said.