On Thu, Mar 18, 2021 at 06:11:14PM +0100, Peter Zijlstra wrote:
> Allow objtool to create undefined symbols; this allows creating
> relocations to symbols not currently in the symbol table.
> 
> Signed-off-by: Peter Zijlstra (Intel) <pet...@infradead.org>
> ---
>  tools/objtool/elf.c                 |   63 
> ++++++++++++++++++++++++++++++++++++
>  tools/objtool/include/objtool/elf.h |    1 
>  2 files changed, 64 insertions(+)
> 
> --- a/tools/objtool/elf.c
> +++ b/tools/objtool/elf.c
> @@ -724,6 +724,69 @@ static int elf_strtab_concat(struct elf
>       return len;
>  }
>  
> +struct symbol *elf_create_undef_symbol(struct elf *elf, const char *name)
> +{
> +     struct section *symtab;
> +     struct symbol *sym;
> +     Elf_Data *data;
> +     Elf_Scn *s;
> +
> +     sym = malloc(sizeof(*sym));
> +     if (!sym) {
> +             perror("malloc");
> +             return NULL;
> +     }
> +     memset(sym, 0, sizeof(*sym));
> +
> +     sym->name = strdup(name);
> +
> +     sym->sym.st_name = elf_strtab_concat(elf, sym->name, NULL);
> +     if (sym->sym.st_name == -1)
> +             return NULL;
> +
> +     sym->sym.st_info = 0x10; /* STB_GLOBAL, STT_NOTYPE */

There's a generic macro for this:
        
        sym->sym.st_info = GELF_ST_INFO(STB_GLOBAL, STT_NOTYPE);

And sym->bind and sym->type should probably get set.

-- 
Josh

Reply via email to