FAILED: patch "[PATCH] objtool: Fix type of reloc::addend" failed to apply to 5.10-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 5.10-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From c087c6e7b551b7f208c0b852304f044954cf2bb3 Mon Sep 17 00:00:00 2001
From: Peter Zijlstra <[email protected]>
Date: Sun, 17 Apr 2022 17:03:40 +0200
Subject: [PATCH] objtool: Fix type of reloc::addend
Elf{32,64}_Rela::r_addend is of type: Elf{32,64}_Sword, that means that our reloc::addend needs to be long or face tuncation issues when we do elf_rebuild_reloc_section():
- 107: 48 b8 00 00 00 00 00 00 00 00 movabs $0x0,%rax 109: R_X86_64_64 level4_kernel_pgt+0x80000067 + 107: 48 b8 00 00 00 00 00 00 00 00 movabs $0x0,%rax 109: R_X86_64_64 level4_kernel_pgt-0x7fffff99
Fixes 627fce14809b ("objtool: Add ORC unwind table generation")
Signed-off-by Peter Zijlstra (Intel) <[email protected]>
Acked-by Josh Poimboeuf <[email protected]>
tools/objtool/check.c +4 -4
@@ -559,12 +559,12 @@ static int add_dead_ends(struct objtool_file *file)else if (reloc->addend == reloc->sym->sec->sh.sh_size) { insn =find_last_insn (file, reloc->sym->sec);if (!insn) { -WARN ("can't find unreachable insn at %s+0x%x" , +WARN ("can't find unreachable insn at %s+0x%lx" , reloc->sym->sec->name, reloc->addend);return -1 ; } }else { -WARN ("can't find unreachable insn at %s+0x%x" , +WARN ("can't find unreachable insn at %s+0x%lx" , reloc->sym->sec->name, reloc->addend);return -1 ; }
@@ -594,12 +594,12 @@ static int add_dead_ends(struct objtool_file *file)else if (reloc->addend == reloc->sym->sec->sh.sh_size) { insn =find_last_insn (file, reloc->sym->sec);if (!insn) { -WARN ("can't find reachable insn at %s+0x%x" , +WARN ("can't find reachable insn at %s+0x%lx" , reloc->sym->sec->name, reloc->addend);return -1 ; } }else { -WARN ("can't find reachable insn at %s+0x%x" , +WARN ("can't find reachable insn at %s+0x%lx" , reloc->sym->sec->name, reloc->addend);return -1 ; }
tools/objtool/elf.c +1 -1
@@ -546,7 +546,7 @@ static struct section *elf_create_reloc_section(struct elf *elf, int reltype);int elf_add_reloc (struct elf *elf,struct section *sec,unsigned long offset, -unsigned int type,struct symbol *sym,int addend) +unsigned int type,struct symbol *sym,long addend) {struct reloc *reloc;
tools/objtool/include/objtool/elf.h +2 -2
@@ -73,7 +73,7 @@ struct reloc {struct symbol *sym;unsigned long offset;unsigned int type; -int addend; +long addend;int idx;bool jump_table_start; };
@@ -135,7 +135,7 @@ struct elf *elf_open_read(const char *name, int flags);struct section *elf_create_section (struct elf *elf,const char *name,unsigned int sh_flags,size_t entsize,int nr);int elf_add_reloc (struct elf *elf,struct section *sec,unsigned long offset, -unsigned int type,struct symbol *sym,int addend); +unsigned int type,struct symbol *sym,long addend);int elf_add_reloc_to_insn (struct elf *elf,struct section *sec,unsigned long offset,unsigned int type,struct section *insn_sec,unsigned long insn_off);