/* Assembler source used to create an object file for testing readelf's
   and objdump's ability to process separate dwarf object files.

   Copyright (C) 2017-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/>.  */

	
	/* Create a .debug_str section for local use.  This is also to check
	   the ability to dump the same section twice, if it exists in
	   both the main file and the separate debug info file.  */

	.section	.debug_str,"MS",%progbits,1
string1:
	.asciz	"debugfile.dwo"
string2:
	.asciz  "/path/to/dwo/files"
string3:
	.asciz  "/another/path/"
	.balign	2
string_end:
	
	/* Create a .debug_info section that contains the dwo links.  */

	.section	.debug_info,"",%progbits
	.4byte	debugE1 - debugS1	;# Length of Compilation Unit Info
debugS1:
	.short	0x4	;# DWARF version number.
	.4byte	0x0	;# Offset into .debug_abbrev section.
	.byte	0x4	;# Pointer Size (in bytes).

	.uleb128 0x1	;# Use abbrev #1.  This needs strings from the .debug_str section.
	.4byte	string1
	.4byte  string2
debugE1:

	.4byte	debugE2 - debugS2	;# Length of Compilation Unit Info
debugS2:
	.short	0x4	;# DWARF version number.
	.4byte	0x0	;# Offset into .debug_abbrev section.
	.byte	0x4	;# Pointer Size (in bytes).

	.uleb128 0x2	;# Use abbrev #2.
	.asciz   "file.dwo"
	.4byte   string3
	.8byte   0x12345678aabbccdd

	;# Minimal section alignment on alpha-* is 2, so ensure no new invalid CU
	;# will be started.
	.balign	2, 0
debugE2:

	.section	.debug_abbrev,"",%progbits

	/* Create an abbrev containing a DWARF5 style dwo link.  */
	.uleb128 0x01	;# Abbrev code.
	.uleb128 0x11	;# DW_TAG_compile_unit
	.byte	 0x00	;# DW_children_no
	.uleb128 0x76	;# DW_AT_dwo_name
	.uleb128 0x0e	;# DW_FORM_strp
	.uleb128 0x1b	;# DW_AT_comp_dir
	.uleb128 0x0e	;# DW_FORM_strp
	.byte	 0x00	;# End of abbrev
	.byte	 0x00

	/* Create an abbrev containing a GNU style dwo link.  */
	.uleb128 0x02	;# Abbrev code.
	.uleb128 0x11	;# DW_TAG_compile_unit
	.byte	 0x00	;# DW_children_no
	.uleb128 0x2130	;# DW_AT_GNU_dwo_name
	.uleb128 0x08	;# DW_FORM_string
	.uleb128 0x1b	;# DW_AT_comp_dir
	.uleb128 0x0e	;# DW_FORM_strp
	.uleb128 0x2131	;# DW_AT_GNU_dwo_id
	.uleb128 0x07	;# DW_FORM_data8	
	.byte	 0x00	;# End of abbrev
	.byte	 0x00

	.byte	 0x0	;# Abbrevs terminator

