From a7ae4ed0a3951c45d4a59ee575951b64ae4a23fb Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Tue, 7 May 2024 12:22:15 +0200 Subject: [PATCH] kernel: fix tools build breakage on macos with x86 Signed-off-by: Felix Fietkau --- --- a/tools/scripts/Makefile.include +++ b/tools/scripts/Makefile.include @@ -72,8 +72,6 @@ $(call allow-override,CXX,$(CROSS_COMPIL $(call allow-override,STRIP,$(CROSS_COMPILE)strip) endif -CC_NO_CLANG := $(shell $(CC) -dM -E -x c /dev/null | grep -Fq "__clang__"; echo $$?) - ifneq ($(LLVM),) HOSTAR ?= $(LLVM_PREFIX)llvm-ar$(LLVM_SUFFIX) HOSTCC ?= $(LLVM_PREFIX)clang$(LLVM_SUFFIX) @@ -84,6 +82,9 @@ HOSTCC ?= gcc HOSTLD ?= ld endif +CC_NO_CLANG := $(shell $(CC) -dM -E -x c /dev/null | grep -Fq "__clang__"; echo $$?) +HOSTCC_NO_CLANG := $(shell $(HOSTCC) -dM -E -x c /dev/null | grep -Fq "__clang__"; echo $$?) + # Some tools require Clang, LLC and/or LLVM utils CLANG ?= clang LLC ?= llc @@ -92,8 +93,9 @@ LLVM_OBJCOPY ?= llvm-objcopy LLVM_STRIP ?= llvm-strip ifeq ($(CC_NO_CLANG), 1) -EXTRA_WARNINGS += -Wstrict-aliasing=3 - + ifeq ($(HOSTCC_NO_CLANG), 1) + EXTRA_WARNINGS += -Wstrict-aliasing=3 + endif else ifneq ($(CROSS_COMPILE),) # Allow userspace to override CLANG_CROSS_FLAGS to specify their own # sysroots and flags or to avoid the GCC call in pure Clang builds. --- a/tools/include/linux/types.h +++ b/tools/include/linux/types.h @@ -10,8 +10,12 @@ #define __SANE_USERSPACE_TYPES__ /* For PPC64, to get LL64 types */ #endif +#ifndef __linux__ +#include +#else #include #include +#endif struct page; struct kmem_cache; @@ -56,6 +60,7 @@ typedef __s8 s8; #define __user #endif #define __must_check +#undef __cold #define __cold typedef __u16 __bitwise __le16; --- a/tools/objtool/include/objtool/objtool.h +++ b/tools/objtool/include/objtool/objtool.h @@ -12,6 +12,7 @@ #include +#undef __weak #define __weak __attribute__((weak)) struct pv_state { --- a/tools/include/asm-generic/bitops/fls.h +++ b/tools/include/asm-generic/bitops/fls.h @@ -2,6 +2,8 @@ #ifndef _ASM_GENERIC_BITOPS_FLS_H_ #define _ASM_GENERIC_BITOPS_FLS_H_ +#include + /** * fls - find last (most-significant) bit set * @x: the word to search @@ -10,6 +12,7 @@ * Note fls(0) = 0, fls(1) = 1, fls(0x80000000) = 32. */ +#define fls __linux_fls static __always_inline int fls(unsigned int x) { int r = 32; --- a/tools/lib/string.c +++ b/tools/lib/string.c @@ -96,6 +96,7 @@ int strtobool(const char *s, bool *res) * If libc has strlcpy() then that version will override this * implementation: */ +#ifndef __APPLE__ #ifdef __clang__ #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wignored-attributes" @@ -114,6 +115,7 @@ size_t __weak strlcpy(char *dest, const #ifdef __clang__ #pragma clang diagnostic pop #endif +#endif /** * skip_spaces - Removes leading whitespace from @str. --- a/tools/arch/x86/include/asm/insn.h +++ b/tools/arch/x86/include/asm/insn.h @@ -7,7 +7,7 @@ * Copyright (C) IBM Corporation, 2009 */ -#include +#include /* insn_attr_t is defined in inat.h */ #include "inat.h" /* __ignore_sync_check__ */ --- a/tools/arch/x86/include/asm/orc_types.h +++ b/tools/arch/x86/include/asm/orc_types.h @@ -46,7 +46,6 @@ #define ORC_TYPE_REGS_PARTIAL 4 #ifndef __ASSEMBLY__ -#include /* * This struct is more or less a vastly simplified version of the DWARF Call @@ -59,12 +58,12 @@ struct orc_entry { s16 sp_offset; s16 bp_offset; -#if defined(__LITTLE_ENDIAN_BITFIELD) +#if __BYTE_ORDER == __LITTLE_ENDIAN unsigned sp_reg:4; unsigned bp_reg:4; unsigned type:3; unsigned signal:1; -#elif defined(__BIG_ENDIAN_BITFIELD) +#elif __BYTE_ORDER == __BIG_ENDIAN unsigned bp_reg:4; unsigned sp_reg:4; unsigned unused:4; --- a/tools/include/linux/rbtree.h +++ b/tools/include/linux/rbtree.h @@ -18,7 +18,6 @@ #define __TOOLS_LINUX_PERF_RBTREE_H #include -#include struct rb_node { unsigned long __rb_parent_color; --- a/tools/include/tools/be_byteshift.h +++ b/tools/include/tools/be_byteshift.h @@ -2,6 +2,10 @@ #ifndef _TOOLS_BE_BYTESHIFT_H #define _TOOLS_BE_BYTESHIFT_H +#ifndef __linux__ +#include "linux_types.h" +#endif + #include static inline uint16_t __get_unaligned_be16(const uint8_t *p) --- a/tools/include/tools/le_byteshift.h +++ b/tools/include/tools/le_byteshift.h @@ -2,6 +2,10 @@ #ifndef _TOOLS_LE_BYTESHIFT_H #define _TOOLS_LE_BYTESHIFT_H +#ifndef __linux__ +#include "linux_types.h" +#endif + #include static inline uint16_t __get_unaligned_le16(const uint8_t *p) --- /dev/null +++ b/tools/include/tools/linux_types.h @@ -0,0 +1,18 @@ +#ifndef __LINUX_TYPES_H +#define __LINUX_TYPES_H + +#include + +typedef int8_t __s8; +typedef uint8_t __u8; + +typedef int16_t __s16; +typedef uint16_t __u16; + +typedef int32_t __s32; +typedef uint32_t __u32; + +typedef int64_t __s64; +typedef uint64_t __u64; + +#endif --- a/tools/objtool/Makefile +++ b/tools/objtool/Makefile @@ -39,6 +39,8 @@ OBJTOOL_LDFLAGS := $(LIBELF_LIBS) $(LIBS elfshdr := $(shell echo '$(pound)include ' | $(HOSTCC) $(OBJTOOL_CFLAGS) -x c -E - | grep elf_getshdr) OBJTOOL_CFLAGS += $(if $(elfshdr),,-DLIBELF_USE_DEPRECATED) +OBJTOOL_CFLAGS += $(HOST_EXTRACFLAGS) + # Always want host compilation. HOST_OVERRIDES := CC="$(HOSTCC)" LD="$(HOSTLD)" AR="$(HOSTAR)" --- a/tools/objtool/orc_dump.c +++ b/tools/objtool/orc_dump.c @@ -4,10 +4,10 @@ */ #include -#include #include #include #include +#include static const char *reg_name(unsigned int reg) { --- a/tools/objtool/orc_gen.c +++ b/tools/objtool/orc_gen.c @@ -7,11 +7,11 @@ #include #include -#include #include #include #include +#include static int init_orc_entry(struct orc_entry *orc, struct cfi_state *cfi, struct instruction *insn) --- a/tools/arch/x86/lib/insn.c +++ b/tools/arch/x86/lib/insn.c @@ -15,7 +15,11 @@ #include "../include/asm/insn.h" /* __ignore_sync_check__ */ #include "../include/asm-generic/unaligned.h" /* __ignore_sync_check__ */ +#ifdef __KERNEL__ #include +#else +#include +#endif #include #include "../include/asm/emulate_prefix.h" /* __ignore_sync_check__ */