https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84011
--- Comment #5 from H.J. Lu <hjl.tools at gmail dot com> --- (In reply to rguent...@suse.de from comment #4) > > The question is why run-time relocations aren't allowed. > > Probably added to save binary space? An optimization would be to I don't think so: text data bss dec hex filename 714 0 0 714 2ca before my change 240 184 0 424 1a8 after my change My change cuts down size by a wide margin. > add an indirection by, say, only recording the constant offset > into an "array of strings" in the table, thus effectively > > "case1\0case2\0..."[CSWITCH[i]] > > which would require only a relocation to access the single string > constant. But it would prohibit cases of string merging within > those strings unless we implement that as well for this optimization. > Note this might be profitable unconditionally, not just with -fpie/pic > as the CSWITCH table would be smaller (dependent on the total > size of the merged string). True, this is independent of PIE/PIC.