400 lines
10 KiB
ArmAsm
400 lines
10 KiB
ArmAsm
/* This testcase is part of GDB, the GNU debugger.
|
|
|
|
Copyright 2011-2017 Free Software Foundation, Inc.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
|
|
#if PTRBITS == 64
|
|
# define PTRBYTE .8byte
|
|
#elif PTRBITS == 32
|
|
# define PTRBYTE .4byte
|
|
#else
|
|
# error "Unsupported pointer size"
|
|
#endif
|
|
|
|
.section .debug_info
|
|
.Lcu1_begin:
|
|
/* CU header */
|
|
.4byte .Lcu1_end - .Lcu1_start /* Length of Compilation Unit */
|
|
.Lcu1_start:
|
|
.2byte 2 /* DWARF Version */
|
|
.4byte .Labbrev1_begin /* Offset into abbrev section */
|
|
.byte PTRBITS / 8 /* Pointer size */
|
|
|
|
/* CU die */
|
|
.uleb128 1 /* Abbrev: DW_TAG_compile_unit */
|
|
.4byte .Lline1_begin /* DW_AT_stmt_list */
|
|
PTRBYTE func_start /* DW_AT_low_pc */
|
|
PTRBYTE func_end /* DW_AT_high_pc */
|
|
.ascii "main.c\0" /* DW_AT_name */
|
|
.ascii "GNU C 4.5.0\0" /* DW_AT_producer must be >= 4.5 */
|
|
.byte 2 /* DW_AT_language (DW_LANG_C) */
|
|
|
|
.uleb128 2 /* Abbrev: DW_TAG_subprogram */
|
|
.byte 1 /* DW_AT_external */
|
|
.ascii "func\0" /* DW_AT_name */
|
|
.4byte .Ltype_int-.Lcu1_begin /* DW_AT_type */
|
|
PTRBYTE func_start /* DW_AT_low_pc */
|
|
PTRBYTE func_end /* DW_AT_high_pc */
|
|
|
|
/* GDB `has_loclist' detection of -O2 -g code needs to see a DW_AT_location
|
|
location list. There may exist -O2 -g CUs still not needing/using any such
|
|
location list - exactly like this CU. Make one up. */
|
|
|
|
.uleb128 0x7 /* (DIE (0x42) DW_TAG_formal_parameter) */
|
|
.ascii "param\0" /* DW_AT_name */
|
|
.4byte .Ltype_int - .Lcu1_begin /* DW_AT_type */
|
|
.4byte loclist /* DW_AT_location */
|
|
|
|
.uleb128 4 /* Abbrev: DW_TAG_inlined_subroutine */
|
|
.ascii "inlined\0" /* DW_AT_name */
|
|
PTRBYTE func0 /* DW_AT_low_pc */
|
|
PTRBYTE func1 /* DW_AT_high_pc */
|
|
.byte 3 /* DW_AT_inline (DW_INL_declared_inlined) */
|
|
.byte 1 /* DW_AT_call_file */
|
|
.byte 8 /* DW_AT_call_line */
|
|
|
|
.uleb128 4 /* Abbrev: DW_TAG_inlined_subroutine */
|
|
.ascii "inlined2\0" /* DW_AT_name */
|
|
PTRBYTE func2 /* DW_AT_low_pc */
|
|
PTRBYTE func3 /* DW_AT_high_pc */
|
|
.byte 3 /* DW_AT_inline (DW_INL_declared_inlined) */
|
|
.byte 1 /* DW_AT_call_file */
|
|
.byte 11 /* DW_AT_call_line */
|
|
|
|
#ifdef INLINED
|
|
.uleb128 4 /* Abbrev: DW_TAG_inlined_subroutine */
|
|
.ascii "otherinline\0" /* DW_AT_name */
|
|
PTRBYTE func3 /* DW_AT_low_pc */
|
|
PTRBYTE func_end /* DW_AT_high_pc */
|
|
.byte 3 /* DW_AT_inline (DW_INL_declared_inlined) */
|
|
.byte 1 /* DW_AT_call_file */
|
|
.byte 9 /* DW_AT_call_line */
|
|
#endif
|
|
|
|
#ifdef LEXICAL
|
|
.uleb128 5 /* Abbrev: DW_TAG_lexical_block */
|
|
PTRBYTE func3 /* DW_AT_low_pc */
|
|
PTRBYTE func_end /* DW_AT_high_pc */
|
|
|
|
/* GDB would otherwise ignore the DW_TAG_lexical_block. */
|
|
.uleb128 6 /* Abbrev: DW_TAG_variable */
|
|
.ascii "lexicalvar\0" /* DW_AT_name */
|
|
.4byte .Ltype_int-.Lcu1_begin /* DW_AT_type */
|
|
|
|
.byte 0 /* End of children of DW_TAG_lexical_block */
|
|
#endif
|
|
|
|
.byte 0 /* End of children of DW_TAG_subprogram */
|
|
|
|
/* Simulate `fund' is also named `func' so that the function name matches and
|
|
fund's SAL is not discarded in expand_line_sal_maybe. */
|
|
|
|
.uleb128 2 /* Abbrev: DW_TAG_subprogram */
|
|
.byte 1 /* DW_AT_external */
|
|
.ascii "func\0" /* DW_AT_name */
|
|
.4byte .Ltype_int-.Lcu1_begin /* DW_AT_type */
|
|
PTRBYTE fund_start /* DW_AT_low_pc */
|
|
PTRBYTE fund_end /* DW_AT_high_pc */
|
|
|
|
.byte 0 /* End of children of DW_TAG_subprogram */
|
|
|
|
.Ltype_int:
|
|
.uleb128 3 /* Abbrev: DW_TAG_base_type */
|
|
.ascii "int\0" /* DW_AT_name */
|
|
.byte 4 /* DW_AT_byte_size */
|
|
.byte 5 /* DW_AT_encoding */
|
|
|
|
.byte 0 /* End of children of CU */
|
|
|
|
.Lcu1_end:
|
|
|
|
.section .debug_loc
|
|
loclist:
|
|
/* Reset the location list base address first. */
|
|
.4byte -1, 0
|
|
|
|
PTRBYTE func_start, func_end
|
|
.2byte 2f-1f
|
|
1: .byte 0x50 /* DW_OP_reg0 */
|
|
2:
|
|
/* Location list end. */
|
|
.4byte 0, 0
|
|
|
|
/* Abbrev table */
|
|
.section .debug_abbrev
|
|
.Labbrev1_begin:
|
|
.uleb128 1 /* Abbrev code */
|
|
.uleb128 0x11 /* DW_TAG_compile_unit */
|
|
.byte 1 /* has_children */
|
|
.uleb128 0x10 /* DW_AT_stmt_list */
|
|
.uleb128 0x6 /* DW_FORM_data4 */
|
|
.uleb128 0x11 /* DW_AT_low_pc */
|
|
.uleb128 0x1 /* DW_FORM_addr */
|
|
.uleb128 0x12 /* DW_AT_high_pc */
|
|
.uleb128 0x1 /* DW_FORM_addr */
|
|
.uleb128 0x3 /* DW_AT_name */
|
|
.uleb128 0x8 /* DW_FORM_string */
|
|
.uleb128 0x25 /* DW_AT_producer */
|
|
.uleb128 0x8 /* DW_FORM_string */
|
|
.uleb128 0x13 /* DW_AT_language */
|
|
.uleb128 0xb /* DW_FORM_data1 */
|
|
.byte 0x0 /* Terminator */
|
|
.byte 0x0 /* Terminator */
|
|
|
|
.uleb128 2 /* Abbrev code */
|
|
.uleb128 0x2e /* DW_TAG_subprogram */
|
|
.byte 1 /* has_children */
|
|
.uleb128 0x3f /* DW_AT_external */
|
|
.uleb128 0xc /* DW_FORM_flag */
|
|
.uleb128 0x3 /* DW_AT_name */
|
|
.uleb128 0x8 /* DW_FORM_string */
|
|
.uleb128 0x49 /* DW_AT_type */
|
|
.uleb128 0x13 /* DW_FORM_ref4 */
|
|
.uleb128 0x11 /* DW_AT_low_pc */
|
|
.uleb128 0x1 /* DW_FORM_addr */
|
|
.uleb128 0x12 /* DW_AT_high_pc */
|
|
.uleb128 0x1 /* DW_FORM_addr */
|
|
.byte 0x0 /* Terminator */
|
|
.byte 0x0 /* Terminator */
|
|
|
|
.uleb128 3 /* Abbrev code */
|
|
.uleb128 0x24 /* DW_TAG_base_type */
|
|
.byte 0 /* has_children */
|
|
.uleb128 0x3 /* DW_AT_name */
|
|
.uleb128 0x8 /* DW_FORM_string */
|
|
.uleb128 0xb /* DW_AT_byte_size */
|
|
.uleb128 0xb /* DW_FORM_data1 */
|
|
.uleb128 0x3e /* DW_AT_encoding */
|
|
.uleb128 0xb /* DW_FORM_data1 */
|
|
.byte 0x0 /* Terminator */
|
|
.byte 0x0 /* Terminator */
|
|
|
|
.uleb128 4 /* Abbrev code */
|
|
.uleb128 0x1d /* DW_TAG_inlined_subroutine */
|
|
.byte 0 /* has_children */
|
|
.uleb128 0x3 /* DW_AT_name */
|
|
.uleb128 0x8 /* DW_FORM_string */
|
|
.uleb128 0x11 /* DW_AT_low_pc */
|
|
.uleb128 0x1 /* DW_FORM_addr */
|
|
.uleb128 0x12 /* DW_AT_high_pc */
|
|
.uleb128 0x1 /* DW_FORM_addr */
|
|
.uleb128 0x20 /* DW_AT_inline */
|
|
.uleb128 0xb /* DW_FORM_data1 */
|
|
.uleb128 0x58 /* DW_AT_call_file */
|
|
.uleb128 0xb /* DW_FORM_data1 */
|
|
.uleb128 0x59 /* DW_AT_call_line */
|
|
.uleb128 0xb /* DW_FORM_data1 */
|
|
.byte 0x0 /* Terminator */
|
|
.byte 0x0 /* Terminator */
|
|
|
|
.uleb128 5 /* Abbrev code */
|
|
.uleb128 0x0b /* DW_TAG_lexical_block */
|
|
.byte 1 /* has_children */
|
|
.uleb128 0x11 /* DW_AT_low_pc */
|
|
.uleb128 0x1 /* DW_FORM_addr */
|
|
.uleb128 0x12 /* DW_AT_high_pc */
|
|
.uleb128 0x1 /* DW_FORM_addr */
|
|
.byte 0x0 /* Terminator */
|
|
.byte 0x0 /* Terminator */
|
|
|
|
.uleb128 6 /* Abbrev code */
|
|
.uleb128 0x34 /* DW_TAG_variable */
|
|
.byte 0 /* has_children */
|
|
.uleb128 0x3 /* DW_AT_name */
|
|
.uleb128 0x8 /* DW_FORM_string */
|
|
.uleb128 0x49 /* DW_AT_type */
|
|
.uleb128 0x13 /* DW_FORM_ref4 */
|
|
.byte 0x0 /* Terminator */
|
|
.byte 0x0 /* Terminator */
|
|
|
|
.uleb128 0x7 /* (abbrev code) */
|
|
.uleb128 0x5 /* (TAG: DW_TAG_formal_parameter) */
|
|
.byte 0x0 /* DW_children_no */
|
|
.uleb128 0x3 /* DW_AT_name */
|
|
.uleb128 0x8 /* DW_FORM_string */
|
|
.uleb128 0x49 /* (DW_AT_type) */
|
|
.uleb128 0x13 /* (DW_FORM_ref4) */
|
|
.uleb128 0x02 /* (DW_AT_location) */
|
|
.uleb128 0x06 /* (DW_FORM_data4) */
|
|
.byte 0x0
|
|
.byte 0x0
|
|
|
|
.byte 0x0 /* Terminator */
|
|
.byte 0x0 /* Terminator */
|
|
|
|
/* Line table */
|
|
.section .debug_line
|
|
.Lline1_begin:
|
|
.4byte .Lline1_end - .Lline1_start /* Initial length */
|
|
.Lline1_start:
|
|
.2byte 2 /* Version */
|
|
.4byte .Lline1_lines - .Lline1_hdr /* header_length */
|
|
.Lline1_hdr:
|
|
.byte 1 /* Minimum insn length */
|
|
.byte 1 /* default_is_stmt */
|
|
.byte 1 /* line_base */
|
|
.byte 1 /* line_range */
|
|
.byte 0x10 /* opcode_base */
|
|
|
|
/* Standard lengths */
|
|
.byte 0
|
|
.byte 1
|
|
.byte 1
|
|
.byte 1
|
|
.byte 1
|
|
.byte 0
|
|
.byte 0
|
|
.byte 0
|
|
.byte 1
|
|
.byte 0
|
|
.byte 0
|
|
.byte 1
|
|
.byte 0
|
|
.byte 0
|
|
.byte 0
|
|
|
|
/* Include directories */
|
|
.byte 0
|
|
|
|
/* File names */
|
|
.ascii "main.c\0"
|
|
.uleb128 0
|
|
.uleb128 0
|
|
.uleb128 0
|
|
|
|
.ascii "other.c\0"
|
|
.uleb128 0
|
|
.uleb128 0
|
|
.uleb128 0
|
|
|
|
.byte 0
|
|
|
|
.Lline1_lines:
|
|
.byte 0 /* DW_LNE_set_address */
|
|
.uleb128 5
|
|
.byte 2
|
|
PTRBYTE func_start
|
|
.byte 3 /* DW_LNS_advance_line */
|
|
.sleb128 4 /* ... to 5 */
|
|
.byte 1 /* DW_LNS_copy */
|
|
|
|
.byte 0 /* DW_LNE_set_address */
|
|
.uleb128 5
|
|
.byte 2
|
|
PTRBYTE func0
|
|
.byte 4 /* DW_LNS_set_file */
|
|
.uleb128 2
|
|
.byte 3 /* DW_LNS_advance_line */
|
|
.sleb128 -4 /* ... to 1 */
|
|
.byte 1 /* DW_LNS_copy */
|
|
|
|
.byte 0 /* DW_LNE_set_address */
|
|
.uleb128 5
|
|
.byte 2
|
|
PTRBYTE func1
|
|
.byte 4 /* DW_LNS_set_file */
|
|
.uleb128 1
|
|
.byte 3 /* DW_LNS_advance_line */
|
|
.sleb128 8 /* ... to 9 */
|
|
.byte 1 /* DW_LNS_copy */
|
|
|
|
.byte 0 /* DW_LNE_set_address */
|
|
.uleb128 5
|
|
.byte 2
|
|
PTRBYTE func2
|
|
.byte 4 /* DW_LNS_set_file */
|
|
.uleb128 2
|
|
.byte 3 /* DW_LNS_advance_line */
|
|
.sleb128 -8 /* ... to 1 */
|
|
.byte 1 /* DW_LNS_copy */
|
|
|
|
.byte 0 /* DW_LNE_set_address */
|
|
.uleb128 5
|
|
.byte 2
|
|
PTRBYTE func3
|
|
.byte 4 /* DW_LNS_set_file */
|
|
.uleb128 1
|
|
.byte 3 /* DW_LNS_advance_line */
|
|
.sleb128 8 /* ... to 9 */
|
|
.byte 1 /* DW_LNS_copy */
|
|
|
|
.byte 0 /* DW_LNE_set_address */
|
|
.uleb128 5
|
|
.byte 2
|
|
PTRBYTE func_end
|
|
|
|
/* Equivalent copy but renamed s/func/fund/. */
|
|
|
|
.byte 0 /* DW_LNE_set_address */
|
|
.uleb128 5
|
|
.byte 2
|
|
PTRBYTE fund_start
|
|
.byte 3 /* DW_LNS_advance_line */
|
|
.sleb128 -4 /* ... to 5 */
|
|
.byte 1 /* DW_LNS_copy */
|
|
|
|
.byte 0 /* DW_LNE_set_address */
|
|
.uleb128 5
|
|
.byte 2
|
|
PTRBYTE fund0
|
|
.byte 4 /* DW_LNS_set_file */
|
|
.uleb128 2
|
|
.byte 3 /* DW_LNS_advance_line */
|
|
.sleb128 -4 /* ... to 1 */
|
|
.byte 1 /* DW_LNS_copy */
|
|
|
|
.byte 0 /* DW_LNE_set_address */
|
|
.uleb128 5
|
|
.byte 2
|
|
PTRBYTE fund1
|
|
.byte 4 /* DW_LNS_set_file */
|
|
.uleb128 1
|
|
.byte 3 /* DW_LNS_advance_line */
|
|
.sleb128 8 /* ... to 9 */
|
|
.byte 1 /* DW_LNS_copy */
|
|
|
|
.byte 0 /* DW_LNE_set_address */
|
|
.uleb128 5
|
|
.byte 2
|
|
PTRBYTE fund2
|
|
.byte 4 /* DW_LNS_set_file */
|
|
.uleb128 2
|
|
.byte 3 /* DW_LNS_advance_line */
|
|
.sleb128 -8 /* ... to 1 */
|
|
.byte 1 /* DW_LNS_copy */
|
|
|
|
.byte 0 /* DW_LNE_set_address */
|
|
.uleb128 5
|
|
.byte 2
|
|
PTRBYTE fund3
|
|
.byte 4 /* DW_LNS_set_file */
|
|
.uleb128 1
|
|
.byte 3 /* DW_LNS_advance_line */
|
|
.sleb128 8 /* ... to 9 */
|
|
.byte 1 /* DW_LNS_copy */
|
|
|
|
.byte 0 /* DW_LNE_set_address */
|
|
.uleb128 5
|
|
.byte 2
|
|
PTRBYTE fund_end
|
|
|
|
/* Line numbering end. */
|
|
|
|
.byte 0 /* DW_LNE_end_of_sequence */
|
|
.uleb128 1
|
|
.byte 1
|
|
|
|
.Lline1_end:
|