Skip to content

Commit

Permalink
From patchwork series 360072
Browse files Browse the repository at this point in the history
  • Loading branch information
Fox Snowpatch committed Jun 16, 2023
1 parent 12ffddc commit 9cc7b74
Show file tree
Hide file tree
Showing 38 changed files with 311 additions and 104 deletions.
1 change: 1 addition & 0 deletions arch/powerpc/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,7 @@ config PPC
select HAVE_OPTPROBES
select HAVE_OBJTOOL if PPC32 || MPROFILE_KERNEL
select HAVE_OBJTOOL_MCOUNT if HAVE_OBJTOOL
select HAVE_UACCESS_VALIDATION if HAVE_OBJTOOL
select HAVE_PERF_EVENTS
select HAVE_PERF_EVENTS_NMI if PPC64
select HAVE_PERF_REGS
Expand Down
17 changes: 17 additions & 0 deletions arch/powerpc/boot/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -513,3 +513,20 @@ $(wrapper-installed): $(DESTDIR)$(WRAPPER_BINDIR) $(srctree)/$(obj)/wrapper | $(
$(call cmd,install_wrapper)

$(obj)/bootwrapper_install: $(all-installed)

OBJECT_FILES_NON_STANDARD_crt0.o := y
OBJECT_FILES_NON_STANDARD_crtsavres.o := y
OBJECT_FILES_NON_STANDARD_div64.o := y
OBJECT_FILES_NON_STANDARD_fixed-head.o := y
OBJECT_FILES_NON_STANDARD_gamecube-head.o := y
OBJECT_FILES_NON_STANDARD_motload-head.o := y
OBJECT_FILES_NON_STANDARD_opal-calls.o := y
OBJECT_FILES_NON_STANDARD_ps3-head.o := y
OBJECT_FILES_NON_STANDARD_ps3-hvcall.o := y
OBJECT_FILES_NON_STANDARD_pseries-head.o := y
OBJECT_FILES_NON_STANDARD_string.o := y
OBJECT_FILES_NON_STANDARD_util.o := y
OBJECT_FILES_NON_STANDARD_wii-head.o := y
OBJECT_FILES_NON_STANDARD_zImage.coff.lds.o := y
OBJECT_FILES_NON_STANDARD_zImage.lds.o := y
OBJECT_FILES_NON_STANDARD_zImage.ps3.lds.o := y
13 changes: 13 additions & 0 deletions arch/powerpc/crypto/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,16 @@ $(obj)/aesp10-ppc.S $(obj)/ghashp10-ppc.S: $(obj)/%.S: $(src)/%.pl FORCE

OBJECT_FILES_NON_STANDARD_aesp10-ppc.o := y
OBJECT_FILES_NON_STANDARD_ghashp10-ppc.o := y

OBJECT_FILES_NON_STANDARD_aes-gcm-p10.o := y
OBJECT_FILES_NON_STANDARD_aes-spe-core.o := y
OBJECT_FILES_NON_STANDARD_aes-spe-keys.o := y
OBJECT_FILES_NON_STANDARD_aes-spe-modes.o := y
OBJECT_FILES_NON_STANDARD_aes-tab-4k.o := y
OBJECT_FILES_NON_STANDARD_crc32c-vpmsum_asm.o := y
OBJECT_FILES_NON_STANDARD_crc32-vpmsum_core.o := y
OBJECT_FILES_NON_STANDARD_crct10dif-vpmsum_asm.o := y
OBJECT_FILES_NON_STANDARD_md5-asm.o := y
OBJECT_FILES_NON_STANDARD_sha1-powerpc-asm.o := y
OBJECT_FILES_NON_STANDARD_sha1-spe-asm.o := y
OBJECT_FILES_NON_STANDARD_sha256-spe-asm.o := y
2 changes: 1 addition & 1 deletion arch/powerpc/include/asm/book3s/64/kup.h
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@
/* Prevent access to userspace using any key values */
LOAD_REG_IMMEDIATE(\gpr2, AMR_KUAP_BLOCKED)
999: tdne \gpr1, \gpr2
EMIT_WARN_ENTRY 999b, __FILE__, __LINE__, (BUGFLAG_WARNING | BUGFLAG_ONCE)
EMIT_BUG_ENTRY 999b, __FILE__, __LINE__, (BUGFLAG_WARNING | BUGFLAG_ONCE)
END_MMU_FTR_SECTION_NESTED_IFSET(MMU_FTR_BOOK3S_KUAP, 67)
#endif
.endm
Expand Down
67 changes: 11 additions & 56 deletions arch/powerpc/include/asm/bug.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,13 @@
#ifdef __KERNEL__

#include <asm/asm-compat.h>
#include <asm/extable.h>

#ifdef CONFIG_BUG

#ifdef __ASSEMBLY__
#include <asm/asm-offsets.h>
#ifdef CONFIG_DEBUG_BUGVERBOSE
.macro __EMIT_BUG_ENTRY addr,file,line,flags
.macro EMIT_BUG_ENTRY addr,file,line,flags
.section __bug_table,"aw"
5001: .4byte \addr - .
.4byte 5002f - .
Expand All @@ -23,7 +22,7 @@
.previous
.endm
#else
.macro __EMIT_BUG_ENTRY addr,file,line,flags
.macro EMIT_BUG_ENTRY addr,file,line,flags
.section __bug_table,"aw"
5001: .4byte \addr - .
.short \flags
Expand All @@ -32,18 +31,6 @@
.endm
#endif /* verbose */

.macro EMIT_WARN_ENTRY addr,file,line,flags
EX_TABLE(\addr,\addr+4)
__EMIT_BUG_ENTRY \addr,\file,\line,\flags
.endm

.macro EMIT_BUG_ENTRY addr,file,line,flags
.if \flags & 1 /* BUGFLAG_WARNING */
.err /* Use EMIT_WARN_ENTRY for warnings */
.endif
__EMIT_BUG_ENTRY \addr,\file,\line,\flags
.endm

#else /* !__ASSEMBLY__ */
/* _EMIT_BUG_ENTRY expects args %0,%1,%2,%3 to be FILE, LINE, flags and
sizeof(struct bug_entry), respectively */
Expand Down Expand Up @@ -73,16 +60,6 @@
"i" (sizeof(struct bug_entry)), \
##__VA_ARGS__)

#define WARN_ENTRY(insn, flags, label, ...) \
asm_volatile_goto( \
"1: " insn "\n" \
EX_TABLE(1b, %l[label]) \
_EMIT_BUG_ENTRY \
: : "i" (__FILE__), "i" (__LINE__), \
"i" (flags), \
"i" (sizeof(struct bug_entry)), \
##__VA_ARGS__ : : label)

/*
* BUG_ON() and WARN_ON() do their best to cooperate with compile-time
* optimisations. However depending on the complexity of the condition
Expand All @@ -95,16 +72,7 @@
} while (0)
#define HAVE_ARCH_BUG

#define __WARN_FLAGS(flags) do { \
__label__ __label_warn_on; \
\
WARN_ENTRY("twi 31, 0, 0", BUGFLAG_WARNING | (flags), __label_warn_on); \
barrier_before_unreachable(); \
__builtin_unreachable(); \
\
__label_warn_on: \
break; \
} while (0)
#define __WARN_FLAGS(flags) BUG_ENTRY("twi 31, 0, 0", BUGFLAG_WARNING | (flags))

#ifdef CONFIG_PPC64
#define BUG_ON(x) do { \
Expand All @@ -117,25 +85,15 @@ __label_warn_on: \
} while (0)

#define WARN_ON(x) ({ \
bool __ret_warn_on = false; \
do { \
if (__builtin_constant_p((x))) { \
if (!(x)) \
break; \
int __ret_warn_on = !!(x); \
if (__builtin_constant_p(__ret_warn_on)) { \
if (__ret_warn_on) \
__WARN(); \
__ret_warn_on = true; \
} else { \
__label__ __label_warn_on; \
\
WARN_ENTRY(PPC_TLNEI " %4, 0", \
BUGFLAG_WARNING | BUGFLAG_TAINT(TAINT_WARN), \
__label_warn_on, \
"r" ((__force long)(x))); \
break; \
__label_warn_on: \
__ret_warn_on = true; \
} \
} while (0); \
} else { \
BUG_ENTRY(PPC_TLNEI " %4, 0", \
BUGFLAG_WARNING | BUGFLAG_TAINT(TAINT_WARN), \
"r" (__ret_warn_on)); \
} \
unlikely(__ret_warn_on); \
})

Expand All @@ -148,11 +106,8 @@ __label_warn_on: \
#ifdef __ASSEMBLY__
.macro EMIT_BUG_ENTRY addr,file,line,flags
.endm
.macro EMIT_WARN_ENTRY addr,file,line,flags
.endm
#else /* !__ASSEMBLY__ */
#define _EMIT_BUG_ENTRY
#define _EMIT_WARN_ENTRY
#endif
#endif /* CONFIG_BUG */

Expand Down
14 changes: 0 additions & 14 deletions arch/powerpc/include/asm/extable.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@

#define ARCH_HAS_RELATIVE_EXTABLE

#ifndef __ASSEMBLY__

struct exception_table_entry {
int insn;
int fixup;
Expand All @@ -30,15 +28,3 @@ static inline unsigned long extable_fixup(const struct exception_table_entry *x)
}

#endif

/*
* Helper macro for exception table entries
*/
#define EX_TABLE(_fault, _target) \
stringify_in_c(.section __ex_table,"a";)\
stringify_in_c(.balign 4;) \
stringify_in_c(.long (_fault) - . ;) \
stringify_in_c(.long (_target) - . ;) \
stringify_in_c(.previous)

#endif
11 changes: 10 additions & 1 deletion arch/powerpc/include/asm/ppc_asm.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
#include <asm/ppc-opcode.h>
#include <asm/firmware.h>
#include <asm/feature-fixups.h>
#include <asm/extable.h>

#ifdef __ASSEMBLY__

Expand Down Expand Up @@ -836,6 +835,16 @@ END_FTR_SECTION_NESTED(CPU_FTR_CELL_TB_BUG, CPU_FTR_CELL_TB_BUG, 96)

#endif /* __ASSEMBLY__ */

/*
* Helper macro for exception table entries
*/
#define EX_TABLE(_fault, _target) \
stringify_in_c(.section __ex_table,"a";)\
stringify_in_c(.balign 4;) \
stringify_in_c(.long (_fault) - . ;) \
stringify_in_c(.long (_target) - . ;) \
stringify_in_c(.previous)

#define SOFT_MASK_TABLE(_start, _end) \
stringify_in_c(.section __soft_mask_table,"a";)\
stringify_in_c(.balign 8;) \
Expand Down
44 changes: 44 additions & 0 deletions arch/powerpc/kernel/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -229,3 +229,47 @@ $(obj)/vdso64_wrapper.o : $(obj)/vdso/vdso64.so.dbg

# for cleaning
subdir- += vdso

OBJECT_FILES_NON_STANDARD_85xx_entry_mapping.o := y
OBJECT_FILES_NON_STANDARD_cpu_setup_44x.o := y
OBJECT_FILES_NON_STANDARD_cpu_setup_6xx.o := y
OBJECT_FILES_NON_STANDARD_cpu_setup_e500.o := y
OBJECT_FILES_NON_STANDARD_cpu_setup_pa6t.o := y
OBJECT_FILES_NON_STANDARD_cpu_setup_ppc970.o := y
OBJECT_FILES_NON_STANDARD_entry_32.o := y
OBJECT_FILES_NON_STANDARD_entry_64.o := y
OBJECT_FILES_NON_STANDARD_epapr_hcalls.o := y
OBJECT_FILES_NON_STANDARD_exceptions-64e.o := y
OBJECT_FILES_NON_STANDARD_exceptions-64s.o := y
OBJECT_FILES_NON_STANDARD_fpu.o := y
OBJECT_FILES_NON_STANDARD_head_40x.o := y
OBJECT_FILES_NON_STANDARD_head_44x.o := y
OBJECT_FILES_NON_STANDARD_head_64.o := y
OBJECT_FILES_NON_STANDARD_head_85xx.o := y
OBJECT_FILES_NON_STANDARD_head_8xx.o := y
OBJECT_FILES_NON_STANDARD_head_book3s_32.o := y
OBJECT_FILES_NON_STANDARD_idle_64e.o := y
OBJECT_FILES_NON_STANDARD_idle_6xx.o := y
OBJECT_FILES_NON_STANDARD_idle_85xx.o := y
OBJECT_FILES_NON_STANDARD_idle_book3s.o := y
OBJECT_FILES_NON_STANDARD_interrupt_64.o := y
OBJECT_FILES_NON_STANDARD_kvm_emul.o := y
OBJECT_FILES_NON_STANDARD_l2cr_6xx.o := y
OBJECT_FILES_NON_STANDARD_misc_32.o := y
OBJECT_FILES_NON_STANDARD_misc_64.o := y
OBJECT_FILES_NON_STANDARD_misc.o := y
OBJECT_FILES_NON_STANDARD_note.o := y
OBJECT_FILES_NON_STANDARD_optprobes_head.o := y
OBJECT_FILES_NON_STANDARD_ppc_save_regs.o := y
OBJECT_FILES_NON_STANDARD_reloc_32.o := y
OBJECT_FILES_NON_STANDARD_reloc_64.o := y
OBJECT_FILES_NON_STANDARD_rtas_entry.o := y
OBJECT_FILES_NON_STANDARD_swsusp_32.o := y
OBJECT_FILES_NON_STANDARD_swsusp_85xx.o := y
OBJECT_FILES_NON_STANDARD_swsusp_asm64.o := y
OBJECT_FILES_NON_STANDARD_tm.o := y
OBJECT_FILES_NON_STANDARD_ucall.o := y
OBJECT_FILES_NON_STANDARD_vdso32_wrapper.o := y
OBJECT_FILES_NON_STANDARD_vdso64_wrapper.o := y
OBJECT_FILES_NON_STANDARD_vector.o := y
OBJECT_FILES_NON_STANDARD_vmlinux.lds.o := y
2 changes: 1 addition & 1 deletion arch/powerpc/kernel/misc_32.S
Original file line number Diff line number Diff line change
Expand Up @@ -237,7 +237,7 @@ _GLOBAL(copy_page)
addi r3,r3,-4

0: twnei r5, 0 /* WARN if r3 is not cache aligned */
EMIT_WARN_ENTRY 0b,__FILE__,__LINE__, BUGFLAG_WARNING
EMIT_BUG_ENTRY 0b,__FILE__,__LINE__, BUGFLAG_WARNING

addi r4,r4,-4

Expand Down
4 changes: 4 additions & 0 deletions arch/powerpc/kernel/trace/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,7 @@ GCOV_PROFILE_ftrace.o := n
KCOV_INSTRUMENT_ftrace.o := n
KCSAN_SANITIZE_ftrace.o := n
UBSAN_SANITIZE_ftrace.o := n

OBJECT_FILES_NON_STANDARD_ftrace_64_pg.o := y
OBJECT_FILES_NON_STANDARD_ftrace_low.o := y
OBJECT_FILES_NON_STANDARD_ftrace_mprofile.o := y
9 changes: 2 additions & 7 deletions arch/powerpc/kernel/traps.c
Original file line number Diff line number Diff line change
Expand Up @@ -1508,13 +1508,8 @@ static void do_program_check(struct pt_regs *regs)

if (!(regs->msr & MSR_PR) && /* not user-mode */
report_bug(bugaddr, regs) == BUG_TRAP_TYPE_WARN) {
const struct exception_table_entry *entry;

entry = search_exception_tables(bugaddr);
if (entry) {
regs_set_return_ip(regs, extable_fixup(entry) + regs->nip - bugaddr);
return;
}
regs_add_return_ip(regs, 4);
return;
}
_exception(SIGTRAP, regs, TRAP_BRKPT, regs->nip);
return;
Expand Down
11 changes: 11 additions & 0 deletions arch/powerpc/kernel/vdso/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -114,3 +114,14 @@ quiet_cmd_vdso64as = VDSO64A $@
cmd_vdso64as = $(VDSOCC) $(a_flags) $(AS64FLAGS) -c -o $@ $<

OBJECT_FILES_NON_STANDARD := y

OBJECT_FILES_NON_STANDARD_cacheflush.o := y
OBJECT_FILES_NON_STANDARD_datapage.o := y
OBJECT_FILES_NON_STANDARD_getcpu.o := y
OBJECT_FILES_NON_STANDARD_gettimeofday.o := y
OBJECT_FILES_NON_STANDARD_note.o := y
OBJECT_FILES_NON_STANDARD_sigtramp32.o := y
OBJECT_FILES_NON_STANDARD_sigtramp64.o := y
OBJECT_FILES_NON_STANDARD_vdso32.lds.o := y
OBJECT_FILES_NON_STANDARD_vdso64.lds.o := y
OBJECT_FILES_NON_STANDARD_vgetrandom-chacha.o := y
2 changes: 2 additions & 0 deletions arch/powerpc/kexec/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,5 @@ KCOV_INSTRUMENT_core_$(BITS).o := n
UBSAN_SANITIZE_core_$(BITS).o := n
KASAN_SANITIZE_core.o := n
KASAN_SANITIZE_core_$(BITS) := n

OBJECT_FILES_NON_STANDARD_relocate_32.o := y
13 changes: 13 additions & 0 deletions arch/powerpc/kvm/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -137,3 +137,16 @@ obj-y += $(kvm-book3s_64-builtin-objs-y)
ifdef CONFIG_PPC_BOOK3S_64
KASAN_SANITIZE := n
endif

OBJECT_FILES_NON_STANDARD_book3s_32_sr.o := y
OBJECT_FILES_NON_STANDARD_book3s_64_entry.o := y
OBJECT_FILES_NON_STANDARD_book3s_64_slb.o := y
OBJECT_FILES_NON_STANDARD_book3s_hv_interrupts.o := y
OBJECT_FILES_NON_STANDARD_book3s_hv_rmhandlers.o := y
OBJECT_FILES_NON_STANDARD_book3s_interrupts.o := y
OBJECT_FILES_NON_STANDARD_book3s_rmhandlers.o := y
OBJECT_FILES_NON_STANDARD_book3s_segment.o := y
OBJECT_FILES_NON_STANDARD_bookehv_interrupts.o := y
OBJECT_FILES_NON_STANDARD_booke_interrupts.o := y
OBJECT_FILES_NON_STANDARD_fpu.o := y
OBJECT_FILES_NON_STANDARD_tm.o := y
25 changes: 25 additions & 0 deletions arch/powerpc/lib/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -81,3 +81,28 @@ CFLAGS_xor_vmx.o += -maltivec $(call cc-option,-mabi=altivec)
CFLAGS_xor_vmx.o += -isystem $(shell $(CC) -print-file-name=include)

obj-$(CONFIG_PPC64) += $(obj64-y)

OBJECT_FILES_NON_STANDARD_checksum_32.o := y
OBJECT_FILES_NON_STANDARD_checksum_64.o := y
OBJECT_FILES_NON_STANDARD_copy_32.o := y
OBJECT_FILES_NON_STANDARD_copy_mc_64.o := y
OBJECT_FILES_NON_STANDARD_copypage_64.o := y
OBJECT_FILES_NON_STANDARD_copypage_power7.o := y
OBJECT_FILES_NON_STANDARD_copyuser_64.o := y
OBJECT_FILES_NON_STANDARD_copyuser_power7.o := y
OBJECT_FILES_NON_STANDARD_crtsavres.o := y
OBJECT_FILES_NON_STANDARD_div64.o := y
OBJECT_FILES_NON_STANDARD_feature-fixups-test.o := y
OBJECT_FILES_NON_STANDARD_hweight_64.o := y
OBJECT_FILES_NON_STANDARD_ldstfp.o := y
OBJECT_FILES_NON_STANDARD_mem_64.o := y
OBJECT_FILES_NON_STANDARD_memcmp_32.o := y
OBJECT_FILES_NON_STANDARD_memcmp_64.o := y
OBJECT_FILES_NON_STANDARD_memcpy_64.o := y
OBJECT_FILES_NON_STANDARD_memcpy_power7.o := y
OBJECT_FILES_NON_STANDARD_quad.o := y
OBJECT_FILES_NON_STANDARD_string_32.o := y
OBJECT_FILES_NON_STANDARD_string_64.o := y
OBJECT_FILES_NON_STANDARD_string.o := y
OBJECT_FILES_NON_STANDARD_strlen_32.o := y
OBJECT_FILES_NON_STANDARD_test_emulate_step_exec_instr.o := y
3 changes: 3 additions & 0 deletions arch/powerpc/mm/book3s32/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,6 @@ obj-y += mmu.o mmu_context.o
obj-$(CONFIG_PPC_BOOK3S_603) += nohash_low.o
obj-$(CONFIG_PPC_BOOK3S_604) += hash_low.o tlb.o
obj-$(CONFIG_PPC_KUAP) += kuap.o

OBJECT_FILES_NON_STANDARD_hash_low.o := y
OBJECT_FILES_NON_STANDARD_nohash_low.o := y
3 changes: 3 additions & 0 deletions arch/powerpc/mm/nohash/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,6 @@ endif
# This is necessary for booting with kcov enabled on book3e machines
KCOV_INSTRUMENT_tlb.o := n
KCOV_INSTRUMENT_e500.o := n

OBJECT_FILES_NON_STANDARD_tlb_low_64e.o := y
OBJECT_FILES_NON_STANDARD_tlb_low.o := y
2 changes: 2 additions & 0 deletions arch/powerpc/perf/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,5 @@ obj-$(CONFIG_PPC_8xx) += 8xx-pmu.o

obj-$(CONFIG_PPC64) += $(obj64-y)
obj-$(CONFIG_PPC32) += $(obj32-y)

OBJECT_FILES_NON_STANDARD_bhrb.o := y
Loading

0 comments on commit 9cc7b74

Please sign in to comment.