This works around bugs in older binutils' objcopy.
The placement of these sections does not really matter,
but it confused the buggy old BFD libraries.
Signed-off-by: Roland McGrath <roland@redhat.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
        .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
        .rodata1        : { *(.rodata1) }
 
+       .dynamic        : { *(.dynamic) }               :text   :dynamic
+
        .eh_frame_hdr   : { *(.eh_frame_hdr) }          :text   :eh_frame_hdr
        .eh_frame       : { KEEP (*(.eh_frame)) }       :text
        .gcc_except_table : { *(.gcc_except_table) }
+       .rela.dyn ALIGN(8) : { *(.rela.dyn) }
 
        .opd ALIGN(8)   : { KEEP (*(.opd)) }
        .got ALIGN(8)   : { *(.got .toc) }
-       .rela.dyn ALIGN(8) : { *(.rela.dyn) }
-
-       .dynamic        : { *(.dynamic) }               :text   :dynamic
 
        _end = .;
        PROVIDE(end = .);
 
 #define toreal(rd)
 #define fromreal(rd)
 
+/*
+ * We use addis to ensure compatibility with the "classic" ppc versions of
+ * these macros, which use rs = 0 to get the tophys offset in rd, rather than
+ * converting the address in r0, and so this version has to do that too
+ * (i.e. set register rd to 0 when rs == 0).
+ */
 #define tophys(rd,rs)                          \
        addis   rd,rs,0