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
4927276d
Commit
4927276d
authored
Nov 11, 1996
by
Jason Merrill
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
x
From-SVN: r13121
parent
810e3c45
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
118 additions
and
66 deletions
+118
-66
gcc/config/mips/iris6.h
+87
-16
gcc/dwarf2out.c
+21
-48
gcc/varasm.c
+10
-2
No files found.
gcc/config/mips/iris6.h
View file @
4927276d
...
...
@@ -144,9 +144,10 @@ Boston, MA 02111-1307, USA. */
#undef SET_ASM_OP
/* Has no equivalent. See ASM_OUTPUT_DEF below. */
/* This is how to equate one symbol to another symbol. The syntax used is
`SYM1=SYM2'. Note that this is different from the way equates are done
with most svr4 assemblers, where the syntax is `.set SYM1,SYM2'. */
#if 0
/* This is *NOT* how to equate one symbol to another symbol. The assembler
'=' syntax just equates a name to a constant expression.
See ASM_OUTPUT_WEAK_ALIAS. */
#define ASM_OUTPUT_DEF(FILE,LABEL1,LABEL2) \
do { fprintf ((FILE), "\t"); \
...
...
@@ -155,6 +156,28 @@ Boston, MA 02111-1307, USA. */
assemble_name (FILE, LABEL2); \
fprintf (FILE, "\n"); \
} while (0)
#endif
/* Define the strings used for the special svr4 .type and .size directives. */
#define TYPE_ASM_OP ".type"
#define SIZE_ASM_OP ".size"
/* This is how we tell the assembler that a symbol is weak. */
#define ASM_OUTPUT_WEAK_ALIAS(FILE,NAME,VALUE) \
do { \
fputs ("\t.weakext\t", FILE); \
assemble_name (FILE, NAME); \
if (VALUE) \
{ \
fputc (' ', FILE); \
assemble_name (FILE, VALUE); \
} \
fputc ('\n', FILE); \
} while (0)
#define ASM_WEAKEN_LABEL(FILE,NAME) ASM_OUTPUT_WEAK_ALIAS(FILE,NAME,0)
#define POPSECTION_ASM_OP ".popsection"
...
...
@@ -195,6 +218,7 @@ Boston, MA 02111-1307, USA. */
and dtor lists this way, so we use -init and -fini to invoke the
do_global_* functions instead of running collect2. */
#define BSS_SECTION_ASM_OP ".section\t.bss"
#define CONST_SECTION_ASM_OP_32 "\t.rdata"
#define CONST_SECTION_ASM_OP_64 ".section\t.rodata"
#define CTORS_SECTION_ASM_OP ".section\t.ctors,1,2,0,4"
...
...
@@ -323,22 +347,69 @@ while (0)
/* ??? SGI assembler gives warning whenever .lcomm is used. */
#undef ASM_OUTPUT_LOCAL
#define ASM_OUTPUT_ALIGNED_LOCAL(STREAM, NAME, SIZE, ALIGN) \
do \
{ \
if (mips_abi != ABI_32) \
{ \
fp
uts ("\t.section\t.bss\n", STREAM);
\
ASM_DECLARE_OBJECT_NAME (STREAM, NAME, 0);
\
ASM_OUTPUT_ALIGN (STREAM, floor_log2 (ALIGN / BITS_PER_UNIT)); \
ASM_OUTPUT_SKIP (STREAM, SIZE); \
fprintf (STREAM, "\t%s\n", POPSECTION_ASM_OP); \
} \
else \
#define ASM_OUTPUT_ALIGNED_LOCAL(STREAM, NAME, SIZE, ALIGN)
\
do
\
{
\
if (mips_abi != ABI_32)
\
{
\
fp
rintf (STREAM, "%s\n", BSS_SECTION_ASM_OP);
\
mips_declare_object (STREAM, NAME, "", ":\n", 0);
\
ASM_OUTPUT_ALIGN (STREAM, floor_log2 (ALIGN / BITS_PER_UNIT));
\
ASM_OUTPUT_SKIP (STREAM, SIZE);
\
fprintf (STREAM, "\t%s\n", POPSECTION_ASM_OP);
\
}
\
else
\
mips_declare_object (STREAM, NAME, "\n\t.lcomm\t", ",%u\n", (SIZE)); \
} \
}
\
while (0)
/* A C statement (sans semicolon) to output to the stdio stream
FILE the assembler definition of uninitialized global DECL named
NAME whose size is SIZE bytes and alignment is ALIGN bytes.
Try to use asm_output_aligned_bss to implement this macro. */
#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN)
/* Write the extra assembler code needed to declare an object properly. */
#undef ASM_DECLARE_OBJECT_NAME
#define ASM_DECLARE_OBJECT_NAME(STREAM, NAME, DECL) \
do \
{ \
size_directive_output = 0; \
if (!flag_inhibit_size_directive && DECL_SIZE (DECL)) \
{ \
size_directive_output = 1; \
fprintf (STREAM, "\t%s\t ", SIZE_ASM_OP); \
assemble_name (STREAM, NAME); \
fprintf (STREAM, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL))); \
} \
mips_declare_object (STREAM, NAME, "", ":\n", 0); \
} \
while (0)
/* Output the size directive for a decl in rest_of_decl_compilation
in the case where we did not do so before the initializer.
Once we find the error_mark_node, we know that the value of
size_directive_output was set
by ASM_DECLARE_OBJECT_NAME when it was run for the same decl. */
#define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END) \
do { \
char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0); \
if (!flag_inhibit_size_directive && DECL_SIZE (DECL) \
&& ! AT_END && TOP_LEVEL \
&& DECL_INITIAL (DECL) == error_mark_node \
&& !size_directive_output) \
{ \
size_directive_output = 1; \
fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
assemble_name (FILE, name); \
fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL))); \
} \
} while (0)
#undef LOCAL_LABEL_PREFIX
#define LOCAL_LABEL_PREFIX (mips_abi == ABI_32 ? "$" : ".")
...
...
gcc/dwarf2out.c
View file @
4927276d
...
...
@@ -252,19 +252,6 @@ pubname_entry;
#define ASM_COMMENT_START ";#"
#endif
/* Define a macro which returns non-zero for any tagged type which is used
(directly or indirectly) in the specification of either some function's
return type or some formal parameter of some function. We use this macro
when we are operating in "terse" mode to help us know what tagged types
have to be represented in Dwarf (even in terse mode) and which ones don't.
A flag bit with this meaning really should be a part of the normal GCC
..._TYPE nodes, but at the moment, there is no such bit defined for these
nodes. For now, we have to just fake it. It it safe for us to simply
return zero for all complete tagged types (which will get forced out
anyway if they were used in the specification of some formal or return
type) and non-zero for all incomplete tagged types. */
#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.
...
...
@@ -6089,7 +6076,8 @@ scope_die_for (t, context_die)
{
assert
(
scope_die
==
comp_unit_die
);
assert
(
TREE_CODE_CLASS
(
TREE_CODE
(
containing_scope
))
==
't'
);
assert
(
TREE_ASM_WRITTEN
(
containing_scope
));
if
(
debug_info_level
>
DINFO_LEVEL_TERSE
)
assert
(
TREE_ASM_WRITTEN
(
containing_scope
));
}
}
return
scope_die
;
...
...
@@ -6533,7 +6521,6 @@ gen_subprogram_die (decl, context_die)
register
dw_die_ref
subr_die
;
register
dw_loc_descr_ref
fp_loc
=
NULL
;
register
unsigned
fp_reg
;
register
tree
type
;
register
tree
fn_arg_types
;
register
tree
outer_scope
;
dw_die_ref
old_die
=
lookup_decl_die
(
decl
);
...
...
@@ -6581,9 +6568,12 @@ gen_subprogram_die (decl, context_die)
if
(
TREE_PUBLIC
(
decl
))
add_AT_flag
(
subr_die
,
DW_AT_external
,
1
);
add_name_and_src_coords_attributes
(
subr_die
,
decl
);
type
=
TREE_TYPE
(
decl
);
add_prototyped_attribute
(
subr_die
,
type
);
add_type_attribute
(
subr_die
,
TREE_TYPE
(
type
),
0
,
0
,
context_die
);
if
(
debug_info_level
>
DINFO_LEVEL_TERSE
)
{
register
tree
type
=
TREE_TYPE
(
decl
);
add_prototyped_attribute
(
subr_die
,
type
);
add_type_attribute
(
subr_die
,
TREE_TYPE
(
type
),
0
,
0
,
context_die
);
}
add_pure_or_virtual_attribute
(
subr_die
,
decl
);
if
(
DECL_ARTIFICIAL
(
decl
))
add_AT_flag
(
subr_die
,
DW_AT_artificial
,
1
);
...
...
@@ -6668,7 +6658,9 @@ gen_subprogram_die (decl, context_die)
/* 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. */
if
(
DECL_INITIAL
(
decl
)
==
NULL_TREE
)
if
(
debug_info_level
<=
DINFO_LEVEL_TERSE
)
/* do nothing */
;
else
if
(
DECL_INITIAL
(
decl
)
==
NULL_TREE
)
{
gen_formal_types_die
(
TREE_TYPE
(
decl
),
subr_die
);
}
...
...
@@ -7009,11 +7001,8 @@ gen_compile_unit_die (main_input_filename)
that the object file is stripped and has no debugging information.
To get the MIPS/SGI debugger to believe that there is debugging
information in the object file, we add a -g to the producer string. */
if
(
write_symbols
!=
NO_DEBUG
)
{
strcat
(
producer
,
" -g"
);
}
if
(
debug_info_level
>
DINFO_LEVEL_TERSE
)
strcat
(
producer
,
" -g"
);
#endif
add_AT_string
(
comp_unit_die
,
DW_AT_producer
,
producer
);
...
...
@@ -7548,7 +7537,8 @@ gen_decl_die (decl, context_die)
/* Before we describe the FUNCTION_DECL itself, make sure that we have
described its return type. */
gen_type_die
(
TREE_TYPE
(
TREE_TYPE
(
decl
)),
context_die
);
if
(
debug_info_level
>
DINFO_LEVEL_TERSE
)
gen_type_die
(
TREE_TYPE
(
TREE_TYPE
(
decl
)),
context_die
);
/* Now output a DIE to represent the function itself. */
gen_subprogram_die
(
decl
,
context_die
);
...
...
@@ -7556,18 +7546,9 @@ gen_decl_die (decl, context_die)
case
TYPE_DECL
:
/* If we are in terse mode, don't generate any DIEs to represent any
actual typedefs. Note that even when we are in terse mode, we must
still output DIEs to represent those tagged types which are used
(directly or indirectly) in the specification of either a return
type or a formal parameter type of some function. */
actual typedefs. */
if
(
debug_info_level
<=
DINFO_LEVEL_TERSE
)
{
if
(
!
TYPE_DECL_IS_STUB
(
decl
)
||
!
TYPE_USED_FOR_FUNCTION
(
TREE_TYPE
(
decl
)))
{
break
;
}
}
break
;
/* In the special case of a TYPE_DECL node representing the
declaration of some type tag, if the given TYPE_DECL is marked as
...
...
@@ -7752,18 +7733,9 @@ dwarfout_file_scope_decl (decl, set_finalizing)
}
/* If we are in terse mode, don't generate any DIEs to represent any
actual typedefs. Note that even when we are in terse mode, we must
still output DIEs to represent those tagged types which are used
(directly or indirectly) in the specification of either a return
type or a formal parameter type of some function. */
actual typedefs. */
if
(
debug_info_level
<=
DINFO_LEVEL_TERSE
)
{
if
(
!
TYPE_DECL_IS_STUB
(
decl
)
||
!
TYPE_USED_FOR_FUNCTION
(
TREE_TYPE
(
decl
)))
{
return
;
}
}
return
;
break
;
default
:
...
...
@@ -8204,7 +8176,8 @@ dwarfout_init (asm_out_file, main_input_filename)
gen_compile_unit_die
(
main_input_filename
);
/* clear the association between base types and their DIE's */
init_base_type_table
();
if
(
debug_info_level
>
DINFO_LEVEL_TERSE
)
init_base_type_table
();
ASM_GENERATE_INTERNAL_LABEL
(
text_end_label
,
TEXT_END_LABEL
,
0
);
}
...
...
gcc/varasm.c
View file @
4927276d
...
...
@@ -4217,12 +4217,12 @@ void
assemble_alias
(
decl
,
target
)
tree
decl
,
target
;
{
#ifdef ASM_OUTPUT_DEF
char
*
name
;
make_decl_rtl
(
decl
,
(
char
*
)
0
,
1
);
name
=
XSTR
(
XEXP
(
DECL_RTL
(
decl
),
0
),
0
);
#ifdef ASM_OUTPUT_DEF
/* Make name accessible from other files, if appropriate. */
if
(
TREE_PUBLIC
(
decl
))
...
...
@@ -4241,7 +4241,15 @@ assemble_alias (decl, target)
ASM_OUTPUT_DEF
(
asm_out_file
,
name
,
IDENTIFIER_POINTER
(
target
));
TREE_ASM_WRITTEN
(
decl
)
=
1
;
#else
warning
(
"alias definitions not supported in this configuration"
);
#ifdef ASM_OUTPUT_WEAK_ALIAS
if
(
!
DECL_WEAK
(
decl
))
warning
(
"only weak aliases are supported in this configuration"
);
ASM_OUTPUT_WEAK_ALIAS
(
asm_out_file
,
name
,
IDENTIFIER_POINTER
(
target
));
TREE_ASM_WRITTEN
(
decl
)
=
1
;
#else
warning
(
"alias definitions not supported in this configuration; ignored"
);
#endif
#endif
}
...
...
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