Message ID | 20220829055223.24767-16-sv@linux.ibm.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | objtool: Enable and implement --mcount option on powerpc | expand |
Le 29/08/2022 à 07:52, Sathvika Vasireddy a écrit : > This patch adds [stub] implementations for required > functions, inorder to enable objtool build on powerpc. Not all powerpc it seems, see below > > Signed-off-by: Sathvika Vasireddy <sv@linux.ibm.com> > [Christophe Leroy: powerpc: Add missing asm/asm.h for objtool] > Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> > --- > arch/powerpc/Kconfig | 1 + > arch/powerpc/include/asm/asm.h | 7 ++ > tools/objtool/arch/powerpc/Build | 2 + > tools/objtool/arch/powerpc/decode.c | 74 +++++++++++++++++++ > .../arch/powerpc/include/arch/cfi_regs.h | 11 +++ > tools/objtool/arch/powerpc/include/arch/elf.h | 8 ++ > .../arch/powerpc/include/arch/special.h | 21 ++++++ > tools/objtool/arch/powerpc/special.c | 19 +++++ > 8 files changed, 143 insertions(+) > create mode 100644 arch/powerpc/include/asm/asm.h > create mode 100644 tools/objtool/arch/powerpc/Build > create mode 100644 tools/objtool/arch/powerpc/decode.c > create mode 100644 tools/objtool/arch/powerpc/include/arch/cfi_regs.h > create mode 100644 tools/objtool/arch/powerpc/include/arch/elf.h > create mode 100644 tools/objtool/arch/powerpc/include/arch/special.h > create mode 100644 tools/objtool/arch/powerpc/special.c > > diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig > index 4c466acdc70d..dc05cd23c233 100644 > --- a/arch/powerpc/Kconfig > +++ b/arch/powerpc/Kconfig > @@ -237,6 +237,7 @@ config PPC > select HAVE_MOD_ARCH_SPECIFIC > select HAVE_NMI if PERF_EVENTS || (PPC64 && PPC_BOOK3S) > select HAVE_OPTPROBES > + select HAVE_OBJTOOL if PPC32 || MPROFILE_KERNEL Why restrict it to MPROFILE_KERNEL ? In your RFC it was for all PPC64. Recent discussion on the list shows new problem with recordmcount, see https://lore.kernel.org/all/MW5PR84MB184250EA1CAE04497C1E7CE9AB769@MW5PR84MB1842.NAMPRD84.PROD.OUTLOOK.COM/ Those ones are with ppc64 big endian, so objtool would be welcome here as well. > select HAVE_PERF_EVENTS > select HAVE_PERF_EVENTS_NMI if PPC64 > select HAVE_PERF_REGS > diff --git a/arch/powerpc/include/asm/asm.h b/arch/powerpc/include/asm/asm.h > new file mode 100644 > index 000000000000..86f46b604e9a > --- /dev/null > +++ b/arch/powerpc/include/asm/asm.h > @@ -0,0 +1,7 @@ > +/* SPDX-License-Identifier: GPL-2.0 */ > +#ifndef _ASM_POWERPC_ASM_H > +#define _ASM_POWERPC_ASM_H > + > +#define _ASM_PTR " .long " > + > +#endif /* _ASM_POWERPC_ASM_H */ > diff --git a/tools/objtool/arch/powerpc/Build b/tools/objtool/arch/powerpc/Build > new file mode 100644 > index 000000000000..d24d5636a5b8 > --- /dev/null > +++ b/tools/objtool/arch/powerpc/Build > @@ -0,0 +1,2 @@ > +objtool-y += decode.o > +objtool-y += special.o > diff --git a/tools/objtool/arch/powerpc/decode.c b/tools/objtool/arch/powerpc/decode.c > new file mode 100644 > index 000000000000..8b6a14680da7 > --- /dev/null > +++ b/tools/objtool/arch/powerpc/decode.c > @@ -0,0 +1,74 @@ > +// SPDX-License-Identifier: GPL-2.0-or-later > + > +#include <stdio.h> > +#include <stdlib.h> > +#include <objtool/check.h> > +#include <objtool/elf.h> > +#include <objtool/arch.h> > +#include <objtool/warn.h> > +#include <objtool/builtin.h> > +#include <objtool/endianness.h> > + > +unsigned long arch_dest_reloc_offset(int addend) > +{ > + return addend; > +} > + > +bool arch_callee_saved_reg(unsigned char reg) > +{ > + return false; > +} > + > +int arch_decode_hint_reg(u8 sp_reg, int *base) > +{ > + exit(-1); > +} > + > +const char *arch_nop_insn(int len) > +{ > + exit(-1); > +} > + > +const char *arch_ret_insn(int len) > +{ > + exit(-1); > +} > + > +int arch_decode_instruction(struct objtool_file *file, const struct section *sec, > + unsigned long offset, unsigned int maxlen, > + unsigned int *len, enum insn_type *type, > + unsigned long *immediate, > + struct list_head *ops_list) > +{ > + u32 insn; > + > + *immediate = 0; > + insn = bswap_if_needed(file->elf, *(u32 *)(sec->data->d_buf + offset)); > + *len = 4; > + *type = INSN_OTHER; > + > + return 0; > +} > + > +unsigned long arch_jump_destination(struct instruction *insn) > +{ > + return insn->offset + insn->immediate; > +} > + > +void arch_initial_func_cfi_state(struct cfi_init_state *state) > +{ > + int i; > + > + for (i = 0; i < CFI_NUM_REGS; i++) { > + state->regs[i].base = CFI_UNDEFINED; > + state->regs[i].offset = 0; > + } > + > + /* initial CFA (call frame address) */ > + state->cfa.base = CFI_SP; > + state->cfa.offset = 0; > + > + /* initial LR (return address) */ > + state->regs[CFI_RA].base = CFI_CFA; > + state->regs[CFI_RA].offset = 0; > +} > diff --git a/tools/objtool/arch/powerpc/include/arch/cfi_regs.h b/tools/objtool/arch/powerpc/include/arch/cfi_regs.h > new file mode 100644 > index 000000000000..59638ebeafc8 > --- /dev/null > +++ b/tools/objtool/arch/powerpc/include/arch/cfi_regs.h > @@ -0,0 +1,11 @@ > +/* SPDX-License-Identifier: GPL-2.0-or-later */ > + > +#ifndef _OBJTOOL_CFI_REGS_H > +#define _OBJTOOL_CFI_REGS_H > + > +#define CFI_BP 1 > +#define CFI_SP CFI_BP > +#define CFI_RA 32 > +#define CFI_NUM_REGS 33 > + > +#endif > diff --git a/tools/objtool/arch/powerpc/include/arch/elf.h b/tools/objtool/arch/powerpc/include/arch/elf.h > new file mode 100644 > index 000000000000..3c8ebb7d2a6b > --- /dev/null > +++ b/tools/objtool/arch/powerpc/include/arch/elf.h > @@ -0,0 +1,8 @@ > +/* SPDX-License-Identifier: GPL-2.0-or-later */ > + > +#ifndef _OBJTOOL_ARCH_ELF > +#define _OBJTOOL_ARCH_ELF > + > +#define R_NONE R_PPC_NONE > + > +#endif /* _OBJTOOL_ARCH_ELF */ > diff --git a/tools/objtool/arch/powerpc/include/arch/special.h b/tools/objtool/arch/powerpc/include/arch/special.h > new file mode 100644 > index 000000000000..ffef9ada7133 > --- /dev/null > +++ b/tools/objtool/arch/powerpc/include/arch/special.h > @@ -0,0 +1,21 @@ > +/* SPDX-License-Identifier: GPL-2.0-or-later */ > +#ifndef _PPC_ARCH_SPECIAL_H > +#define _PPC_ARCH_SPECIAL_H > + > +#define EX_ENTRY_SIZE 8 > +#define EX_ORIG_OFFSET 0 > +#define EX_NEW_OFFSET 4 > + > +#define JUMP_ENTRY_SIZE 16 > +#define JUMP_ORIG_OFFSET 0 > +#define JUMP_NEW_OFFSET 4 > +#define JUMP_KEY_OFFSET 8 > + > +#define ALT_ENTRY_SIZE 12 > +#define ALT_ORIG_OFFSET 0 > +#define ALT_NEW_OFFSET 4 > +#define ALT_FEATURE_OFFSET 8 > +#define ALT_ORIG_LEN_OFFSET 10 > +#define ALT_NEW_LEN_OFFSET 11 > + > +#endif /* _PPC_ARCH_SPECIAL_H */ > diff --git a/tools/objtool/arch/powerpc/special.c b/tools/objtool/arch/powerpc/special.c > new file mode 100644 > index 000000000000..d33868147196 > --- /dev/null > +++ b/tools/objtool/arch/powerpc/special.c > @@ -0,0 +1,19 @@ > +// SPDX-License-Identifier: GPL-2.0-or-later > +#include <string.h> > +#include <stdlib.h> > +#include <objtool/special.h> > +#include <objtool/builtin.h> > + > + > +bool arch_support_alt_relocation(struct special_alt *special_alt, > + struct instruction *insn, > + struct reloc *reloc) > +{ > + exit(-1); > +} > + > +struct reloc *arch_find_switch_table(struct objtool_file *file, > + struct instruction *insn) > +{ > + exit(-1); > +}
Le 29/08/2022 à 07:52, Sathvika Vasireddy a écrit : > This patch adds [stub] implementations for required > functions, inorder to enable objtool build on powerpc. > > Signed-off-by: Sathvika Vasireddy <sv@linux.ibm.com> > [Christophe Leroy: powerpc: Add missing asm/asm.h for objtool] > Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> > --- > arch/powerpc/Kconfig | 1 + > arch/powerpc/include/asm/asm.h | 7 ++ > tools/objtool/arch/powerpc/Build | 2 + > tools/objtool/arch/powerpc/decode.c | 74 +++++++++++++++++++ > .../arch/powerpc/include/arch/cfi_regs.h | 11 +++ > tools/objtool/arch/powerpc/include/arch/elf.h | 8 ++ > .../arch/powerpc/include/arch/special.h | 21 ++++++ > tools/objtool/arch/powerpc/special.c | 19 +++++ > 8 files changed, 143 insertions(+) > create mode 100644 arch/powerpc/include/asm/asm.h > create mode 100644 tools/objtool/arch/powerpc/Build > create mode 100644 tools/objtool/arch/powerpc/decode.c > create mode 100644 tools/objtool/arch/powerpc/include/arch/cfi_regs.h > create mode 100644 tools/objtool/arch/powerpc/include/arch/elf.h > create mode 100644 tools/objtool/arch/powerpc/include/arch/special.h > create mode 100644 tools/objtool/arch/powerpc/special.c > > +int arch_decode_instruction(struct objtool_file *file, const struct section *sec, > + unsigned long offset, unsigned int maxlen, > + unsigned int *len, enum insn_type *type, > + unsigned long *immediate, > + struct list_head *ops_list) > +{ > + u32 insn; > + > + *immediate = 0; > + insn = bswap_if_needed(file->elf, *(u32 *)(sec->data->d_buf + offset)); > + *len = 4; Should be *len = 8 when insn >> 26 == 1. I will send you something later on. > + *type = INSN_OTHER; > + > + return 0; > +} > + > +unsigned long arch_jump_destination(struct instruction *insn) > +{ > + return insn->offset + insn->immediate; Two spaces after the + Should be only one. > +} > + > +void arch_initial_func_cfi_state(struct cfi_init_state *state) > +{ > + int i; > + > + for (i = 0; i < CFI_NUM_REGS; i++) { > + state->regs[i].base = CFI_UNDEFINED; > + state->regs[i].offset = 0; > + } > + > + /* initial CFA (call frame address) */ > + state->cfa.base = CFI_SP; > + state->cfa.offset = 0; > + > + /* initial LR (return address) */ > + state->regs[CFI_RA].base = CFI_CFA; > + state->regs[CFI_RA].offset = 0; > +}
On Thu, Sep 01, 2022 at 09:32:46AM +0000, Christophe Leroy wrote: > Le 29/08/2022 à 07:52, Sathvika Vasireddy a écrit : > > +int arch_decode_instruction(struct objtool_file *file, const struct section *sec, > > + unsigned long offset, unsigned int maxlen, > > + unsigned int *len, enum insn_type *type, > > + unsigned long *immediate, > > + struct list_head *ops_list) > > +{ > > + u32 insn; > > + > > + *immediate = 0; > > + insn = bswap_if_needed(file->elf, *(u32 *)(sec->data->d_buf + offset)); > > + *len = 4; > > Should be *len = 8 when insn >> 26 == 1. But please use ppc_inst_prefixed(). And just use ppc_inst_len() here? Not having convenience abstraction functions like that will give you much more work in the future -- currently all prefix insns use primary opcode 1, sure, and nothing else does; but this can change. Segher
Le 01/09/2022 à 17:11, Segher Boessenkool a écrit : > On Thu, Sep 01, 2022 at 09:32:46AM +0000, Christophe Leroy wrote: >> Le 29/08/2022 à 07:52, Sathvika Vasireddy a écrit : >>> +int arch_decode_instruction(struct objtool_file *file, const struct section *sec, >>> + unsigned long offset, unsigned int maxlen, >>> + unsigned int *len, enum insn_type *type, >>> + unsigned long *immediate, >>> + struct list_head *ops_list) >>> +{ >>> + u32 insn; >>> + >>> + *immediate = 0; >>> + insn = bswap_if_needed(file->elf, *(u32 *)(sec->data->d_buf + offset)); >>> + *len = 4; >> >> Should be *len = 8 when insn >> 26 == 1. > > But please use ppc_inst_prefixed(). And just use ppc_inst_len() here? objtool is a userland app, there is no access to kernel headers here. > > Not having convenience abstraction functions like that will give you > much more work in the future -- currently all prefix insns use primary > opcode 1, sure, and nothing else does; but this can change. > Yes most likely. Then we have to rebuild some light abstraction for objtool. Christophe
On Thu, Sep 01, 2022 at 04:38:52PM +0000, Christophe Leroy wrote:
> objtool is a userland app, there is no access to kernel headers here.
Please have a look at tools/include/ :-)
Christophe Leroy wrote: > > > Le 29/08/2022 à 07:52, Sathvika Vasireddy a écrit : >> >> diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig >> index 4c466acdc70d..dc05cd23c233 100644 >> --- a/arch/powerpc/Kconfig >> +++ b/arch/powerpc/Kconfig >> @@ -237,6 +237,7 @@ config PPC >> select HAVE_MOD_ARCH_SPECIFIC >> select HAVE_NMI if PERF_EVENTS || (PPC64 && PPC_BOOK3S) >> select HAVE_OPTPROBES >> + select HAVE_OBJTOOL if PPC32 || MPROFILE_KERNEL > > Why restrict it to MPROFILE_KERNEL ? In your RFC it was for all PPC64. > > Recent discussion on the list shows new problem with recordmcount, see > https://lore.kernel.org/all/MW5PR84MB184250EA1CAE04497C1E7CE9AB769@MW5PR84MB1842.NAMPRD84.PROD.OUTLOOK.COM/ > > Those ones are with ppc64 big endian, so objtool would be welcome here > as well. I don't think adding support for objtool on ppc64 elfv1 is a good idea. While it might solve the immediate issue with recordmcount, I worry that the function descriptors and dot symbols in ppc64 elfv1 might throw up issues in the future causing maintenance overhead. - Naveen
Hi-- On 8/29/22 23:41, Christophe Leroy wrote: > > > Le 29/08/2022 à 07:52, Sathvika Vasireddy a écrit : >> This patch adds [stub] implementations for required >> functions, inorder to enable objtool build on powerpc. > > Not all powerpc it seems, see below > When cross-compiling PPC32 (on x86_64), I get 3600+ of these: /bin/sh: line 1: ./tools/objtool/objtool: No such file or directory /bin/sh: line 1: ./tools/objtool/objtool: No such file or directory /bin/sh: line 1: ./tools/objtool/objtool: No such file or directory Is there some way that objtool should work when cross-compiling? Thanks. >> >> Signed-off-by: Sathvika Vasireddy <sv@linux.ibm.com> >> [Christophe Leroy: powerpc: Add missing asm/asm.h for objtool] >> Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> >> --- >> arch/powerpc/Kconfig | 1 + >> arch/powerpc/include/asm/asm.h | 7 ++ >> tools/objtool/arch/powerpc/Build | 2 + >> tools/objtool/arch/powerpc/decode.c | 74 +++++++++++++++++++ >> .../arch/powerpc/include/arch/cfi_regs.h | 11 +++ >> tools/objtool/arch/powerpc/include/arch/elf.h | 8 ++ >> .../arch/powerpc/include/arch/special.h | 21 ++++++ >> tools/objtool/arch/powerpc/special.c | 19 +++++ >> 8 files changed, 143 insertions(+) >> create mode 100644 arch/powerpc/include/asm/asm.h >> create mode 100644 tools/objtool/arch/powerpc/Build >> create mode 100644 tools/objtool/arch/powerpc/decode.c >> create mode 100644 tools/objtool/arch/powerpc/include/arch/cfi_regs.h >> create mode 100644 tools/objtool/arch/powerpc/include/arch/elf.h >> create mode 100644 tools/objtool/arch/powerpc/include/arch/special.h >> create mode 100644 tools/objtool/arch/powerpc/special.c >> >> diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig >> index 4c466acdc70d..dc05cd23c233 100644 >> --- a/arch/powerpc/Kconfig >> +++ b/arch/powerpc/Kconfig >> @@ -237,6 +237,7 @@ config PPC >> select HAVE_MOD_ARCH_SPECIFIC >> select HAVE_NMI if PERF_EVENTS || (PPC64 && PPC_BOOK3S) >> select HAVE_OPTPROBES >> + select HAVE_OBJTOOL if PPC32 || MPROFILE_KERNEL > > Why restrict it to MPROFILE_KERNEL ? In your RFC it was for all PPC64. > > Recent discussion on the list shows new problem with recordmcount, see > https://lore.kernel.org/all/MW5PR84MB184250EA1CAE04497C1E7CE9AB769@MW5PR84MB1842.NAMPRD84.PROD.OUTLOOK.COM/ > > Those ones are with ppc64 big endian, so objtool would be welcome here > as well. > >> select HAVE_PERF_EVENTS >> select HAVE_PERF_EVENTS_NMI if PPC64 >> select HAVE_PERF_REGS >> diff --git a/arch/powerpc/include/asm/asm.h b/arch/powerpc/include/asm/asm.h >> new file mode 100644 >> index 000000000000..86f46b604e9a >> --- /dev/null >> +++ b/arch/powerpc/include/asm/asm.h >> @@ -0,0 +1,7 @@ >> +/* SPDX-License-Identifier: GPL-2.0 */ >> +#ifndef _ASM_POWERPC_ASM_H >> +#define _ASM_POWERPC_ASM_H >> + >> +#define _ASM_PTR " .long " >> + >> +#endif /* _ASM_POWERPC_ASM_H */ >> diff --git a/tools/objtool/arch/powerpc/Build b/tools/objtool/arch/powerpc/Build >> new file mode 100644 >> index 000000000000..d24d5636a5b8 >> --- /dev/null >> +++ b/tools/objtool/arch/powerpc/Build >> @@ -0,0 +1,2 @@ >> +objtool-y += decode.o >> +objtool-y += special.o >> diff --git a/tools/objtool/arch/powerpc/decode.c b/tools/objtool/arch/powerpc/decode.c >> new file mode 100644 >> index 000000000000..8b6a14680da7 >> --- /dev/null >> +++ b/tools/objtool/arch/powerpc/decode.c >> @@ -0,0 +1,74 @@ >> +// SPDX-License-Identifier: GPL-2.0-or-later >> + >> +#include <stdio.h> >> +#include <stdlib.h> >> +#include <objtool/check.h> >> +#include <objtool/elf.h> >> +#include <objtool/arch.h> >> +#include <objtool/warn.h> >> +#include <objtool/builtin.h> >> +#include <objtool/endianness.h> >> + >> +unsigned long arch_dest_reloc_offset(int addend) >> +{ >> + return addend; >> +} >> + >> +bool arch_callee_saved_reg(unsigned char reg) >> +{ >> + return false; >> +} >> + >> +int arch_decode_hint_reg(u8 sp_reg, int *base) >> +{ >> + exit(-1); >> +} >> + >> +const char *arch_nop_insn(int len) >> +{ >> + exit(-1); >> +} >> + >> +const char *arch_ret_insn(int len) >> +{ >> + exit(-1); >> +} >> + >> +int arch_decode_instruction(struct objtool_file *file, const struct section *sec, >> + unsigned long offset, unsigned int maxlen, >> + unsigned int *len, enum insn_type *type, >> + unsigned long *immediate, >> + struct list_head *ops_list) >> +{ >> + u32 insn; >> + >> + *immediate = 0; >> + insn = bswap_if_needed(file->elf, *(u32 *)(sec->data->d_buf + offset)); >> + *len = 4; >> + *type = INSN_OTHER; >> + >> + return 0; >> +} >> + >> +unsigned long arch_jump_destination(struct instruction *insn) >> +{ >> + return insn->offset + insn->immediate; >> +} >> + >> +void arch_initial_func_cfi_state(struct cfi_init_state *state) >> +{ >> + int i; >> + >> + for (i = 0; i < CFI_NUM_REGS; i++) { >> + state->regs[i].base = CFI_UNDEFINED; >> + state->regs[i].offset = 0; >> + } >> + >> + /* initial CFA (call frame address) */ >> + state->cfa.base = CFI_SP; >> + state->cfa.offset = 0; >> + >> + /* initial LR (return address) */ >> + state->regs[CFI_RA].base = CFI_CFA; >> + state->regs[CFI_RA].offset = 0; >> +} >> diff --git a/tools/objtool/arch/powerpc/include/arch/cfi_regs.h b/tools/objtool/arch/powerpc/include/arch/cfi_regs.h >> new file mode 100644 >> index 000000000000..59638ebeafc8 >> --- /dev/null >> +++ b/tools/objtool/arch/powerpc/include/arch/cfi_regs.h >> @@ -0,0 +1,11 @@ >> +/* SPDX-License-Identifier: GPL-2.0-or-later */ >> + >> +#ifndef _OBJTOOL_CFI_REGS_H >> +#define _OBJTOOL_CFI_REGS_H >> + >> +#define CFI_BP 1 >> +#define CFI_SP CFI_BP >> +#define CFI_RA 32 >> +#define CFI_NUM_REGS 33 >> + >> +#endif >> diff --git a/tools/objtool/arch/powerpc/include/arch/elf.h b/tools/objtool/arch/powerpc/include/arch/elf.h >> new file mode 100644 >> index 000000000000..3c8ebb7d2a6b >> --- /dev/null >> +++ b/tools/objtool/arch/powerpc/include/arch/elf.h >> @@ -0,0 +1,8 @@ >> +/* SPDX-License-Identifier: GPL-2.0-or-later */ >> + >> +#ifndef _OBJTOOL_ARCH_ELF >> +#define _OBJTOOL_ARCH_ELF >> + >> +#define R_NONE R_PPC_NONE >> + >> +#endif /* _OBJTOOL_ARCH_ELF */ >> diff --git a/tools/objtool/arch/powerpc/include/arch/special.h b/tools/objtool/arch/powerpc/include/arch/special.h >> new file mode 100644 >> index 000000000000..ffef9ada7133 >> --- /dev/null >> +++ b/tools/objtool/arch/powerpc/include/arch/special.h >> @@ -0,0 +1,21 @@ >> +/* SPDX-License-Identifier: GPL-2.0-or-later */ >> +#ifndef _PPC_ARCH_SPECIAL_H >> +#define _PPC_ARCH_SPECIAL_H >> + >> +#define EX_ENTRY_SIZE 8 >> +#define EX_ORIG_OFFSET 0 >> +#define EX_NEW_OFFSET 4 >> + >> +#define JUMP_ENTRY_SIZE 16 >> +#define JUMP_ORIG_OFFSET 0 >> +#define JUMP_NEW_OFFSET 4 >> +#define JUMP_KEY_OFFSET 8 >> + >> +#define ALT_ENTRY_SIZE 12 >> +#define ALT_ORIG_OFFSET 0 >> +#define ALT_NEW_OFFSET 4 >> +#define ALT_FEATURE_OFFSET 8 >> +#define ALT_ORIG_LEN_OFFSET 10 >> +#define ALT_NEW_LEN_OFFSET 11 >> + >> +#endif /* _PPC_ARCH_SPECIAL_H */ >> diff --git a/tools/objtool/arch/powerpc/special.c b/tools/objtool/arch/powerpc/special.c >> new file mode 100644 >> index 000000000000..d33868147196 >> --- /dev/null >> +++ b/tools/objtool/arch/powerpc/special.c >> @@ -0,0 +1,19 @@ >> +// SPDX-License-Identifier: GPL-2.0-or-later >> +#include <string.h> >> +#include <stdlib.h> >> +#include <objtool/special.h> >> +#include <objtool/builtin.h> >> + >> + >> +bool arch_support_alt_relocation(struct special_alt *special_alt, >> + struct instruction *insn, >> + struct reloc *reloc) >> +{ >> + exit(-1); >> +} >> + >> +struct reloc *arch_find_switch_table(struct objtool_file *file, >> + struct instruction *insn) >> +{ >> + exit(-1); >> +}
On 2/4/23 00:19, Randy Dunlap wrote: > Hi-- > > On 8/29/22 23:41, Christophe Leroy wrote: >> >> >> Le 29/08/2022 à 07:52, Sathvika Vasireddy a écrit : >>> This patch adds [stub] implementations for required >>> functions, inorder to enable objtool build on powerpc. >> >> Not all powerpc it seems, see below >> > > When cross-compiling PPC32 (on x86_64), I get 3600+ of these: > > /bin/sh: line 1: ./tools/objtool/objtool: No such file or directory > /bin/sh: line 1: ./tools/objtool/objtool: No such file or directory > /bin/sh: line 1: ./tools/objtool/objtool: No such file or directory > > Is there some way that objtool should work when cross-compiling? > Oops. Its build failed. I seem to be missing header file(s) and possibly a library. I'll check on those... Cheers. > >>> >>> Signed-off-by: Sathvika Vasireddy <sv@linux.ibm.com> >>> [Christophe Leroy: powerpc: Add missing asm/asm.h for objtool] >>> Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> >>> --- >>> arch/powerpc/Kconfig | 1 + >>> arch/powerpc/include/asm/asm.h | 7 ++ >>> tools/objtool/arch/powerpc/Build | 2 + >>> tools/objtool/arch/powerpc/decode.c | 74 +++++++++++++++++++ >>> .../arch/powerpc/include/arch/cfi_regs.h | 11 +++ >>> tools/objtool/arch/powerpc/include/arch/elf.h | 8 ++ >>> .../arch/powerpc/include/arch/special.h | 21 ++++++ >>> tools/objtool/arch/powerpc/special.c | 19 +++++ >>> 8 files changed, 143 insertions(+) >>> create mode 100644 arch/powerpc/include/asm/asm.h >>> create mode 100644 tools/objtool/arch/powerpc/Build >>> create mode 100644 tools/objtool/arch/powerpc/decode.c >>> create mode 100644 tools/objtool/arch/powerpc/include/arch/cfi_regs.h >>> create mode 100644 tools/objtool/arch/powerpc/include/arch/elf.h >>> create mode 100644 tools/objtool/arch/powerpc/include/arch/special.h >>> create mode 100644 tools/objtool/arch/powerpc/special.c >>> >>> diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig >>> index 4c466acdc70d..dc05cd23c233 100644 >>> --- a/arch/powerpc/Kconfig >>> +++ b/arch/powerpc/Kconfig >>> @@ -237,6 +237,7 @@ config PPC >>> select HAVE_MOD_ARCH_SPECIFIC >>> select HAVE_NMI if PERF_EVENTS || (PPC64 && PPC_BOOK3S) >>> select HAVE_OPTPROBES >>> + select HAVE_OBJTOOL if PPC32 || MPROFILE_KERNEL >> >> Why restrict it to MPROFILE_KERNEL ? In your RFC it was for all PPC64. >> >> Recent discussion on the list shows new problem with recordmcount, see >> https://lore.kernel.org/all/MW5PR84MB184250EA1CAE04497C1E7CE9AB769@MW5PR84MB1842.NAMPRD84.PROD.OUTLOOK.COM/ >> >> Those ones are with ppc64 big endian, so objtool would be welcome here >> as well. >> >>> select HAVE_PERF_EVENTS >>> select HAVE_PERF_EVENTS_NMI if PPC64 >>> select HAVE_PERF_REGS >>> diff --git a/arch/powerpc/include/asm/asm.h b/arch/powerpc/include/asm/asm.h >>> new file mode 100644 >>> index 000000000000..86f46b604e9a >>> --- /dev/null >>> +++ b/arch/powerpc/include/asm/asm.h >>> @@ -0,0 +1,7 @@ >>> +/* SPDX-License-Identifier: GPL-2.0 */ >>> +#ifndef _ASM_POWERPC_ASM_H >>> +#define _ASM_POWERPC_ASM_H >>> + >>> +#define _ASM_PTR " .long " >>> + >>> +#endif /* _ASM_POWERPC_ASM_H */ >>> diff --git a/tools/objtool/arch/powerpc/Build b/tools/objtool/arch/powerpc/Build >>> new file mode 100644 >>> index 000000000000..d24d5636a5b8 >>> --- /dev/null >>> +++ b/tools/objtool/arch/powerpc/Build >>> @@ -0,0 +1,2 @@ >>> +objtool-y += decode.o >>> +objtool-y += special.o >>> diff --git a/tools/objtool/arch/powerpc/decode.c b/tools/objtool/arch/powerpc/decode.c >>> new file mode 100644 >>> index 000000000000..8b6a14680da7 >>> --- /dev/null >>> +++ b/tools/objtool/arch/powerpc/decode.c >>> @@ -0,0 +1,74 @@ >>> +// SPDX-License-Identifier: GPL-2.0-or-later >>> + >>> +#include <stdio.h> >>> +#include <stdlib.h> >>> +#include <objtool/check.h> >>> +#include <objtool/elf.h> >>> +#include <objtool/arch.h> >>> +#include <objtool/warn.h> >>> +#include <objtool/builtin.h> >>> +#include <objtool/endianness.h> >>> + >>> +unsigned long arch_dest_reloc_offset(int addend) >>> +{ >>> + return addend; >>> +} >>> + >>> +bool arch_callee_saved_reg(unsigned char reg) >>> +{ >>> + return false; >>> +} >>> + >>> +int arch_decode_hint_reg(u8 sp_reg, int *base) >>> +{ >>> + exit(-1); >>> +} >>> + >>> +const char *arch_nop_insn(int len) >>> +{ >>> + exit(-1); >>> +} >>> + >>> +const char *arch_ret_insn(int len) >>> +{ >>> + exit(-1); >>> +} >>> + >>> +int arch_decode_instruction(struct objtool_file *file, const struct section *sec, >>> + unsigned long offset, unsigned int maxlen, >>> + unsigned int *len, enum insn_type *type, >>> + unsigned long *immediate, >>> + struct list_head *ops_list) >>> +{ >>> + u32 insn; >>> + >>> + *immediate = 0; >>> + insn = bswap_if_needed(file->elf, *(u32 *)(sec->data->d_buf + offset)); >>> + *len = 4; >>> + *type = INSN_OTHER; >>> + >>> + return 0; >>> +} >>> + >>> +unsigned long arch_jump_destination(struct instruction *insn) >>> +{ >>> + return insn->offset + insn->immediate; >>> +} >>> + >>> +void arch_initial_func_cfi_state(struct cfi_init_state *state) >>> +{ >>> + int i; >>> + >>> + for (i = 0; i < CFI_NUM_REGS; i++) { >>> + state->regs[i].base = CFI_UNDEFINED; >>> + state->regs[i].offset = 0; >>> + } >>> + >>> + /* initial CFA (call frame address) */ >>> + state->cfa.base = CFI_SP; >>> + state->cfa.offset = 0; >>> + >>> + /* initial LR (return address) */ >>> + state->regs[CFI_RA].base = CFI_CFA; >>> + state->regs[CFI_RA].offset = 0; >>> +} >>> diff --git a/tools/objtool/arch/powerpc/include/arch/cfi_regs.h b/tools/objtool/arch/powerpc/include/arch/cfi_regs.h >>> new file mode 100644 >>> index 000000000000..59638ebeafc8 >>> --- /dev/null >>> +++ b/tools/objtool/arch/powerpc/include/arch/cfi_regs.h >>> @@ -0,0 +1,11 @@ >>> +/* SPDX-License-Identifier: GPL-2.0-or-later */ >>> + >>> +#ifndef _OBJTOOL_CFI_REGS_H >>> +#define _OBJTOOL_CFI_REGS_H >>> + >>> +#define CFI_BP 1 >>> +#define CFI_SP CFI_BP >>> +#define CFI_RA 32 >>> +#define CFI_NUM_REGS 33 >>> + >>> +#endif >>> diff --git a/tools/objtool/arch/powerpc/include/arch/elf.h b/tools/objtool/arch/powerpc/include/arch/elf.h >>> new file mode 100644 >>> index 000000000000..3c8ebb7d2a6b >>> --- /dev/null >>> +++ b/tools/objtool/arch/powerpc/include/arch/elf.h >>> @@ -0,0 +1,8 @@ >>> +/* SPDX-License-Identifier: GPL-2.0-or-later */ >>> + >>> +#ifndef _OBJTOOL_ARCH_ELF >>> +#define _OBJTOOL_ARCH_ELF >>> + >>> +#define R_NONE R_PPC_NONE >>> + >>> +#endif /* _OBJTOOL_ARCH_ELF */ >>> diff --git a/tools/objtool/arch/powerpc/include/arch/special.h b/tools/objtool/arch/powerpc/include/arch/special.h >>> new file mode 100644 >>> index 000000000000..ffef9ada7133 >>> --- /dev/null >>> +++ b/tools/objtool/arch/powerpc/include/arch/special.h >>> @@ -0,0 +1,21 @@ >>> +/* SPDX-License-Identifier: GPL-2.0-or-later */ >>> +#ifndef _PPC_ARCH_SPECIAL_H >>> +#define _PPC_ARCH_SPECIAL_H >>> + >>> +#define EX_ENTRY_SIZE 8 >>> +#define EX_ORIG_OFFSET 0 >>> +#define EX_NEW_OFFSET 4 >>> + >>> +#define JUMP_ENTRY_SIZE 16 >>> +#define JUMP_ORIG_OFFSET 0 >>> +#define JUMP_NEW_OFFSET 4 >>> +#define JUMP_KEY_OFFSET 8 >>> + >>> +#define ALT_ENTRY_SIZE 12 >>> +#define ALT_ORIG_OFFSET 0 >>> +#define ALT_NEW_OFFSET 4 >>> +#define ALT_FEATURE_OFFSET 8 >>> +#define ALT_ORIG_LEN_OFFSET 10 >>> +#define ALT_NEW_LEN_OFFSET 11 >>> + >>> +#endif /* _PPC_ARCH_SPECIAL_H */ >>> diff --git a/tools/objtool/arch/powerpc/special.c b/tools/objtool/arch/powerpc/special.c >>> new file mode 100644 >>> index 000000000000..d33868147196 >>> --- /dev/null >>> +++ b/tools/objtool/arch/powerpc/special.c >>> @@ -0,0 +1,19 @@ >>> +// SPDX-License-Identifier: GPL-2.0-or-later >>> +#include <string.h> >>> +#include <stdlib.h> >>> +#include <objtool/special.h> >>> +#include <objtool/builtin.h> >>> + >>> + >>> +bool arch_support_alt_relocation(struct special_alt *special_alt, >>> + struct instruction *insn, >>> + struct reloc *reloc) >>> +{ >>> + exit(-1); >>> +} >>> + >>> +struct reloc *arch_find_switch_table(struct objtool_file *file, >>> + struct instruction *insn) >>> +{ >>> + exit(-1); >>> +} >
On 2/4/23 00:21, Randy Dunlap wrote: > > > On 2/4/23 00:19, Randy Dunlap wrote: >> Hi-- >> >> On 8/29/22 23:41, Christophe Leroy wrote: >>> >>> >>> Le 29/08/2022 à 07:52, Sathvika Vasireddy a écrit : >>>> This patch adds [stub] implementations for required >>>> functions, inorder to enable objtool build on powerpc. >>> >>> Not all powerpc it seems, see below >>> >> >> When cross-compiling PPC32 (on x86_64), I get 3600+ of these: >> >> /bin/sh: line 1: ./tools/objtool/objtool: No such file or directory >> /bin/sh: line 1: ./tools/objtool/objtool: No such file or directory >> /bin/sh: line 1: ./tools/objtool/objtool: No such file or directory >> >> Is there some way that objtool should work when cross-compiling? >> > > Oops. Its build failed. I seem to be missing header file(s) > and possibly a library. > I'll check on those... > It's complaining about libelf.h but I have that, so I don't know where it is looking other than /usr/include/libelf.h, which exists. Maybe the tool isn't setup (ready) for cross-compiling? Here's the build output for objtool: <stdin>:1:10: fatal error: libelf.h: No such file or directory compilation terminated. elf.c: In function ‘read_sections’: elf.c:273:9: error: ‘elf_getshnum’ is deprecated [-Werror=deprecated-declarations] 273 | if (elf_getshdrnum(elf->elf, §ions_nr)) { | ^~ In file included from /usr/include/gelf.h:32, from /work/lnx/next/linux-next-20230203/tools/objtool/include/objtool/elf.h:10, from elf.c:22: /usr/include/libelf.h:310:12: note: declared here 310 | extern int elf_getshnum (Elf *__elf, size_t *__dst) | ^~~~~~~~~~~~ elf.c:278:9: error: ‘elf_getshstrndx’ is deprecated [-Werror=deprecated-declarations] 278 | if (elf_getshdrstrndx(elf->elf, &shstrndx)) { | ^~ /usr/include/libelf.h:322:12: note: declared here 322 | extern int elf_getshstrndx (Elf *__elf, size_t *__dst) | ^~~~~~~~~~~~~~~ cc1: all warnings being treated as errors make[4]: *** [/work/lnx/next/linux-next-20230203/tools/build/Makefile.build:96: /work/lnx/next/linux-next-20230203/PPC32/tools/objtool/elf.o] Error 1 make[3]: *** [Makefile:66: /work/lnx/next/linux-next-20230203/PPC32/tools/objtool/objtool-in.o] Error 2 Thanks.
Hi, Le 04/02/2023 à 09:30, Randy Dunlap a écrit : > > > On 2/4/23 00:21, Randy Dunlap wrote: >> >> >> On 2/4/23 00:19, Randy Dunlap wrote: >>> Hi-- >>> >>> On 8/29/22 23:41, Christophe Leroy wrote: >>>> >>>> >>>> Le 29/08/2022 à 07:52, Sathvika Vasireddy a écrit : >>>>> This patch adds [stub] implementations for required >>>>> functions, inorder to enable objtool build on powerpc. >>>> >>>> Not all powerpc it seems, see below >>>> >>> >>> When cross-compiling PPC32 (on x86_64), I get 3600+ of these: >>> >>> /bin/sh: line 1: ./tools/objtool/objtool: No such file or directory >>> /bin/sh: line 1: ./tools/objtool/objtool: No such file or directory >>> /bin/sh: line 1: ./tools/objtool/objtool: No such file or directory >>> >>> Is there some way that objtool should work when cross-compiling? >>> >> >> Oops. Its build failed. I seem to be missing header file(s) >> and possibly a library. >> I'll check on those... >> > > It's complaining about libelf.h but I have that, so I don't know where > it is looking other than /usr/include/libelf.h, which exists. > Maybe the tool isn't setup (ready) for cross-compiling? > > > Here's the build output for objtool: > > <stdin>:1:10: fatal error: libelf.h: No such file or directory > compilation terminated. > elf.c: In function ‘read_sections’: > elf.c:273:9: error: ‘elf_getshnum’ is deprecated [-Werror=deprecated-declarations] > 273 | if (elf_getshdrnum(elf->elf, §ions_nr)) { > | ^~ > In file included from /usr/include/gelf.h:32, > from /work/lnx/next/linux-next-20230203/tools/objtool/include/objtool/elf.h:10, > from elf.c:22: > /usr/include/libelf.h:310:12: note: declared here > 310 | extern int elf_getshnum (Elf *__elf, size_t *__dst) > | ^~~~~~~~~~~~ > elf.c:278:9: error: ‘elf_getshstrndx’ is deprecated [-Werror=deprecated-declarations] > 278 | if (elf_getshdrstrndx(elf->elf, &shstrndx)) { > | ^~ > /usr/include/libelf.h:322:12: note: declared here > 322 | extern int elf_getshstrndx (Elf *__elf, size_t *__dst) > | ^~~~~~~~~~~~~~~ > cc1: all warnings being treated as errors > make[4]: *** [/work/lnx/next/linux-next-20230203/tools/build/Makefile.build:96: /work/lnx/next/linux-next-20230203/PPC32/tools/objtool/elf.o] Error 1 > > make[3]: *** [Makefile:66: /work/lnx/next/linux-next-20230203/PPC32/tools/objtool/objtool-in.o] Error 2 I have no problem crossbuilding for PPC32 from x86_64, I have a fedora 36 on the x86. $ rpm -q -f /usr/include/libelf.h elfutils-libelf-devel-0.187-4.fc36.x86_64 Here is build output with V=1, pmac32_defconfig + CONFIG_FUNCTION_TRACER=y ... mkdir -p ./tools make LDFLAGS= MAKEFLAGS=" " O=/home/chleroy/linux-powerpc subdir=tools -C ./tools/ objtool mkdir -p /home/chleroy/linux-powerpc/tools/objtool && make O=/home/chleroy/linux-powerpc subdir=tools/objtool --no-print-directory -C objtool make -C /home/chleroy/linux-powerpc/tools/build CFLAGS= LDFLAGS= /home/chleroy/linux-powerpc/tools/objtool/fixdep make -f /home/chleroy/linux-powerpc/tools/build/Makefile.build dir=. obj=fixdep gcc -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/.fixdep.o.d -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/fixdep.o -D"BUILD_STR(s)=#s" -c -o /home/chleroy/linux-powerpc/tools/objtool/fixdep.o fixdep.c ld -r -o /home/chleroy/linux-powerpc/tools/objtool/fixdep-in.o /home/chleroy/linux-powerpc/tools/objtool/fixdep.o gcc -o /home/chleroy/linux-powerpc/tools/objtool/fixdep /home/chleroy/linux-powerpc/tools/objtool/fixdep-in.o make -C /home/chleroy/linux-powerpc/tools/lib/subcmd/ OUTPUT=/home/chleroy/linux-powerpc/tools/objtool/ make -C /home/chleroy/linux-powerpc/tools/build CFLAGS= LDFLAGS= /home/chleroy/linux-powerpc/tools/objtool/fixdep make -f /home/chleroy/linux-powerpc/tools/build/Makefile.build dir=. obj=fixdep gcc -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/.exec-cmd.o.d -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/exec-cmd.o -ggdb3 -Wall -Wextra -std=gnu99 -fPIC -O6 -Werror -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/home/chleroy/linux-powerpc/tools/include/ -Wbad-function-cast -Wdeclaration-after-statement -Wformat-security -Wformat-y2k -Winit-self -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wno-system-headers -Wold-style-definition -Wpacked -Wredundant-decls -Wstrict-prototypes -Wswitch-default -Wswitch-enum -Wundef -Wwrite-strings -Wformat -Wno-type-limits -Wstrict-aliasing=3 -Wshadow -D"BUILD_STR(s)=#s" -c -o /home/chleroy/linux-powerpc/tools/objtool/exec-cmd.o exec-cmd.c gcc -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/.help.o.d -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/help.o -ggdb3 -Wall -Wextra -std=gnu99 -fPIC -O6 -Werror -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/home/chleroy/linux-powerpc/tools/include/ -Wbad-function-cast -Wdeclaration-after-statement -Wformat-security -Wformat-y2k -Winit-self -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wno-system-headers -Wold-style-definition -Wpacked -Wredundant-decls -Wstrict-prototypes -Wswitch-default -Wswitch-enum -Wundef -Wwrite-strings -Wformat -Wno-type-limits -Wstrict-aliasing=3 -Wshadow -D"BUILD_STR(s)=#s" -c -o /home/chleroy/linux-powerpc/tools/objtool/help.o help.c gcc -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/.pager.o.d -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/pager.o -ggdb3 -Wall -Wextra -std=gnu99 -fPIC -O6 -Werror -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/home/chleroy/linux-powerpc/tools/include/ -Wbad-function-cast -Wdeclaration-after-statement -Wformat-security -Wformat-y2k -Winit-self -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wno-system-headers -Wold-style-definition -Wpacked -Wredundant-decls -Wstrict-prototypes -Wswitch-default -Wswitch-enum -Wundef -Wwrite-strings -Wformat -Wno-type-limits -Wstrict-aliasing=3 -Wshadow -D"BUILD_STR(s)=#s" -c -o /home/chleroy/linux-powerpc/tools/objtool/pager.o pager.c gcc -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/.parse-options.o.d -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/parse-options.o -ggdb3 -Wall -Wextra -std=gnu99 -fPIC -O6 -Werror -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/home/chleroy/linux-powerpc/tools/include/ -Wbad-function-cast -Wdeclaration-after-statement -Wformat-security -Wformat-y2k -Winit-self -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wno-system-headers -Wold-style-definition -Wpacked -Wredundant-decls -Wstrict-prototypes -Wswitch-default -Wswitch-enum -Wundef -Wwrite-strings -Wformat -Wno-type-limits -Wstrict-aliasing=3 -Wshadow -D"BUILD_STR(s)=#s" -c -o /home/chleroy/linux-powerpc/tools/objtool/parse-options.o parse-options.c gcc -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/.run-command.o.d -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/run-command.o -ggdb3 -Wall -Wextra -std=gnu99 -fPIC -O6 -Werror -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/home/chleroy/linux-powerpc/tools/include/ -Wbad-function-cast -Wdeclaration-after-statement -Wformat-security -Wformat-y2k -Winit-self -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wno-system-headers -Wold-style-definition -Wpacked -Wredundant-decls -Wstrict-prototypes -Wswitch-default -Wswitch-enum -Wundef -Wwrite-strings -Wformat -Wno-type-limits -Wstrict-aliasing=3 -Wshadow -D"BUILD_STR(s)=#s" -c -o /home/chleroy/linux-powerpc/tools/objtool/run-command.o run-command.c gcc -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/.sigchain.o.d -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/sigchain.o -ggdb3 -Wall -Wextra -std=gnu99 -fPIC -O6 -Werror -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/home/chleroy/linux-powerpc/tools/include/ -Wbad-function-cast -Wdeclaration-after-statement -Wformat-security -Wformat-y2k -Winit-self -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wno-system-headers -Wold-style-definition -Wpacked -Wredundant-decls -Wstrict-prototypes -Wswitch-default -Wswitch-enum -Wundef -Wwrite-strings -Wformat -Wno-type-limits -Wstrict-aliasing=3 -Wshadow -D"BUILD_STR(s)=#s" -c -o /home/chleroy/linux-powerpc/tools/objtool/sigchain.o sigchain.c ld -r -o /home/chleroy/linux-powerpc/tools/objtool/libsubcmd-in.o /home/chleroy/linux-powerpc/tools/objtool/exec-cmd.o /home/chleroy/linux-powerpc/tools/objtool/help.o /home/chleroy/linux-powerpc/tools/objtool/pager.o /home/chleroy/linux-powerpc/tools/objtool/parse-options.o /home/chleroy/linux-powerpc/tools/objtool/run-command.o /home/chleroy/linux-powerpc/tools/objtool/sigchain.o /home/chleroy/linux-powerpc/tools/objtool/subcmd-config.o rm -f /home/chleroy/linux-powerpc/tools/objtool/libsubcmd.a && ar rcs /home/chleroy/linux-powerpc/tools/objtool/libsubcmd.a /home/chleroy/linux-powerpc/tools/objtool/libsubcmd-in.o make -f /home/chleroy/linux-powerpc/tools/build/Makefile.build dir=./arch/powerpc obj=objtool gcc -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/.decode.o.d -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/decode.o -Werror -Wbad-function-cast -Wdeclaration-after-statement -Wformat-security -Wformat-y2k -Winit-self -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wno-system-headers -Wold-style-definition -Wpacked -Wredundant-decls -Wstrict-prototypes -Wswitch-default -Wswitch-enum -Wundef -Wwrite-strings -Wformat -Wno-type-limits -Wstrict-aliasing=3 -Wshadow -Wno-switch-default -Wno-switch-enum -Wno-packed -Wno-nested-externs -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu11 -Wdeclaration-after-statement -g -I/home/chleroy/linux-powerpc/tools/include -I/home/chleroy/linux-powerpc/tools/arch/x86/include/uapi -I/home/chleroy/linux-powerpc/tools/arch/powerpc/include -I/home/chleroy/linux-powerpc/tools/objtool/include -I/home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/include -I/home/chleroy/linux-powerpc/tools/lib -D"BUILD_STR(s)=#s" -c -o /home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/decode.o arch/powerpc/decode.c gcc -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/.special.o.d -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/special.o -Werror -Wbad-function-cast -Wdeclaration-after-statement -Wformat-security -Wformat-y2k -Winit-self -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wno-system-headers -Wold-style-definition -Wpacked -Wredundant-decls -Wstrict-prototypes -Wswitch-default -Wswitch-enum -Wundef -Wwrite-strings -Wformat -Wno-type-limits -Wstrict-aliasing=3 -Wshadow -Wno-switch-default -Wno-switch-enum -Wno-packed -Wno-nested-externs -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu11 -Wdeclaration-after-statement -g -I/home/chleroy/linux-powerpc/tools/include -I/home/chleroy/linux-powerpc/tools/arch/x86/include/uapi -I/home/chleroy/linux-powerpc/tools/arch/powerpc/include -I/home/chleroy/linux-powerpc/tools/objtool/include -I/home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/include -I/home/chleroy/linux-powerpc/tools/lib -D"BUILD_STR(s)=#s" -c -o /home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/special.o arch/powerpc/special.c ld -r -o /home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/objtool-in.o /home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/decode.o /home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/special.o gcc -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/.weak.o.d -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/weak.o -Werror -Wbad-function-cast -Wdeclaration-after-statement -Wformat-security -Wformat-y2k -Winit-self -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wno-system-headers -Wold-style-definition -Wpacked -Wredundant-decls -Wstrict-prototypes -Wswitch-default -Wswitch-enum -Wundef -Wwrite-strings -Wformat -Wno-type-limits -Wstrict-aliasing=3 -Wshadow -Wno-switch-default -Wno-switch-enum -Wno-packed -Wno-nested-externs -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu11 -Wdeclaration-after-statement -g -I/home/chleroy/linux-powerpc/tools/include -I/home/chleroy/linux-powerpc/tools/arch/x86/include/uapi -I/home/chleroy/linux-powerpc/tools/arch/powerpc/include -I/home/chleroy/linux-powerpc/tools/objtool/include -I/home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/include -I/home/chleroy/linux-powerpc/tools/lib -D"BUILD_STR(s)=#s" -c -o /home/chleroy/linux-powerpc/tools/objtool/weak.o weak.c gcc -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/.check.o.d -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/check.o -Werror -Wbad-function-cast -Wdeclaration-after-statement -Wformat-security -Wformat-y2k -Winit-self -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wno-system-headers -Wold-style-definition -Wpacked -Wredundant-decls -Wstrict-prototypes -Wswitch-default -Wswitch-enum -Wundef -Wwrite-strings -Wformat -Wno-type-limits -Wstrict-aliasing=3 -Wshadow -Wno-switch-default -Wno-switch-enum -Wno-packed -Wno-nested-externs -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu11 -Wdeclaration-after-statement -g -I/home/chleroy/linux-powerpc/tools/include -I/home/chleroy/linux-powerpc/tools/arch/x86/include/uapi -I/home/chleroy/linux-powerpc/tools/arch/powerpc/include -I/home/chleroy/linux-powerpc/tools/objtool/include -I/home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/include -I/home/chleroy/linux-powerpc/tools/lib -D"BUILD_STR(s)=#s" -c -o /home/chleroy/linux-powerpc/tools/objtool/check.o check.c gcc -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/.special.o.d -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/special.o -Werror -Wbad-function-cast -Wdeclaration-after-statement -Wformat-security -Wformat-y2k -Winit-self -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wno-system-headers -Wold-style-definition -Wpacked -Wredundant-decls -Wstrict-prototypes -Wswitch-default -Wswitch-enum -Wundef -Wwrite-strings -Wformat -Wno-type-limits -Wstrict-aliasing=3 -Wshadow -Wno-switch-default -Wno-switch-enum -Wno-packed -Wno-nested-externs -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu11 -Wdeclaration-after-statement -g -I/home/chleroy/linux-powerpc/tools/include -I/home/chleroy/linux-powerpc/tools/arch/x86/include/uapi -I/home/chleroy/linux-powerpc/tools/arch/powerpc/include -I/home/chleroy/linux-powerpc/tools/objtool/include -I/home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/include -I/home/chleroy/linux-powerpc/tools/lib -D"BUILD_STR(s)=#s" -c -o /home/chleroy/linux-powerpc/tools/objtool/special.o special.c gcc -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/.builtin-check.o.d -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/builtin-check.o -Werror -Wbad-function-cast -Wdeclaration-after-statement -Wformat-security -Wformat-y2k -Winit-self -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wno-system-headers -Wold-style-definition -Wpacked -Wredundant-decls -Wstrict-prototypes -Wswitch-default -Wswitch-enum -Wundef -Wwrite-strings -Wformat -Wno-type-limits -Wstrict-aliasing=3 -Wshadow -Wno-switch-default -Wno-switch-enum -Wno-packed -Wno-nested-externs -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu11 -Wdeclaration-after-statement -g -I/home/chleroy/linux-powerpc/tools/include -I/home/chleroy/linux-powerpc/tools/arch/x86/include/uapi -I/home/chleroy/linux-powerpc/tools/arch/powerpc/include -I/home/chleroy/linux-powerpc/tools/objtool/include -I/home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/include -I/home/chleroy/linux-powerpc/tools/lib -D"BUILD_STR(s)=#s" -c -o /home/chleroy/linux-powerpc/tools/objtool/builtin-check.o builtin-check.c gcc -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/.elf.o.d -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/elf.o -Werror -Wbad-function-cast -Wdeclaration-after-statement -Wformat-security -Wformat-y2k -Winit-self -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wno-system-headers -Wold-style-definition -Wpacked -Wredundant-decls -Wstrict-prototypes -Wswitch-default -Wswitch-enum -Wundef -Wwrite-strings -Wformat -Wno-type-limits -Wstrict-aliasing=3 -Wshadow -Wno-switch-default -Wno-switch-enum -Wno-packed -Wno-nested-externs -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu11 -Wdeclaration-after-statement -g -I/home/chleroy/linux-powerpc/tools/include -I/home/chleroy/linux-powerpc/tools/arch/x86/include/uapi -I/home/chleroy/linux-powerpc/tools/arch/powerpc/include -I/home/chleroy/linux-powerpc/tools/objtool/include -I/home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/include -I/home/chleroy/linux-powerpc/tools/lib -D"BUILD_STR(s)=#s" -c -o /home/chleroy/linux-powerpc/tools/objtool/elf.o elf.c gcc -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/.objtool.o.d -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/objtool.o -Werror -Wbad-function-cast -Wdeclaration-after-statement -Wformat-security -Wformat-y2k -Winit-self -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wno-system-headers -Wold-style-definition -Wpacked -Wredundant-decls -Wstrict-prototypes -Wswitch-default -Wswitch-enum -Wundef -Wwrite-strings -Wformat -Wno-type-limits -Wstrict-aliasing=3 -Wshadow -Wno-switch-default -Wno-switch-enum -Wno-packed -Wno-nested-externs -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu11 -Wdeclaration-after-statement -g -I/home/chleroy/linux-powerpc/tools/include -I/home/chleroy/linux-powerpc/tools/arch/x86/include/uapi -I/home/chleroy/linux-powerpc/tools/arch/powerpc/include -I/home/chleroy/linux-powerpc/tools/objtool/include -I/home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/include -I/home/chleroy/linux-powerpc/tools/lib -D"BUILD_STR(s)=#s" -c -o /home/chleroy/linux-powerpc/tools/objtool/objtool.o objtool.c gcc -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/.libstring.o.d -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/libstring.o -Werror -Wbad-function-cast -Wdeclaration-after-statement -Wformat-security -Wformat-y2k -Winit-self -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wno-system-headers -Wold-style-definition -Wpacked -Wredundant-decls -Wstrict-prototypes -Wswitch-default -Wswitch-enum -Wundef -Wwrite-strings -Wformat -Wno-type-limits -Wstrict-aliasing=3 -Wshadow -Wno-switch-default -Wno-switch-enum -Wno-packed -Wno-nested-externs -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu11 -Wdeclaration-after-statement -g -I/home/chleroy/linux-powerpc/tools/include -I/home/chleroy/linux-powerpc/tools/arch/x86/include/uapi -I/home/chleroy/linux-powerpc/tools/arch/powerpc/include -I/home/chleroy/linux-powerpc/tools/objtool/include -I/home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/include -I/home/chleroy/linux-powerpc/tools/lib -D"BUILD_STR(s)=#s" -c -o /home/chleroy/linux-powerpc/tools/objtool/libstring.o ../lib/string.c gcc -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/.libctype.o.d -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/libctype.o -Werror -Wbad-function-cast -Wdeclaration-after-statement -Wformat-security -Wformat-y2k -Winit-self -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wno-system-headers -Wold-style-definition -Wpacked -Wredundant-decls -Wstrict-prototypes -Wswitch-default -Wswitch-enum -Wundef -Wwrite-strings -Wformat -Wno-type-limits -Wstrict-aliasing=3 -Wshadow -Wno-switch-default -Wno-switch-enum -Wno-packed -Wno-nested-externs -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu11 -Wdeclaration-after-statement -g -I/home/chleroy/linux-powerpc/tools/include -I/home/chleroy/linux-powerpc/tools/arch/x86/include/uapi -I/home/chleroy/linux-powerpc/tools/arch/powerpc/include -I/home/chleroy/linux-powerpc/tools/objtool/include -I/home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/include -I/home/chleroy/linux-powerpc/tools/lib -D"BUILD_STR(s)=#s" -c -o /home/chleroy/linux-powerpc/tools/objtool/libctype.o ../lib/ctype.c gcc -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/.str_error_r.o.d -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/str_error_r.o -Werror -Wbad-function-cast -Wdeclaration-after-statement -Wformat-security -Wformat-y2k -Winit-self -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wno-system-headers -Wold-style-definition -Wpacked -Wredundant-decls -Wstrict-prototypes -Wswitch-default -Wswitch-enum -Wundef -Wwrite-strings -Wformat -Wno-type-limits -Wstrict-aliasing=3 -Wshadow -Wno-switch-default -Wno-switch-enum -Wno-packed -Wno-nested-externs -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu11 -Wdeclaration-after-statement -g -I/home/chleroy/linux-powerpc/tools/include -I/home/chleroy/linux-powerpc/tools/arch/x86/include/uapi -I/home/chleroy/linux-powerpc/tools/arch/powerpc/include -I/home/chleroy/linux-powerpc/tools/objtool/include -I/home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/include -I/home/chleroy/linux-powerpc/tools/lib -D"BUILD_STR(s)=#s" -c -o /home/chleroy/linux-powerpc/tools/objtool/str_error_r.o ../lib/str_error_r.c gcc -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/.librbtree.o.d -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/librbtree.o -Werror -Wbad-function-cast -Wdeclaration-after-statement -Wformat-security -Wformat-y2k -Winit-self -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wno-system-headers -Wold-style-definition -Wpacked -Wredundant-decls -Wstrict-prototypes -Wswitch-default -Wswitch-enum -Wundef -Wwrite-strings -Wformat -Wno-type-limits -Wstrict-aliasing=3 -Wshadow -Wno-switch-default -Wno-switch-enum -Wno-packed -Wno-nested-externs -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu11 -Wdeclaration-after-statement -g -I/home/chleroy/linux-powerpc/tools/include -I/home/chleroy/linux-powerpc/tools/arch/x86/include/uapi -I/home/chleroy/linux-powerpc/tools/arch/powerpc/include -I/home/chleroy/linux-powerpc/tools/objtool/include -I/home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/include -I/home/chleroy/linux-powerpc/tools/lib -D"BUILD_STR(s)=#s" -c -o /home/chleroy/linux-powerpc/tools/objtool/librbtree.o ../lib/rbtree.c ld -r -o /home/chleroy/linux-powerpc/tools/objtool/objtool-in.o /home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/objtool-in.o /home/chleroy/linux-powerpc/tools/objtool/weak.o /home/chleroy/linux-powerpc/tools/objtool/check.o /home/chleroy/linux-powerpc/tools/objtool/special.o /home/chleroy/linux-powerpc/tools/objtool/builtin-check.o /home/chleroy/linux-powerpc/tools/objtool/elf.o /home/chleroy/linux-powerpc/tools/objtool/objtool.o /home/chleroy/linux-powerpc/tools/objtool/libstring.o /home/chleroy/linux-powerpc/tools/objtool/libctype.o /home/chleroy/linux-powerpc/tools/objtool/str_error_r.o /home/chleroy/linux-powerpc/tools/objtool/librbtree.o gcc /home/chleroy/linux-powerpc/tools/objtool/objtool-in.o -lelf /home/chleroy/linux-powerpc/tools/objtool/libsubcmd.a -o /home/chleroy/linux-powerpc/tools/objtool/objtool ... make -f ./scripts/Makefile.build obj=. need-builtin=1 need-modorder=1 make -f ./scripts/Makefile.build obj=init \ need-builtin=1 \ need-modorder=1 \ powerpc64-linux-gcc -Wp,-MMD,init/.main.o.d -nostdinc -I./arch/powerpc/include -I./arch/powerpc/include/generated -I./include -I./arch/powerpc/include/uapi -I./arch/powerpc/include/generated/uapi -I./include/uapi -I./include/generated/uapi -include ./include/linux/compiler-version.h -include ./include/linux/kconfig.h -include ./include/linux/compiler_types.h -D__KERNEL__ -I ./arch/powerpc -fmacro-prefix-map=./= -Wall -Wundef -Werror=strict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Wno-format-security -funsigned-char -std=gnu11 -mbig-endian -m32 -msoft-float -pipe -ffixed-r2 -mmultiple -mno-readonly-in-sdata -mcpu=powerpc -mno-prefixed -mno-pcrel -mno-altivec -mno-vsx -mno-mma -fno-asynchronous-unwind-tables -mno-string -Wa,-maltivec -mbig-endian -mstack-protector-guard=tls -mstack-protector-guard-reg=r2 -fno-delete-null-pointer-checks -Wno-frame-address -Wno-format-truncation -Wno-format-overflow -Wno-address-of-packed-member -O2 -fno-allow-store-data-races -Wframe-larger-than=1024 -fstack-protector-strong -Wno-main -Wno-unused-but-set-variable -Wno-unused-const-variable -Wno-dangling-pointer -ftrivial-auto-var-init=zero -fno-stack-clash-protection -pg -Wdeclaration-after-statement -Wvla -Wno-pointer-sign -Wcast-function-type -Wno-stringop-truncation -Wno-stringop-overflow -Wno-restrict -Wno-maybe-uninitialized -Wno-array-bounds -Wno-alloc-size-larger-than -Wimplicit-fallthrough=5 -fno-strict-overflow -fno-stack-check -fconserve-stack -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -Wno-packed-not-aligned -mstack-protector-guard-offset=544 -fno-function-sections -fno-data-sections -DKBUILD_MODFILE='"init/main"' -DKBUILD_BASENAME='"main"' -DKBUILD_MODNAME='"main"' -D__KBUILD_MODNAME=kmod_main -c -o init/main.o init/main.c ; ./tools/objtool/objtool --mcount init/main.o ./scripts/check-local-export init/main.o { echo ; echo 'init/main.o: $(wildcard ./tools/objtool/objtool)' ; } >> init/.main.o.cmd set -e; mkdir -p init/; trap "rm -f init/.utsversion-tmp.h.tmp" EXIT; { utsver=$(echo '#'"" "" | cut -b -64); echo '#'define UTS_VERSION \""${utsver}"\"; } > init/.utsversion-tmp.h.tmp; if [ ! -r init/utsversion-tmp.h ] || ! cmp -s init/utsversion-tmp.h init/.utsversion-tmp.h.tmp; then : ' UPD init/utsversion-tmp.h'; mv -f init/.utsversion-tmp.h.tmp init/utsversion-tmp.h; fi powerpc64-linux-gcc -Wp,-MMD,init/.version.o.d -nostdinc -I./arch/powerpc/include -I./arch/powerpc/include/generated -I./include -I./arch/powerpc/include/uapi -I./arch/powerpc/include/generated/uapi -I./include/uapi -I./include/generated/uapi -include ./include/linux/compiler-version.h -include ./include/linux/kconfig.h -include ./include/linux/compiler_types.h -D__KERNEL__ -I ./arch/powerpc -fmacro-prefix-map=./= -Wall -Wundef -Werror=strict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Wno-format-security -funsigned-char -std=gnu11 -mbig-endian -m32 -msoft-float -pipe -ffixed-r2 -mmultiple -mno-readonly-in-sdata -mcpu=powerpc -mno-prefixed -mno-pcrel -mno-altivec -mno-vsx -mno-mma -fno-asynchronous-unwind-tables -mno-string -Wa,-maltivec -mbig-endian -mstack-protector-guard=tls -mstack-protector-guard-reg=r2 -fno-delete-null-pointer-checks -Wno-frame-address -Wno-format-truncation -Wno-format-overflow -Wno-address-of-packed-member -O2 -fno-allow-store-data-races -Wframe-larger-than=1024 -fstack-protector-strong -Wno-main -Wno-unused-but-set-variable -Wno-unused-const-variable -Wno-dangling-pointer -ftrivial-auto-var-init=zero -fno-stack-clash-protection -pg -Wdeclaration-after-statement -Wvla -Wno-pointer-sign -Wcast-function-type -Wno-stringop-truncation -Wno-stringop-overflow -Wno-restrict -Wno-maybe-uninitialized -Wno-array-bounds -Wno-alloc-size-larger-than -Wimplicit-fallthrough=5 -fno-strict-overflow -fno-stack-check -fconserve-stack -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -Wno-packed-not-aligned -mstack-protector-guard-offset=544 -fno-function-sections -fno-data-sections -include init/utsversion-tmp.h -DKBUILD_MODFILE='"init/version"' -DKBUILD_BASENAME='"version"' -DKBUILD_MODNAME='"version"' -D__KBUILD_MODNAME=kmod_version -c -o init/version.o init/version.c ; ./tools/objtool/objtool --mcount init/version.o ./scripts/check-local-export init/version.o { echo ; echo 'init/version.o: $(wildcard ./tools/objtool/objtool)' ; } >> init/.version.o.cmd ...
Le 04/02/2023 à 12:55, Christophe Leroy a écrit : > Hi, > > Le 04/02/2023 à 09:30, Randy Dunlap a écrit : >> >> >> On 2/4/23 00:21, Randy Dunlap wrote: >>> >>> >>> On 2/4/23 00:19, Randy Dunlap wrote: >>>> Hi-- >>>> >>>> On 8/29/22 23:41, Christophe Leroy wrote: >>>>> >>>>> >>>>> Le 29/08/2022 à 07:52, Sathvika Vasireddy a écrit : >>>>>> This patch adds [stub] implementations for required >>>>>> functions, inorder to enable objtool build on powerpc. >>>>> >>>>> Not all powerpc it seems, see below >>>>> >>>> >>>> When cross-compiling PPC32 (on x86_64), I get 3600+ of these: >>>> >>>> /bin/sh: line 1: ./tools/objtool/objtool: No such file or directory >>>> /bin/sh: line 1: ./tools/objtool/objtool: No such file or directory >>>> /bin/sh: line 1: ./tools/objtool/objtool: No such file or directory >>>> >>>> Is there some way that objtool should work when cross-compiling? >>>> >>> >>> Oops. Its build failed. I seem to be missing header file(s) >>> and possibly a library. >>> I'll check on those... >>> >> >> It's complaining about libelf.h but I have that, so I don't know where >> it is looking other than /usr/include/libelf.h, which exists. >> Maybe the tool isn't setup (ready) for cross-compiling? >> >> >> Here's the build output for objtool: >> >> <stdin>:1:10: fatal error: libelf.h: No such file or directory >> compilation terminated. >> elf.c: In function ‘read_sections’: >> elf.c:273:9: error: ‘elf_getshnum’ is deprecated >> [-Werror=deprecated-declarations] >> 273 | if (elf_getshdrnum(elf->elf, §ions_nr)) { >> | ^~ >> In file included from /usr/include/gelf.h:32, >> from >> /work/lnx/next/linux-next-20230203/tools/objtool/include/objtool/elf.h:10, >> from elf.c:22: >> /usr/include/libelf.h:310:12: note: declared here >> 310 | extern int elf_getshnum (Elf *__elf, size_t *__dst) >> | ^~~~~~~~~~~~ >> elf.c:278:9: error: ‘elf_getshstrndx’ is deprecated >> [-Werror=deprecated-declarations] >> 278 | if (elf_getshdrstrndx(elf->elf, &shstrndx)) { >> | ^~ >> /usr/include/libelf.h:322:12: note: declared here >> 322 | extern int elf_getshstrndx (Elf *__elf, size_t *__dst) >> | ^~~~~~~~~~~~~~~ >> cc1: all warnings being treated as errors >> make[4]: *** >> [/work/lnx/next/linux-next-20230203/tools/build/Makefile.build:96: >> /work/lnx/next/linux-next-20230203/PPC32/tools/objtool/elf.o] Error 1 >> >> make[3]: *** [Makefile:66: >> /work/lnx/next/linux-next-20230203/PPC32/tools/objtool/objtool-in.o] >> Error 2 > > I have no problem crossbuilding for PPC32 from x86_64, I have a fedora > 36 on the x86. > > $ rpm -q -f /usr/include/libelf.h > elfutils-libelf-devel-0.187-4.fc36.x86_64 > > Here is build output with V=1, pmac32_defconfig + CONFIG_FUNCTION_TRACER=y > > ... > mkdir -p ./tools > make LDFLAGS= MAKEFLAGS=" " O=/home/chleroy/linux-powerpc subdir=tools > -C ./tools/ objtool > mkdir -p /home/chleroy/linux-powerpc/tools/objtool && make > O=/home/chleroy/linux-powerpc subdir=tools/objtool --no-print-directory > -C objtool > make -C /home/chleroy/linux-powerpc/tools/build CFLAGS= LDFLAGS= > /home/chleroy/linux-powerpc/tools/objtool/fixdep > make -f /home/chleroy/linux-powerpc/tools/build/Makefile.build dir=. > obj=fixdep > gcc -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/.fixdep.o.d > -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/fixdep.o > -D"BUILD_STR(s)=#s" -c -o > /home/chleroy/linux-powerpc/tools/objtool/fixdep.o fixdep.c > ld -r -o /home/chleroy/linux-powerpc/tools/objtool/fixdep-in.o > /home/chleroy/linux-powerpc/tools/objtool/fixdep.o > gcc -o /home/chleroy/linux-powerpc/tools/objtool/fixdep > /home/chleroy/linux-powerpc/tools/objtool/fixdep-in.o > make -C /home/chleroy/linux-powerpc/tools/lib/subcmd/ > OUTPUT=/home/chleroy/linux-powerpc/tools/objtool/ > make -C /home/chleroy/linux-powerpc/tools/build CFLAGS= LDFLAGS= > /home/chleroy/linux-powerpc/tools/objtool/fixdep > make -f /home/chleroy/linux-powerpc/tools/build/Makefile.build dir=. > obj=fixdep > gcc -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/.exec-cmd.o.d > -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/exec-cmd.o -ggdb3 > -Wall -Wextra -std=gnu99 -fPIC -O6 -Werror -D_LARGEFILE64_SOURCE > -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE > -I/home/chleroy/linux-powerpc/tools/include/ -Wbad-function-cast > -Wdeclaration-after-statement -Wformat-security -Wformat-y2k -Winit-self > -Wmissing-declarations -Wmissing-prototypes -Wnested-externs > -Wno-system-headers -Wold-style-definition -Wpacked -Wredundant-decls > -Wstrict-prototypes -Wswitch-default -Wswitch-enum -Wundef > -Wwrite-strings -Wformat -Wno-type-limits -Wstrict-aliasing=3 -Wshadow > -D"BUILD_STR(s)=#s" -c -o > /home/chleroy/linux-powerpc/tools/objtool/exec-cmd.o exec-cmd.c > gcc -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/.help.o.d > -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/help.o -ggdb3 -Wall > -Wextra -std=gnu99 -fPIC -O6 -Werror -D_LARGEFILE64_SOURCE > -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE > -I/home/chleroy/linux-powerpc/tools/include/ -Wbad-function-cast > -Wdeclaration-after-statement -Wformat-security -Wformat-y2k -Winit-self > -Wmissing-declarations -Wmissing-prototypes -Wnested-externs > -Wno-system-headers -Wold-style-definition -Wpacked -Wredundant-decls > -Wstrict-prototypes -Wswitch-default -Wswitch-enum -Wundef > -Wwrite-strings -Wformat -Wno-type-limits -Wstrict-aliasing=3 -Wshadow > -D"BUILD_STR(s)=#s" -c -o > /home/chleroy/linux-powerpc/tools/objtool/help.o help.c > gcc -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/.pager.o.d > -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/pager.o -ggdb3 -Wall > -Wextra -std=gnu99 -fPIC -O6 -Werror -D_LARGEFILE64_SOURCE > -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE > -I/home/chleroy/linux-powerpc/tools/include/ -Wbad-function-cast > -Wdeclaration-after-statement -Wformat-security -Wformat-y2k -Winit-self > -Wmissing-declarations -Wmissing-prototypes -Wnested-externs > -Wno-system-headers -Wold-style-definition -Wpacked -Wredundant-decls > -Wstrict-prototypes -Wswitch-default -Wswitch-enum -Wundef > -Wwrite-strings -Wformat -Wno-type-limits -Wstrict-aliasing=3 -Wshadow > -D"BUILD_STR(s)=#s" -c -o > /home/chleroy/linux-powerpc/tools/objtool/pager.o pager.c > gcc > -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/.parse-options.o.d > -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/parse-options.o -ggdb3 > -Wall -Wextra -std=gnu99 -fPIC -O6 -Werror -D_LARGEFILE64_SOURCE > -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE > -I/home/chleroy/linux-powerpc/tools/include/ -Wbad-function-cast > -Wdeclaration-after-statement -Wformat-security -Wformat-y2k -Winit-self > -Wmissing-declarations -Wmissing-prototypes -Wnested-externs > -Wno-system-headers -Wold-style-definition -Wpacked -Wredundant-decls > -Wstrict-prototypes -Wswitch-default -Wswitch-enum -Wundef > -Wwrite-strings -Wformat -Wno-type-limits -Wstrict-aliasing=3 -Wshadow > -D"BUILD_STR(s)=#s" -c -o > /home/chleroy/linux-powerpc/tools/objtool/parse-options.o parse-options.c > gcc > -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/.run-command.o.d > -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/run-command.o -ggdb3 > -Wall -Wextra -std=gnu99 -fPIC -O6 -Werror -D_LARGEFILE64_SOURCE > -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE > -I/home/chleroy/linux-powerpc/tools/include/ -Wbad-function-cast > -Wdeclaration-after-statement -Wformat-security -Wformat-y2k -Winit-self > -Wmissing-declarations -Wmissing-prototypes -Wnested-externs > -Wno-system-headers -Wold-style-definition -Wpacked -Wredundant-decls > -Wstrict-prototypes -Wswitch-default -Wswitch-enum -Wundef > -Wwrite-strings -Wformat -Wno-type-limits -Wstrict-aliasing=3 -Wshadow > -D"BUILD_STR(s)=#s" -c -o > /home/chleroy/linux-powerpc/tools/objtool/run-command.o run-command.c > gcc -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/.sigchain.o.d > -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/sigchain.o -ggdb3 > -Wall -Wextra -std=gnu99 -fPIC -O6 -Werror -D_LARGEFILE64_SOURCE > -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE > -I/home/chleroy/linux-powerpc/tools/include/ -Wbad-function-cast > -Wdeclaration-after-statement -Wformat-security -Wformat-y2k -Winit-self > -Wmissing-declarations -Wmissing-prototypes -Wnested-externs > -Wno-system-headers -Wold-style-definition -Wpacked -Wredundant-decls > -Wstrict-prototypes -Wswitch-default -Wswitch-enum -Wundef > -Wwrite-strings -Wformat -Wno-type-limits -Wstrict-aliasing=3 -Wshadow > -D"BUILD_STR(s)=#s" -c -o > /home/chleroy/linux-powerpc/tools/objtool/sigchain.o sigchain.c > ld -r -o /home/chleroy/linux-powerpc/tools/objtool/libsubcmd-in.o > /home/chleroy/linux-powerpc/tools/objtool/exec-cmd.o > /home/chleroy/linux-powerpc/tools/objtool/help.o > /home/chleroy/linux-powerpc/tools/objtool/pager.o > /home/chleroy/linux-powerpc/tools/objtool/parse-options.o > /home/chleroy/linux-powerpc/tools/objtool/run-command.o > /home/chleroy/linux-powerpc/tools/objtool/sigchain.o > /home/chleroy/linux-powerpc/tools/objtool/subcmd-config.o > rm -f /home/chleroy/linux-powerpc/tools/objtool/libsubcmd.a && ar rcs > /home/chleroy/linux-powerpc/tools/objtool/libsubcmd.a > /home/chleroy/linux-powerpc/tools/objtool/libsubcmd-in.o > make -f /home/chleroy/linux-powerpc/tools/build/Makefile.build > dir=./arch/powerpc obj=objtool > gcc > -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/.decode.o.d -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/decode.o -Werror -Wbad-function-cast -Wdeclaration-after-statement -Wformat-security -Wformat-y2k -Winit-self -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wno-system-headers -Wold-style-definition -Wpacked -Wredundant-decls -Wstrict-prototypes -Wswitch-default -Wswitch-enum -Wundef -Wwrite-strings -Wformat -Wno-type-limits -Wstrict-aliasing=3 -Wshadow -Wno-switch-default -Wno-switch-enum -Wno-packed -Wno-nested-externs -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu11 -Wdeclaration-after-statement -g -I/home/chleroy/linux-powerpc/tools/include -I/home/chleroy/linux-powerpc/tools/arch/x86/include/uapi -I/home/chleroy/linux-powerpc/tools/arch/powerpc/include -I/home/chleroy/linux-powerpc/tools/objtool/include -I/home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/include -I/home/chleroy/linux-powerpc/tools/lib -D"BUILD_STR(s)=#s" -c -o /home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/decode.o arch/powerpc/decode.c > gcc > -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/.special.o.d -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/special.o -Werror -Wbad-function-cast -Wdeclaration-after-statement -Wformat-security -Wformat-y2k -Winit-self -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wno-system-headers -Wold-style-definition -Wpacked -Wredundant-decls -Wstrict-prototypes -Wswitch-default -Wswitch-enum -Wundef -Wwrite-strings -Wformat -Wno-type-limits -Wstrict-aliasing=3 -Wshadow -Wno-switch-default -Wno-switch-enum -Wno-packed -Wno-nested-externs -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu11 -Wdeclaration-after-statement -g -I/home/chleroy/linux-powerpc/tools/include -I/home/chleroy/linux-powerpc/tools/arch/x86/include/uapi -I/home/chleroy/linux-powerpc/tools/arch/powerpc/include -I/home/chleroy/linux-powerpc/tools/objtool/include -I/home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/include -I/home/chleroy/linux-powerpc/tools/lib -D"BUILD_STR(s)=#s" -c -o /home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/special.o arch/powerpc/special.c > ld -r -o > /home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/objtool-in.o > /home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/decode.o > /home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/special.o > gcc -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/.weak.o.d > -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/weak.o -Werror > -Wbad-function-cast -Wdeclaration-after-statement -Wformat-security > -Wformat-y2k -Winit-self -Wmissing-declarations -Wmissing-prototypes > -Wnested-externs -Wno-system-headers -Wold-style-definition -Wpacked > -Wredundant-decls -Wstrict-prototypes -Wswitch-default -Wswitch-enum > -Wundef -Wwrite-strings -Wformat -Wno-type-limits -Wstrict-aliasing=3 > -Wshadow -Wno-switch-default -Wno-switch-enum -Wno-packed > -Wno-nested-externs -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 > -fomit-frame-pointer -std=gnu11 -Wdeclaration-after-statement -g > -I/home/chleroy/linux-powerpc/tools/include > -I/home/chleroy/linux-powerpc/tools/arch/x86/include/uapi > -I/home/chleroy/linux-powerpc/tools/arch/powerpc/include > -I/home/chleroy/linux-powerpc/tools/objtool/include > -I/home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/include > -I/home/chleroy/linux-powerpc/tools/lib -D"BUILD_STR(s)=#s" -c -o > /home/chleroy/linux-powerpc/tools/objtool/weak.o weak.c > gcc -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/.check.o.d > -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/check.o -Werror > -Wbad-function-cast -Wdeclaration-after-statement -Wformat-security > -Wformat-y2k -Winit-self -Wmissing-declarations -Wmissing-prototypes > -Wnested-externs -Wno-system-headers -Wold-style-definition -Wpacked > -Wredundant-decls -Wstrict-prototypes -Wswitch-default -Wswitch-enum > -Wundef -Wwrite-strings -Wformat -Wno-type-limits -Wstrict-aliasing=3 > -Wshadow -Wno-switch-default -Wno-switch-enum -Wno-packed > -Wno-nested-externs -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 > -fomit-frame-pointer -std=gnu11 -Wdeclaration-after-statement -g > -I/home/chleroy/linux-powerpc/tools/include > -I/home/chleroy/linux-powerpc/tools/arch/x86/include/uapi > -I/home/chleroy/linux-powerpc/tools/arch/powerpc/include > -I/home/chleroy/linux-powerpc/tools/objtool/include > -I/home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/include > -I/home/chleroy/linux-powerpc/tools/lib -D"BUILD_STR(s)=#s" -c -o > /home/chleroy/linux-powerpc/tools/objtool/check.o check.c > gcc -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/.special.o.d > -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/special.o -Werror > -Wbad-function-cast -Wdeclaration-after-statement -Wformat-security > -Wformat-y2k -Winit-self -Wmissing-declarations -Wmissing-prototypes > -Wnested-externs -Wno-system-headers -Wold-style-definition -Wpacked > -Wredundant-decls -Wstrict-prototypes -Wswitch-default -Wswitch-enum > -Wundef -Wwrite-strings -Wformat -Wno-type-limits -Wstrict-aliasing=3 > -Wshadow -Wno-switch-default -Wno-switch-enum -Wno-packed > -Wno-nested-externs -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 > -fomit-frame-pointer -std=gnu11 -Wdeclaration-after-statement -g > -I/home/chleroy/linux-powerpc/tools/include > -I/home/chleroy/linux-powerpc/tools/arch/x86/include/uapi > -I/home/chleroy/linux-powerpc/tools/arch/powerpc/include > -I/home/chleroy/linux-powerpc/tools/objtool/include > -I/home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/include > -I/home/chleroy/linux-powerpc/tools/lib -D"BUILD_STR(s)=#s" -c -o > /home/chleroy/linux-powerpc/tools/objtool/special.o special.c > gcc > -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/.builtin-check.o.d > -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/builtin-check.o > -Werror -Wbad-function-cast -Wdeclaration-after-statement > -Wformat-security -Wformat-y2k -Winit-self -Wmissing-declarations > -Wmissing-prototypes -Wnested-externs -Wno-system-headers > -Wold-style-definition -Wpacked -Wredundant-decls -Wstrict-prototypes > -Wswitch-default -Wswitch-enum -Wundef -Wwrite-strings -Wformat > -Wno-type-limits -Wstrict-aliasing=3 -Wshadow -Wno-switch-default > -Wno-switch-enum -Wno-packed -Wno-nested-externs -Wall > -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer > -std=gnu11 -Wdeclaration-after-statement -g > -I/home/chleroy/linux-powerpc/tools/include > -I/home/chleroy/linux-powerpc/tools/arch/x86/include/uapi > -I/home/chleroy/linux-powerpc/tools/arch/powerpc/include > -I/home/chleroy/linux-powerpc/tools/objtool/include > -I/home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/include > -I/home/chleroy/linux-powerpc/tools/lib -D"BUILD_STR(s)=#s" -c -o > /home/chleroy/linux-powerpc/tools/objtool/builtin-check.o builtin-check.c > gcc -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/.elf.o.d > -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/elf.o -Werror > -Wbad-function-cast -Wdeclaration-after-statement -Wformat-security > -Wformat-y2k -Winit-self -Wmissing-declarations -Wmissing-prototypes > -Wnested-externs -Wno-system-headers -Wold-style-definition -Wpacked > -Wredundant-decls -Wstrict-prototypes -Wswitch-default -Wswitch-enum > -Wundef -Wwrite-strings -Wformat -Wno-type-limits -Wstrict-aliasing=3 > -Wshadow -Wno-switch-default -Wno-switch-enum -Wno-packed > -Wno-nested-externs -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 > -fomit-frame-pointer -std=gnu11 -Wdeclaration-after-statement -g > -I/home/chleroy/linux-powerpc/tools/include > -I/home/chleroy/linux-powerpc/tools/arch/x86/include/uapi > -I/home/chleroy/linux-powerpc/tools/arch/powerpc/include > -I/home/chleroy/linux-powerpc/tools/objtool/include > -I/home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/include > -I/home/chleroy/linux-powerpc/tools/lib -D"BUILD_STR(s)=#s" -c -o > /home/chleroy/linux-powerpc/tools/objtool/elf.o elf.c > gcc -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/.objtool.o.d > -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/objtool.o -Werror > -Wbad-function-cast -Wdeclaration-after-statement -Wformat-security > -Wformat-y2k -Winit-self -Wmissing-declarations -Wmissing-prototypes > -Wnested-externs -Wno-system-headers -Wold-style-definition -Wpacked > -Wredundant-decls -Wstrict-prototypes -Wswitch-default -Wswitch-enum > -Wundef -Wwrite-strings -Wformat -Wno-type-limits -Wstrict-aliasing=3 > -Wshadow -Wno-switch-default -Wno-switch-enum -Wno-packed > -Wno-nested-externs -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 > -fomit-frame-pointer -std=gnu11 -Wdeclaration-after-statement -g > -I/home/chleroy/linux-powerpc/tools/include > -I/home/chleroy/linux-powerpc/tools/arch/x86/include/uapi > -I/home/chleroy/linux-powerpc/tools/arch/powerpc/include > -I/home/chleroy/linux-powerpc/tools/objtool/include > -I/home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/include > -I/home/chleroy/linux-powerpc/tools/lib -D"BUILD_STR(s)=#s" -c -o > /home/chleroy/linux-powerpc/tools/objtool/objtool.o objtool.c > gcc -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/.libstring.o.d > -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/libstring.o -Werror > -Wbad-function-cast -Wdeclaration-after-statement -Wformat-security > -Wformat-y2k -Winit-self -Wmissing-declarations -Wmissing-prototypes > -Wnested-externs -Wno-system-headers -Wold-style-definition -Wpacked > -Wredundant-decls -Wstrict-prototypes -Wswitch-default -Wswitch-enum > -Wundef -Wwrite-strings -Wformat -Wno-type-limits -Wstrict-aliasing=3 > -Wshadow -Wno-switch-default -Wno-switch-enum -Wno-packed > -Wno-nested-externs -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 > -fomit-frame-pointer -std=gnu11 -Wdeclaration-after-statement -g > -I/home/chleroy/linux-powerpc/tools/include > -I/home/chleroy/linux-powerpc/tools/arch/x86/include/uapi > -I/home/chleroy/linux-powerpc/tools/arch/powerpc/include > -I/home/chleroy/linux-powerpc/tools/objtool/include > -I/home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/include > -I/home/chleroy/linux-powerpc/tools/lib -D"BUILD_STR(s)=#s" -c -o > /home/chleroy/linux-powerpc/tools/objtool/libstring.o ../lib/string.c > gcc -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/.libctype.o.d > -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/libctype.o -Werror > -Wbad-function-cast -Wdeclaration-after-statement -Wformat-security > -Wformat-y2k -Winit-self -Wmissing-declarations -Wmissing-prototypes > -Wnested-externs -Wno-system-headers -Wold-style-definition -Wpacked > -Wredundant-decls -Wstrict-prototypes -Wswitch-default -Wswitch-enum > -Wundef -Wwrite-strings -Wformat -Wno-type-limits -Wstrict-aliasing=3 > -Wshadow -Wno-switch-default -Wno-switch-enum -Wno-packed > -Wno-nested-externs -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 > -fomit-frame-pointer -std=gnu11 -Wdeclaration-after-statement -g > -I/home/chleroy/linux-powerpc/tools/include > -I/home/chleroy/linux-powerpc/tools/arch/x86/include/uapi > -I/home/chleroy/linux-powerpc/tools/arch/powerpc/include > -I/home/chleroy/linux-powerpc/tools/objtool/include > -I/home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/include > -I/home/chleroy/linux-powerpc/tools/lib -D"BUILD_STR(s)=#s" -c -o > /home/chleroy/linux-powerpc/tools/objtool/libctype.o ../lib/ctype.c > gcc > -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/.str_error_r.o.d > -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/str_error_r.o -Werror > -Wbad-function-cast -Wdeclaration-after-statement -Wformat-security > -Wformat-y2k -Winit-self -Wmissing-declarations -Wmissing-prototypes > -Wnested-externs -Wno-system-headers -Wold-style-definition -Wpacked > -Wredundant-decls -Wstrict-prototypes -Wswitch-default -Wswitch-enum > -Wundef -Wwrite-strings -Wformat -Wno-type-limits -Wstrict-aliasing=3 > -Wshadow -Wno-switch-default -Wno-switch-enum -Wno-packed > -Wno-nested-externs -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 > -fomit-frame-pointer -std=gnu11 -Wdeclaration-after-statement -g > -I/home/chleroy/linux-powerpc/tools/include > -I/home/chleroy/linux-powerpc/tools/arch/x86/include/uapi > -I/home/chleroy/linux-powerpc/tools/arch/powerpc/include > -I/home/chleroy/linux-powerpc/tools/objtool/include > -I/home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/include > -I/home/chleroy/linux-powerpc/tools/lib -D"BUILD_STR(s)=#s" -c -o > /home/chleroy/linux-powerpc/tools/objtool/str_error_r.o > ../lib/str_error_r.c > gcc -Wp,-MD,/home/chleroy/linux-powerpc/tools/objtool/.librbtree.o.d > -Wp,-MT,/home/chleroy/linux-powerpc/tools/objtool/librbtree.o -Werror > -Wbad-function-cast -Wdeclaration-after-statement -Wformat-security > -Wformat-y2k -Winit-self -Wmissing-declarations -Wmissing-prototypes > -Wnested-externs -Wno-system-headers -Wold-style-definition -Wpacked > -Wredundant-decls -Wstrict-prototypes -Wswitch-default -Wswitch-enum > -Wundef -Wwrite-strings -Wformat -Wno-type-limits -Wstrict-aliasing=3 > -Wshadow -Wno-switch-default -Wno-switch-enum -Wno-packed > -Wno-nested-externs -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 > -fomit-frame-pointer -std=gnu11 -Wdeclaration-after-statement -g > -I/home/chleroy/linux-powerpc/tools/include > -I/home/chleroy/linux-powerpc/tools/arch/x86/include/uapi > -I/home/chleroy/linux-powerpc/tools/arch/powerpc/include > -I/home/chleroy/linux-powerpc/tools/objtool/include > -I/home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/include > -I/home/chleroy/linux-powerpc/tools/lib -D"BUILD_STR(s)=#s" -c -o > /home/chleroy/linux-powerpc/tools/objtool/librbtree.o ../lib/rbtree.c > ld -r -o /home/chleroy/linux-powerpc/tools/objtool/objtool-in.o > /home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/objtool-in.o > /home/chleroy/linux-powerpc/tools/objtool/weak.o > /home/chleroy/linux-powerpc/tools/objtool/check.o > /home/chleroy/linux-powerpc/tools/objtool/special.o > /home/chleroy/linux-powerpc/tools/objtool/builtin-check.o > /home/chleroy/linux-powerpc/tools/objtool/elf.o > /home/chleroy/linux-powerpc/tools/objtool/objtool.o > /home/chleroy/linux-powerpc/tools/objtool/libstring.o > /home/chleroy/linux-powerpc/tools/objtool/libctype.o > /home/chleroy/linux-powerpc/tools/objtool/str_error_r.o > /home/chleroy/linux-powerpc/tools/objtool/librbtree.o > gcc /home/chleroy/linux-powerpc/tools/objtool/objtool-in.o -lelf > /home/chleroy/linux-powerpc/tools/objtool/libsubcmd.a -o > /home/chleroy/linux-powerpc/tools/objtool/objtool > ... > make -f ./scripts/Makefile.build obj=. need-builtin=1 need-modorder=1 > make -f ./scripts/Makefile.build obj=init \ > need-builtin=1 \ > need-modorder=1 \ > > powerpc64-linux-gcc -Wp,-MMD,init/.main.o.d -nostdinc > -I./arch/powerpc/include -I./arch/powerpc/include/generated -I./include > -I./arch/powerpc/include/uapi -I./arch/powerpc/include/generated/uapi > -I./include/uapi -I./include/generated/uapi -include > ./include/linux/compiler-version.h -include ./include/linux/kconfig.h > -include ./include/linux/compiler_types.h -D__KERNEL__ -I ./arch/powerpc > -fmacro-prefix-map=./= -Wall -Wundef -Werror=strict-prototypes > -Wno-trigraphs -fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE > -Werror=implicit-function-declaration -Werror=implicit-int > -Werror=return-type -Wno-format-security -funsigned-char -std=gnu11 > -mbig-endian -m32 -msoft-float -pipe -ffixed-r2 -mmultiple > -mno-readonly-in-sdata -mcpu=powerpc -mno-prefixed -mno-pcrel > -mno-altivec -mno-vsx -mno-mma -fno-asynchronous-unwind-tables > -mno-string -Wa,-maltivec -mbig-endian -mstack-protector-guard=tls > -mstack-protector-guard-reg=r2 -fno-delete-null-pointer-checks > -Wno-frame-address -Wno-format-truncation -Wno-format-overflow > -Wno-address-of-packed-member -O2 -fno-allow-store-data-races > -Wframe-larger-than=1024 -fstack-protector-strong -Wno-main > -Wno-unused-but-set-variable -Wno-unused-const-variable > -Wno-dangling-pointer -ftrivial-auto-var-init=zero > -fno-stack-clash-protection -pg -Wdeclaration-after-statement -Wvla > -Wno-pointer-sign -Wcast-function-type -Wno-stringop-truncation > -Wno-stringop-overflow -Wno-restrict -Wno-maybe-uninitialized > -Wno-array-bounds -Wno-alloc-size-larger-than -Wimplicit-fallthrough=5 > -fno-strict-overflow -fno-stack-check -fconserve-stack -Werror=date-time > -Werror=incompatible-pointer-types -Werror=designated-init > -Wno-packed-not-aligned -mstack-protector-guard-offset=544 > -fno-function-sections -fno-data-sections -DKBUILD_MODFILE='"init/main"' > -DKBUILD_BASENAME='"main"' -DKBUILD_MODNAME='"main"' > -D__KBUILD_MODNAME=kmod_main -c -o init/main.o init/main.c ; > ./tools/objtool/objtool --mcount init/main.o > ./scripts/check-local-export init/main.o > { echo ; echo 'init/main.o: $(wildcard ./tools/objtool/objtool)' ; } > >> init/.main.o.cmd > set -e; mkdir -p init/; trap "rm -f init/.utsversion-tmp.h.tmp" EXIT; { > utsver=$(echo '#'"" "" | cut -b -64); echo '#'define UTS_VERSION > \""${utsver}"\"; } > init/.utsversion-tmp.h.tmp; if [ ! -r > init/utsversion-tmp.h ] || ! cmp -s init/utsversion-tmp.h > init/.utsversion-tmp.h.tmp; then : ' UPD init/utsversion-tmp.h'; mv > -f init/.utsversion-tmp.h.tmp init/utsversion-tmp.h; fi > powerpc64-linux-gcc -Wp,-MMD,init/.version.o.d -nostdinc > -I./arch/powerpc/include -I./arch/powerpc/include/generated -I./include > -I./arch/powerpc/include/uapi -I./arch/powerpc/include/generated/uapi > -I./include/uapi -I./include/generated/uapi -include > ./include/linux/compiler-version.h -include ./include/linux/kconfig.h > -include ./include/linux/compiler_types.h -D__KERNEL__ -I ./arch/powerpc > -fmacro-prefix-map=./= -Wall -Wundef -Werror=strict-prototypes > -Wno-trigraphs -fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE > -Werror=implicit-function-declaration -Werror=implicit-int > -Werror=return-type -Wno-format-security -funsigned-char -std=gnu11 > -mbig-endian -m32 -msoft-float -pipe -ffixed-r2 -mmultiple > -mno-readonly-in-sdata -mcpu=powerpc -mno-prefixed -mno-pcrel > -mno-altivec -mno-vsx -mno-mma -fno-asynchronous-unwind-tables > -mno-string -Wa,-maltivec -mbig-endian -mstack-protector-guard=tls > -mstack-protector-guard-reg=r2 -fno-delete-null-pointer-checks > -Wno-frame-address -Wno-format-truncation -Wno-format-overflow > -Wno-address-of-packed-member -O2 -fno-allow-store-data-races > -Wframe-larger-than=1024 -fstack-protector-strong -Wno-main > -Wno-unused-but-set-variable -Wno-unused-const-variable > -Wno-dangling-pointer -ftrivial-auto-var-init=zero > -fno-stack-clash-protection -pg -Wdeclaration-after-statement -Wvla > -Wno-pointer-sign -Wcast-function-type -Wno-stringop-truncation > -Wno-stringop-overflow -Wno-restrict -Wno-maybe-uninitialized > -Wno-array-bounds -Wno-alloc-size-larger-than -Wimplicit-fallthrough=5 > -fno-strict-overflow -fno-stack-check -fconserve-stack -Werror=date-time > -Werror=incompatible-pointer-types -Werror=designated-init > -Wno-packed-not-aligned -mstack-protector-guard-offset=544 > -fno-function-sections -fno-data-sections -include init/utsversion-tmp.h > -DKBUILD_MODFILE='"init/version"' -DKBUILD_BASENAME='"version"' > -DKBUILD_MODNAME='"version"' -D__KBUILD_MODNAME=kmod_version -c -o > init/version.o init/version.c ; ./tools/objtool/objtool --mcount > init/version.o > ./scripts/check-local-export init/version.o > { echo ; echo 'init/version.o: $(wildcard ./tools/objtool/objtool)' > ; } >> init/.version.o.cmd > ... Ok, got the same problem as you with next-20230203 DESCEND objtool <stdin>:1:10: fatal error: libelf.h: No such file or directory compilation terminated. HOSTCC /home/chleroy/linux-powerpc/tools/objtool/fixdep.o HOSTLD /home/chleroy/linux-powerpc/tools/objtool/fixdep-in.o LINK /home/chleroy/linux-powerpc/tools/objtool/fixdep CC /home/chleroy/linux-powerpc/tools/objtool/libsubcmd/exec-cmd.o CC /home/chleroy/linux-powerpc/tools/objtool/libsubcmd/help.o CC /home/chleroy/linux-powerpc/tools/objtool/libsubcmd/pager.o CC /home/chleroy/linux-powerpc/tools/objtool/libsubcmd/parse-options.o CC /home/chleroy/linux-powerpc/tools/objtool/libsubcmd/run-command.o CC /home/chleroy/linux-powerpc/tools/objtool/libsubcmd/sigchain.o CC /home/chleroy/linux-powerpc/tools/objtool/libsubcmd/subcmd-config.o LD /home/chleroy/linux-powerpc/tools/objtool/libsubcmd/libsubcmd-in.o AR /home/chleroy/linux-powerpc/tools/objtool/libsubcmd/libsubcmd.a INSTALL libsubcmd_headers CC /home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/decode.o CC /home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/special.o LD /home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/objtool-in.o CC /home/chleroy/linux-powerpc/tools/objtool/weak.o CC /home/chleroy/linux-powerpc/tools/objtool/check.o CC /home/chleroy/linux-powerpc/tools/objtool/special.o CC /home/chleroy/linux-powerpc/tools/objtool/builtin-check.o CC /home/chleroy/linux-powerpc/tools/objtool/elf.o elf.c: In function 'read_sections': elf.c:273:9: error: 'elf_getshnum' is deprecated [-Werror=deprecated-declarations] 273 | if (elf_getshdrnum(elf->elf, §ions_nr)) { | ^~ In file included from /usr/include/gelf.h:32, from /home/chleroy/linux-powerpc/tools/objtool/include/objtool/elf.h:10, from elf.c:22: /usr/include/libelf.h:310:12: note: declared here 310 | extern int elf_getshnum (Elf *__elf, size_t *__dst) | ^~~~~~~~~~~~ elf.c:278:9: error: 'elf_getshstrndx' is deprecated [-Werror=deprecated-declarations] 278 | if (elf_getshdrstrndx(elf->elf, &shstrndx)) { | ^~ /usr/include/libelf.h:322:12: note: declared here 322 | extern int elf_getshstrndx (Elf *__elf, size_t *__dst) | ^~~~~~~~~~~~~~~ cc1: all warnings being treated as errors make[3]: *** [/home/chleroy/linux-powerpc/tools/build/Makefile.build:97: /home/chleroy/linux-powerpc/tools/objtool/elf.o] Error 1 make[2]: *** [Makefile:66: /home/chleroy/linux-powerpc/tools/objtool/objtool-in.o] Error 2 make[1]: *** [Makefile:73: objtool] Error 2 make: *** [Makefile:1439: tools/objtool] Error 2 That's odd, because if I do it manually it works: $ make LDFLAGS= MAKEFLAGS=" " O=/home/chleroy/linux-powerpc subdir=tools -C ./tools/ objtool make : on entre dans le répertoire « /home/chleroy/linux-powerpc/tools » DESCEND objtool CC /home/chleroy/linux-powerpc/tools/objtool/libsubcmd/exec-cmd.o CC /home/chleroy/linux-powerpc/tools/objtool/libsubcmd/help.o CC /home/chleroy/linux-powerpc/tools/objtool/libsubcmd/pager.o CC /home/chleroy/linux-powerpc/tools/objtool/libsubcmd/parse-options.o CC /home/chleroy/linux-powerpc/tools/objtool/libsubcmd/run-command.o CC /home/chleroy/linux-powerpc/tools/objtool/libsubcmd/sigchain.o CC /home/chleroy/linux-powerpc/tools/objtool/libsubcmd/subcmd-config.o LD /home/chleroy/linux-powerpc/tools/objtool/libsubcmd/libsubcmd-in.o AR /home/chleroy/linux-powerpc/tools/objtool/libsubcmd/libsubcmd.a INSTALL libsubcmd_headers CC /home/chleroy/linux-powerpc/tools/objtool/arch/x86/special.o GEN /home/chleroy/linux-powerpc/tools/objtool/arch/x86/lib/inat-tables.c CC /home/chleroy/linux-powerpc/tools/objtool/arch/x86/decode.o LD /home/chleroy/linux-powerpc/tools/objtool/arch/x86/objtool-in.o CC /home/chleroy/linux-powerpc/tools/objtool/weak.o CC /home/chleroy/linux-powerpc/tools/objtool/check.o CC /home/chleroy/linux-powerpc/tools/objtool/special.o CC /home/chleroy/linux-powerpc/tools/objtool/builtin-check.o CC /home/chleroy/linux-powerpc/tools/objtool/elf.o CC /home/chleroy/linux-powerpc/tools/objtool/objtool.o CC /home/chleroy/linux-powerpc/tools/objtool/orc_gen.o CC /home/chleroy/linux-powerpc/tools/objtool/orc_dump.o CC /home/chleroy/linux-powerpc/tools/objtool/libstring.o CC /home/chleroy/linux-powerpc/tools/objtool/libctype.o CC /home/chleroy/linux-powerpc/tools/objtool/str_error_r.o CC /home/chleroy/linux-powerpc/tools/objtool/librbtree.o LD /home/chleroy/linux-powerpc/tools/objtool/objtool-in.o LINK /home/chleroy/linux-powerpc/tools/objtool/objtool make : on quitte le répertoire « /home/chleroy/linux-powerpc/tools » [chleroy@PO20335 linux-powerpc]$ file /home/chleroy/linux-powerpc/tools/objtool/objtool /home/chleroy/linux-powerpc/tools/objtool/objtool: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=1f445df36c222194c5bce8147a30a1fa1120f318, for GNU/Linux 3.2.0, with debug_info, not stripped Christophe Christophe
On Sat, Feb 04, 2023 at 02:10:34PM +0100, Christophe Leroy wrote: > Ok, got the same problem as you with next-20230203 > > DESCEND objtool > <stdin>:1:10: fatal error: libelf.h: No such file or directory > compilation terminated. > HOSTCC /home/chleroy/linux-powerpc/tools/objtool/fixdep.o > HOSTLD /home/chleroy/linux-powerpc/tools/objtool/fixdep-in.o > LINK /home/chleroy/linux-powerpc/tools/objtool/fixdep > CC /home/chleroy/linux-powerpc/tools/objtool/libsubcmd/exec-cmd.o > CC /home/chleroy/linux-powerpc/tools/objtool/libsubcmd/help.o > CC /home/chleroy/linux-powerpc/tools/objtool/libsubcmd/pager.o > CC /home/chleroy/linux-powerpc/tools/objtool/libsubcmd/parse-options.o > CC /home/chleroy/linux-powerpc/tools/objtool/libsubcmd/run-command.o > CC /home/chleroy/linux-powerpc/tools/objtool/libsubcmd/sigchain.o > CC /home/chleroy/linux-powerpc/tools/objtool/libsubcmd/subcmd-config.o > LD /home/chleroy/linux-powerpc/tools/objtool/libsubcmd/libsubcmd-in.o > AR /home/chleroy/linux-powerpc/tools/objtool/libsubcmd/libsubcmd.a > INSTALL libsubcmd_headers > CC /home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/decode.o > CC /home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/special.o > LD /home/chleroy/linux-powerpc/tools/objtool/arch/powerpc/objtool-in.o > CC /home/chleroy/linux-powerpc/tools/objtool/weak.o > CC /home/chleroy/linux-powerpc/tools/objtool/check.o > CC /home/chleroy/linux-powerpc/tools/objtool/special.o > CC /home/chleroy/linux-powerpc/tools/objtool/builtin-check.o > CC /home/chleroy/linux-powerpc/tools/objtool/elf.o > elf.c: In function 'read_sections': > elf.c:273:9: error: 'elf_getshnum' is deprecated > [-Werror=deprecated-declarations] > 273 | if (elf_getshdrnum(elf->elf, §ions_nr)) { > | ^~ This should be fixed with the latest tip/objtool/core which was rebased today. Here's the diff: diff --git a/tools/objtool/Makefile b/tools/objtool/Makefile index 29a8cd7449bf..83b100c1e7f6 100644 --- a/tools/objtool/Makefile +++ b/tools/objtool/Makefile @@ -36,7 +36,7 @@ OBJTOOL_CFLAGS := -Werror $(WARNINGS) $(KBUILD_HOSTCFLAGS) -g $(INCLUDES) $(LIBE OBJTOOL_LDFLAGS := $(LIBELF_LIBS) $(LIBSUBCMD) $(KBUILD_HOSTLDFLAGS) # Allow old libelf to be used: -elfshdr := $(shell echo '$(pound)include <libelf.h>' | $(CC) $(CFLAGS) -x c -E - | grep elf_getshdr) +elfshdr := $(shell echo '$(pound)include <libelf.h>' | $(HOSTCC) $(OBJTOOL_CFLAGS) -x c -E - | grep elf_getshdr) OBJTOOL_CFLAGS += $(if $(elfshdr),,-DLIBELF_USE_DEPRECATED) # Always want host compilation.
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 4c466acdc70d..dc05cd23c233 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig @@ -237,6 +237,7 @@ config PPC select HAVE_MOD_ARCH_SPECIFIC select HAVE_NMI if PERF_EVENTS || (PPC64 && PPC_BOOK3S) select HAVE_OPTPROBES + select HAVE_OBJTOOL if PPC32 || MPROFILE_KERNEL select HAVE_PERF_EVENTS select HAVE_PERF_EVENTS_NMI if PPC64 select HAVE_PERF_REGS diff --git a/arch/powerpc/include/asm/asm.h b/arch/powerpc/include/asm/asm.h new file mode 100644 index 000000000000..86f46b604e9a --- /dev/null +++ b/arch/powerpc/include/asm/asm.h @@ -0,0 +1,7 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _ASM_POWERPC_ASM_H +#define _ASM_POWERPC_ASM_H + +#define _ASM_PTR " .long " + +#endif /* _ASM_POWERPC_ASM_H */ diff --git a/tools/objtool/arch/powerpc/Build b/tools/objtool/arch/powerpc/Build new file mode 100644 index 000000000000..d24d5636a5b8 --- /dev/null +++ b/tools/objtool/arch/powerpc/Build @@ -0,0 +1,2 @@ +objtool-y += decode.o +objtool-y += special.o diff --git a/tools/objtool/arch/powerpc/decode.c b/tools/objtool/arch/powerpc/decode.c new file mode 100644 index 000000000000..8b6a14680da7 --- /dev/null +++ b/tools/objtool/arch/powerpc/decode.c @@ -0,0 +1,74 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +#include <stdio.h> +#include <stdlib.h> +#include <objtool/check.h> +#include <objtool/elf.h> +#include <objtool/arch.h> +#include <objtool/warn.h> +#include <objtool/builtin.h> +#include <objtool/endianness.h> + +unsigned long arch_dest_reloc_offset(int addend) +{ + return addend; +} + +bool arch_callee_saved_reg(unsigned char reg) +{ + return false; +} + +int arch_decode_hint_reg(u8 sp_reg, int *base) +{ + exit(-1); +} + +const char *arch_nop_insn(int len) +{ + exit(-1); +} + +const char *arch_ret_insn(int len) +{ + exit(-1); +} + +int arch_decode_instruction(struct objtool_file *file, const struct section *sec, + unsigned long offset, unsigned int maxlen, + unsigned int *len, enum insn_type *type, + unsigned long *immediate, + struct list_head *ops_list) +{ + u32 insn; + + *immediate = 0; + insn = bswap_if_needed(file->elf, *(u32 *)(sec->data->d_buf + offset)); + *len = 4; + *type = INSN_OTHER; + + return 0; +} + +unsigned long arch_jump_destination(struct instruction *insn) +{ + return insn->offset + insn->immediate; +} + +void arch_initial_func_cfi_state(struct cfi_init_state *state) +{ + int i; + + for (i = 0; i < CFI_NUM_REGS; i++) { + state->regs[i].base = CFI_UNDEFINED; + state->regs[i].offset = 0; + } + + /* initial CFA (call frame address) */ + state->cfa.base = CFI_SP; + state->cfa.offset = 0; + + /* initial LR (return address) */ + state->regs[CFI_RA].base = CFI_CFA; + state->regs[CFI_RA].offset = 0; +} diff --git a/tools/objtool/arch/powerpc/include/arch/cfi_regs.h b/tools/objtool/arch/powerpc/include/arch/cfi_regs.h new file mode 100644 index 000000000000..59638ebeafc8 --- /dev/null +++ b/tools/objtool/arch/powerpc/include/arch/cfi_regs.h @@ -0,0 +1,11 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#ifndef _OBJTOOL_CFI_REGS_H +#define _OBJTOOL_CFI_REGS_H + +#define CFI_BP 1 +#define CFI_SP CFI_BP +#define CFI_RA 32 +#define CFI_NUM_REGS 33 + +#endif diff --git a/tools/objtool/arch/powerpc/include/arch/elf.h b/tools/objtool/arch/powerpc/include/arch/elf.h new file mode 100644 index 000000000000..3c8ebb7d2a6b --- /dev/null +++ b/tools/objtool/arch/powerpc/include/arch/elf.h @@ -0,0 +1,8 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#ifndef _OBJTOOL_ARCH_ELF +#define _OBJTOOL_ARCH_ELF + +#define R_NONE R_PPC_NONE + +#endif /* _OBJTOOL_ARCH_ELF */ diff --git a/tools/objtool/arch/powerpc/include/arch/special.h b/tools/objtool/arch/powerpc/include/arch/special.h new file mode 100644 index 000000000000..ffef9ada7133 --- /dev/null +++ b/tools/objtool/arch/powerpc/include/arch/special.h @@ -0,0 +1,21 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +#ifndef _PPC_ARCH_SPECIAL_H +#define _PPC_ARCH_SPECIAL_H + +#define EX_ENTRY_SIZE 8 +#define EX_ORIG_OFFSET 0 +#define EX_NEW_OFFSET 4 + +#define JUMP_ENTRY_SIZE 16 +#define JUMP_ORIG_OFFSET 0 +#define JUMP_NEW_OFFSET 4 +#define JUMP_KEY_OFFSET 8 + +#define ALT_ENTRY_SIZE 12 +#define ALT_ORIG_OFFSET 0 +#define ALT_NEW_OFFSET 4 +#define ALT_FEATURE_OFFSET 8 +#define ALT_ORIG_LEN_OFFSET 10 +#define ALT_NEW_LEN_OFFSET 11 + +#endif /* _PPC_ARCH_SPECIAL_H */ diff --git a/tools/objtool/arch/powerpc/special.c b/tools/objtool/arch/powerpc/special.c new file mode 100644 index 000000000000..d33868147196 --- /dev/null +++ b/tools/objtool/arch/powerpc/special.c @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +#include <string.h> +#include <stdlib.h> +#include <objtool/special.h> +#include <objtool/builtin.h> + + +bool arch_support_alt_relocation(struct special_alt *special_alt, + struct instruction *insn, + struct reloc *reloc) +{ + exit(-1); +} + +struct reloc *arch_find_switch_table(struct objtool_file *file, + struct instruction *insn) +{ + exit(-1); +}