diff mbox series

[v2,15/16] objtool/powerpc: Enable objtool to be built on ppc

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

Commit Message

Sathvika Vasireddy Aug. 29, 2022, 5:52 a.m. UTC
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

Comments

Christophe Leroy Aug. 30, 2022, 6:41 a.m. UTC | #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.

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);
> +}
Christophe Leroy Sept. 1, 2022, 9:32 a.m. UTC | #2
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;
> +}
Segher Boessenkool Sept. 1, 2022, 3:11 p.m. UTC | #3
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
Christophe Leroy Sept. 1, 2022, 4:38 p.m. UTC | #4
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
Peter Zijlstra Sept. 1, 2022, 7:01 p.m. UTC | #5
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/ :-)
Naveen N. Rao Sept. 5, 2022, 10:37 a.m. UTC | #6
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
Randy Dunlap Feb. 4, 2023, 8:19 a.m. UTC | #7
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);
>> +}
Randy Dunlap Feb. 4, 2023, 8:21 a.m. UTC | #8
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);
>>> +}
>
Randy Dunlap Feb. 4, 2023, 8:30 a.m. UTC | #9
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, &sections_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.
Christophe Leroy Feb. 4, 2023, 11:55 a.m. UTC | #10
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, &sections_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
...
Christophe Leroy Feb. 4, 2023, 1:10 p.m. UTC | #11
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, &sections_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, &sections_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
Josh Poimboeuf Feb. 4, 2023, 3:47 p.m. UTC | #12
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, &sections_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 mbox series

Patch

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);
+}