Hi all, On Thu, 24 Nov 2022 12:29:31 +1100 Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx> wrote: > > Today's linux-next merge of the tip tree got a conflict in: > > tools/objtool/check.c > > between commit: > > efb11fdb3e1a ("objtool: Fix SEGFAULT") > > from the powerpc-objtool tree and commit: > > dbcdbdfdf137 ("objtool: Rework instruction -> symbol mapping") > > from the tip tree. > > I fixed it up (see below) and can carry the fix as necessary. This > is now fixed as far as linux-next is concerned, but any non trivial > conflicts should be mentioned to your upstream maintainer when your tree > is submitted for merging. You may also want to consider cooperating > with the maintainer of the conflicting tree to minimise any particularly > complex conflicts. > > -- > Cheers, > Stephen Rothwell > > diff --cc tools/objtool/check.c > index 7580c66ca5c8,4f1a7384426b..000000000000 > --- a/tools/objtool/check.c > +++ b/tools/objtool/check.c > @@@ -207,7 -204,7 +204,7 @@@ static bool __dead_end_function(struct > return false; > > insn = find_insn(file, func->sec, func->offset); > - if (!insn || !insn->func) > - if (!insn_func(insn)) > ++ if (!insn || !insn_func(insn)) > return false; > > func_for_each_insn(file, func, insn) { > @@@ -850,11 -861,73 +861,73 @@@ static int create_ibt_endbr_seal_sectio > return 0; > } > > + static int create_cfi_sections(struct objtool_file *file) > + { > + struct section *sec, *s; > + struct symbol *sym; > + unsigned int *loc; > + int idx; > + > + sec = find_section_by_name(file->elf, ".cfi_sites"); > + if (sec) { > + INIT_LIST_HEAD(&file->call_list); > + WARN("file already has .cfi_sites section, skipping"); > + return 0; > + } > + > + idx = 0; > + for_each_sec(file, s) { > + if (!s->text) > + continue; > + > + list_for_each_entry(sym, &s->symbol_list, list) { > + if (sym->type != STT_FUNC) > + continue; > + > + if (strncmp(sym->name, "__cfi_", 6)) > + continue; > + > + idx++; > + } > + } > + > + sec = elf_create_section(file->elf, ".cfi_sites", 0, sizeof(unsigned int), idx); > + if (!sec) > + return -1; > + > + idx = 0; > + for_each_sec(file, s) { > + if (!s->text) > + continue; > + > + list_for_each_entry(sym, &s->symbol_list, list) { > + if (sym->type != STT_FUNC) > + continue; > + > + if (strncmp(sym->name, "__cfi_", 6)) > + continue; > + > + loc = (unsigned int *)sec->data->d_buf + idx; > + memset(loc, 0, sizeof(unsigned int)); > + > + if (elf_add_reloc_to_insn(file->elf, sec, > + idx * sizeof(unsigned int), > + R_X86_64_PC32, > + s, sym->offset)) > + return -1; > + > + idx++; > + } > + } > + > + return 0; > + } > + > static int create_mcount_loc_sections(struct objtool_file *file) > { > - struct section *sec; > - unsigned long *loc; > + int addrsize = elf_class_addrsize(file->elf); > struct instruction *insn; > + struct section *sec; > int idx; > > sec = find_section_by_name(file->elf, "__mcount_loc"); This is now a conflict between the powerpc tree and Linus' tree. -- Cheers, Stephen Rothwell
Attachment:
pgpvPjNyIPquE.pgp
Description: OpenPGP digital signature