diff options
author | Peter Zijlstra <peterz@infradead.org> | 2021-03-26 18:12:08 +0300 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2021-04-02 13:44:37 +0300 |
commit | d0c5c4cc73da0b05b0d9e5f833f2d859e1b45f8e (patch) | |
tree | b9f0b2e78272ec8b314572c802645a87138535fa /tools/objtool/elf.c | |
parent | ef47cc01cb4abcd760d8ac66b9361d6ade4d0846 (diff) | |
download | linux-d0c5c4cc73da0b05b0d9e5f833f2d859e1b45f8e.tar.xz |
objtool: Create reloc sections implicitly
Have elf_add_reloc() create the relocation section implicitly.
Suggested-by: Josh Poimboeuf <jpoimboe@redhat.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Borislav Petkov <bp@suse.de>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Reviewed-by: Miroslav Benes <mbenes@suse.cz>
Link: https://lkml.kernel.org/r/20210326151259.880174448@infradead.org
Diffstat (limited to 'tools/objtool/elf.c')
-rw-r--r-- | tools/objtool/elf.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/tools/objtool/elf.c b/tools/objtool/elf.c index 0ab52ac3f861..7b65ae3beea4 100644 --- a/tools/objtool/elf.c +++ b/tools/objtool/elf.c @@ -447,11 +447,18 @@ err: return -1; } +static struct section *elf_create_reloc_section(struct elf *elf, + struct section *base, + int reltype); + int elf_add_reloc(struct elf *elf, struct section *sec, unsigned long offset, unsigned int type, struct symbol *sym, int addend) { struct reloc *reloc; + if (!sec->reloc && !elf_create_reloc_section(elf, sec, SHT_RELA)) + return -1; + reloc = malloc(sizeof(*reloc)); if (!reloc) { perror("malloc"); @@ -829,7 +836,7 @@ static struct section *elf_create_rela_reloc_section(struct elf *elf, struct sec return sec; } -struct section *elf_create_reloc_section(struct elf *elf, +static struct section *elf_create_reloc_section(struct elf *elf, struct section *base, int reltype) { |