/* Copyright (C) 2011-2021 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 test demonstrates a failure to resolve opaque structure types in
   binaries compiled by the Intel C compiler.  This is GDB PR symtab/13277.

   The test was derived from opaque-pointer.c, which contains the single line:

   struct opaque_struct_t *p_struct;

   and opaque_struct.c, which looks like:

   struct opaque_struct_t
   {
     int wrapped_value;
   };

   struct opaque_struct_t opaque_internal = { 0 };

   What follows is a simplified version of the debug info generated by ICC
   version 12.0.4.191. */

	.file "opaque-pointer.c"
	.data
	.comm p_struct,8,8
	.global p_struct

	.section .debug_info
debug_info_seg1:
	.4byte debug_info_seg1_end - 1f	/* Length of compilation unit info. */
1:
	.2byte 0x0002			/* DWARF version number. */
	.4byte .debug_abbrev_seg1	/* Points to abbrev section for this unit. */
	.byte 0x04			/* Target address size. */

	.byte 0x01			/* DIE 1: DW_TAG_compile_unit. */
	.byte 0x01			/* DW_AT_language = DW_LANG_C89. */
	.ascii "Intel(R) C Intel(R) 64 Compiler XE "	/* DW_AT_producer. */
	.ascii "for applications running on Intel(R) 64, "
	.ascii "Version 12.0.4.191 Build 20110427\n "
	.asciz "Fixes SameLinkageName MemberPointers"

	.byte 0x02			/* DIE 2: DW_TAG_variable. */
	.byte 0x01			/* DW_AT_accessibility. */
	.asciz "p_struct"		/* DW_AT_name. */
	.4byte 3f - debug_info_seg1	/* DW_AT_type. */
	.byte 0x05			/* DW_AT_location: 5 bytes ... */
	.byte 0x03			/* DW_OP_addr ... */
	.4byte p_struct			/* followed by the address of p_struct. */
	.byte 0x01			/* DW_AT_external. */

3:
	.byte 0x03			/* DIE 3: DW_TAG_pointer_type. */
	.4byte 4f - debug_info_seg1	/* DW_AT_type. */

4:
	.byte 0x04			/* DIE 4: DW_TAG_structure_type. */
	.byte 0x01			/* DW_AT_accessibility. */
	.byte 0x00			/* DW_AT_byte_size. */
	.asciz "opaque_struct_t"	/* DW_AT_name. */

	.byte 0x00			/* End DIE 1. */
debug_info_seg1_end:

	.section .debug_abbrev
.debug_abbrev_seg1:
	.byte 0x01	/* Abbrev 1. */
	.byte 0x11	/* DW_TAG_compile_unit. */
	.byte 0x01	/* DW_CHILDREN_yes. */
	.byte 0x13	/* DW_AT_language. */
	.byte 0x0b	/* DW_FORM_data1. */
	.byte 0x25	/* DW_AT_producer. */
	.byte 0x08	/* DW_AT_string. */
	.2byte 0x0000	/* End abbrev. */

	.byte 0x02	/* Abbrev 2. */
	.byte 0x34	/* DW_TAG_variable. */
	.byte 0x00	/* DW_CHILDREN_no. */
	.byte 0x32	/* DW_AT_accessibility. */
	.byte 0x0b	/* DW_FORM_data1. */
	.byte 0x03	/* DW_AT_name. */
	.byte 0x08	/* DW_FORM_string. */
	.byte 0x49	/* DW_AT_type. */
	.byte 0x13	/* DW_FORM_ref4. */
	.byte 0x02	/* DW_AT_location. */
	.byte 0x0a	/* DW_FORM_block1. */
	.byte 0x3f	/* DW_AT_external. */
	.byte 0x0c	/* DW_FORM_flag. */
	.2byte 0x0000	/* End abbrev. */

	.byte 0x03	/* Abbrev 3. */
	.byte 0x0f	/* DW_TAG_pointer_type. */
	.byte 0x00	/* DW_CHILDREN_no. */
	.byte 0x49	/* DW_AT_type. */
	.byte 0x13	/* DW_FORM_ref4. */
	.2byte 0x0000	/* End abbrev. */

	.byte 0x04	/* Abbrev 4. */
	.byte 0x13	/* DW_TAG_structure_type. */
	.byte 0x00	/* DW_CHILDREN_no. */
	.byte 0x32	/* DW_AT_accessibility. */
	.byte 0x0b	/* DW_FORM_data1. */
	.byte 0x0b	/* DW_AT_byte_size. */
	.byte 0x0b	/* DW_FORM_data1. */
	.byte 0x03	/* DW_AT_name. */
	.byte 0x08	/* DW_FORM_string. */
	.2byte 0x0000	/* End abbrev. */
	.byte 0x00	/* End abbrev table. */


	.file "opaque-struct.c"
	.section .debug_info
debug_info_seg2:
	.4byte debug_info_seg2_end - 1f	/* Length of compilation unit info. */
1:
	.2byte 0x0002			/* DWARF version number. */
	.4byte .debug_abbrev_seg2	/* Points to abbrev section for this unit. */
	.byte 0x04			/* Target address size. */

	.byte 0x01			/* DIE 1: DW_TAG_compile_unit. */
	.byte 0x01			/* DW_AT_language = DW_LANG_C89. */
	.ascii "Intel(R) C Intel(R) 64 Compiler XE "	/* DW_AT_producer. */
	.ascii "for applications running on Intel(R) 64, "
	.ascii "Version 12.0.4.191 Build 20110427\n "
	.asciz "Fixes SameLinkageName MemberPointers"

	.byte 0x02			/* DIE 2: DW_TAG_structure_type. */
	.byte 0x01			/* DW_AT_accessibility. */
	.byte 0x04			/* DW_AT_byte_size. */
	.asciz "opaque_struct_t"	/* DW_AT_name. */


	.byte 0x03			/* DIE 3: DW_TAG_member. */
	.byte 0x02			/* DW_AT_data_member_location: 2 bytes ... */
	.byte 0x23			/* DW_OP_plus_uconst ... */
	.byte 0x00			/* followed by zero. */
	.asciz "wrapped_value"		/* DW_AT_name. */
	.4byte 4f - debug_info_seg2	/* DW_AT_type. */
	.byte 0x00

4:
	.byte 0x04			/* DIE 4: DW_TAG_base_type. */
	.byte 0x04			/* DW_AT_byte_size. */
	.byte 0x05			/* DW_AT_encoding. */
	.asciz "int"			/* DW_AT_name. */

	.byte 0x00			/* End DIE 1. */
debug_info_seg2_end:

	.section .debug_abbrev
.debug_abbrev_seg2:
	.byte 0x01	/* Abbrev 1. */
	.byte 0x11	/* DW_TAG_compile_unit. */
	.byte 0x01	/* DW_CHILDREN_yes. */
	.byte 0x13	/* DW_AT_language. */
	.byte 0x0b	/* DW_FORM_data1. */
	.byte 0x25	/* DW_AT_producer. */
	.byte 0x08	/* DW_FORM_string. */
	.2byte 0x0000	/* End abbrev. */

	.byte 0x02	/* Abbrev 2. */
	.byte 0x13	/* DW_TAG_structure_type. */
	.byte 0x01	/* DW_CHILDREN_yes. */
	.byte 0x32	/* DW_AT_accessibility. */
	.byte 0x0b	/* DW_FORM_data1. */
	.byte 0x0b	/* DW_AT_byte_size. */
	.byte 0x0b	/* DW_FORM_data1. */
	.byte 0x03	/* DW_AT_name. */
	.byte 0x08	/* DW_FORM_string. */
	.2byte 0x0000	/* End abbrev. */

	.byte 0x03	/* Abbrev 3. */
	.byte 0x0d	/* DW_TAG_member. */
	.byte 0x00	/* DW_CHILDREN_no. */
	.byte 0x38	/* DW_AT_data_member_location. */
	.byte 0x0a	/* DW_FORM_block1. */
	.byte 0x03	/* DW_AT_name. */
	.byte 0x08	/* DW_FORM_string. */
	.byte 0x49	/* DW_AT_type. */
	.byte 0x13	/* DW_FORM_ref4. */
	.2byte 0x0000	/* End abbrev. */

	.byte 0x04	/* Abbrev 4. */
	.byte 0x24	/* DW_TAG_base_type. */
	.byte 0x00	/* DW_CHILDREN_no. */
	.byte 0x0b	/* DW_AT_byte_size. */
	.byte 0x0b	/* DW_FORM_data1. */
	.byte 0x3e	/* DW_AT_encoding. */
	.byte 0x0b	/* DW_FORM_data1. */
	.byte 0x03	/* DW_AT_name. */
	.byte 0x08	/* DW_FORM_string. */
	.2byte 0x0000	/* End abbrev. */
	.byte 0x00	/* End abbrev table. */


	.file "opaque-pointer2.c"

	.section .debug_info
debug_info_seg3:
	.4byte debug_info_seg3_end - 1f	/* Length of compilation unit info. */
1:
	.2byte 0x0002			/* DWARF version number. */
	.4byte .debug_abbrev_seg3	/* Points to abbrev section for this unit. */
	.byte 0x04			/* Target address size. */

	.byte 0x01			/* DIE 1: DW_TAG_compile_unit. */
	.byte 0x01			/* DW_AT_language = DW_LANG_C89. */
	.ascii "Intel(R) C Intel(R) 64 Compiler XE "	/* DW_AT_producer. */
	.ascii "for applications running on Intel(R) 64, "
	.ascii "Version 12.0.4.191 Build 20110427\n "
	.asciz "Fixes SameLinkageName MemberPointers"

	.byte 0x04			/* DIE 4: DW_TAG_structure_type. */
	.byte 0x01			/* DW_AT_accessibility. */
	.byte 0x00			/* DW_AT_byte_size. */
	.asciz "opaque_struct_t"	/* DW_AT_name. */

	.byte 0x00			/* End DIE 1. */
debug_info_seg3_end:

	.section .debug_abbrev
.debug_abbrev_seg3:
	.byte 0x01	/* Abbrev 1. */
	.byte 0x11	/* DW_TAG_compile_unit. */
	.byte 0x01	/* DW_CHILDREN_yes. */
	.byte 0x13	/* DW_AT_language. */
	.byte 0x0b	/* DW_FORM_data1. */
	.byte 0x25	/* DW_AT_producer. */
	.byte 0x08	/* DW_AT_string. */
	.2byte 0x0000	/* End abbrev. */

	.byte 0x04	/* Abbrev 4. */
	.byte 0x13	/* DW_TAG_structure_type. */
	.byte 0x00	/* DW_CHILDREN_no. */
	.byte 0x32	/* DW_AT_accessibility. */
	.byte 0x0b	/* DW_FORM_data1. */
	.byte 0x0b	/* DW_AT_byte_size. */
	.byte 0x0b	/* DW_FORM_data1. */
	.byte 0x03	/* DW_AT_name. */
	.byte 0x08	/* DW_FORM_string. */
	.2byte 0x0000	/* End abbrev. */
	.byte 0x00	/* End abbrev table. */
