Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
R
riscv-gcc-1
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
riscv-gcc-1
Commits
5c90448c
Commit
5c90448c
authored
Nov 05, 1996
by
Jason Merrill
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
x
From-SVN: r13096
parent
81795281
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
94 additions
and
162 deletions
+94
-162
gcc/dwarf2out.c
+94
-162
No files found.
gcc/dwarf2out.c
View file @
5c90448c
...
@@ -265,6 +265,21 @@ pubname_entry;
...
@@ -265,6 +265,21 @@ pubname_entry;
type) and non-zero for all incomplete tagged types. */
type) and non-zero for all incomplete tagged types. */
#define TYPE_USED_FOR_FUNCTION(tagged_type) (TYPE_SIZE (tagged_type) == 0)
#define TYPE_USED_FOR_FUNCTION(tagged_type) (TYPE_SIZE (tagged_type) == 0)
/* Define a macro which returns non-zero for a TYPE_DECL which was
implicitly generated for a tagged type.
Note that unlike the gcc front end (which generates a NULL named
TYPE_DECL node for each complete tagged type, each array type, and
each function type node created) the g++ front end generates a
_named_ TYPE_DECL node for each tagged type node created.
These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
generate a DW_TAG_typedef DIE for them. */
#define TYPE_DECL_IS_STUB(decl) \
(DECL_NAME (decl) == NULL \
|| (DECL_ARTIFICIAL (decl) \
&& is_tagged_type (TREE_TYPE (decl)) \
&& decl == TYPE_STUB_DECL (TREE_TYPE (decl))))
/* Information concerning the compilation unit's programming
/* Information concerning the compilation unit's programming
language, and compiler version. */
language, and compiler version. */
extern
int
flag_traditional
;
extern
int
flag_traditional
;
...
@@ -499,11 +514,6 @@ static unsigned line_info_table_in_use;
...
@@ -499,11 +514,6 @@ static unsigned line_info_table_in_use;
line_info_table. */
line_info_table. */
#define LINE_INFO_TABLE_INCREMENT 1024
#define LINE_INFO_TABLE_INCREMENT 1024
/* Keep track of the last line_info_table entry number, returned
by the prior call to lookup_filename(). This serves as a
cache used to speed up file name look ups. */
static
unsigned
prev_file_entry_num
=
(
unsigned
)
-
1
;
/* A pointer to the base of a table that contains frame description
/* A pointer to the base of a table that contains frame description
information for each routine. */
information for each routine. */
static
dw_fde_ref
fde_table
;
static
dw_fde_ref
fde_table
;
...
@@ -714,15 +724,6 @@ static enum dwarf_form value_format PROTO((dw_val_ref));
...
@@ -714,15 +724,6 @@ static enum dwarf_form value_format PROTO((dw_val_ref));
#ifndef DATA_SECTION
#ifndef DATA_SECTION
#define DATA_SECTION ".data"
#define DATA_SECTION ".data"
#endif
#endif
#ifndef DATA1_SECTION
#define DATA1_SECTION ".data1"
#endif
#ifndef RODATA_SECTION
#define RODATA_SECTION ".rodata"
#endif
#ifndef RODATA1_SECTION
#define RODATA1_SECTION ".rodata1"
#endif
#ifndef BSS_SECTION
#ifndef BSS_SECTION
#define BSS_SECTION ".bss"
#define BSS_SECTION ".bss"
#endif
#endif
...
@@ -732,73 +733,45 @@ static enum dwarf_form value_format PROTO((dw_val_ref));
...
@@ -732,73 +733,45 @@ static enum dwarf_form value_format PROTO((dw_val_ref));
(artificial) labels which may be generated within this file (when the -g
(artificial) labels which may be generated within this file (when the -g
options is used and DWARF_DEBUGGING_INFO is in effect.
options is used and DWARF_DEBUGGING_INFO is in effect.
If necessary, these may be overridden from within the tm.h file, but
If necessary, these may be overridden from within the tm.h file, but
typically, overriding these defaults is unnecessary.
typically, overriding these defaults is unnecessary. */
These labels have been hacked so that they all begin with a
`.L' sequence to appease the stock sparc/svr4 assembler and the
char
text_end_label
[
MAX_ARTIFICIAL_LABEL_BYTES
];
stock m88k/svr4 assembler, both of which need to see .L at the start of a
label in order to prevent that label from going into the linker symbol
table). Eventually, the ASM_GENERATE_INTERNAL_LABEL and
ASM_OUTPUT_INTERNAL_LABEL should be used, but that will require
a major rework. */
#ifndef TEXT_BEGIN_LABEL
#define TEXT_BEGIN_LABEL ".L_text_b"
#endif
#ifndef TEXT_END_LABEL
#ifndef TEXT_END_LABEL
#define TEXT_END_LABEL ".L_text_e"
#define TEXT_END_LABEL "Letext"
#endif
#ifndef DATA_BEGIN_LABEL
#define DATA_BEGIN_LABEL ".L_data_b"
#endif
#endif
#ifndef DATA_END_LABEL
#ifndef DATA_END_LABEL
#define DATA_END_LABEL ".L_data_e"
#define DATA_END_LABEL "Ledata"
#endif
#ifndef RODATA_BEGIN_LABEL
#define RODATA_BEGIN_LABEL ".L_rodata_b"
#endif
#ifndef RODATA_END_LABEL
#define RODATA_END_LABEL ".L_rodata_e"
#endif
#ifndef BSS_BEGIN_LABEL
#define BSS_BEGIN_LABEL ".L_bss_b"
#endif
#endif
#ifndef BSS_END_LABEL
#ifndef BSS_END_LABEL
#define BSS_END_LABEL ".L_bss_e"
#define BSS_END_LABEL "Lebss"
#endif
#ifndef LINE_BEGIN_LABEL
#define LINE_BEGIN_LABEL ".L_line_b"
#endif
#ifndef LINE_END_LABEL
#define LINE_END_LABEL ".L_line_e"
#endif
#endif
#ifndef INSN_LABEL_FMT
#ifndef INSN_LABEL_FMT
#define INSN_LABEL_FMT ".L_I%u_%u"
#define INSN_LABEL_FMT "LI%u_"
#endif
#ifndef BLOCK_BEGIN_LABEL_FMT
#define BLOCK_BEGIN_LABEL_FMT ".L_B%u"
#endif
#endif
#ifndef BLOCK_
END_LABEL_FMT
#ifndef BLOCK_
BEGIN_LABEL
#define BLOCK_
END_LABEL_FMT ".L_B%u_e
"
#define BLOCK_
BEGIN_LABEL "LBB
"
#endif
#endif
#ifndef B
ODY_BEGIN_LABEL_FMT
#ifndef B
LOCK_END_LABEL
#define B
ODY_BEGIN_LABEL_FMT ".L_b%u
"
#define B
LOCK_END_LABEL "LBE
"
#endif
#endif
#ifndef BODY_
END_LABEL_FMT
#ifndef BODY_
BEGIN_LABEL
#define BODY_
END_LABEL_FMT ".L_b%u_e
"
#define BODY_
BEGIN_LABEL "Lbb
"
#endif
#endif
#ifndef
FUNC_BEGIN_LABEL_FMT
#ifndef
BODY_END_LABEL
#define
FUNC_BEGIN_LABEL_FMT ".L_f%u
"
#define
BODY_END_LABEL "Lbe
"
#endif
#endif
#ifndef FUNC_
END_LABEL_FMT
#ifndef FUNC_
BEGIN_LABEL
#define FUNC_
END_LABEL_FMT ".L_f%u_e
"
#define FUNC_
BEGIN_LABEL "LFB
"
#endif
#endif
#ifndef
LINE_CODE_LABEL_FMT
#ifndef
FUNC_END_LABEL
#define
LINE_CODE_LABEL_FMT ".L_LC%u
"
#define
FUNC_END_LABEL "LFE
"
#endif
#endif
#ifndef
SEPARATE_LINE_CODE_LABEL_FMT
#ifndef
LINE_CODE_LABEL
#define
SEPARATE_LINE_CODE_LABEL_FMT ".L_SLC%u
"
#define
LINE_CODE_LABEL "LM
"
#endif
#endif
#ifndef S
FNAMES_ENTRY_LABEL_FMT
#ifndef S
EPARATE_LINE_CODE_LABEL
#define S
FNAMES_ENTRY_LABEL_FMT ".L_F%u
"
#define S
EPARATE_LINE_CODE_LABEL "LSM
"
#endif
#endif
/* Definitions of defaults for various types of primitive assembly language
/* Definitions of defaults for various types of primitive assembly language
...
@@ -2449,7 +2422,6 @@ equate_type_number_to_die (type, type_die)
...
@@ -2449,7 +2422,6 @@ equate_type_number_to_die (type, type_die)
register
dw_die_ref
type_die
;
register
dw_die_ref
type_die
;
{
{
register
unsigned
type_id
=
TYPE_UID
(
type
);
register
unsigned
type_id
=
TYPE_UID
(
type
);
register
unsigned
i
;
register
unsigned
num_allocated
;
register
unsigned
num_allocated
;
if
(
type_id
>=
type_die_table_allocated
)
if
(
type_id
>=
type_die_table_allocated
)
{
{
...
@@ -3006,7 +2978,6 @@ size_of_die (die)
...
@@ -3006,7 +2978,6 @@ size_of_die (die)
{
{
register
unsigned
long
size
=
0
;
register
unsigned
long
size
=
0
;
register
dw_attr_ref
a
;
register
dw_attr_ref
a
;
register
dw_loc_descr_ref
loc
;
size
+=
size_of_uleb128
(
die
->
die_abbrev
);
size
+=
size_of_uleb128
(
die
->
die_abbrev
);
for
(
a
=
die
->
die_attr
;
a
!=
NULL
;
a
=
a
->
dw_attr_next
)
for
(
a
=
die
->
die_attr
;
a
!=
NULL
;
a
=
a
->
dw_attr_next
)
{
{
...
@@ -3069,7 +3040,6 @@ calc_die_sizes (die)
...
@@ -3069,7 +3040,6 @@ calc_die_sizes (die)
dw_die_ref
die
;
dw_die_ref
die
;
{
{
register
dw_die_ref
c
;
register
dw_die_ref
c
;
register
unsigned
long
die_size
;
die
->
die_offset
=
next_die_offset
;
die
->
die_offset
=
next_die_offset
;
next_die_offset
+=
size_of_die
(
die
);
next_die_offset
+=
size_of_die
(
die
);
for
(
c
=
die
->
die_child
;
c
!=
NULL
;
c
=
c
->
die_sib
)
for
(
c
=
die
->
die_child
;
c
!=
NULL
;
c
=
c
->
die_sib
)
...
@@ -3089,8 +3059,6 @@ static unsigned long
...
@@ -3089,8 +3059,6 @@ static unsigned long
size_of_line_prolog
()
size_of_line_prolog
()
{
{
register
unsigned
long
size
;
register
unsigned
long
size
;
register
unsigned
opc
;
register
unsigned
n_op_args
;
register
unsigned
long
ft_index
;
register
unsigned
long
ft_index
;
size
=
DWARF_LINE_PROLOG_HEADER_SIZE
;
size
=
DWARF_LINE_PROLOG_HEADER_SIZE
;
/* Count the size of the table giving number of args for each
/* Count the size of the table giving number of args for each
...
@@ -4282,7 +4250,7 @@ output_aranges ()
...
@@ -4282,7 +4250,7 @@ output_aranges ()
fprintf
(
asm_out_file
,
"
\t
%s Address"
,
ASM_COMMENT_START
);
fprintf
(
asm_out_file
,
"
\t
%s Address"
,
ASM_COMMENT_START
);
}
}
fputc
(
'\n'
,
asm_out_file
);
fputc
(
'\n'
,
asm_out_file
);
ASM_OUTPUT_DWARF_ADDR_DELTA
(
asm_out_file
,
TEXT_END_LABEL
,
TEXT_SECTION
);
ASM_OUTPUT_DWARF_ADDR_DELTA
(
asm_out_file
,
text_end_label
,
TEXT_SECTION
);
if
(
flag_verbose_asm
)
if
(
flag_verbose_asm
)
{
{
fprintf
(
asm_out_file
,
"%s Length"
,
ASM_COMMENT_START
);
fprintf
(
asm_out_file
,
"%s Length"
,
ASM_COMMENT_START
);
...
@@ -4478,7 +4446,7 @@ output_line_info ()
...
@@ -4478,7 +4446,7 @@ output_line_info ()
ASM_COMMENT_START
);
ASM_COMMENT_START
);
}
}
fputc
(
'\n'
,
asm_out_file
);
fputc
(
'\n'
,
asm_out_file
);
sprintf
(
line_label
,
LINE_CODE_LABEL_FMT
,
lt_index
);
ASM_GENERATE_INTERNAL_LABEL
(
line_label
,
LINE_CODE_LABEL
,
lt_index
);
ASM_OUTPUT_DWARF_DELTA2
(
asm_out_file
,
line_label
,
prev_line_label
);
ASM_OUTPUT_DWARF_DELTA2
(
asm_out_file
,
line_label
,
prev_line_label
);
fputc
(
'\n'
,
asm_out_file
);
fputc
(
'\n'
,
asm_out_file
);
line_info
=
&
line_info_table
[
lt_index
];
line_info
=
&
line_info_table
[
lt_index
];
...
@@ -4542,7 +4510,7 @@ output_line_info ()
...
@@ -4542,7 +4510,7 @@ output_line_info ()
ASM_COMMENT_START
);
ASM_COMMENT_START
);
}
}
fputc
(
'\n'
,
asm_out_file
);
fputc
(
'\n'
,
asm_out_file
);
ASM_OUTPUT_DWARF_DELTA2
(
asm_out_file
,
TEXT_END_LABEL
,
prev_line_label
);
ASM_OUTPUT_DWARF_DELTA2
(
asm_out_file
,
text_end_label
,
prev_line_label
);
fputc
(
'\n'
,
asm_out_file
);
fputc
(
'\n'
,
asm_out_file
);
/* Output the marker for the end of the line number info. */
/* Output the marker for the end of the line number info. */
...
@@ -4564,7 +4532,8 @@ output_line_info ()
...
@@ -4564,7 +4532,8 @@ output_line_info ()
{
{
register
dw_separate_line_info_ref
line_info
register
dw_separate_line_info_ref
line_info
=
&
separate_line_info_table
[
lt_index
];
=
&
separate_line_info_table
[
lt_index
];
sprintf
(
line_label
,
SEPARATE_LINE_CODE_LABEL_FMT
,
lt_index
);
ASM_GENERATE_INTERNAL_LABEL
(
line_label
,
SEPARATE_LINE_CODE_LABEL
,
lt_index
);
if
(
function
!=
line_info
->
function
)
if
(
function
!=
line_info
->
function
)
{
{
function
=
line_info
->
function
;
function
=
line_info
->
function
;
...
@@ -4655,7 +4624,7 @@ output_line_info ()
...
@@ -4655,7 +4624,7 @@ output_line_info ()
fprintf
(
asm_out_file
,
"
\t
%s DW_LNS_fixed_advance_pc"
,
fprintf
(
asm_out_file
,
"
\t
%s DW_LNS_fixed_advance_pc"
,
ASM_COMMENT_START
);
ASM_COMMENT_START
);
fputc
(
'\n'
,
asm_out_file
);
fputc
(
'\n'
,
asm_out_file
);
sprintf
(
line_label
,
FUNC_END_LABEL_FMT
,
function
);
ASM_GENERATE_INTERNAL_LABEL
(
line_label
,
FUNC_END_LABEL
,
function
);
ASM_OUTPUT_DWARF_DELTA2
(
asm_out_file
,
line_label
,
prev_line_label
);
ASM_OUTPUT_DWARF_DELTA2
(
asm_out_file
,
line_label
,
prev_line_label
);
fputc
(
'\n'
,
asm_out_file
);
fputc
(
'\n'
,
asm_out_file
);
...
@@ -5230,11 +5199,10 @@ loc_descriptor (rtl)
...
@@ -5230,11 +5199,10 @@ loc_descriptor (rtl)
contains the given subreg. */
contains the given subreg. */
rtl
=
XEXP
(
rtl
,
0
);
rtl
=
XEXP
(
rtl
,
0
);
loc_result
=
new_loc_descr
(
DW_OP_regx
,
reg_number
(
rtl
),
0
);
/* fall through */
break
;
case
REG
:
case
REG
:
loc_result
=
new_loc_descr
(
DW_OP_regx
,
reg_number
(
rtl
),
0
);
loc_result
=
reg_loc_descriptor
(
rtl
);
break
;
break
;
case
MEM
:
case
MEM
:
...
@@ -6567,7 +6535,6 @@ gen_subprogram_die (decl, context_die)
...
@@ -6567,7 +6535,6 @@ gen_subprogram_die (decl, context_die)
register
tree
type
;
register
tree
type
;
register
tree
fn_arg_types
;
register
tree
fn_arg_types
;
register
tree
outer_scope
;
register
tree
outer_scope
;
register
tree
label
;
dw_die_ref
old_die
=
lookup_decl_die
(
decl
);
dw_die_ref
old_die
=
lookup_decl_die
(
decl
);
if
(
origin
!=
NULL
)
if
(
origin
!=
NULL
)
...
@@ -6650,16 +6617,17 @@ gen_subprogram_die (decl, context_die)
...
@@ -6650,16 +6617,17 @@ gen_subprogram_die (decl, context_die)
{
{
if
(
origin
==
NULL
)
if
(
origin
==
NULL
)
equate_decl_number_to_die
(
decl
,
subr_die
);
equate_decl_number_to_die
(
decl
,
subr_die
);
sprintf
(
label_id
,
FUNC_BEGIN_LABEL_FMT
,
current_funcdef_number
);
ASM_GENERATE_INTERNAL_LABEL
(
label_id
,
FUNC_BEGIN_LABEL
,
current_funcdef_number
);
add_AT_lbl_id
(
subr_die
,
DW_AT_low_pc
,
label_id
);
add_AT_lbl_id
(
subr_die
,
DW_AT_low_pc
,
label_id
);
sprintf
(
label_id
,
FUNC_END_LABEL_FMT
,
current_funcdef_number
);
ASM_GENERATE_INTERNAL_LABEL
(
label_id
,
FUNC_END_LABEL
,
current_funcdef_number
);
add_AT_lbl_id
(
subr_die
,
DW_AT_high_pc
,
label_id
);
add_AT_lbl_id
(
subr_die
,
DW_AT_high_pc
,
label_id
);
add_pubname
(
decl
,
subr_die
);
add_pubname
(
decl
,
subr_die
);
add_arange
(
decl
,
subr_die
);
add_arange
(
decl
,
subr_die
);
#ifdef MIPS_DEBUGGING_INFO
#ifdef MIPS_DEBUGGING_INFO
/* Add a reference to the FDE for this routine. */
/* Add a reference to the FDE for this routine. */
add_AT_fde_ref
(
subr_die
,
DW_AT_MIPS_fde
,
current_funcdef_fde
);
add_AT_fde_ref
(
subr_die
,
DW_AT_MIPS_fde
,
current_funcdef_fde
);
#endif
#endif
...
@@ -6675,9 +6643,11 @@ gen_subprogram_die (decl, context_die)
...
@@ -6675,9 +6643,11 @@ gen_subprogram_die (decl, context_die)
add_AT_loc
(
subr_die
,
DW_AT_frame_base
,
fp_loc
);
add_AT_loc
(
subr_die
,
DW_AT_frame_base
,
fp_loc
);
#ifdef DWARF_GNU_EXTENSIONS
#ifdef DWARF_GNU_EXTENSIONS
sprintf
(
label_id
,
BODY_BEGIN_LABEL_FMT
,
current_funcdef_number
);
ASM_GENERATE_INTERNAL_LABEL
(
label_id
,
BODY_BEGIN_LABEL
,
current_funcdef_number
);
add_AT_lbl_id
(
subr_die
,
DW_AT_body_begin
,
label_id
);
add_AT_lbl_id
(
subr_die
,
DW_AT_body_begin
,
label_id
);
sprintf
(
label_id
,
BODY_END_LABEL_FMT
,
current_funcdef_number
);
ASM_GENERATE_INTERNAL_LABEL
(
label_id
,
BODY_END_LABEL
,
current_funcdef_number
);
add_AT_lbl_id
(
subr_die
,
DW_AT_body_end
,
label_id
);
add_AT_lbl_id
(
subr_die
,
DW_AT_body_end
,
label_id
);
#endif
#endif
...
@@ -6858,6 +6828,7 @@ gen_label_die (decl, context_die)
...
@@ -6858,6 +6828,7 @@ gen_label_die (decl, context_die)
register
dw_die_ref
lbl_die
=
new_die
(
DW_TAG_label
,
context_die
);
register
dw_die_ref
lbl_die
=
new_die
(
DW_TAG_label
,
context_die
);
register
rtx
insn
;
register
rtx
insn
;
char
label
[
MAX_ARTIFICIAL_LABEL_BYTES
];
char
label
[
MAX_ARTIFICIAL_LABEL_BYTES
];
char
label2
[
MAX_ARTIFICIAL_LABEL_BYTES
];
if
(
origin
!=
NULL
)
if
(
origin
!=
NULL
)
{
{
add_abstract_origin_attribute
(
lbl_die
,
origin
);
add_abstract_origin_attribute
(
lbl_die
,
origin
);
...
@@ -6884,8 +6855,9 @@ gen_label_die (decl, context_die)
...
@@ -6884,8 +6855,9 @@ gen_label_die (decl, context_die)
{
{
abort
();
/* Should never happen. */
abort
();
/* Should never happen. */
}
}
sprintf
(
label
,
INSN_LABEL_FMT
,
current_funcdef_number
,
sprintf
(
label2
,
INSN_LABEL_FMT
,
current_funcdef_number
);
(
unsigned
)
INSN_UID
(
insn
));
ASM_GENERATE_INTERNAL_LABEL
(
label
,
label2
,
(
unsigned
)
INSN_UID
(
insn
));
add_AT_lbl_id
(
lbl_die
,
DW_AT_low_pc
,
label
);
add_AT_lbl_id
(
lbl_die
,
DW_AT_low_pc
,
label
);
}
}
}
}
...
@@ -6902,9 +6874,10 @@ gen_lexical_block_die (stmt, context_die, depth)
...
@@ -6902,9 +6874,10 @@ gen_lexical_block_die (stmt, context_die, depth)
char
label
[
MAX_ARTIFICIAL_LABEL_BYTES
];
char
label
[
MAX_ARTIFICIAL_LABEL_BYTES
];
if
(
!
BLOCK_ABSTRACT
(
stmt
))
if
(
!
BLOCK_ABSTRACT
(
stmt
))
{
{
sprintf
(
label
,
BLOCK_BEGIN_LABEL_FMT
,
next_block_number
);
ASM_GENERATE_INTERNAL_LABEL
(
label
,
BLOCK_BEGIN_LABEL
,
next_block_number
);
add_AT_lbl_id
(
stmt_die
,
DW_AT_low_pc
,
label
);
add_AT_lbl_id
(
stmt_die
,
DW_AT_low_pc
,
label
);
sprintf
(
label
,
BLOCK_END_LABEL_FMT
,
next_block_number
);
ASM_GENERATE_INTERNAL_LABEL
(
label
,
BLOCK_END_LABEL
,
next_block_number
);
add_AT_lbl_id
(
stmt_die
,
DW_AT_high_pc
,
label
);
add_AT_lbl_id
(
stmt_die
,
DW_AT_high_pc
,
label
);
}
}
push_decl_scope
(
stmt
);
push_decl_scope
(
stmt
);
...
@@ -6926,9 +6899,10 @@ gen_inlined_subroutine_die (stmt, context_die, depth)
...
@@ -6926,9 +6899,10 @@ gen_inlined_subroutine_die (stmt, context_die, depth)
register
tree
decl
=
block_ultimate_origin
(
stmt
);
register
tree
decl
=
block_ultimate_origin
(
stmt
);
char
label
[
MAX_ARTIFICIAL_LABEL_BYTES
];
char
label
[
MAX_ARTIFICIAL_LABEL_BYTES
];
add_abstract_origin_attribute
(
subr_die
,
decl
);
add_abstract_origin_attribute
(
subr_die
,
decl
);
sprintf
(
label
,
BLOCK_BEGIN_LABEL_FMT
,
next_block_number
);
ASM_GENERATE_INTERNAL_LABEL
(
label
,
BLOCK_BEGIN_LABEL
,
next_block_number
);
add_AT_lbl_id
(
subr_die
,
DW_AT_low_pc
,
label
);
add_AT_lbl_id
(
subr_die
,
DW_AT_low_pc
,
label
);
sprintf
(
label
,
BLOCK_END_LABEL_FMT
,
next_block_number
);
ASM_GENERATE_INTERNAL_LABEL
(
label
,
BLOCK_END_LABEL
,
next_block_number
);
add_AT_lbl_id
(
subr_die
,
DW_AT_high_pc
,
label
);
add_AT_lbl_id
(
subr_die
,
DW_AT_high_pc
,
label
);
push_decl_scope
(
decl
);
push_decl_scope
(
decl
);
decls_for_scope
(
stmt
,
subr_die
,
depth
);
decls_for_scope
(
stmt
,
subr_die
,
depth
);
...
@@ -7570,35 +7544,28 @@ gen_decl_die (decl, context_die)
...
@@ -7570,35 +7544,28 @@ gen_decl_die (decl, context_die)
type or a formal parameter type of some function. */
type or a formal parameter type of some function. */
if
(
debug_info_level
<=
DINFO_LEVEL_TERSE
)
if
(
debug_info_level
<=
DINFO_LEVEL_TERSE
)
{
{
if
((
DECL_NAME
(
decl
)
!=
NULL
if
(
!
TYPE_DECL_IS_STUB
(
decl
)
||
!
TYPE_USED_FOR_FUNCTION
(
TREE_TYPE
(
decl
)))
||
!
TYPE_USED_FOR_FUNCTION
(
TREE_TYPE
(
decl
)))
&&
!
DECL_ARTIFICIAL
(
decl
))
{
{
break
;
break
;
}
}
}
}
/* In the special case of a
null-named TYPE_DECL node (
representing the
/* In the special case of a
TYPE_DECL node
representing the
declaration of some type tag
)
, if the given TYPE_DECL is marked as
declaration of some type tag, if the given TYPE_DECL is marked as
having been instantiated from some other (original) TYPE_DECL node
having been instantiated from some other (original) TYPE_DECL node
(e.g. one which was generated within the original definition of an
(e.g. one which was generated within the original definition of an
inline function) we have to generate a special (abbreviated)
inline function) we have to generate a special (abbreviated)
DW_TAG_structure_type, DW_TAG_union_type, or DW_TAG_enumeration-type
DW_TAG_structure_type, DW_TAG_union_type, or DW_TAG_enumeration-type
DIE here. */
DIE here. */
if
(
!
DECL_NAME
(
decl
)
&&
DECL_ABSTRACT_ORIGIN
(
decl
))
if
(
TYPE_DECL_IS_STUB
(
decl
)
&&
DECL_ABSTRACT_ORIGIN
(
decl
))
{
{
gen_tagged_type_instantiation_die
(
TREE_TYPE
(
decl
),
context_die
);
gen_tagged_type_instantiation_die
(
TREE_TYPE
(
decl
),
context_die
);
break
;
break
;
}
}
gen_type_die
(
TREE_TYPE
(
decl
),
context_die
);
gen_type_die
(
TREE_TYPE
(
decl
),
context_die
);
/* Note that unlike the gcc front end (which generates a NULL named
if
(
!
TYPE_DECL_IS_STUB
(
decl
))
TYPE_DECL node for each complete tagged type, each array type, and
each function type node created) the g++ front end generates a
_named_ TYPE_DECL node for each tagged type node created.
These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
generate a DW_TAG_typedef DIE for them. */
if
(
DECL_NAME
(
decl
)
&&
!
DECL_ARTIFICIAL
(
decl
))
{
{
/* Output a DIE to represent the typedef itself. */
/* Output a DIE to represent the typedef itself. */
gen_typedef_die
(
decl
,
context_die
);
gen_typedef_die
(
decl
,
context_die
);
...
@@ -7773,9 +7740,8 @@ dwarfout_file_scope_decl (decl, set_finalizing)
...
@@ -7773,9 +7740,8 @@ dwarfout_file_scope_decl (decl, set_finalizing)
type or a formal parameter type of some function. */
type or a formal parameter type of some function. */
if
(
debug_info_level
<=
DINFO_LEVEL_TERSE
)
if
(
debug_info_level
<=
DINFO_LEVEL_TERSE
)
{
{
if
((
DECL_NAME
(
decl
)
!=
NULL
if
(
!
TYPE_DECL_IS_STUB
(
decl
)
||
!
TYPE_USED_FOR_FUNCTION
(
TREE_TYPE
(
decl
)))
||
!
TYPE_USED_FOR_FUNCTION
(
TREE_TYPE
(
decl
)))
&&
!
DECL_ARTIFICIAL
(
decl
))
{
{
return
;
return
;
}
}
...
@@ -7802,11 +7768,8 @@ void
...
@@ -7802,11 +7768,8 @@ void
dwarfout_begin_block
(
blocknum
)
dwarfout_begin_block
(
blocknum
)
register
unsigned
blocknum
;
register
unsigned
blocknum
;
{
{
char
label
[
MAX_ARTIFICIAL_LABEL_BYTES
];
function_section
(
current_function_decl
);
function_section
(
current_function_decl
);
sprintf
(
label
,
BLOCK_BEGIN_LABEL_FMT
,
blocknum
);
ASM_OUTPUT_INTERNAL_LABEL
(
asm_out_file
,
BLOCK_BEGIN_LABEL
,
blocknum
);
ASM_OUTPUT_LABEL
(
asm_out_file
,
label
);
}
}
/* Output a marker (i.e. a label) for the end of the generated code for a
/* Output a marker (i.e. a label) for the end of the generated code for a
...
@@ -7815,11 +7778,8 @@ void
...
@@ -7815,11 +7778,8 @@ void
dwarfout_end_block
(
blocknum
)
dwarfout_end_block
(
blocknum
)
register
unsigned
blocknum
;
register
unsigned
blocknum
;
{
{
char
label
[
MAX_ARTIFICIAL_LABEL_BYTES
];
function_section
(
current_function_decl
);
function_section
(
current_function_decl
);
sprintf
(
label
,
BLOCK_END_LABEL_FMT
,
blocknum
);
ASM_OUTPUT_INTERNAL_LABEL
(
asm_out_file
,
BLOCK_END_LABEL
,
blocknum
);
ASM_OUTPUT_LABEL
(
asm_out_file
,
label
);
}
}
/* Output a marker (i.e. a label) at a point in the assembly code which
/* Output a marker (i.e. a label) at a point in the assembly code which
...
@@ -7832,9 +7792,9 @@ dwarfout_label (insn)
...
@@ -7832,9 +7792,9 @@ dwarfout_label (insn)
if
(
debug_info_level
>=
DINFO_LEVEL_NORMAL
)
if
(
debug_info_level
>=
DINFO_LEVEL_NORMAL
)
{
{
function_section
(
current_function_decl
);
function_section
(
current_function_decl
);
sprintf
(
label
,
INSN_LABEL_FMT
,
current_funcdef_number
,
sprintf
(
label
,
INSN_LABEL_FMT
,
current_funcdef_number
);
(
unsigned
)
INSN_UID
(
insn
));
ASM_OUTPUT_INTERNAL_LABEL
(
asm_out_file
,
label
,
ASM_OUTPUT_LABEL
(
asm_out_file
,
label
);
(
unsigned
)
INSN_UID
(
insn
)
);
}
}
}
}
...
@@ -7845,10 +7805,10 @@ dwarfout_begin_prologue ()
...
@@ -7845,10 +7805,10 @@ dwarfout_begin_prologue ()
{
{
char
label
[
MAX_ARTIFICIAL_LABEL_BYTES
];
char
label
[
MAX_ARTIFICIAL_LABEL_BYTES
];
register
dw_fde_ref
fde
;
register
dw_fde_ref
fde
;
register
dw_cfi_ref
cfi
;
function_section
(
current_function_decl
);
function_section
(
current_function_decl
);
sprintf
(
label
,
FUNC_BEGIN_LABEL_FMT
,
current_funcdef_number
);
ASM_GENERATE_INTERNAL_LABEL
(
label
,
FUNC_BEGIN_LABEL
,
current_funcdef_number
);
ASM_OUTPUT_LABEL
(
asm_out_file
,
label
);
ASM_OUTPUT_LABEL
(
asm_out_file
,
label
);
/* Expand the fde table if necessary. */
/* Expand the fde table if necessary. */
...
@@ -7883,7 +7843,8 @@ dwarfout_begin_function ()
...
@@ -7883,7 +7843,8 @@ dwarfout_begin_function ()
register
dw_cfi_ref
cfi
;
register
dw_cfi_ref
cfi
;
function_section
(
current_function_decl
);
function_section
(
current_function_decl
);
sprintf
(
label
,
BODY_BEGIN_LABEL_FMT
,
current_funcdef_number
);
ASM_GENERATE_INTERNAL_LABEL
(
label
,
BODY_BEGIN_LABEL
,
current_funcdef_number
);
ASM_OUTPUT_LABEL
(
asm_out_file
,
label
);
ASM_OUTPUT_LABEL
(
asm_out_file
,
label
);
/* Record the end-of-prolog location in the FDE. */
/* Record the end-of-prolog location in the FDE. */
...
@@ -7973,7 +7934,7 @@ dwarfout_end_function ()
...
@@ -7973,7 +7934,7 @@ dwarfout_end_function ()
dw_fde_ref
fde
;
dw_fde_ref
fde
;
char
label
[
MAX_ARTIFICIAL_LABEL_BYTES
];
char
label
[
MAX_ARTIFICIAL_LABEL_BYTES
];
function_section
(
current_function_decl
);
function_section
(
current_function_decl
);
sprintf
(
label
,
BODY_END_LABEL_FMT
,
current_funcdef_number
);
ASM_GENERATE_INTERNAL_LABEL
(
label
,
BODY_END_LABEL
,
current_funcdef_number
);
ASM_OUTPUT_LABEL
(
asm_out_file
,
label
);
ASM_OUTPUT_LABEL
(
asm_out_file
,
label
);
/* Record the ending code location in the FDE. */
/* Record the ending code location in the FDE. */
fde
=
&
fde_table
[
fde_table_in_use
-
1
];
fde
=
&
fde_table
[
fde_table_in_use
-
1
];
...
@@ -7990,7 +7951,7 @@ dwarfout_end_epilogue ()
...
@@ -7990,7 +7951,7 @@ dwarfout_end_epilogue ()
char
label
[
MAX_ARTIFICIAL_LABEL_BYTES
];
char
label
[
MAX_ARTIFICIAL_LABEL_BYTES
];
/* Output a label to mark the endpoint of the code generated for this
/* Output a label to mark the endpoint of the code generated for this
function. */
function. */
sprintf
(
label
,
FUNC_END_LABEL_FMT
,
current_funcdef_number
);
ASM_GENERATE_INTERNAL_LABEL
(
label
,
FUNC_END_LABEL
,
current_funcdef_number
);
ASM_OUTPUT_LABEL
(
asm_out_file
,
label
);
ASM_OUTPUT_LABEL
(
asm_out_file
,
label
);
fde
=
&
fde_table
[
fde_table_in_use
-
1
];
fde
=
&
fde_table
[
fde_table_in_use
-
1
];
fde
->
dw_fde_end
=
xstrdup
(
label
);
fde
->
dw_fde_end
=
xstrdup
(
label
);
...
@@ -8060,8 +8021,6 @@ dwarfout_line (filename, line)
...
@@ -8060,8 +8021,6 @@ dwarfout_line (filename, line)
register
char
*
filename
;
register
char
*
filename
;
register
unsigned
line
;
register
unsigned
line
;
{
{
char
label
[
MAX_ARTIFICIAL_LABEL_BYTES
];
register
unsigned
this_file_entry_num
=
lookup_filename
(
filename
);
if
(
debug_info_level
>=
DINFO_LEVEL_NORMAL
)
if
(
debug_info_level
>=
DINFO_LEVEL_NORMAL
)
{
{
function_section
(
current_function_decl
);
function_section
(
current_function_decl
);
...
@@ -8069,9 +8028,8 @@ dwarfout_line (filename, line)
...
@@ -8069,9 +8028,8 @@ dwarfout_line (filename, line)
if
(
DECL_SECTION_NAME
(
current_function_decl
))
if
(
DECL_SECTION_NAME
(
current_function_decl
))
{
{
register
dw_separate_line_info_ref
line_info
;
register
dw_separate_line_info_ref
line_info
;
sprintf
(
label
,
SEPARATE_LINE_CODE_LABEL_FMT
,
ASM_OUTPUT_INTERNAL_LABEL
(
asm_out_file
,
SEPARATE_LINE_CODE_LABEL
,
separate_line_info_table_in_use
);
separate_line_info_table_in_use
);
ASM_OUTPUT_LABEL
(
asm_out_file
,
label
);
fputc
(
'\n'
,
asm_out_file
);
fputc
(
'\n'
,
asm_out_file
);
/* expand the line info table if necessary */
/* expand the line info table if necessary */
...
@@ -8095,8 +8053,8 @@ dwarfout_line (filename, line)
...
@@ -8095,8 +8053,8 @@ dwarfout_line (filename, line)
else
else
{
{
register
dw_line_info_ref
line_info
;
register
dw_line_info_ref
line_info
;
sprintf
(
label
,
LINE_CODE_LABEL_FMT
,
line_info_table_in_use
);
ASM_OUTPUT_INTERNAL_LABEL
(
asm_out_file
,
LINE_CODE_LABEL
,
ASM_OUTPUT_LABEL
(
asm_out_file
,
label
);
line_info_table_in_use
);
fputc
(
'\n'
,
asm_out_file
);
fputc
(
'\n'
,
asm_out_file
);
/* expand the line info table if necessary */
/* expand the line info table if necessary */
...
@@ -8164,7 +8122,6 @@ dwarfout_init (asm_out_file, main_input_filename)
...
@@ -8164,7 +8122,6 @@ dwarfout_init (asm_out_file, main_input_filename)
register
FILE
*
asm_out_file
;
register
FILE
*
asm_out_file
;
register
char
*
main_input_filename
;
register
char
*
main_input_filename
;
{
{
/* Remember the name of the primary input file. */
/* Remember the name of the primary input file. */
primary_filename
=
main_input_filename
;
primary_filename
=
main_input_filename
;
...
@@ -8221,28 +8178,6 @@ dwarfout_init (asm_out_file, main_input_filename)
...
@@ -8221,28 +8178,6 @@ dwarfout_init (asm_out_file, main_input_filename)
fde_table_allocated
=
FDE_TABLE_INCREMENT
;
fde_table_allocated
=
FDE_TABLE_INCREMENT
;
fde_table_in_use
=
0
;
fde_table_in_use
=
0
;
#if 0
/* Output a starting label for the .text section. */
fputc ('\n', asm_out_file);
ASM_OUTPUT_SECTION (asm_out_file, TEXT_SECTION);
ASM_OUTPUT_LABEL (asm_out_file, TEXT_BEGIN_LABEL);
/* Output a starting label for the .data section. */
fputc ('\n', asm_out_file);
ASM_OUTPUT_SECTION (asm_out_file, DATA_SECTION);
ASM_OUTPUT_LABEL (asm_out_file, DATA_BEGIN_LABEL);
/* Output a starting label for the .rodata section. */
fputc ('\n', asm_out_file);
ASM_OUTPUT_SECTION (asm_out_file, RODATA_SECTION);
ASM_OUTPUT_LABEL (asm_out_file, RODATA_BEGIN_LABEL);
/* Output a starting label for the .bss section. */
fputc ('\n', asm_out_file);
ASM_OUTPUT_SECTION (asm_out_file, BSS_SECTION);
ASM_OUTPUT_LABEL (asm_out_file, BSS_BEGIN_LABEL);
#endif
/* Generate the initial DIE for the .debug section. Note that the (string)
/* Generate the initial DIE for the .debug section. Note that the (string)
value given in the DW_AT_name attribute of the DW_TAG_compile_unit DIE
value given in the DW_AT_name attribute of the DW_TAG_compile_unit DIE
will (typically) be a relative pathname and that this pathname should be
will (typically) be a relative pathname and that this pathname should be
...
@@ -8252,6 +8187,8 @@ dwarfout_init (asm_out_file, main_input_filename)
...
@@ -8252,6 +8187,8 @@ dwarfout_init (asm_out_file, main_input_filename)
/* clear the association between base types and their DIE's */
/* clear the association between base types and their DIE's */
init_base_type_table
();
init_base_type_table
();
ASM_GENERATE_INTERNAL_LABEL
(
text_end_label
,
TEXT_END_LABEL
,
0
);
}
}
/* Output stuff that dwarf requires at the end of every file,
/* Output stuff that dwarf requires at the end of every file,
...
@@ -8266,23 +8203,18 @@ dwarfout_finish ()
...
@@ -8266,23 +8203,18 @@ dwarfout_finish ()
/* Output a terminator label for the .text section. */
/* Output a terminator label for the .text section. */
fputc
(
'\n'
,
asm_out_file
);
fputc
(
'\n'
,
asm_out_file
);
ASM_OUTPUT_SECTION
(
asm_out_file
,
TEXT_SECTION
);
ASM_OUTPUT_SECTION
(
asm_out_file
,
TEXT_SECTION
);
ASM_OUTPUT_
LABEL
(
asm_out_file
,
TEXT_END_LABEL
);
ASM_OUTPUT_
INTERNAL_LABEL
(
asm_out_file
,
TEXT_END_LABEL
,
0
);
#if 0
#if 0
/* Output a terminator label for the .data section. */
/* Output a terminator label for the .data section. */
fputc ('\n', asm_out_file);
fputc ('\n', asm_out_file);
ASM_OUTPUT_SECTION (asm_out_file, DATA_SECTION);
ASM_OUTPUT_SECTION (asm_out_file, DATA_SECTION);
ASM_OUTPUT_LABEL (asm_out_file, DATA_END_LABEL);
ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, DATA_END_LABEL, 0);
/* Output a terminator label for the .rodata section. */
fputc ('\n', asm_out_file);
ASM_OUTPUT_SECTION (asm_out_file, RODATA_SECTION);
ASM_OUTPUT_LABEL (asm_out_file, RODATA_END_LABEL);
/* Output a terminator label for the .bss section. */
/* Output a terminator label for the .bss section. */
fputc ('\n', asm_out_file);
fputc ('\n', asm_out_file);
ASM_OUTPUT_SECTION (asm_out_file, BSS_SECTION);
ASM_OUTPUT_SECTION (asm_out_file, BSS_SECTION);
ASM_OUTPUT_
LABEL (asm_out_file, BSS_END_LABEL
);
ASM_OUTPUT_
INTERNAL_LABEL (asm_out_file, BSS_END_LABEL, 0
);
#endif
#endif
/* Output the source line correspondence table. */
/* Output the source line correspondence table. */
...
@@ -8297,7 +8229,7 @@ dwarfout_finish ()
...
@@ -8297,7 +8229,7 @@ dwarfout_finish ()
if
(
separate_line_info_table_in_use
==
0
)
if
(
separate_line_info_table_in_use
==
0
)
{
{
add_AT_lbl_id
(
comp_unit_die
,
DW_AT_low_pc
,
TEXT_SECTION
);
add_AT_lbl_id
(
comp_unit_die
,
DW_AT_low_pc
,
TEXT_SECTION
);
add_AT_lbl_id
(
comp_unit_die
,
DW_AT_high_pc
,
TEXT_END_LABEL
);
add_AT_lbl_id
(
comp_unit_die
,
DW_AT_high_pc
,
text_end_label
);
}
}
add_AT_section_offset
(
comp_unit_die
,
DW_AT_stmt_list
,
LINE_SECTION
);
add_AT_section_offset
(
comp_unit_die
,
DW_AT_stmt_list
,
LINE_SECTION
);
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment