Messages in this thread | | | Date | Wed, 1 Apr 2020 14:05:48 -0500 | From | Josh Poimboeuf <> | Subject | Re: [PATCH 3/5] objtool: Support Clang non-section symbols in ORC generation |
| |
On Wed, Apr 01, 2020 at 08:49:53PM +0200, Peter Zijlstra wrote: > On Wed, Apr 01, 2020 at 01:23:27PM -0500, Josh Poimboeuf wrote: > > > @@ -105,8 +100,32 @@ static int create_orc_entry(struct elf *elf, struct section *u_sec, struct secti > > } > > memset(rela, 0, sizeof(*rela)); > > > > - rela->sym = insn_sec->sym; > > - rela->addend = insn_off; > > + if (insn_sec->sym) { > > + rela->sym = insn_sec->sym; > > + rela->addend = insn_off; > > + } else { > > + /* > > + * The Clang assembler doesn't produce section symbols, so we > > + * have to reference the function symbol instead: > > + */ > > + rela->sym = find_symbol_containing(insn_sec, insn_off); > > It's a good thing I made that a lot faster I suppose ;-)
:-)
> > + if (!rela->sym) { > > + /* > > + * Hack alert. This happens when we need to reference > > + * the NOP pad insn immediately after the function. > > + */ > > + rela->sym = find_symbol_containing(insn_sec, > > + insn_off - 1); > > Urgh, when does that happen?
It happens naturally in the padding between functions, since objtool doesn't traverse those instructions. So they have undefined entries like
.text+68: sp:(und) bp:(und) type:call end:0
I suppose those aren't technically necessary.
-- Josh
| |