1. 26 Aug, 2021 5 commits
  2. 25 Aug, 2021 13 commits
  3. 23 Aug, 2021 3 commits
  4. 20 Aug, 2021 8 commits
  5. 18 Aug, 2021 1 commit
  6. 17 Aug, 2021 6 commits
  7. 16 Aug, 2021 2 commits
  8. 15 Aug, 2021 2 commits
    • Fangrui Song's avatar
      powerpc: Add "-z notext" flag to disable diagnostic · 03557853
      Fangrui Song authored
      Object files used to link .tmp_vmlinux.kallsyms1 have many
      R_PPC64_ADDR64 relocations in non-SHF_WRITE sections. There are many
      text relocations (e.g. in .rela___ksymtab_gpl+* and .rela__mcount_loc
      sections) in a -pie link and are disallowed by LLD:
      
        ld.lld: error: can't create dynamic relocation R_PPC64_ADDR64 against local symbol in readonly segment; recompile object files with -fPIC or pass '-Wl,-z,notext' to allow text relocations in the output
        >>> defined in arch/powerpc/kernel/head_64.o
        >>> referenced by arch/powerpc/kernel/head_64.o:(__restart_table+0x10)
      
      Newer GNU ld configured with "--enable-textrel-check=error" will report
      an error as well:
      
        $ ld-new -EL -m elf64lppc -pie ... -o .tmp_vmlinux.kallsyms1 ...
        ld-new: read-only segment has dynamic relocations
      
      Add "-z notext" to suppress the errors. Non-CONFIG_RELOCATABLE builds
      use the default -no-pie mode and thus R_PPC64_ADDR64 relocations can be
      resolved at link-time.
      Reported-by: default avatarItaru Kitayama <itaru.kitayama@riken.jp>
      Co-developed-by: default avatarBill Wendling <morbo@google.com>
      Signed-off-by: default avatarFangrui Song <maskray@google.com>
      Signed-off-by: default avatarBill Wendling <morbo@google.com>
      Reviewed-by: default avatarNick Desaulniers <ndesaulniers@google.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20210813200511.1905703-1-morbo@google.com
      03557853
    • Christophe Leroy's avatar
      powerpc/bug: Provide better flexibility to WARN_ON/__WARN_FLAGS() with asm goto · 1e688dd2
      Christophe Leroy authored
      Using asm goto in __WARN_FLAGS() and WARN_ON() allows more
      flexibility to GCC.
      
      For that add an entry to the exception table so that
      program_check_exception() knowns where to resume execution
      after a WARNING.
      
      Here are two exemples. The first one is done on PPC32 (which
      benefits from the previous patch), the second is on PPC64.
      
      	unsigned long test(struct pt_regs *regs)
      	{
      		int ret;
      
      		WARN_ON(regs->msr & MSR_PR);
      
      		return regs->gpr[3];
      	}
      
      	unsigned long test9w(unsigned long a, unsigned long b)
      	{
      		if (WARN_ON(!b))
      			return 0;
      		return a / b;
      	}
      
      Before the patch:
      
      	000003a8 <test>:
      	 3a8:	81 23 00 84 	lwz     r9,132(r3)
      	 3ac:	71 29 40 00 	andi.   r9,r9,16384
      	 3b0:	40 82 00 0c 	bne     3bc <test+0x14>
      	 3b4:	80 63 00 0c 	lwz     r3,12(r3)
      	 3b8:	4e 80 00 20 	blr
      
      	 3bc:	0f e0 00 00 	twui    r0,0
      	 3c0:	80 63 00 0c 	lwz     r3,12(r3)
      	 3c4:	4e 80 00 20 	blr
      
      	0000000000000bf0 <.test9w>:
      	 bf0:	7c 89 00 74 	cntlzd  r9,r4
      	 bf4:	79 29 d1 82 	rldicl  r9,r9,58,6
      	 bf8:	0b 09 00 00 	tdnei   r9,0
      	 bfc:	2c 24 00 00 	cmpdi   r4,0
      	 c00:	41 82 00 0c 	beq     c0c <.test9w+0x1c>
      	 c04:	7c 63 23 92 	divdu   r3,r3,r4
      	 c08:	4e 80 00 20 	blr
      
      	 c0c:	38 60 00 00 	li      r3,0
      	 c10:	4e 80 00 20 	blr
      
      After the patch:
      
      	000003a8 <test>:
      	 3a8:	81 23 00 84 	lwz     r9,132(r3)
      	 3ac:	71 29 40 00 	andi.   r9,r9,16384
      	 3b0:	40 82 00 0c 	bne     3bc <test+0x14>
      	 3b4:	80 63 00 0c 	lwz     r3,12(r3)
      	 3b8:	4e 80 00 20 	blr
      
      	 3bc:	0f e0 00 00 	twui    r0,0
      
      	0000000000000c50 <.test9w>:
      	 c50:	7c 89 00 74 	cntlzd  r9,r4
      	 c54:	79 29 d1 82 	rldicl  r9,r9,58,6
      	 c58:	0b 09 00 00 	tdnei   r9,0
      	 c5c:	7c 63 23 92 	divdu   r3,r3,r4
      	 c60:	4e 80 00 20 	blr
      
      	 c70:	38 60 00 00 	li      r3,0
      	 c74:	4e 80 00 20 	blr
      
      In the first exemple, we see GCC doesn't need to duplicate what
      happens after the trap.
      
      In the second exemple, we see that GCC doesn't need to emit a test
      and a branch in the likely path in addition to the trap.
      
      We've got some WARN_ON() in .softirqentry.text section so it needs
      to be added in the OTHER_TEXT_SECTIONS in modpost.c
      Signed-off-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/389962b1b702e3c78d169e59bcfac56282889173.1618331882.git.christophe.leroy@csgroup.eu
      1e688dd2