Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f39cce65 authored by Helge Deller's avatar Helge Deller
Browse files

parisc: Add cfi_startproc and cfi_endproc to assembly code



Add ENTRY_CFI() and ENDPROC_CFI() macros for dwarf debug info and
convert assembly users to new macros.

Signed-off-by: default avatarHelge Deller <deller@gmx.de>
parent 2929e738
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2016 Helge Deller <deller@gmx.de>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */

#ifndef _ASM_PARISC_DWARF_H
#define _ASM_PARISC_DWARF_H

#ifdef __ASSEMBLY__

#define CFI_STARTPROC	.cfi_startproc
#define CFI_ENDPROC	.cfi_endproc
#define CFI_DEF_CFA	.cfi_def_cfa
#define CFI_REGISTER	.cfi_register
#define CFI_REL_OFFSET	.cfi_rel_offset
#define CFI_UNDEFINED	.cfi_undefined

#endif	/* __ASSEMBLY__ */

#endif	/* _ASM_PARISC_DWARF_H */
+12 −0
Original line number Diff line number Diff line
#ifndef __ASM_PARISC_LINKAGE_H
#define __ASM_PARISC_LINKAGE_H

#include <asm/dwarf.h>

#ifndef __ALIGN
#define __ALIGN         .align 4
#define __ALIGN_STR     ".align 4"
@@ -10,6 +12,8 @@
 * In parisc assembly a semicolon marks a comment while a
 * exclamation mark is used to separate independent lines.
 */
#define ASM_NL	!

#ifdef __ASSEMBLY__

#define ENTRY(name) \
@@ -26,6 +30,14 @@
	END(name)
#endif

#define ENTRY_CFI(name) \
	ENTRY(name)	ASM_NL\
	CFI_STARTPROC

#define ENDPROC_CFI(name) \
	ENDPROC(name)	ASM_NL\
	CFI_ENDPROC

#endif /* __ASSEMBLY__ */

#endif  /* __ASM_PARISC_LINKAGE_H */
+24 −22
Original line number Diff line number Diff line
@@ -766,7 +766,7 @@ ENTRY(end_fault_vector)
	 * copy_thread moved args into task save area.
	 */

ENTRY(ret_from_kernel_thread)
ENTRY_CFI(ret_from_kernel_thread)

	/* Call schedule_tail first though */
	BL	schedule_tail, %r2
@@ -782,7 +782,7 @@ ENTRY(ret_from_kernel_thread)
	copy	%r31, %r2
	b	finish_child_return
	nop
ENDPROC(ret_from_kernel_thread)
ENDPROC_CFI(ret_from_kernel_thread)


	/*
@@ -790,7 +790,7 @@ ENDPROC(ret_from_kernel_thread)
	 *	struct task_struct *next)
	 *
	 * switch kernel stacks and return prev */
ENTRY(_switch_to)
ENTRY_CFI(_switch_to)
	STREG	 %r2, -RP_OFFSET(%r30)

	callee_save_float
@@ -815,7 +815,7 @@ _switch_to_ret:
	LDREG	-RP_OFFSET(%r30), %r2
	bv	%r0(%r2)
	copy	%r26, %r28
ENDPROC(_switch_to)
ENDPROC_CFI(_switch_to)

	/*
	 * Common rfi return path for interruptions, kernel execve, and
@@ -833,7 +833,7 @@ ENDPROC(_switch_to)

	.align	PAGE_SIZE

ENTRY(syscall_exit_rfi)
ENTRY_CFI(syscall_exit_rfi)
	mfctl   %cr30,%r16
	LDREG	TI_TASK(%r16), %r16	/* thread_info -> task_struct */
	ldo	TASK_REGS(%r16),%r16
@@ -1037,12 +1037,12 @@ intr_extint:

	b	do_cpu_irq_mask
	ldo	R%intr_return(%r2), %r2	/* return to intr_return, not here */
ENDPROC(syscall_exit_rfi)
ENDPROC_CFI(syscall_exit_rfi)


	/* Generic interruptions (illegal insn, unaligned, page fault, etc) */

ENTRY(intr_save)		/* for os_hpmc */
ENTRY_CFI(intr_save)		/* for os_hpmc */
	mfsp    %sr7,%r16
	cmpib,COND(=),n 0,%r16,1f
	get_stack_use_cr30
@@ -1117,7 +1117,7 @@ skip_save_ior:

	b		handle_interruption
	ldo		R%intr_check_sig(%r2), %r2
ENDPROC(intr_save)
ENDPROC_CFI(intr_save)


	/*
@@ -1720,7 +1720,7 @@ dtlb_fault:
	.endm

	.macro	fork_like name
ENTRY(sys_\name\()_wrapper)
ENTRY_CFI(sys_\name\()_wrapper)
	LDREG	TI_TASK-THREAD_SZ_ALGN-FRAME_SIZE(%r30), %r1
	ldo	TASK_REGS(%r1),%r1
	reg_save %r1
@@ -1728,7 +1728,7 @@ ENTRY(sys_\name\()_wrapper)
	ldil	L%sys_\name, %r31
	be	R%sys_\name(%sr4,%r31)
	STREG	%r28, PT_CR27(%r1)
ENDPROC(sys_\name\()_wrapper)
ENDPROC_CFI(sys_\name\()_wrapper)
	.endm

fork_like clone
@@ -1736,7 +1736,7 @@ fork_like fork
fork_like vfork

	/* Set the return value for the child */
ENTRY(child_return)
ENTRY_CFI(child_return)
	BL	schedule_tail, %r2
	nop
finish_child_return:
@@ -1748,9 +1748,9 @@ finish_child_return:
	reg_restore %r1
	b	syscall_exit
	copy	%r0,%r28
ENDPROC(child_return)
ENDPROC_CFI(child_return)

ENTRY(sys_rt_sigreturn_wrapper)
ENTRY_CFI(sys_rt_sigreturn_wrapper)
	LDREG	TI_TASK-THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r26
	ldo	TASK_REGS(%r26),%r26	/* get pt regs */
	/* Don't save regs, we are going to restore them from sigcontext. */
@@ -1778,9 +1778,9 @@ ENTRY(sys_rt_sigreturn_wrapper)
	 */
	bv	%r0(%r2)
	LDREG	PT_GR28(%r1),%r28  /* reload original r28 for syscall_exit */
ENDPROC(sys_rt_sigreturn_wrapper)
ENDPROC_CFI(sys_rt_sigreturn_wrapper)

ENTRY(syscall_exit)
ENTRY_CFI(syscall_exit)
	/* NOTE: Not all syscalls exit this way.  rt_sigreturn will exit
	 * via syscall_exit_rfi if the signal was received while the process
	 * was running.
@@ -1979,7 +1979,7 @@ syscall_do_resched:
#else
	nop
#endif
ENDPROC(syscall_exit)
ENDPROC_CFI(syscall_exit)


#ifdef CONFIG_FUNCTION_TRACER
@@ -2023,7 +2023,7 @@ ENDPROC(mcount)
	.align 8
	.globl return_to_handler
	.type  return_to_handler, @function
ENTRY(return_to_handler)
ENTRY_CFI(return_to_handler)
	.proc
	.callinfo caller,frame=FRAME_SIZE
	.entry
@@ -2067,7 +2067,7 @@ parisc_return_to_handler:
	LDREGM -FRAME_SIZE(%sp),%r3
	.exit
	.procend
ENDPROC(return_to_handler)
ENDPROC_CFI(return_to_handler)

#endif /* CONFIG_FUNCTION_GRAPH_TRACER */

@@ -2076,7 +2076,7 @@ ENDPROC(return_to_handler)
#ifdef CONFIG_IRQSTACKS
/* void call_on_stack(unsigned long param1, void *func,
		      unsigned long new_stack) */
ENTRY(call_on_stack)
ENTRY_CFI(call_on_stack)
	copy	%sp, %r1

	/* Regarding the HPPA calling conventions for function pointers,
@@ -2112,10 +2112,10 @@ ENTRY(call_on_stack)
	bv	(%rp)
	LDREG	-68(%sp), %sp
# endif /* CONFIG_64BIT */
ENDPROC(call_on_stack)
ENDPROC_CFI(call_on_stack)
#endif /* CONFIG_IRQSTACKS */

get_register:
ENTRY_CFI(get_register)
	/*
	 * get_register is used by the non access tlb miss handlers to
	 * copy the value of the general register specified in r8 into
@@ -2192,9 +2192,10 @@ get_register:
	copy    %r30,%r1
	bv      %r0(%r25)    /* r31 */
	copy    %r31,%r1
ENDPROC_CFI(get_register)


set_register:
ENTRY_CFI(set_register)
	/*
	 * set_register is used by the non access tlb miss handlers to
	 * copy the value of r1 into the general register specified in
@@ -2266,4 +2267,5 @@ set_register:
	copy    %r1,%r30
	bv      %r0(%r25)    /* r31 */
	copy    %r1,%r31
ENDPROC_CFI(set_register)
+2 −2
Original line number Diff line number Diff line
@@ -83,7 +83,7 @@ END(hpmc_pim_data)
	.text

	.import intr_save, code
ENTRY(os_hpmc)
ENTRY_CFI(os_hpmc)
.os_hpmc:

	/*
@@ -299,7 +299,7 @@ os_hpmc_6:

	b .
	nop
ENDPROC(os_hpmc)
ENDPROC_CFI(os_hpmc)
.os_hpmc_end:


+34 −34
Original line number Diff line number Diff line
@@ -41,7 +41,7 @@
	.text
	.align	128

ENTRY(flush_tlb_all_local)
ENTRY_CFI(flush_tlb_all_local)
	.proc
	.callinfo NO_CALLS
	.entry
@@ -190,11 +190,11 @@ fdtdone:

	.exit
	.procend
ENDPROC(flush_tlb_all_local)
ENDPROC_CFI(flush_tlb_all_local)

	.import cache_info,data

ENTRY(flush_instruction_cache_local)
ENTRY_CFI(flush_instruction_cache_local)
	.proc
	.callinfo NO_CALLS
	.entry
@@ -257,11 +257,11 @@ fisync:
	.exit

	.procend
ENDPROC(flush_instruction_cache_local)
ENDPROC_CFI(flush_instruction_cache_local)


	.import cache_info, data
ENTRY(flush_data_cache_local)
ENTRY_CFI(flush_data_cache_local)
	.proc
	.callinfo NO_CALLS
	.entry
@@ -325,7 +325,7 @@ fdsync:
	.exit

	.procend
ENDPROC(flush_data_cache_local)
ENDPROC_CFI(flush_data_cache_local)

	.align	16

@@ -356,7 +356,7 @@ ENDPROC(flush_data_cache_local)

/* Clear page using kernel mapping.  */

ENTRY(clear_page_asm)
ENTRY_CFI(clear_page_asm)
	.proc
	.callinfo NO_CALLS
	.entry
@@ -422,11 +422,11 @@ ENTRY(clear_page_asm)
	.exit

	.procend
ENDPROC(clear_page_asm)
ENDPROC_CFI(clear_page_asm)

/* Copy page using kernel mapping.  */

ENTRY(copy_page_asm)
ENTRY_CFI(copy_page_asm)
	.proc
	.callinfo NO_CALLS
	.entry
@@ -540,7 +540,7 @@ ENTRY(copy_page_asm)
	.exit

	.procend
ENDPROC(copy_page_asm)
ENDPROC_CFI(copy_page_asm)

/*
 * NOTE: Code in clear_user_page has a hard coded dependency on the
@@ -592,7 +592,7 @@ ENDPROC(copy_page_asm)
	 *
	 */

ENTRY(copy_user_page_asm)
ENTRY_CFI(copy_user_page_asm)
	.proc
	.callinfo NO_CALLS
	.entry
@@ -748,9 +748,9 @@ ENTRY(copy_user_page_asm)
	.exit

	.procend
ENDPROC(copy_user_page_asm)
ENDPROC_CFI(copy_user_page_asm)

ENTRY(clear_user_page_asm)
ENTRY_CFI(clear_user_page_asm)
	.proc
	.callinfo NO_CALLS
	.entry
@@ -834,9 +834,9 @@ ENTRY(clear_user_page_asm)
	.exit

	.procend
ENDPROC(clear_user_page_asm)
ENDPROC_CFI(clear_user_page_asm)

ENTRY(flush_dcache_page_asm)
ENTRY_CFI(flush_dcache_page_asm)
	.proc
	.callinfo NO_CALLS
	.entry
@@ -910,9 +910,9 @@ ENTRY(flush_dcache_page_asm)
	.exit

	.procend
ENDPROC(flush_dcache_page_asm)
ENDPROC_CFI(flush_dcache_page_asm)

ENTRY(flush_icache_page_asm)
ENTRY_CFI(flush_icache_page_asm)
	.proc
	.callinfo NO_CALLS
	.entry
@@ -988,9 +988,9 @@ ENTRY(flush_icache_page_asm)
	.exit

	.procend
ENDPROC(flush_icache_page_asm)
ENDPROC_CFI(flush_icache_page_asm)

ENTRY(flush_kernel_dcache_page_asm)
ENTRY_CFI(flush_kernel_dcache_page_asm)
	.proc
	.callinfo NO_CALLS
	.entry
@@ -1031,9 +1031,9 @@ ENTRY(flush_kernel_dcache_page_asm)
	.exit

	.procend
ENDPROC(flush_kernel_dcache_page_asm)
ENDPROC_CFI(flush_kernel_dcache_page_asm)

ENTRY(purge_kernel_dcache_page_asm)
ENTRY_CFI(purge_kernel_dcache_page_asm)
	.proc
	.callinfo NO_CALLS
	.entry
@@ -1073,9 +1073,9 @@ ENTRY(purge_kernel_dcache_page_asm)
	.exit

	.procend
ENDPROC(purge_kernel_dcache_page_asm)
ENDPROC_CFI(purge_kernel_dcache_page_asm)

ENTRY(flush_user_dcache_range_asm)
ENTRY_CFI(flush_user_dcache_range_asm)
	.proc
	.callinfo NO_CALLS
	.entry
@@ -1094,9 +1094,9 @@ ENTRY(flush_user_dcache_range_asm)
	.exit

	.procend
ENDPROC(flush_user_dcache_range_asm)
ENDPROC_CFI(flush_user_dcache_range_asm)

ENTRY(flush_kernel_dcache_range_asm)
ENTRY_CFI(flush_kernel_dcache_range_asm)
	.proc
	.callinfo NO_CALLS
	.entry
@@ -1116,9 +1116,9 @@ ENTRY(flush_kernel_dcache_range_asm)
	.exit

	.procend
ENDPROC(flush_kernel_dcache_range_asm)
ENDPROC_CFI(flush_kernel_dcache_range_asm)

ENTRY(flush_user_icache_range_asm)
ENTRY_CFI(flush_user_icache_range_asm)
	.proc
	.callinfo NO_CALLS
	.entry
@@ -1137,9 +1137,9 @@ ENTRY(flush_user_icache_range_asm)
	.exit

	.procend
ENDPROC(flush_user_icache_range_asm)
ENDPROC_CFI(flush_user_icache_range_asm)

ENTRY(flush_kernel_icache_page)
ENTRY_CFI(flush_kernel_icache_page)
	.proc
	.callinfo NO_CALLS
	.entry
@@ -1180,9 +1180,9 @@ ENTRY(flush_kernel_icache_page)
	.exit

	.procend
ENDPROC(flush_kernel_icache_page)
ENDPROC_CFI(flush_kernel_icache_page)

ENTRY(flush_kernel_icache_range_asm)
ENTRY_CFI(flush_kernel_icache_range_asm)
	.proc
	.callinfo NO_CALLS
	.entry
@@ -1200,13 +1200,13 @@ ENTRY(flush_kernel_icache_range_asm)
	nop
	.exit
	.procend
ENDPROC(flush_kernel_icache_range_asm)
ENDPROC_CFI(flush_kernel_icache_range_asm)

	/* align should cover use of rfi in disable_sr_hashing_asm and
	 * srdis_done.
	 */
	.align	256
ENTRY(disable_sr_hashing_asm)
ENTRY_CFI(disable_sr_hashing_asm)
	.proc
	.callinfo NO_CALLS
	.entry
@@ -1295,6 +1295,6 @@ srdis_done:
	.exit

	.procend
ENDPROC(disable_sr_hashing_asm)
ENDPROC_CFI(disable_sr_hashing_asm)

	.end
Loading