···11+/*22+ * Copyright (C) 2016 Helge Deller <deller@gmx.de>33+ *44+ * This program is free software; you can redistribute it and/or modify55+ * it under the terms of the GNU General Public License version 2 as66+ * published by the Free Software Foundation.77+ */88+99+#ifndef _ASM_PARISC_DWARF_H1010+#define _ASM_PARISC_DWARF_H1111+1212+#ifdef __ASSEMBLY__1313+1414+#define CFI_STARTPROC .cfi_startproc1515+#define CFI_ENDPROC .cfi_endproc1616+#define CFI_DEF_CFA .cfi_def_cfa1717+#define CFI_REGISTER .cfi_register1818+#define CFI_REL_OFFSET .cfi_rel_offset1919+#define CFI_UNDEFINED .cfi_undefined2020+2121+#endif /* __ASSEMBLY__ */2222+2323+#endif /* _ASM_PARISC_DWARF_H */
+12
arch/parisc/include/asm/linkage.h
···11#ifndef __ASM_PARISC_LINKAGE_H22#define __ASM_PARISC_LINKAGE_H3344+#include <asm/dwarf.h>55+46#ifndef __ALIGN57#define __ALIGN .align 468#define __ALIGN_STR ".align 4"···1210 * In parisc assembly a semicolon marks a comment while a1311 * exclamation mark is used to separate independent lines.1412 */1313+#define ASM_NL !1414+1515#ifdef __ASSEMBLY__16161717#define ENTRY(name) \···2925 .type name, @function !\3026 END(name)3127#endif2828+2929+#define ENTRY_CFI(name) \3030+ ENTRY(name) ASM_NL\3131+ CFI_STARTPROC3232+3333+#define ENDPROC_CFI(name) \3434+ ENDPROC(name) ASM_NL\3535+ CFI_ENDPROC32363337#endif /* __ASSEMBLY__ */3438
+24-22
arch/parisc/kernel/entry.S
···766766 * copy_thread moved args into task save area.767767 */768768769769-ENTRY(ret_from_kernel_thread)769769+ENTRY_CFI(ret_from_kernel_thread)770770771771 /* Call schedule_tail first though */772772 BL schedule_tail, %r2···782782 copy %r31, %r2783783 b finish_child_return784784 nop785785-ENDPROC(ret_from_kernel_thread)785785+ENDPROC_CFI(ret_from_kernel_thread)786786787787788788 /*···790790 * struct task_struct *next)791791 *792792 * switch kernel stacks and return prev */793793-ENTRY(_switch_to)793793+ENTRY_CFI(_switch_to)794794 STREG %r2, -RP_OFFSET(%r30)795795796796 callee_save_float···815815 LDREG -RP_OFFSET(%r30), %r2816816 bv %r0(%r2)817817 copy %r26, %r28818818-ENDPROC(_switch_to)818818+ENDPROC_CFI(_switch_to)819819820820 /*821821 * Common rfi return path for interruptions, kernel execve, and···833833834834 .align PAGE_SIZE835835836836-ENTRY(syscall_exit_rfi)836836+ENTRY_CFI(syscall_exit_rfi)837837 mfctl %cr30,%r16838838 LDREG TI_TASK(%r16), %r16 /* thread_info -> task_struct */839839 ldo TASK_REGS(%r16),%r16···1037103710381038 b do_cpu_irq_mask10391039 ldo R%intr_return(%r2), %r2 /* return to intr_return, not here */10401040-ENDPROC(syscall_exit_rfi)10401040+ENDPROC_CFI(syscall_exit_rfi)104110411042104210431043 /* Generic interruptions (illegal insn, unaligned, page fault, etc) */1044104410451045-ENTRY(intr_save) /* for os_hpmc */10451045+ENTRY_CFI(intr_save) /* for os_hpmc */10461046 mfsp %sr7,%r1610471047 cmpib,COND(=),n 0,%r16,1f10481048 get_stack_use_cr30···1117111711181118 b handle_interruption11191119 ldo R%intr_check_sig(%r2), %r211201120-ENDPROC(intr_save)11201120+ENDPROC_CFI(intr_save)112111211122112211231123 /*···17201720 .endm1721172117221722 .macro fork_like name17231723-ENTRY(sys_\name\()_wrapper)17231723+ENTRY_CFI(sys_\name\()_wrapper)17241724 LDREG TI_TASK-THREAD_SZ_ALGN-FRAME_SIZE(%r30), %r117251725 ldo TASK_REGS(%r1),%r117261726 reg_save %r1···17281728 ldil L%sys_\name, %r3117291729 be R%sys_\name(%sr4,%r31)17301730 STREG %r28, PT_CR27(%r1)17311731-ENDPROC(sys_\name\()_wrapper)17311731+ENDPROC_CFI(sys_\name\()_wrapper)17321732 .endm1733173317341734fork_like clone···17361736fork_like vfork1737173717381738 /* Set the return value for the child */17391739-ENTRY(child_return)17391739+ENTRY_CFI(child_return)17401740 BL schedule_tail, %r217411741 nop17421742finish_child_return:···17481748 reg_restore %r117491749 b syscall_exit17501750 copy %r0,%r2817511751-ENDPROC(child_return)17511751+ENDPROC_CFI(child_return)1752175217531753-ENTRY(sys_rt_sigreturn_wrapper)17531753+ENTRY_CFI(sys_rt_sigreturn_wrapper)17541754 LDREG TI_TASK-THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r2617551755 ldo TASK_REGS(%r26),%r26 /* get pt regs */17561756 /* Don't save regs, we are going to restore them from sigcontext. */···17781778 */17791779 bv %r0(%r2)17801780 LDREG PT_GR28(%r1),%r28 /* reload original r28 for syscall_exit */17811781-ENDPROC(sys_rt_sigreturn_wrapper)17811781+ENDPROC_CFI(sys_rt_sigreturn_wrapper)1782178217831783-ENTRY(syscall_exit)17831783+ENTRY_CFI(syscall_exit)17841784 /* NOTE: Not all syscalls exit this way. rt_sigreturn will exit17851785 * via syscall_exit_rfi if the signal was received while the process17861786 * was running.···19791979#else19801980 nop19811981#endif19821982-ENDPROC(syscall_exit)19821982+ENDPROC_CFI(syscall_exit)198319831984198419851985#ifdef CONFIG_FUNCTION_TRACER···20232023 .align 820242024 .globl return_to_handler20252025 .type return_to_handler, @function20262026-ENTRY(return_to_handler)20262026+ENTRY_CFI(return_to_handler)20272027 .proc20282028 .callinfo caller,frame=FRAME_SIZE20292029 .entry···20672067 LDREGM -FRAME_SIZE(%sp),%r320682068 .exit20692069 .procend20702070-ENDPROC(return_to_handler)20702070+ENDPROC_CFI(return_to_handler)2071207120722072#endif /* CONFIG_FUNCTION_GRAPH_TRACER */20732073···20762076#ifdef CONFIG_IRQSTACKS20772077/* void call_on_stack(unsigned long param1, void *func,20782078 unsigned long new_stack) */20792079-ENTRY(call_on_stack)20792079+ENTRY_CFI(call_on_stack)20802080 copy %sp, %r12081208120822082 /* Regarding the HPPA calling conventions for function pointers,···21122112 bv (%rp)21132113 LDREG -68(%sp), %sp21142114# endif /* CONFIG_64BIT */21152115-ENDPROC(call_on_stack)21152115+ENDPROC_CFI(call_on_stack)21162116#endif /* CONFIG_IRQSTACKS */2117211721182118-get_register:21182118+ENTRY_CFI(get_register)21192119 /*21202120 * get_register is used by the non access tlb miss handlers to21212121 * copy the value of the general register specified in r8 into···21922192 copy %r30,%r121932193 bv %r0(%r25) /* r31 */21942194 copy %r31,%r121952195+ENDPROC_CFI(get_register)219521962196219721972197-set_register:21982198+ENTRY_CFI(set_register)21982199 /*21992200 * set_register is used by the non access tlb miss handlers to22002201 * copy the value of r1 into the general register specified in···22672266 copy %r1,%r3022682267 bv %r0(%r25) /* r31 */22692268 copy %r1,%r3122692269+ENDPROC_CFI(set_register)22702270