/* SPDX-License-Identifier: GPL-2.0
 *
 * Copyright (C) 2009 Matt Fleming <matt@console-pimps.org>
 */
#ifndef __ASM_SH_DWARF_H
#define __ASM_SH_DWARF_H

#ifdef CONFIG_DWARF_UNWINDER

/*
 * DWARF expression operations
 */
#define DW_OP_addr	0x03
#define DW_OP_deref	0x06
#define DW_OP_const1u	0x08
#define DW_OP_const1s	0x09
#define DW_OP_const2u	0x0a
#define DW_OP_const2s	0x0b
#define DW_OP_const4u	0x0c
#define DW_OP_const4s	0x0d
#define DW_OP_const8u	0x0e
#define DW_OP_const8s	0x0f
#define DW_OP_constu	0x10
#define DW_OP_consts	0x11
#define DW_OP_dup	0x12
#define DW_OP_drop	0x13
#define DW_OP_over	0x14
#define DW_OP_pick	0x15
#define DW_OP_swap	0x16
#define DW_OP_rot	0x17
#define DW_OP_xderef	0x18
#define DW_OP_abs	0x19
#define DW_OP_and	0x1a
#define DW_OP_div	0x1b
#define DW_OP_minus	0x1c
#define DW_OP_mod	0x1d
#define DW_OP_mul	0x1e
#define DW_OP_neg	0x1f
#define DW_OP_not	0x20
#define DW_OP_or	0x21
#define DW_OP_plus	0x22
#define DW_OP_plus_uconst	0x23
#define DW_OP_shl	0x24
#define DW_OP_shr	0x25
#define DW_OP_shra	0x26
#define DW_OP_xor	0x27
#define DW_OP_skip	0x2f
#define DW_OP_bra	0x28
#define DW_OP_eq	0x29
#define DW_OP_ge	0x2a
#define DW_OP_gt	0x2b
#define DW_OP_le	0x2c
#define DW_OP_lt	0x2d
#define DW_OP_ne	0x2e
#define DW_OP_lit0	0x30
#define DW_OP_lit1	0x31
#define DW_OP_lit2	0x32
#define DW_OP_lit3	0x33
#define DW_OP_lit4	0x34
#define DW_OP_lit5	0x35
#define DW_OP_lit6	0x36
#define DW_OP_lit7	0x37
#define DW_OP_lit8	0x38
#define DW_OP_lit9	0x39
#define DW_OP_lit10	0x3a
#define DW_OP_lit11	0x3b
#define DW_OP_lit12	0x3c
#define DW_OP_lit13	0x3d
#define DW_OP_lit14	0x3e
#define DW_OP_lit15	0x3f
#define DW_OP_lit16	0x40
#define DW_OP_lit17	0x41
#define DW_OP_lit18	0x42
#define DW_OP_lit19	0x43
#define DW_OP_lit20	0x44
#define DW_OP_lit21	0x45
#define DW_OP_lit22	0x46
#define DW_OP_lit23	0x47
#define DW_OP_lit24	0x48
#define DW_OP_lit25	0x49
#define DW_OP_lit26	0x4a
#define DW_OP_lit27	0x4b
#define DW_OP_lit28	0x4c
#define DW_OP_lit29	0x4d
#define DW_OP_lit30	0x4e
#define DW_OP_lit31	0x4f
#define DW_OP_reg0	0x50
#define DW_OP_reg1	0x51
#define DW_OP_reg2	0x52
#define DW_OP_reg3	0x53
#define DW_OP_reg4	0x54
#define DW_OP_reg5	0x55
#define DW_OP_reg6	0x56
#define DW_OP_reg7	0x57
#define DW_OP_reg8	0x58
#define DW_OP_reg9	0x59
#define DW_OP_reg10	0x5a
#define DW_OP_reg11	0x5b
#define DW_OP_reg12	0x5c
#define DW_OP_reg13	0x5d
#define DW_OP_reg14	0x5e
#define DW_OP_reg15	0x5f
#define DW_OP_reg16	0x60
#define DW_OP_reg17	0x61
#define DW_OP_reg18	0x62
#define DW_OP_reg19	0x63
#define DW_OP_reg20	0x64
#define DW_OP_reg21	0x65
#define DW_OP_reg22	0x66
#define DW_OP_reg23	0x67
#define DW_OP_reg24	0x68
#define DW_OP_reg25	0x69
#define DW_OP_reg26	0x6a
#define DW_OP_reg27	0x6b
#define DW_OP_reg28	0x6c
#define DW_OP_reg29	0x6d
#define DW_OP_reg30	0x6e
#define DW_OP_reg31	0x6f
#define DW_OP_breg0	0x70
#define DW_OP_breg1	0x71
#define DW_OP_breg2	0x72
#define DW_OP_breg3	0x73
#define DW_OP_breg4	0x74
#define DW_OP_breg5	0x75
#define DW_OP_breg6	0x76
#define DW_OP_breg7	0x77
#define DW_OP_breg8	0x78
#define DW_OP_breg9	0x79
#define DW_OP_breg10	0x7a
#define DW_OP_breg11	0x7b
#define DW_OP_breg12	0x7c
#define DW_OP_breg13	0x7d
#define DW_OP_breg14	0x7e
#define DW_OP_breg15	0x7f
#define DW_OP_breg16	0x80
#define DW_OP_breg17	0x81
#define DW_OP_breg18	0x82
#define DW_OP_breg19	0x83
#define DW_OP_breg20	0x84
#define DW_OP_breg21	0x85
#define DW_OP_breg22	0x86
#define DW_OP_breg23	0x87
#define DW_OP_breg24	0x88
#define DW_OP_breg25	0x89
#define DW_OP_breg26	0x8a
#define DW_OP_breg27	0x8b
#define DW_OP_breg28	0x8c
#define DW_OP_breg29	0x8d
#define DW_OP_breg30	0x8e
#define DW_OP_breg31	0x8f
#define DW_OP_regx	0x90
#define DW_OP_fbreg	0x91
#define DW_OP_bregx	0x92
#define DW_OP_piece	0x93
#define DW_OP_deref_size	0x94
#define DW_OP_xderef_size	0x95
#define DW_OP_nop	0x96
#define DW_OP_push_object_address	0x97
#define DW_OP_call2	0x98
#define DW_OP_call4	0x99
#define DW_OP_call_ref	0x9a
#define DW_OP_form_tls_address	0x9b
#define DW_OP_call_frame_cfa	0x9c
#define DW_OP_bit_piece	0x9d
#define DW_OP_lo_user	0xe0
#define DW_OP_hi_user	0xff

/*
 * Addresses used in FDE entries in the .eh_frame section may be encoded
 * using one of the following encodings.
 */
#define DW_EH_PE_absptr	0x00
#define DW_EH_PE_omit	0xff
#define DW_EH_PE_uleb128	0x01
#define DW_EH_PE_udata2	0x02
#define DW_EH_PE_udata4	0x03
#define DW_EH_PE_udata8	0x04
#define DW_EH_PE_sleb128	0x09
#define DW_EH_PE_sdata2	0x0a
#define DW_EH_PE_sdata4	0x0b
#define DW_EH_PE_sdata8	0x0c
#define DW_EH_PE_signed	0x09

#define DW_EH_PE_pcrel	0x10

/*
 * The architecture-specific register number that contains the return
 * address in the .debug_frame table.
 */
#define DWARF_ARCH_RA_REG	17

#ifndef __ASSEMBLER__

#include <linux/compiler.h>
#include <linux/bug.h>
#include <linux/list.h>
#include <linux/module.h>

/*
 * Read either the frame pointer (r14) or the stack pointer (r15).
 * NOTE: this MUST be inlined.
 */
static __always_inline unsigned long dwarf_read_arch_reg(unsigned int reg)
{
	unsigned long value = 0;

	switch (reg) {
	case 14:
		__asm__ __volatile__("mov r14, %0\n" : "=r" (value));
		break;
	case 15:
		__asm__ __volatile__("mov r15, %0\n" : "=r" (value));
		break;
	default:
		BUG();
	}

	return value;
}

/**
 *	dwarf_cie - Common Information Entry
 */
struct dwarf_cie {
	unsigned long length;
	unsigned long cie_id;
	unsigned char version;
	const char *augmentation;
	unsigned int code_alignment_factor;
	int data_alignment_factor;

	/* Which column in the rule table represents return addr of func. */
	unsigned int return_address_reg;

	unsigned char *initial_instructions;
	unsigned char *instructions_end;

	unsigned char encoding;

	unsigned long cie_pointer;

	unsigned long flags;
#define DWARF_CIE_Z_AUGMENTATION	(1 << 0)

	/* linked-list entry if this CIE is from a module */
	struct list_head link;

	struct rb_node node;
};

/**
 *	dwarf_fde - Frame Description Entry
 */
struct dwarf_fde {
	unsigned long length;
	unsigned long cie_pointer;
	struct dwarf_cie *cie;
	unsigned long initial_location;
	unsigned long address_range;
	unsigned char *instructions;
	unsigned char *end;

	/* linked-list entry if this FDE is from a module */
	struct list_head link;

	struct rb_node node;
};

/**
 *	dwarf_frame - DWARF information for a frame in the call stack
 */
struct dwarf_frame {
	struct dwarf_frame *prev, *next;

	unsigned long pc;

	struct list_head reg_list;

	unsigned long cfa;

	/* Valid when DW_FRAME_CFA_REG_OFFSET is set in flags */
	unsigned int cfa_register;
	unsigned int cfa_offset;

	/* Valid when DW_FRAME_CFA_REG_EXP is set in flags */
	unsigned char *cfa_expr;
	unsigned int cfa_expr_len;

	unsigned long flags;
#define DWARF_FRAME_CFA_REG_OFFSET	(1 << 0)
#define DWARF_FRAME_CFA_REG_EXP		(1 << 1)

	unsigned long return_addr;
};

/**
 *	dwarf_reg - DWARF register
 *	@flags: Describes how to calculate the value of this register
 */
struct dwarf_reg {
	struct list_head link;

	unsigned int number;

	unsigned long addr;
	unsigned long flags;
#define DWARF_REG_OFFSET	(1 << 0)
#define DWARF_VAL_OFFSET	(1 << 1)
#define DWARF_UNDEFINED		(1 << 2)
};

/*
 * Call Frame instruction opcodes.
 */
#define DW_CFA_advance_loc	0x40
#define DW_CFA_offset		0x80
#define DW_CFA_restore		0xc0
#define DW_CFA_nop		0x00
#define DW_CFA_set_loc		0x01
#define DW_CFA_advance_loc1	0x02
#define DW_CFA_advance_loc2	0x03
#define DW_CFA_advance_loc4	0x04
#define DW_CFA_offset_extended	0x05
#define DW_CFA_restore_extended	0x06
#define DW_CFA_undefined	0x07
#define DW_CFA_same_value	0x08
#define DW_CFA_register		0x09
#define DW_CFA_remember_state	0x0a
#define DW_CFA_restore_state	0x0b
#define DW_CFA_def_cfa		0x0c
#define DW_CFA_def_cfa_register	0x0d
#define DW_CFA_def_cfa_offset	0x0e
#define DW_CFA_def_cfa_expression	0x0f
#define DW_CFA_expression	0x10
#define DW_CFA_offset_extended_sf	0x11
#define DW_CFA_def_cfa_sf	0x12
#define DW_CFA_def_cfa_offset_sf	0x13
#define DW_CFA_val_offset	0x14
#define DW_CFA_val_offset_sf	0x15
#define DW_CFA_val_expression	0x16
#define DW_CFA_lo_user		0x1c
#define DW_CFA_hi_user		0x3f

/* GNU extension opcodes  */
#define DW_CFA_GNU_args_size	0x2e
#define DW_CFA_GNU_negative_offset_extended 0x2f

/*
 * Some call frame instructions encode their operands in the opcode. We
 * need some helper functions to extract both the opcode and operands
 * from an instruction.
 */
static inline unsigned int DW_CFA_opcode(unsigned long insn)
{
	return (insn & 0xc0);
}

static inline unsigned int DW_CFA_operand(unsigned long insn)
{
	return (insn & 0x3f);
}

#define DW_EH_FRAME_CIE	0		/* .eh_frame CIE IDs are 0 */
#define DW_CIE_ID	0xffffffff
#define DW64_CIE_ID	0xffffffffffffffffULL

/*
 * DWARF FDE/CIE length field values.
 */
#define DW_EXT_LO	0xfffffff0
#define DW_EXT_HI	0xffffffff
#define DW_EXT_DWARF64	DW_EXT_HI

extern struct dwarf_frame *dwarf_unwind_stack(unsigned long,
					      struct dwarf_frame *);
extern void dwarf_free_frame(struct dwarf_frame *);

extern int module_dwarf_finalize(const Elf_Ehdr *, const Elf_Shdr *,
				 struct module *);
extern void module_dwarf_cleanup(struct module *);

#endif /* !__ASSEMBLER__ */

#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

#else

/*
 * Use the asm comment character to ignore the rest of the line.
 */
#define CFI_IGNORE	!

#define CFI_STARTPROC	CFI_IGNORE
#define CFI_ENDPROC	CFI_IGNORE
#define CFI_DEF_CFA	CFI_IGNORE
#define CFI_REGISTER	CFI_IGNORE
#define CFI_REL_OFFSET	CFI_IGNORE
#define CFI_UNDEFINED	CFI_IGNORE

#ifndef __ASSEMBLER__
static inline void dwarf_unwinder_init(void)
{
}

#define module_dwarf_finalize(hdr, sechdrs, me)	(0)
#define module_dwarf_cleanup(mod)		do { } while (0)

#endif

#endif /* CONFIG_DWARF_UNWINDER */

#endif /* __ASM_SH_DWARF_H */
