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