/* Copyright 2010-2013 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/>.  */

	.section	.debug_info
d:
	/* Length of Compilation Unit Info */
#if OFFSET_SIZE == 4
# define OFFSET .4byte
# define HEADER_LINE1
# define HEADER_LINE2(END) .4byte	END - 1f
#elif OFFSET_SIZE == 8
# define OFFSET .8byte
# define HEADER_LINE1 .4byte	0xffffffff
# define HEADER_LINE2(END) .8byte	END - 1f
#else
# error
#endif
#if ADDR_SIZE == 4
# define ADDR .4byte
#elif ADDR_SIZE == 8
# define ADDR .8byte
#else
# error
#endif
#if REF_ADDR_SIZE == 4
# define REF_ADDR .4byte
#elif REF_ADDR_SIZE == 8
# define REF_ADDR .8byte
#else
# error
#endif
	
#if TWO_CU
# define END1 .Lcu_end_1
#else
# define END1 debug_end
#endif

	HEADER_LINE1
	HEADER_LINE2(END1)

1:
	.2byte	DWARF_VERSION	/* DWARF version number */
	OFFSET	.Ldebug_abbrev0	/* Offset Into Abbrev. Section */
	.byte	ADDR_SIZE	/* Pointer Size (in bytes) */

	.uleb128 0x1	/* (DIE (0xb) DW_TAG_compile_unit) */
	.ascii "GNU C 4.4.3\0"	/* DW_AT_producer */
	.byte	0x1	/* DW_AT_language */
	.ascii "1.c\0"	/* DW_AT_name */

.Ltype_int:
	.uleb128 0x7	/* DW_TAG_base_type */
	.byte	0x4	/* DW_AT_byte_size */
	.byte	0x5	/* DW_AT_encoding */
	.ascii "int\0"	/* DW_AT_name */

.Ltype_struct:
	.uleb128 0x2	/* DW_TAG_structure_type */
	.ascii "s\0"	/* DW_AT_name */
	.byte	4	/* DW_AT_byte_size */

	.uleb128 0x3	/* DW_TAG_member */
	.ascii "f\0"	/* DW_AT_name */
	.4byte	.Ltype_int - d	/* DW_AT_type */
	.byte	0	/* DW_AT_data_member_location */

	.byte	0x0	/* end of children of DW_TAG_structure_type */

.Ltype_structptr:
	.uleb128 0x5	/* DW_TAG_pointer_type */
	.byte	ADDR_SIZE	/* DW_AT_byte_size */
	.4byte	.Ltype_struct - d	/* DW_AT_type */

.Lvar_out:
	.uleb128 0x4	/* (DW_TAG_variable) */
	.ascii "v\0"	/* DW_AT_name */
	.byte	2f - 1f	/* DW_AT_location: DW_FORM_block1 */
1:
	.byte	0x9e	/* DW_OP_implicit_value */
	.uleb128  2f - 3f
3:
	.byte	1, 1, 1, 1
2:
	REF_ADDR	.Ltype_struct - d	/* DW_AT_type */

#if TWO_CU
	.byte	0x0	/* end of children of CU */
.Lcu_end_1:

	HEADER_LINE1
	HEADER_LINE2 (debug_end)

1:
	.2byte	DWARF_VERSION	/* DWARF version number */
	OFFSET	.Ldebug_abbrev0	/* Offset Into Abbrev. Section */
	.byte	ADDR_SIZE	/* Pointer Size (in bytes) */

	.uleb128 0x1	/* (DIE (0xb) DW_TAG_compile_unit) */
	.ascii "GNU C 4.4.3\0"	/* DW_AT_producer */
	.byte	0x1	/* DW_AT_language */
	.ascii "1.c\0"	/* DW_AT_name */
#endif

	.uleb128	6			/* Abbrev: DW_TAG_subprogram */
	.ascii		"main\0"		/* DW_AT_name */
	ADDR		main			/* DW_AT_low_pc */
	ADDR		main + 0x100		/* DW_AT_high_pc */
	REF_ADDR	.Ltype_int - d		/* DW_AT_type */
	.byte		1			/* DW_AT_external */

	.uleb128 0x4	/* (DW_TAG_variable) */
	.ascii "p\0"	/* DW_AT_name */
	.byte	2f - 1f	/* DW_AT_location: DW_FORM_block1 */
1:
	.byte	0xf2	/* DW_OP_GNU_implicit_pointer */
	REF_ADDR	.Lvar_out - d	/* referenced DIE */
	.sleb128	0	/* offset */
2:
	REF_ADDR	.Ltype_structptr - d	/* DW_AT_type */

	.byte	0x0	/* end of children of main */

	.byte	0x0	/* end of children of CU */
debug_end:

	.section	.debug_abbrev
.Ldebug_abbrev0:

	.uleb128 0x1	/* (abbrev code) */
	.uleb128 0x11	/* (TAG: DW_TAG_compile_unit) */
	.byte	0x1	/* DW_children_yes */
	.uleb128 0x25	/* (DW_AT_producer) */
	.uleb128 0x8	/* (DW_FORM_string) */
	.uleb128 0x13	/* (DW_AT_language) */
	.uleb128 0xb	/* (DW_FORM_data1) */
	.uleb128 0x3	/* (DW_AT_name) */
	.uleb128 0x8	/* (DW_FORM_string) */
	.byte	0x0
	.byte	0x0

	.uleb128 0x2	/* (abbrev code) */
	.uleb128 0x13	/* (TAG: DW_TAG_structure_type) */
	.byte	0x1	/* DW_children_yes */
	.uleb128 0x3	/* (DW_AT_name) */
	.uleb128 0x8	/* (DW_FORM_string) */
	.uleb128 0xb	/* (DW_AT_byte_size) */
	.uleb128 0xb	/* (DW_FORM_data1) */
	.byte	0
	.byte	0

	.uleb128 0x3	/* (abbrev code) */
	.uleb128 0xd	/* (TAG: DW_TAG_member) */
	.byte	0	/* DW_children_no */
	.uleb128 0x3	/* (DW_AT_name) */
	.uleb128 0x8	/* (DW_FORM_string) */
	.uleb128 0x49	/* (DW_AT_type) */
	.uleb128 0x13	/* (DW_FORM_ref4) */
	.uleb128 0x38	/* (DW_AT_data_member_location) */
	.uleb128 0xb	/* (DW_FORM_data1) */
	.byte	0
	.byte	0

	.uleb128 0x4	/* (abbrev code) */
	.uleb128 0x34	/* (TAG: DW_TAG_variable) */
	.byte	0x0	/* DW_children_yes */
	.uleb128 0x3	/* (DW_AT_name) */
	.uleb128 0x8	/* (DW_FORM_string) */
	.uleb128 0x02	/* (DW_AT_location) */
	.uleb128 0xa	/* (DW_FORM_block1) */
	.uleb128 0x49	/* (DW_AT_type) */
	.uleb128 0x10	/* (DW_FORM_ref_addr) */
	.byte	0x0
	.byte	0x0

	.uleb128 0x5	/* (abbrev code) */
	.uleb128 0xf	/* (TAG: DW_TAG_pointer_type) */
	.byte	0x0	/* DW_children_no */
	.uleb128 0xb	/* (DW_AT_byte_size) */
	.uleb128 0xb	/* (DW_FORM_data1) */
	.uleb128 0x49	/* (DW_AT_type) */
	.uleb128 0x13	/* (DW_FORM_ref4) */
	.byte	0x0
	.byte	0x0

	.uleb128	6			/* Abbrev code */
	.uleb128	0x2e			/* DW_TAG_subprogram */
	.byte		1			/* 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	0x49			/* DW_AT_type */
	.uleb128	0x10			/* DW_FORM_ref_addr */
	.uleb128	0x3f			/* DW_AT_external */
	.uleb128	0xc			/* DW_FORM_flag */
	.byte		0x0			/* Terminator */
	.byte		0x0			/* Terminator */

	.uleb128 0x7	/* (abbrev code) */
	.uleb128 0x24	/* (TAG: DW_TAG_base_type) */
	.byte	0	/* DW_children_no */
	.uleb128 0xb	/* (DW_AT_byte_size) */
	.uleb128 0xb	/* (DW_FORM_data1) */
	.uleb128 0x3e	/* (DW_AT_encoding) */
	.uleb128 0xb	/* (DW_FORM_data1) */
	.uleb128 0x3	/* (DW_AT_name) */
	.uleb128 0x8	/* (DW_FORM_string) */
	.byte	0
	.byte	0

	.byte	0x0
