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
ab72d377
Commit
ab72d377
authored
Oct 16, 1996
by
Jason Merrill
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
scoping
From-SVN: r12972
parent
fe1fd353
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
59 additions
and
63 deletions
+59
-63
gcc/dwarf2out.c
+59
-63
No files found.
gcc/dwarf2out.c
View file @
ab72d377
...
...
@@ -4970,20 +4970,20 @@ modified_type_die (type, is_const_type, is_volatile_type, context_die)
if
(
is_const_type
)
{
mod_type_die
=
new_die
(
DW_TAG_const_type
,
co
ntex
t_die
);
mod_type_die
=
new_die
(
DW_TAG_const_type
,
co
mp_uni
t_die
);
sub_die
=
modified_type_die
(
build_type_variant
(
type
,
0
,
is_volatile_type
),
0
,
is_volatile_type
,
context_die
);
}
else
if
(
is_volatile_type
)
{
mod_type_die
=
new_die
(
DW_TAG_volatile_type
,
co
ntex
t_die
);
mod_type_die
=
new_die
(
DW_TAG_volatile_type
,
co
mp_uni
t_die
);
sub_die
=
modified_type_die
(
TYPE_MAIN_VARIANT
(
type
),
0
,
0
,
context_die
);
}
else
if
(
code
==
POINTER_TYPE
)
{
mod_type_die
=
new_die
(
DW_TAG_pointer_type
,
co
ntex
t_die
);
mod_type_die
=
new_die
(
DW_TAG_pointer_type
,
co
mp_uni
t_die
);
add_AT_unsigned
(
mod_type_die
,
DW_AT_byte_size
,
PTR_SIZE
);
#if 0
add_AT_unsigned (mod_type_die, DW_AT_address_class, 0);
...
...
@@ -4996,7 +4996,7 @@ modified_type_die (type, is_const_type, is_volatile_type, context_die)
}
else
if
(
code
==
REFERENCE_TYPE
)
{
mod_type_die
=
new_die
(
DW_TAG_reference_type
,
co
ntex
t_die
);
mod_type_die
=
new_die
(
DW_TAG_reference_type
,
co
mp_uni
t_die
);
add_AT_unsigned
(
mod_type_die
,
DW_AT_byte_size
,
PTR_SIZE
);
#if 0
add_AT_unsigned (mod_type_die, DW_AT_address_class, 0);
...
...
@@ -6080,8 +6080,8 @@ push_decl_scope (scope)
/* Return the DIE for the scope the immediately contains this declaration. */
static
dw_die_ref
scope_die_for
_type
(
type
,
context_die
)
register
tree
t
ype
;
scope_die_for
(
t
,
context_die
)
register
tree
t
;
register
dw_die_ref
context_die
;
{
register
dw_die_ref
scope_die
=
NULL
;
...
...
@@ -6090,24 +6090,33 @@ scope_die_for_type (type, context_die)
/* Walk back up the declaration tree looking for a place to define
this type. */
containing_scope
=
TYPE_CONTEXT
(
type
);
if
(
TREE_CODE_CLASS
(
TREE_CODE
(
t
))
==
't'
)
containing_scope
=
TYPE_CONTEXT
(
t
);
else
if
(
TREE_CODE
(
t
)
==
FUNCTION_DECL
&&
DECL_VIRTUAL_P
(
t
))
containing_scope
=
decl_class_context
(
t
);
else
containing_scope
=
DECL_CONTEXT
(
t
);
if
(
containing_scope
==
NULL
)
{
scope_die
=
comp_unit_die
;
}
else
{
for
(
i
=
decl_scope_depth
-
1
,
scope_die
=
context_die
;
i
>=
0
&&
scope_die
!=
NULL
&&
decl_scope_table
[
i
]
!=
containing_scope
;
--
i
,
scope_die
=
scope_die
->
die_parent
)
for
(
i
=
decl_scope_depth
,
scope_die
=
context_die
;
i
>
0
&&
decl_scope_table
[
i
-
1
]
!=
containing_scope
;
scope_die
=
scope_die
->
die_parent
)
{
if
(
scope_die
->
die_tag
==
DW_TAG_lexical_block
)
/* nothing */
;
else
--
i
;
}
if
(
scope_die
==
NULL
)
if
(
i
==
0
)
{
scope_die
=
context_die
;
assert
(
scope_die
==
comp_unit_die
);
assert
(
TREE_CODE_CLASS
(
TREE_CODE
(
containing_scope
))
==
't'
);
assert
(
TREE_ASM_WRITTEN
(
containing_scope
));
}
}
return
scope_die
;
...
...
@@ -6133,7 +6142,6 @@ add_type_attribute (object_die, type, decl_const, decl_volatile, context_die)
register
dw_die_ref
context_die
;
{
register
enum
tree_code
code
=
TREE_CODE
(
type
);
register
dw_die_ref
scope_die
=
NULL
;
register
dw_die_ref
type_die
=
NULL
;
if
(
code
==
ERROR_MARK
)
...
...
@@ -6149,11 +6157,10 @@ add_type_attribute (object_die, type, decl_const, decl_volatile, context_die)
return
;
}
scope_die
=
scope_die_for_type
(
type
,
context_die
);
type_die
=
modified_type_die
(
type
,
decl_const
||
TYPE_READONLY
(
type
),
decl_volatile
||
TYPE_VOLATILE
(
type
),
scope
_die
);
context
_die
);
if
(
type_die
!=
NULL
)
{
add_AT_die_ref
(
object_die
,
DW_AT_type
,
type_die
);
...
...
@@ -6236,14 +6243,10 @@ gen_array_type_die (type, context_die)
register
tree
type
;
register
dw_die_ref
context_die
;
{
register
dw_die_ref
scope_die
=
scope_die_for
_type
(
type
,
context_die
);
register
dw_die_ref
array_die
=
lookup_type_die
(
typ
e
);
register
dw_die_ref
scope_die
=
scope_die_for
(
type
,
context_die
);
register
dw_die_ref
array_die
=
new_die
(
DW_TAG_array_type
,
scope_di
e
);
register
tree
element_type
;
if
(
array_die
)
return
;
array_die
=
new_die
(
DW_TAG_array_type
,
scope_die
);
#if 0
/* We default the array ordering. SDB will probably do
the right things even if DW_AT_ordering is not present. It's not even
...
...
@@ -6281,10 +6284,8 @@ gen_set_type_die (type, context_die)
register
tree
type
;
register
dw_die_ref
context_die
;
{
register
dw_die_ref
type_die
=
lookup_type_die
(
type
);
if
(
type_die
)
return
;
type_die
=
new_die
(
DW_TAG_set_type
,
scope_die_for_type
(
type
,
context_die
));
register
dw_die_ref
type_die
=
new_die
(
DW_TAG_set_type
,
scope_die_for
(
type
,
context_die
));
equate_type_number_to_die
(
type
,
type_die
);
add_type_attribute
(
type_die
,
TREE_TYPE
(
type
),
0
,
0
,
context_die
);
}
...
...
@@ -6324,7 +6325,7 @@ gen_inlined_enumeration_type_die (type, context_die)
{
register
dw_die_ref
type_die
;
type_die
=
new_die
(
DW_TAG_enumeration_type
,
scope_die_for
_type
(
type
,
context_die
));
scope_die_for
(
type
,
context_die
));
assert
(
TREE_ASM_WRITTEN
(
type
));
add_abstract_origin_attribute
(
type_die
,
type
);
}
...
...
@@ -6337,7 +6338,7 @@ gen_inlined_structure_type_die (type, context_die)
{
register
dw_die_ref
type_die
;
type_die
=
new_die
(
DW_TAG_structure_type
,
scope_die_for
_type
(
type
,
context_die
));
scope_die_for
(
type
,
context_die
));
assert
(
TREE_ASM_WRITTEN
(
type
));
add_abstract_origin_attribute
(
type_die
,
type
);
}
...
...
@@ -6350,7 +6351,7 @@ gen_inlined_union_type_die (type, context_die)
{
register
dw_die_ref
type_die
;
type_die
=
new_die
(
DW_TAG_union_type
,
scope_die_for
_type
(
type
,
context_die
));
scope_die_for
(
type
,
context_die
));
assert
(
TREE_ASM_WRITTEN
(
type
));
add_abstract_origin_attribute
(
type_die
,
type
);
}
...
...
@@ -6371,7 +6372,7 @@ gen_enumeration_type_die (type, is_complete, context_die)
if
(
type_die
==
NULL
)
{
type_die
=
new_die
(
DW_TAG_enumeration_type
,
scope_die_for
_type
(
type
,
context_die
));
scope_die_for
(
type
,
context_die
));
equate_type_number_to_die
(
type
,
type_die
);
add_name_attribute
(
type_die
,
type_tag
(
type
));
}
...
...
@@ -6599,7 +6600,8 @@ gen_subprogram_die (decl, context_die)
}
else
{
subr_die
=
new_die
(
DW_TAG_subprogram
,
context_die
);
subr_die
=
new_die
(
DW_TAG_subprogram
,
scope_die_for
(
decl
,
context_die
));
if
(
TREE_PUBLIC
(
decl
)
||
DECL_EXTERNAL
(
decl
))
{
add_AT_flag
(
subr_die
,
DW_AT_external
,
1
);
...
...
@@ -6686,6 +6688,7 @@ gen_subprogram_die (decl, context_die)
FUNCTION_TYPE node ends with a void_type_node then there should *not* be
an ellipsis at the end. */
push_decl_scope
(
decl
);
/* In the case where we are describing a mere function declaration, all we
need to do here (and all we *can* do here) is to describe the *types* of
its formal parameters. */
...
...
@@ -6777,6 +6780,7 @@ gen_subprogram_die (decl, context_die)
}
#endif
}
pop_decl_scope
();
}
/* Generate a DIE to represent a declared data object. */
...
...
@@ -6912,13 +6916,16 @@ gen_inlined_subroutine_die (stmt, context_die, depth)
{
register
dw_die_ref
subr_die
=
new_die
(
DW_TAG_inlined_subroutine
,
context_die
);
register
tree
decl
=
block_ultimate_origin
(
stmt
);
char
label
[
MAX_ARTIFICIAL_LABEL_BYTES
];
add_abstract_origin_attribute
(
subr_die
,
block_ultimate_origin
(
stmt
)
);
add_abstract_origin_attribute
(
subr_die
,
decl
);
sprintf
(
label
,
BLOCK_BEGIN_LABEL_FMT
,
next_block_number
);
add_AT_lbl_id
(
subr_die
,
DW_AT_low_pc
,
label
);
sprintf
(
label
,
BLOCK_END_LABEL_FMT
,
next_block_number
);
add_AT_lbl_id
(
subr_die
,
DW_AT_high_pc
,
label
);
push_decl_scope
(
decl
);
decls_for_scope
(
stmt
,
subr_die
,
depth
);
pop_decl_scope
();
current_function_has_inlines
=
1
;
}
}
...
...
@@ -6944,8 +6951,9 @@ gen_field_die (decl, context_die)
add_data_member_location_attribute
(
decl_die
,
decl
);
}
/* Don't generate either pointer_type DIEs or reference_type DIEs.
Use modified type DIE's instead.
#if 0
/* Don't generate either pointer_type DIEs or reference_type DIEs here.
Use modified_type_die instead.
We keep this code here just in case these types of DIEs may be needed to
represent certain things in other languages (e.g. Pascal) someday. */
static void
...
...
@@ -6953,16 +6961,14 @@ gen_pointer_type_die (type, context_die)
register tree type;
register dw_die_ref context_die;
{
register
dw_die_ref
ptr_die
=
lookup_type_die
(
type
);
if
(
ptr_die
)
return
;
ptr_die
=
new_die
(
DW_TAG_pointer_type
,
context_die
);
register dw_die_ref ptr_die = new_die (DW_TAG_pointer_type, context_die);
equate_type_number_to_die (type, ptr_die);
add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
}
/* Don't generate either pointer_type DIEs or reference_type DIEs.
Use modified
type DIE's
instead.
/* Don't generate either pointer_type DIEs or reference_type DIEs
here
.
Use modified
_type_die
instead.
We keep this code here just in case these types of DIEs may be needed to
represent certain things in other languages (e.g. Pascal) someday. */
static void
...
...
@@ -6970,13 +6976,12 @@ gen_reference_type_die (type, context_die)
register tree type;
register dw_die_ref context_die;
{
register
dw_die_ref
ref_die
=
lookup_type_die
(
type
);
if
(
ref_die
)
return
;
ref_die
=
new_die
(
DW_TAG_reference_type
,
context_die
);
register dw_die_ref ref_die = new_die (DW_TAG_reference_type, context_die);
equate_type_number_to_die (type, ref_die);
add_type_attribute (ref_die, TREE_TYPE (type), 0, 0, context_die);
add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
}
#endif
/* Generate a DIE for a pointer to a member type. */
static
void
...
...
@@ -6984,10 +6989,8 @@ gen_ptr_to_mbr_type_die (type, context_die)
register
tree
type
;
register
dw_die_ref
context_die
;
{
register
dw_die_ref
ptr_die
=
lookup_type_die
(
type
);
if
(
ptr_die
)
return
;
ptr_die
=
new_die
(
DW_TAG_ptr_to_member_type
,
context_die
);
register
dw_die_ref
ptr_die
=
new_die
(
DW_TAG_ptr_to_member_type
,
context_die
);
equate_type_number_to_die
(
type
,
ptr_die
);
add_AT_die_ref
(
ptr_die
,
DW_AT_containing_type
,
lookup_type_die
(
TYPE_OFFSET_BASETYPE
(
type
)));
...
...
@@ -7056,11 +7059,8 @@ gen_string_type_die (type, context_die)
register
tree
type
;
register
dw_die_ref
context_die
;
{
register
dw_die_ref
type_die
=
lookup_type_die
(
type
);
if
(
type_die
)
return
;
type_die
=
new_die
(
DW_TAG_string_type
,
scope_die_for_type
(
type
,
context_die
));
register
dw_die_ref
type_die
=
new_die
(
DW_TAG_string_type
,
scope_die_for
(
type
,
context_die
));
equate_type_number_to_die
(
type
,
type_die
);
/* Fudge the string length attribute for now. */
...
...
@@ -7140,7 +7140,7 @@ gen_struct_or_union_type_die (type, is_complete, context_die)
{
type_die
=
new_die
(
TREE_CODE
(
type
)
==
RECORD_TYPE
?
DW_TAG_structure_type
:
DW_TAG_union_type
,
scope_die_for
_type
(
type
,
context_die
));
scope_die_for
(
type
,
context_die
));
equate_type_number_to_die
(
type
,
type_die
);
add_name_attribute
(
type_die
,
type_tag
(
type
));
}
...
...
@@ -7159,7 +7159,9 @@ gen_struct_or_union_type_die (type, is_complete, context_die)
if
(
TYPE_SIZE
(
type
))
{
add_byte_size_attribute
(
type_die
,
type
);
push_decl_scope
(
type
);
gen_member_die
(
type
,
type_die
);
pop_decl_scope
();
}
}
else
...
...
@@ -7173,10 +7175,7 @@ gen_subroutine_type_die (type, context_die)
register
dw_die_ref
context_die
;
{
register
tree
return_type
=
TREE_TYPE
(
type
);
register
dw_die_ref
subr_die
=
lookup_type_die
(
type
);
if
(
subr_die
)
return
;
subr_die
=
new_die
(
DW_TAG_subroutine_type
,
context_die
);
register
dw_die_ref
subr_die
=
new_die
(
DW_TAG_subroutine_type
,
context_die
);
equate_type_number_to_die
(
type
,
subr_die
);
add_prototyped_attribute
(
subr_die
,
type
);
add_type_attribute
(
subr_die
,
return_type
,
0
,
0
,
context_die
);
...
...
@@ -7191,8 +7190,7 @@ gen_typedef_die (decl, context_die)
{
register
tree
origin
=
decl_ultimate_origin
(
decl
);
register
dw_die_ref
type_die
;
type_die
=
new_die
(
DW_TAG_typedef
,
scope_die_for_type
(
decl
,
context_die
));
type_die
=
new_die
(
DW_TAG_typedef
,
scope_die_for
(
decl
,
context_die
));
if
(
origin
!=
NULL
)
{
add_abstract_origin_attribute
(
type_die
,
origin
);
...
...
@@ -7562,7 +7560,6 @@ gen_decl_die (decl, context_die)
return
;
}
push_decl_scope
(
DECL_CONTEXT
(
decl
));
switch
(
TREE_CODE
(
decl
))
{
case
CONST_DECL
:
...
...
@@ -7680,7 +7677,6 @@ gen_decl_die (decl, context_die)
default
:
abort
();
}
pop_decl_scope
();
}
/***************** Debug Information Generation Hooks ***********************/
...
...
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