forked from openkylin/dwz
273 lines
5.8 KiB
Plaintext
273 lines
5.8 KiB
Plaintext
# Copyright (C) 2013-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/>.
|
|
|
|
load_lib dwarf-lib.exp
|
|
load_lib dwarf.exp
|
|
|
|
set asm_file unavailable-dwarf-piece-dw.S
|
|
|
|
Dwarf::assemble $asm_file {
|
|
declare_labels uchar_label struct_s_label foo_label struct_t_label bar_label
|
|
|
|
cu {} {
|
|
compile_unit {{language @DW_LANG_C}} {
|
|
uchar_label: DW_TAG_base_type {
|
|
{name "unsigned char"}
|
|
{byte_size 1 DW_FORM_sdata}
|
|
{encoding @DW_ATE_unsigned_char}
|
|
}
|
|
|
|
struct_s_label: DW_TAG_structure_type {
|
|
{name s}
|
|
{byte_size 3 DW_FORM_sdata}
|
|
{decl_file 0 DW_FORM_udata}
|
|
{decl_line 1 DW_FORM_sdata}
|
|
} {
|
|
DW_TAG_member {
|
|
{name a}
|
|
{type :$uchar_label}
|
|
{data_member_location {
|
|
DW_OP_plus_uconst 0
|
|
} SPECIAL_expr}
|
|
}
|
|
DW_TAG_member {
|
|
{name b}
|
|
{type :$uchar_label}
|
|
{data_member_location {
|
|
DW_OP_plus_uconst 1
|
|
} SPECIAL_expr}
|
|
}
|
|
DW_TAG_member {
|
|
{name c}
|
|
{type :$uchar_label}
|
|
{data_member_location {
|
|
DW_OP_plus_uconst 2
|
|
} SPECIAL_expr}
|
|
}
|
|
}
|
|
|
|
struct_t_label: DW_TAG_structure_type {
|
|
{name t}
|
|
{byte_size 3 DW_FORM_sdata}
|
|
{decl_file 0 DW_FORM_udata}
|
|
{decl_line 1 DW_FORM_sdata}
|
|
} {
|
|
DW_TAG_member {
|
|
{name a}
|
|
{type :$uchar_label}
|
|
{data_member_location {
|
|
DW_OP_plus_uconst 0
|
|
} SPECIAL_expr}
|
|
}
|
|
DW_TAG_member {
|
|
{name b}
|
|
{type :$uchar_label}
|
|
{byte_size 1 DW_FORM_sdata}
|
|
{bit_size 1 DW_FORM_sdata}
|
|
{bit_offset 7 DW_FORM_sdata}
|
|
{data_member_location {
|
|
DW_OP_plus_uconst 1
|
|
} SPECIAL_expr}
|
|
}
|
|
DW_TAG_member {
|
|
{name c}
|
|
{type :$uchar_label}
|
|
{byte_size 1 DW_FORM_sdata}
|
|
{bit_size 1 DW_FORM_sdata}
|
|
{bit_offset 6 DW_FORM_sdata}
|
|
{data_member_location {
|
|
DW_OP_plus_uconst 1
|
|
} SPECIAL_expr}
|
|
}
|
|
DW_TAG_member {
|
|
{name d}
|
|
{type :$uchar_label}
|
|
{byte_size 1 DW_FORM_sdata}
|
|
{bit_size 1 DW_FORM_sdata}
|
|
{bit_offset 5 DW_FORM_sdata}
|
|
{data_member_location {
|
|
DW_OP_plus_uconst 1
|
|
} SPECIAL_expr}
|
|
}
|
|
DW_TAG_member {
|
|
{name e}
|
|
{type :$uchar_label}
|
|
{byte_size 1 DW_FORM_sdata}
|
|
{bit_size 1 DW_FORM_sdata}
|
|
{bit_offset 4 DW_FORM_sdata}
|
|
{data_member_location {
|
|
DW_OP_plus_uconst 1
|
|
} SPECIAL_expr}
|
|
}
|
|
DW_TAG_member {
|
|
{name f}
|
|
{type :$uchar_label}
|
|
{byte_size 1 DW_FORM_sdata}
|
|
{bit_size 1 DW_FORM_sdata}
|
|
{bit_offset 3 DW_FORM_sdata}
|
|
{data_member_location {
|
|
DW_OP_plus_uconst 1
|
|
} SPECIAL_expr}
|
|
}
|
|
DW_TAG_member {
|
|
{name g}
|
|
{type :$uchar_label}
|
|
{byte_size 1 DW_FORM_sdata}
|
|
{bit_size 1 DW_FORM_sdata}
|
|
{bit_offset 2 DW_FORM_sdata}
|
|
{data_member_location {
|
|
DW_OP_plus_uconst 1
|
|
} SPECIAL_expr}
|
|
}
|
|
DW_TAG_member {
|
|
{name h}
|
|
{type :$uchar_label}
|
|
{byte_size 1 DW_FORM_sdata}
|
|
{bit_size 1 DW_FORM_sdata}
|
|
{bit_offset 1 DW_FORM_sdata}
|
|
{data_member_location {
|
|
DW_OP_plus_uconst 1
|
|
} SPECIAL_expr}
|
|
}
|
|
DW_TAG_member {
|
|
{name i}
|
|
{type :$uchar_label}
|
|
{byte_size 1 DW_FORM_sdata}
|
|
{bit_size 1 DW_FORM_sdata}
|
|
{bit_offset 0 DW_FORM_sdata}
|
|
{data_member_location {
|
|
DW_OP_plus_uconst 1
|
|
} SPECIAL_expr}
|
|
}
|
|
DW_TAG_member {
|
|
{name j}
|
|
{type :$uchar_label}
|
|
{data_member_location {
|
|
DW_OP_plus_uconst 2
|
|
} SPECIAL_expr}
|
|
}
|
|
}
|
|
|
|
DW_TAG_subprogram {
|
|
{name foo}
|
|
{decl_file 0 udata}
|
|
{low_pc foo_start_lbl addr}
|
|
{high_pc foo_end_lbl addr}
|
|
} {
|
|
DW_TAG_formal_parameter {
|
|
{type :$struct_s_label}
|
|
{name x}
|
|
{location {
|
|
DW_OP_lit0
|
|
DW_OP_stack_value
|
|
DW_OP_piece 2
|
|
DW_OP_reg0
|
|
DW_OP_piece 1
|
|
} SPECIAL_expr}
|
|
}
|
|
DW_TAG_formal_parameter {
|
|
{type :$struct_s_label}
|
|
{name y}
|
|
{location {
|
|
DW_OP_lit0
|
|
DW_OP_stack_value
|
|
DW_OP_piece 1
|
|
DW_OP_reg0
|
|
DW_OP_piece 1
|
|
DW_OP_lit0
|
|
DW_OP_stack_value
|
|
DW_OP_piece 1
|
|
} SPECIAL_expr}
|
|
}
|
|
DW_TAG_formal_parameter {
|
|
{type :$struct_s_label}
|
|
{name z}
|
|
{location {
|
|
DW_OP_reg0
|
|
DW_OP_piece 1
|
|
DW_OP_lit0
|
|
DW_OP_stack_value
|
|
DW_OP_piece 2
|
|
} SPECIAL_expr}
|
|
}
|
|
}
|
|
|
|
|
|
DW_TAG_subprogram {
|
|
{name bar}
|
|
{decl_file 0 udata}
|
|
{low_pc bar_start_lbl addr}
|
|
{high_pc bar_end_lbl addr}
|
|
} {
|
|
DW_TAG_formal_parameter {
|
|
{type :$struct_t_label}
|
|
{name x}
|
|
{location {
|
|
DW_OP_lit0
|
|
DW_OP_stack_value
|
|
DW_OP_piece 1
|
|
DW_OP_reg0
|
|
DW_OP_bit_piece 1 0
|
|
DW_OP_lit0
|
|
DW_OP_stack_value
|
|
DW_OP_bit_piece 7 0
|
|
DW_OP_lit0
|
|
DW_OP_stack_value
|
|
DW_OP_piece 1
|
|
} SPECIAL_expr}
|
|
}
|
|
DW_TAG_formal_parameter {
|
|
{type :$struct_t_label}
|
|
{name y}
|
|
{location {
|
|
DW_OP_lit0
|
|
DW_OP_stack_value
|
|
DW_OP_piece 1
|
|
DW_OP_lit0
|
|
DW_OP_stack_value
|
|
DW_OP_bit_piece 3 0
|
|
DW_OP_reg0
|
|
DW_OP_bit_piece 1 0
|
|
DW_OP_lit0
|
|
DW_OP_stack_value
|
|
DW_OP_bit_piece 4 0
|
|
DW_OP_lit0
|
|
DW_OP_stack_value
|
|
DW_OP_piece 1
|
|
} SPECIAL_expr}
|
|
}
|
|
DW_TAG_formal_parameter {
|
|
{type :$struct_t_label}
|
|
{name z}
|
|
{location {
|
|
DW_OP_lit0
|
|
DW_OP_stack_value
|
|
DW_OP_piece 1
|
|
DW_OP_lit0
|
|
DW_OP_stack_value
|
|
DW_OP_bit_piece 7 0
|
|
DW_OP_reg0
|
|
DW_OP_bit_piece 1 0
|
|
DW_OP_lit0
|
|
DW_OP_stack_value
|
|
DW_OP_piece 1
|
|
} SPECIAL_expr}
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|