/* This testcase is part of GDB, the GNU debugger.

   Copyright 2008, 2009, 2010 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/>.  */

/* This tests that gdb can read compressed sections.  The contents
   are the same as dw2-basic.S, but the .debug_abbrev section has been
   comrpessed using zlib.  */

/* Dummy function to provide debug information for.  */

	.text
	.globl _start
	.globl __start
_start:
__start:
	.int 0
.Lbegin_text1:
	.globl func_cu1
	.type func_cu1, %function
func_cu1:
.Lbegin_func_cu1:
	.int 0
.Lend_func_cu1:
	.size func_cu1, .-func_cu1
.Lend_text1:

/* Debug information */

	.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	4				/* Pointer size */

	/* CU die */
	.uleb128 1				/* Abbrev: DW_TAG_compile_unit */
	.4byte	.Lline1_begin			/* DW_AT_stmt_list */
	.4byte	.Lend_text1			/* DW_AT_high_pc */
	.4byte	.Lbegin_text1			/* DW_AT_low_pc */
	.ascii	"file1.txt\0"			/* DW_AT_name */
	.ascii	"GNU C 3.3.3\0"			/* DW_AT_producer */
	.byte	1				/* DW_AT_language (C) */

	/* func_cu1 */
	.uleb128	2			/* Abbrev: DW_TAG_subprogram */
	.byte		1			/* DW_AT_external */
	.byte		1			/* DW_AT_decl_file */
	.byte		2			/* DW_AT_decl_line */
	.ascii		"func_cu1\0"		/* DW_AT_name */
	.4byte		.Ltype_int-.Lcu1_begin	/* DW_AT_type */
	.4byte		.Lbegin_func_cu1	/* DW_AT_low_pc */
	.4byte		.Lend_func_cu1		/* DW_AT_high_pc */
	.byte		1			/* DW_AT_frame_base: length */
	.byte		0x55			/* DW_AT_frame_base: DW_OP_reg5 */

.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:

/* 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		"file1.txt\0"
	.uleb128	0
	.uleb128	0
	.uleb128	0

	.byte		0

.Lline1_lines:
	.byte		0	/* DW_LNE_set_address */
	.uleb128	5
	.byte		2
	.4byte		.Lbegin_func_cu1

	.byte		3	/* DW_LNS_advance_line */
	.sleb128	3	/* ... to 4 */

	.byte		1	/* DW_LNS_copy */

	.byte		1	/* DW_LNS_copy (second time as an end-of-prologue marker) */

	.byte		0	/* DW_LNE_set_address */
	.uleb128	5
	.byte		2
	.4byte		.Lend_func_cu1

	.byte		0	/* DW_LNE_end_of_sequence */
	.uleb128	1
	.byte		1

.Lline1_end:

/* Abbrev table -- compressed */
	.section .zdebug_abbrev
.Labbrev1_begin:
	.ascii		"ZLIB"
	.4byte		0
	.2byte		0
	.byte		0
	.byte		51
	.byte		0x78
	.byte		0x5e
	.byte		0x63
	.byte		0x14
	.byte		0x64
	.byte		0x14
	.byte		0x60
	.byte		0x13
	.byte		0x62
	.byte		0x14
	.byte		0x64
	.byte		0x64
	.byte		0xe6
	.byte		0x50
	.byte		0xe5
	.byte		0x10
	.byte		0xe6
	.byte		0x66
	.byte		0x60
	.byte		0x60
	.byte		0xd2
	.byte		0x63
	.byte		0xb0
	.byte		0xe7
	.byte		0xb1
	.byte		0xe2
	.byte		0xb6
	.byte		0xe6
	.byte		0x66
	.byte		0xe6
	.byte		0xf0
	.byte		0x14
	.byte		0x16
	.byte		0x64
	.byte		0x14
	.byte		0x62
	.byte		0x74
	.byte		0xe0
	.byte		0x02
	.byte		0x00
	.byte		0x25
	.byte		0x78
	.byte		0x02
	.byte		0x81
	.byte		0x78
	.byte		0x9c
	.byte		0x63
	.byte		0x60
	.byte		0x60
	.byte		0x56
	.byte		0x61
	.byte		0x60
	.byte		0xe6
	.byte		0xe0
	.byte		0xe6
	.byte		0xb6
	.byte		0xe3
	.byte		0x66
	.byte		0x00
	.byte		0x02
	.byte		0x00
	.byte		0x04
	.byte		0x9c
	.byte		0x00
	.byte		0x92
