Re: linux-next: manual merge of the tip tree with the powerpc-objtool tree

From: Stephen Rothwell
Date: Thu Dec 15 2022 - 18:09:55 EST


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: pgp1IGz4CRBtC.pgp
Description: OpenPGP digital signature