On Aug 8, 2018, Segher Boessenkool <seg...@kernel.crashing.org> wrote:
> Then you get sdata2 used (via srodata in generic code), and it is accessed > via GPR2 (via the sda21 reloc and linker magic). It is hard to trace down :-) Aah, it didn't occur to me that the r2 uses could be introduced by the linker. I was cutting corners and looking at the asm output, after building only gcc, without binutils. Thanks for the explanation. Mind if I add a comment about that next to... hmm... how about the SMALL_DATA_* macros? for gcc/ChangeLog * config/rs6000/rs6000.c (SMALL_DATA_RELOC, SMALL_DATA_REG): Add a comment about how uses of r2 for .sdata2 come about. diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index ddc61bdaffe7..bbc564de41ae 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -21240,6 +21240,9 @@ rs6000_output_function_entry (FILE *file, const char *fname) /* Print an operand. Recognize special options, documented below. */ #if TARGET_ELF +/* Access to .sdata2 through r2 (see -msdata=eabi in invoke.texi) is + only introduced by the linker, when applying the sda21 + relocation. */ #define SMALL_DATA_RELOC ((rs6000_sdata == SDATA_EABI) ? "sda21" : "sdarel") #define SMALL_DATA_REG ((rs6000_sdata == SDATA_EABI) ? 0 : 13) #else -- Alexandre Oliva, freedom fighter https://FSFLA.org/blogs/lxo Be the change, be Free! FSF Latin America board member GNU Toolchain Engineer Free Software Evangelist