Skip to content

Commit

Permalink
powerpc-factor-out-relocation-code-from-module_64c-to-elf_util_64c-ch…
Browse files Browse the repository at this point in the history
…eckpatch-fixes

WARNING: do not add new typedefs
torvalds#86: FILE: arch/powerpc/include/asm/elf_util.h:35:
+typedef unsigned long func_desc_t;

WARNING: do not add new typedefs
torvalds#90: FILE: arch/powerpc/include/asm/elf_util.h:39:
+typedef struct ppc64_opd_entry func_desc_t;

WARNING: Block comments use * on subsequent lines
torvalds#94: FILE: arch/powerpc/include/asm/elf_util.h:43:
+/* Like PPC32, we need little trampolines to do > 24-bit jumps (into
+   the kernel itself).  But on PPC64, these need to be used for every

WARNING: Block comments use a trailing */ on a separate line
torvalds#95: FILE: arch/powerpc/include/asm/elf_util.h:44:
+   jump, actually, to reset r2 (TOC+0x8000). */

ERROR: open brace '{' following struct go on the same line
torvalds#97: FILE: arch/powerpc/include/asm/elf_util.h:46:
+struct ppc64_stub_entry
+{

WARNING: Block comments use a trailing */ on a separate line
torvalds#100: FILE: arch/powerpc/include/asm/elf_util.h:49:
+	 * so we don't have to modify the trampoline load instruction. */

WARNING: Block comments use * on subsequent lines
torvalds#110: FILE: arch/powerpc/include/asm/elf_util.h:59:
+/* r2 is the TOC pointer: it actually points 0x8000 into the TOC (this
+   gives the value maximum span in an instruction which uses a signed

WARNING: Block comments use a trailing */ on a separate line
torvalds#111: FILE: arch/powerpc/include/asm/elf_util.h:60:
+   offset) */

WARNING: Block comments use * on subsequent lines
torvalds#132: FILE: arch/powerpc/include/asm/module.h:18:
+/* Both low and high 16 bits are added as SIGNED additions, so if low
+   16 bits has high bit set, high 16 bits must be adjusted.  These

WARNING: Block comments use a trailing */ on a separate line
torvalds#133: FILE: arch/powerpc/include/asm/module.h:19:
+   macros do that (stolen from binutils). */

WARNING: space prohibited between function name and open parenthesis '('
torvalds#136: FILE: arch/powerpc/include/asm/module.h:22:
+#define PPC_HA(v) PPC_HI ((v) + 0x8000)

ERROR: Macros with complex values should be enclosed in parentheses
torvalds#136: FILE: arch/powerpc/include/asm/module.h:22:
+#define PPC_HA(v) PPC_HI ((v) + 0x8000)

WARNING: please, no spaces at the start of a line
torvalds#210: FILE: arch/powerpc/kernel/elf_util_64.c:32:
+ (((1 << (((other) & STO_PPC64_LOCAL_MASK) >> STO_PPC64_LOCAL_BIT)) >> 2) << 2)$

WARNING: Block comments use a trailing */ on a separate line
torvalds#216: FILE: arch/powerpc/kernel/elf_util_64.c:38:
+	 * of function and try to derive r2 from it). */

WARNING: line over 80 characters
torvalds#357: FILE: arch/powerpc/kernel/elf_util_64.c:179:
+				value = stub_for_addr(elf_info, value, obj_name);

WARNING: line over 80 characters
torvalds#363: FILE: arch/powerpc/kernel/elf_util_64.c:185:
+				squash_toc_save_inst(strtab + sym->st_name, value);

ERROR: space required before the open brace '{'
torvalds#369: FILE: arch/powerpc/kernel/elf_util_64.c:191:
+			if (value + 0x2000000 > 0x3ffffff || (value & 3) != 0){

WARNING: line over 80 characters
torvalds#560: FILE: arch/powerpc/kernel/module_64.c:341:
+	sechdrs[me->arch.elf_info.stubs_section].sh_size = get_stubs_size(hdr, sechdrs);

WARNING: line over 80 characters
torvalds#613: FILE: arch/powerpc/kernel/module_64.c:380:
+	struct elf_shdr *stubs_sec = &elf_info->sechdrs[elf_info->stubs_section];

WARNING: line over 80 characters
torvalds#889: FILE: arch/powerpc/kernel/module_64.c:498:
+	num_stubs = sechdrs[me->arch.elf_info.stubs_section].sh_size / sizeof(*entry);

total: 3 errors, 17 warnings, 830 lines checked

NOTE: For some of the reported defects, checkpatch may be able to
      mechanically convert to the typical style using --fix or --fix-inplace.

./patches/powerpc-factor-out-relocation-code-from-module_64c-to-elf_util_64c.patch has style problems, please review.

NOTE: If any of the errors are false positives, please report
      them to the maintainer, see CHECKPATCH in MAINTAINERS.

Please run checkpatch prior to sending patches

Cc: Thiago Jung Bauermann <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
  • Loading branch information
akpm00 authored and hnaz committed Aug 25, 2016
1 parent f38a8fb commit 5032ebe
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 15 deletions.
11 changes: 6 additions & 5 deletions arch/powerpc/include/asm/elf_util.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,12 @@ typedef unsigned long func_desc_t;
typedef struct ppc64_opd_entry func_desc_t;
#endif /* PPC64_ELF_ABI_v2 */

/* Like PPC32, we need little trampolines to do > 24-bit jumps (into
the kernel itself). But on PPC64, these need to be used for every
jump, actually, to reset r2 (TOC+0x8000). */
struct ppc64_stub_entry
{
/*
* Like PPC32, we need little trampolines to do > 24-bit jumps (into
* the kernel itself). But on PPC64, these need to be used for every
* jump, actually, to reset r2 (TOC+0x8000).
*/
struct ppc64_stub_entry {
/* 28 byte jump instruction sequence (7 instructions). We only
* need 6 instructions on ABIv2 but we always allocate 7 so
* so we don't have to modify the trampoline load instruction. */
Expand Down
10 changes: 6 additions & 4 deletions arch/powerpc/include/asm/module.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,14 @@
#include <asm-generic/module.h>
#include <asm/elf_util.h>

/* Both low and high 16 bits are added as SIGNED additions, so if low
16 bits has high bit set, high 16 bits must be adjusted. These
macros do that (stolen from binutils). */
/*
* Both low and high 16 bits are added as SIGNED additions, so if low 16 bits
* has high bit set, high 16 bits must be adjusted. These macros do that
* (stolen from binutils).
*/
#define PPC_LO(v) ((v) & 0xffff)
#define PPC_HI(v) (((v) >> 16) & 0xffff)
#define PPC_HA(v) PPC_HI ((v) + 0x8000)
#define PPC_HA(v) PPC_HI((v) + 0x8000)

#ifndef __powerpc64__
/*
Expand Down
14 changes: 9 additions & 5 deletions arch/powerpc/kernel/elf_util_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,11 @@ struct module;

static unsigned int local_entry_offset(const Elf64_Sym *sym)
{
/* sym->st_other indicates offset to local entry point
/*
* sym->st_other indicates offset to local entry point
* (otherwise it will assume r12 is the address of the start
* of function and try to derive r2 from it). */
* of function and try to derive r2 from it).
*/
return PPC64_LOCAL_ENTRY_OFFSET(sym->st_other);
}
#else
Expand Down Expand Up @@ -176,19 +178,21 @@ int elf64_apply_relocate_add(const struct elf_info *elf_info,
/* FIXME: Handle weak symbols here --RR */
if (sym->st_shndx == SHN_UNDEF) {
/* External: go via stub */
value = stub_for_addr(elf_info, value, obj_name);
value = stub_for_addr(elf_info, value,
obj_name);
if (!value)
return -ENOENT;
if (!restore_r2((u32 *)location + 1, obj_name))
return -ENOEXEC;

squash_toc_save_inst(strtab + sym->st_name, value);
squash_toc_save_inst(strtab + sym->st_name,
value);
} else
value += local_entry_offset(sym);

/* Convert value to relative */
value -= (unsigned long)location;
if (value + 0x2000000 > 0x3ffffff || (value & 3) != 0){
if (value + 0x2000000 > 0x3ffffff || (value & 3) != 0) {
pr_err("%s: REL24 %li out of range!\n",
obj_name, (long int)value);
return -ENOEXEC;
Expand Down
3 changes: 2 additions & 1 deletion arch/powerpc/kernel/module_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -377,10 +377,11 @@ static inline int create_stub(const struct elf_info *elf_info,
unsigned long stub_for_addr(const struct elf_info *elf_info, unsigned long addr,
const char *obj_name)
{
struct elf_shdr *stubs_sec = &elf_info->sechdrs[elf_info->stubs_section];
struct elf_shdr *stubs_sec;
struct ppc64_stub_entry *stubs;
unsigned int i, num_stubs;

stubs_sec = &elf_info->sechdrs[elf_info->stubs_section];
num_stubs = stubs_sec->sh_size / sizeof(*stubs);

/* Find this stub, or if that fails, the next avail. entry */
Expand Down

0 comments on commit 5032ebe

Please sign in to comment.