lkml.org 
[lkml]   [2021]   [Mar]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH v3 09/16] objtool: Implicitly create reloc sections
    Have elf_add_reloc() create the relocation section implicity.

    Suggested-by: Josh Poimboeuf <jpoimboe@redhat.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    ---
    tools/objtool/check.c | 6 ------
    tools/objtool/elf.c | 9 ++++++++-
    tools/objtool/include/objtool/elf.h | 1 -
    tools/objtool/orc_gen.c | 2 --
    4 files changed, 8 insertions(+), 10 deletions(-)

    --- a/tools/objtool/check.c
    +++ b/tools/objtool/check.c
    @@ -459,9 +459,6 @@ static int create_static_call_sections(s
    if (!sec)
    return -1;

    - if (!elf_create_reloc_section(file->elf, sec, SHT_RELA))
    - return -1;
    -
    idx = 0;
    list_for_each_entry(insn, &file->static_call_list, static_call_node) {

    @@ -547,9 +544,6 @@ static int create_mcount_loc_sections(st
    if (!sec)
    return -1;

    - if (!elf_create_reloc_section(file->elf, sec, SHT_RELA))
    - return -1;
    -
    idx = 0;
    list_for_each_entry(insn, &file->mcount_loc_list, mcount_loc_node) {

    --- a/tools/objtool/elf.c
    +++ b/tools/objtool/elf.c
    @@ -447,11 +447,18 @@ static int read_symbols(struct elf *elf)
    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_r
    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)
    {
    --- a/tools/objtool/include/objtool/elf.h
    +++ b/tools/objtool/include/objtool/elf.h
    @@ -122,7 +122,6 @@ static inline u32 reloc_hash(struct relo

    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);
    -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);
    --- a/tools/objtool/orc_gen.c
    +++ b/tools/objtool/orc_gen.c
    @@ -225,8 +225,6 @@ int orc_create(struct objtool_file *file
    sec = elf_create_section(file->elf, ".orc_unwind_ip", 0, sizeof(int), nr);
    if (!sec)
    return -1;
    - if (!elf_create_reloc_section(file->elf, sec, SHT_RELA))
    - return -1;

    /* Write ORC entries to sections: */
    list_for_each_entry(entry, &orc_list, list) {

    \
     
     \ /
      Last update: 2021-03-26 16:17    [W:4.027 / U:0.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site