On Thu, 15 Sep 2016 10:40:20 +1000 Michael Ellerman <m...@ellerman.id.au> wrote:
> Currently the _GLOBAL() macro unilaterally sets the assembler section to > ".text" at the start of the macro. This is rude as the caller may be > using a different section. > > So let the caller decide which section to emit the code into. On big > endian we do need to switch to the ".opd" section to emit the OPD, but > do that with pushsection/popsection, thereby leaving the original > section intact. > > The only place I could find where this requires changes to the code is > in misc_32.S, where we need to switch back to ".text" after > flush_icache_range() which is in ".kprobes.text". > > I verified that the order of all entries in System.map is unchanged > after this patch. The actual addresses shift around slightly so you > can't just diff the System.map. > > Signed-off-by: Michael Ellerman <m...@ellerman.id.au> Excellent, thanks for going through it. Reviewed-by: Nicholas Piggin <npig...@gmail.com> > --- > > If anyone can think of a better method to verify we are still emitting > everything in the same sections let me know. > > > arch/powerpc/include/asm/ppc_asm.h | 8 ++------ > arch/powerpc/kernel/misc_32.S | 3 +++ > 2 files changed, 5 insertions(+), 6 deletions(-) > > diff --git a/arch/powerpc/include/asm/ppc_asm.h > b/arch/powerpc/include/asm/ppc_asm.h > index d5d5b5e348f2..479287045166 100644 > --- a/arch/powerpc/include/asm/ppc_asm.h > +++ b/arch/powerpc/include/asm/ppc_asm.h > @@ -201,14 +201,12 @@ END_FW_FTR_SECTION_IFSET(FW_FEATURE_SPLPAR) > #ifdef PPC64_ELF_ABI_v2 > > #define _GLOBAL(name) \ > - .section ".text"; \ > .align 2 ; \ > .type name,@function; \ > .globl name; \ > name: > > #define _GLOBAL_TOC(name) \ > - .section ".text"; \ > .align 2 ; \ > .type name,@function; \ > .globl name; \ > @@ -232,16 +230,15 @@ name: > #define GLUE(a,b) XGLUE(a,b) > > #define _GLOBAL(name) \ > - .section ".text"; \ > .align 2 ; \ > .globl name; \ > .globl GLUE(.,name); \ > - .section ".opd","aw"; \ > + .pushsection ".opd","aw"; \ > name: \ > .quad GLUE(.,name); \ > .quad .TOC.@tocbase; \ > .quad 0; \ > - .previous; \ > + .popsection; \ I think you can still use .section and .previous here, but it's much of a muchness.