target.h (encode_section_info): Add new argument carrying the RTL to be modified by the hook.
* target.h (encode_section_info): Add new argument carrying the RTL to be modified by the hook. * varasm.c (make_decl_rtl, output_constant_def): Update calls to encode_section_info. (default_encode_section_info): Take and use RTL argument, don't use TREE_CST_RTL or DECL_RTL. * output.h: Update prototype of default_encode_section_info. * config/darwin.h (ASM_DECLARE_OBJECT_NAME) (ASM_DECLARE_FUNCTION_NAME, ASM_OUTPUT_ALIGNED_DECL_LOCAL): Update calls to encode_section_info. * config/darwin.c, config/arm/arm.c, config/arm/pe.c * config/h8300/h8300.c, config/i386/winnt.c, config/m32r/m32r.c * config/m68hc11/m68hc11.c, config/m88k/m88k.c, config/mcore/mcore.c * config/mips/mips.c, config/mmix/mmix.c, config/pa/pa.c * config/romp/romp.c, config/rs6000/rs6000.c, config/s390/s390.c * config/v850/v850.c (TARGET_ENCODE_SECTION_INFO definitions): Take and use RTL argument, don't use TREE_CST_RTL or DECL_RTL, except for PE dllimport/dllexport. Update calls to default_encode_section_info. * config/darwin-protos.h, config/arm/arm-protos.h, config/i386-protos.h: Update prototypes. * doc/tm.texi (TARGET_ENCODE_SECTION_INFO): Update. From-SVN: r65859
This commit is contained in:
parent
8c7d377fa2
commit
c6a2438aaf
25 changed files with 174 additions and 141 deletions
|
@ -1,3 +1,32 @@
|
|||
2003-04-20 Zack Weinberg <zack@codesourcery.com>
|
||||
|
||||
* target.h (encode_section_info): Add new argument carrying
|
||||
the RTL to be modified by the hook.
|
||||
|
||||
* varasm.c (make_decl_rtl, output_constant_def): Update calls
|
||||
to encode_section_info.
|
||||
(default_encode_section_info): Take and use RTL argument,
|
||||
don't use TREE_CST_RTL or DECL_RTL.
|
||||
* output.h: Update prototype of default_encode_section_info.
|
||||
* config/darwin.h (ASM_DECLARE_OBJECT_NAME)
|
||||
(ASM_DECLARE_FUNCTION_NAME, ASM_OUTPUT_ALIGNED_DECL_LOCAL):
|
||||
Update calls to encode_section_info.
|
||||
|
||||
* config/darwin.c, config/arm/arm.c, config/arm/pe.c
|
||||
* config/h8300/h8300.c, config/i386/winnt.c, config/m32r/m32r.c
|
||||
* config/m68hc11/m68hc11.c, config/m88k/m88k.c, config/mcore/mcore.c
|
||||
* config/mips/mips.c, config/mmix/mmix.c, config/pa/pa.c
|
||||
* config/romp/romp.c, config/rs6000/rs6000.c, config/s390/s390.c
|
||||
* config/v850/v850.c (TARGET_ENCODE_SECTION_INFO definitions):
|
||||
Take and use RTL argument, don't use TREE_CST_RTL or DECL_RTL,
|
||||
except for PE dllimport/dllexport. Update calls to
|
||||
default_encode_section_info.
|
||||
|
||||
* config/darwin-protos.h, config/arm/arm-protos.h, config/i386-protos.h:
|
||||
Update prototypes.
|
||||
|
||||
* doc/tm.texi (TARGET_ENCODE_SECTION_INFO): Update.
|
||||
|
||||
2003-04-20 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
|
||||
|
||||
PR/8705
|
||||
|
@ -251,19 +280,19 @@ Sat Apr 19 14:56:17 CEST 2003 Jan Hubicka <jh@suse.cz>
|
|||
|
||||
* calls.c (expand_call): Move special case for constructor calls
|
||||
to right place. Ensures constructor calls used to initialize
|
||||
arguments get a clean outgoing argument block for themselves.
|
||||
arguments get a clean outgoing argument block for themselves.
|
||||
Move check for stack deallocation completeness until after last
|
||||
deallocation. Add stack_pointer_delta to set of state
|
||||
variables saved and restored along with current stack_level.
|
||||
|
||||
* integrate.c (expand_inline_function): Ensure non-const actuals
|
||||
don't end up const in the caller's flow after conversion to possibly
|
||||
const formal type.
|
||||
|
||||
* integrate.c (expand_inline_function): Ensure non-const actuals
|
||||
don't end up const in the caller's flow after conversion to possibly
|
||||
const formal type.
|
||||
|
||||
2003-04-18 Vincent Celier <celier@gnat.com>
|
||||
|
||||
* dwarf2out.c (loc_descriptor_from_tree): Treat all *_MOD_EXPR
|
||||
and *_DIV_EXPR as TRUNC_*_EXPR.
|
||||
* dwarf2out.c (loc_descriptor_from_tree): Treat all *_MOD_EXPR
|
||||
and *_DIV_EXPR as TRUNC_*_EXPR.
|
||||
|
||||
2003-04-18 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
|
@ -379,8 +408,8 @@ Fri Apr 18 01:28:51 CEST 2003 Jan Hubicka <jh@suse.cz>
|
|||
|
||||
2003-04-17 Simon Law <sfllaw@engmail.uwaterloo.ca>
|
||||
|
||||
* doc/include/gpl.texi: Fix double-spacing after "MA" to match
|
||||
the one provided by the FSF.
|
||||
* doc/include/gpl.texi: Fix double-spacing after "MA" to match
|
||||
the one provided by the FSF.
|
||||
|
||||
2003-04-17 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
|
||||
|
||||
|
@ -444,7 +473,7 @@ Fri Apr 18 01:28:51 CEST 2003 Jan Hubicka <jh@suse.cz>
|
|||
(tls_model_chars): Remove.
|
||||
(larl_operand): Use SYMBOL_REF_FLAGS.
|
||||
(tls_symbolic_operand): Use SYMBOL_REF_TLS_MODEL.
|
||||
(legitimize_pic_address): Use SYMBOL_REF_LOCAL_P.
|
||||
(legitimize_pic_address): Use SYMBOL_REF_LOCAL_P.
|
||||
(s390_output_mi_thunk): Likewise.
|
||||
(s390_emit_prologue): Set SYMBOL_FLAG_LOCAL as needed.
|
||||
(s390_function_profiler): Likewise.
|
||||
|
@ -505,7 +534,7 @@ Fri Apr 18 01:28:51 CEST 2003 Jan Hubicka <jh@suse.cz>
|
|||
|
||||
2003-04-17 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* varasm.c (default_encode_section_info): Don't set
|
||||
* varasm.c (default_encode_section_info): Don't set
|
||||
SYMBOL_FLAG_EXTERNAL if not TREE_PUBLIC.
|
||||
* config/i370/i370.c (i370_encode_section_info): Remove.
|
||||
* config/i370/i370.h (CONSTANT_ADDRESS_P): Use SYMBOL_REF_EXTERNAL_P.
|
||||
|
@ -577,7 +606,7 @@ Fri Apr 18 01:28:51 CEST 2003 Jan Hubicka <jh@suse.cz>
|
|||
2003-04-16 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* arc.c (arc_encode_section_info): Remove.
|
||||
(arc_assemble_integer): Use SYMBOL_REF_FUNCTION_P.
|
||||
(arc_assemble_integer): Use SYMBOL_REF_FUNCTION_P.
|
||||
(arc_print_operand, arc_print_operand_address): Likewise.
|
||||
* arc.h (EXTRA_CONSTRAINT): Likewise.
|
||||
|
||||
|
@ -618,16 +647,16 @@ Fri Apr 18 01:28:51 CEST 2003 Jan Hubicka <jh@suse.cz>
|
|||
|
||||
2003-04-16 Olivier Hainque <hainque@act-europe.fr>
|
||||
|
||||
* tree.c (skip_simple_arithmetics_at, saved_expr_p): New functions.
|
||||
(save_expr): Replace loop by call to skip_simple_arithmetics_at.
|
||||
* tree.h: Add prototypes for the two new functions.
|
||||
* fold-const.c (fold_binary_op_with_conditional_arg): Replace test
|
||||
updates introduced in the previous revision by call to saved_expr_p.
|
||||
* stor-layout.c (put_pending_size): Use skip_simple_arithmetics_at.
|
||||
* tree.c (skip_simple_arithmetics_at, saved_expr_p): New functions.
|
||||
(save_expr): Replace loop by call to skip_simple_arithmetics_at.
|
||||
* tree.h: Add prototypes for the two new functions.
|
||||
* fold-const.c (fold_binary_op_with_conditional_arg): Replace test
|
||||
updates introduced in the previous revision by call to saved_expr_p.
|
||||
* stor-layout.c (put_pending_size): Use skip_simple_arithmetics_at.
|
||||
|
||||
* expr.c (store_field): Force usage of bitfield instructions when
|
||||
the field position requires it, whatever SLOW_UNALIGNED_ACCESS.
|
||||
(expand_expr, case BIT_FIELD_REF): likewise.
|
||||
* expr.c (store_field): Force usage of bitfield instructions when
|
||||
the field position requires it, whatever SLOW_UNALIGNED_ACCESS.
|
||||
(expand_expr, case BIT_FIELD_REF): likewise.
|
||||
|
||||
2003-04-16 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
|
@ -673,9 +702,9 @@ Fri Apr 18 01:28:51 CEST 2003 Jan Hubicka <jh@suse.cz>
|
|||
|
||||
2003-04-16 Aldy Hernandez <aldyh@redhat.com>
|
||||
|
||||
* config.gcc: Add t-spe for eabispe.
|
||||
* config.gcc: Add t-spe for eabispe.
|
||||
|
||||
* config/rs6000/t-spe: New.
|
||||
* config/rs6000/t-spe: New.
|
||||
|
||||
2003-04-16 J"orn Rennecke <joern.rennecke@superh.com>
|
||||
|
||||
|
@ -690,7 +719,7 @@ Fri Apr 18 01:28:51 CEST 2003 Jan Hubicka <jh@suse.cz>
|
|||
PR/10271
|
||||
* pa-protos.h (function_arg): Remove last argument.
|
||||
* pa.c (function_arg): Likewise. Use CUMULATIVE_ARGS struct instead.
|
||||
* pa.h (struct hppa_args): Add member incoming.
|
||||
* pa.h (struct hppa_args): Add member incoming.
|
||||
(INIT_CUMULATIVE_ARGS, INIT_CUMULATIVE_INCOMING_ARGS): Initialize
|
||||
member incoming.
|
||||
(FUNCTION_ARG): Revise call to function_arg.
|
||||
|
|
|
@ -206,7 +206,7 @@ extern int arm_dllimport_name_p PARAMS ((const char *));
|
|||
|
||||
#ifdef TREE_CODE
|
||||
extern void arm_pe_unique_section PARAMS ((tree, int));
|
||||
extern void arm_pe_encode_section_info PARAMS ((tree, int));
|
||||
extern void arm_pe_encode_section_info PARAMS ((tree, rtx, int));
|
||||
extern int arm_dllexport_p PARAMS ((tree));
|
||||
extern int arm_dllimport_p PARAMS ((tree));
|
||||
extern void arm_mark_dllexport PARAMS ((tree));
|
||||
|
|
|
@ -142,7 +142,7 @@ static void cirrus_reorg PARAMS ((rtx));
|
|||
static void arm_elf_asm_named_section PARAMS ((Ccstar, unsigned int));
|
||||
#endif
|
||||
#ifndef ARM_PE
|
||||
static void arm_encode_section_info PARAMS ((tree, int));
|
||||
static void arm_encode_section_info PARAMS ((tree, rtx, int));
|
||||
#endif
|
||||
#ifdef AOF_ASSEMBLER
|
||||
static void aof_globalize_label PARAMS ((FILE *, Ccstar));
|
||||
|
@ -12152,8 +12152,9 @@ arm_elf_asm_named_section (name, flags)
|
|||
simplification. */
|
||||
|
||||
static void
|
||||
arm_encode_section_info (decl, first)
|
||||
arm_encode_section_info (decl, rtl, first)
|
||||
tree decl;
|
||||
rtx rtl;
|
||||
int first;
|
||||
{
|
||||
/* This doesn't work with AOF syntax, since the string table may be in
|
||||
|
@ -12161,11 +12162,7 @@ arm_encode_section_info (decl, first)
|
|||
#ifndef AOF_ASSEMBLER
|
||||
if (optimize > 0 && TREE_CONSTANT (decl)
|
||||
&& (!flag_writable_strings || TREE_CODE (decl) != STRING_CST))
|
||||
{
|
||||
rtx rtl = (TREE_CODE_CLASS (TREE_CODE (decl)) != 'd'
|
||||
? TREE_CST_RTL (decl) : DECL_RTL (decl));
|
||||
SYMBOL_REF_FLAG (XEXP (rtl, 0)) = 1;
|
||||
}
|
||||
SYMBOL_REF_FLAG (XEXP (rtl, 0)) = 1;
|
||||
#endif
|
||||
|
||||
/* If we are referencing a function that is weak then encode a long call
|
||||
|
|
|
@ -207,18 +207,15 @@ arm_mark_dllimport (decl)
|
|||
}
|
||||
|
||||
void
|
||||
arm_pe_encode_section_info (decl, first)
|
||||
arm_pe_encode_section_info (decl, rtl, first)
|
||||
tree decl;
|
||||
rtx rtl;
|
||||
int first ATTRIBUTE_UNUSED;
|
||||
{
|
||||
/* This bit is copied from arm_encode_section_info. */
|
||||
if (optimize > 0 && TREE_CONSTANT (decl)
|
||||
&& (!flag_writable_strings || TREE_CODE (decl) != STRING_CST))
|
||||
{
|
||||
rtx rtl = (TREE_CODE_CLASS (TREE_CODE (decl)) != 'd'
|
||||
? TREE_CST_RTL (decl) : DECL_RTL (decl));
|
||||
SYMBOL_REF_FLAG (XEXP (rtl, 0)) = 1;
|
||||
}
|
||||
SYMBOL_REF_FLAG (XEXP (rtl, 0)) = 1;
|
||||
|
||||
/* Mark the decl so we can tell from the rtl whether the object is
|
||||
dllexport'd or dllimport'd. */
|
||||
|
|
|
@ -58,7 +58,7 @@ extern void machopic_define_ident PARAMS ((tree));
|
|||
extern void machopic_define_name PARAMS ((const char*));
|
||||
extern int machopic_name_defined_p PARAMS ((const char*));
|
||||
extern int machopic_ident_defined_p PARAMS ((tree));
|
||||
extern void darwin_encode_section_info PARAMS ((tree, int));
|
||||
extern void darwin_encode_section_info PARAMS ((tree, rtx, int));
|
||||
extern const char *darwin_strip_name_encoding PARAMS ((const char *));
|
||||
|
||||
#endif /* TREE_CODE */
|
||||
|
|
|
@ -974,8 +974,9 @@ machopic_operand_p (op)
|
|||
use later. */
|
||||
|
||||
void
|
||||
darwin_encode_section_info (decl, first)
|
||||
darwin_encode_section_info (decl, rtl, first)
|
||||
tree decl;
|
||||
rtx rtl;
|
||||
int first ATTRIBUTE_UNUSED;
|
||||
{
|
||||
char code = '\0';
|
||||
|
@ -1002,7 +1003,7 @@ darwin_encode_section_info (decl, first)
|
|||
if (code == '\0')
|
||||
return;
|
||||
|
||||
sym_ref = XEXP (DECL_RTL (decl), 0);
|
||||
sym_ref = XEXP (rtl, 0);
|
||||
orig_str = XSTR (sym_ref, 0);
|
||||
len = strlen (orig_str) + 1;
|
||||
|
||||
|
|
|
@ -379,7 +379,7 @@ do { text_section (); \
|
|||
if ((TREE_STATIC (DECL) \
|
||||
&& (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \
|
||||
|| DECL_INITIAL (DECL)) \
|
||||
(* targetm.encode_section_info) (DECL, false); \
|
||||
(* targetm.encode_section_info) (DECL, DECL_RTL (DECL), false); \
|
||||
ASM_OUTPUT_LABEL (FILE, xname); \
|
||||
} while (0)
|
||||
|
||||
|
@ -395,7 +395,7 @@ do { text_section (); \
|
|||
if ((TREE_STATIC (DECL) \
|
||||
&& (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \
|
||||
|| DECL_INITIAL (DECL)) \
|
||||
(* targetm.encode_section_info) (DECL, false); \
|
||||
(* targetm.encode_section_info) (DECL, DECL_RTL (DECL), false); \
|
||||
ASM_OUTPUT_LABEL (FILE, xname); \
|
||||
/* Avoid generating stubs for functions we've just defined by \
|
||||
outputting any required stub name label now. */ \
|
||||
|
@ -459,7 +459,7 @@ do { text_section (); \
|
|||
if ((DECL) && ((TREE_STATIC (DECL) \
|
||||
&& (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \
|
||||
|| DECL_INITIAL (DECL))) \
|
||||
(* targetm.encode_section_info) (DECL, false); \
|
||||
(* targetm.encode_section_info) (DECL, DECL_RTL (DECL), false); \
|
||||
if ((DECL) && ((TREE_STATIC (DECL) \
|
||||
&& (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \
|
||||
|| DECL_INITIAL (DECL))) \
|
||||
|
|
|
@ -66,7 +66,7 @@ static void h8300_insert_attributes PARAMS ((tree, tree *));
|
|||
#ifndef OBJECT_FORMAT_ELF
|
||||
static void h8300_asm_named_section PARAMS ((const char *, unsigned int));
|
||||
#endif
|
||||
static void h8300_encode_section_info PARAMS ((tree, int));
|
||||
static void h8300_encode_section_info PARAMS ((tree, rtx, int));
|
||||
static int const_costs PARAMS ((rtx, enum rtx_code, enum rtx_code));
|
||||
static int h8300_and_costs PARAMS ((rtx));
|
||||
static int h8300_shift_costs PARAMS ((rtx));
|
||||
|
@ -4171,13 +4171,14 @@ h8300_handle_tiny_data_attribute (node, name, args, flags, no_add_attrs)
|
|||
/* Mark function vectors, and various small data objects. */
|
||||
|
||||
static void
|
||||
h8300_encode_section_info (decl, first)
|
||||
h8300_encode_section_info (decl, rtl, first)
|
||||
tree decl;
|
||||
rtx rtl;
|
||||
int first;
|
||||
{
|
||||
int extra_flags = 0;
|
||||
|
||||
default_encode_section_info (decl, first);
|
||||
default_encode_section_info (decl, rtl, first);
|
||||
|
||||
if (TREE_CODE (decl) == FUNCTION_DECL
|
||||
&& h8300_funcvec_function_p (decl))
|
||||
|
@ -4192,7 +4193,7 @@ h8300_encode_section_info (decl, first)
|
|||
}
|
||||
|
||||
if (extra_flags)
|
||||
SYMBOL_REF_FLAGS (XEXP (DECL_RTL (decl), 0)) |= extra_flags;
|
||||
SYMBOL_REF_FLAGS (XEXP (rtl, 0)) |= extra_flags;
|
||||
}
|
||||
|
||||
const char *
|
||||
|
|
|
@ -236,7 +236,7 @@ extern void i386_pe_declare_function_type PARAMS ((FILE *, const char *, int));
|
|||
extern void i386_pe_record_external_function PARAMS ((const char *));
|
||||
extern void i386_pe_record_exported_symbol PARAMS ((const char *, int));
|
||||
extern void i386_pe_asm_file_end PARAMS ((FILE *));
|
||||
extern void i386_pe_encode_section_info PARAMS ((tree, int));
|
||||
extern void i386_pe_encode_section_info PARAMS ((tree, rtx, int));
|
||||
extern const char *i386_pe_strip_name_encoding PARAMS ((const char *));
|
||||
extern const char *i386_pe_strip_name_encoding_full PARAMS ((const char *));
|
||||
extern void i386_pe_output_labelref PARAMS ((FILE *, const char *));
|
||||
|
|
|
@ -420,14 +420,15 @@ gen_stdcall_suffix (decl)
|
|||
}
|
||||
|
||||
void
|
||||
i386_pe_encode_section_info (decl, first)
|
||||
i386_pe_encode_section_info (decl, rtl, first)
|
||||
tree decl;
|
||||
rtx rtl;
|
||||
int first;
|
||||
{
|
||||
if (!first)
|
||||
return;
|
||||
|
||||
default_encode_section_info (decl, first);
|
||||
default_encode_section_info (decl, rtl, first);
|
||||
|
||||
if (TREE_CODE (decl) == FUNCTION_DECL)
|
||||
{
|
||||
|
|
|
@ -84,7 +84,7 @@ static int m32r_sched_reorder PARAMS ((FILE *, int, rtx *, int *, int));
|
|||
static int m32r_variable_issue PARAMS ((FILE *, int, rtx, int));
|
||||
static int m32r_issue_rate PARAMS ((void));
|
||||
|
||||
static void m32r_encode_section_info PARAMS ((tree, int));
|
||||
static void m32r_encode_section_info PARAMS ((tree, rtx, int));
|
||||
static bool m32r_in_small_data_p PARAMS ((tree));
|
||||
static void init_idents PARAMS ((void));
|
||||
static bool m32r_rtx_costs PARAMS ((rtx, int, int, int *));
|
||||
|
@ -349,15 +349,16 @@ m32r_handle_model_attribute (node, name, args, flags, no_add_attrs)
|
|||
*/
|
||||
|
||||
static void
|
||||
m32r_encode_section_info (decl, first)
|
||||
m32r_encode_section_info (decl, rtl, first)
|
||||
tree decl;
|
||||
rtx rtl;
|
||||
int first;
|
||||
{
|
||||
int extra_flags = 0;
|
||||
tree model_attr;
|
||||
enum m32r_model model;
|
||||
|
||||
default_encode_section_info (decl, first);
|
||||
default_encode_section_info (decl, rtl, first);
|
||||
|
||||
if (!DECL_P (decl))
|
||||
return;
|
||||
|
@ -394,7 +395,7 @@ m32r_encode_section_info (decl, first)
|
|||
extra_flags |= model << SYMBOL_FLAG_MODEL_SHIFT;
|
||||
|
||||
if (extra_flags)
|
||||
SYMBOL_REF_FLAGS (XEXP (DECL_RTL (decl), 0)) |= extra_flags;
|
||||
SYMBOL_REF_FLAGS (XEXP (rtl, 0)) |= extra_flags;
|
||||
}
|
||||
|
||||
/* Only mark the object as being small data area addressable if
|
||||
|
|
|
@ -81,7 +81,7 @@ static void asm_print_register PARAMS ((FILE *, int));
|
|||
static void m68hc11_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT));
|
||||
static void m68hc11_asm_out_constructor PARAMS ((rtx, int));
|
||||
static void m68hc11_asm_out_destructor PARAMS ((rtx, int));
|
||||
static void m68hc11_encode_section_info PARAMS((tree, int));
|
||||
static void m68hc11_encode_section_info PARAMS((tree, rtx, int));
|
||||
static int autoinc_mode PARAMS((rtx));
|
||||
static int m68hc11_make_autoinc_notes PARAMS((rtx *, void *));
|
||||
|
||||
|
@ -1287,20 +1287,18 @@ m68hc11_handle_fntype_attribute (node, name, args, flags, no_add_attrs)
|
|||
in SYMBOL_REF_FLAG. */
|
||||
|
||||
static void
|
||||
m68hc11_encode_section_info (decl, first)
|
||||
m68hc11_encode_section_info (decl, rtl, first)
|
||||
tree decl;
|
||||
rtx rtl;
|
||||
int first ATTRIBUTE_UNUSED;
|
||||
{
|
||||
tree func_attr;
|
||||
int trap_handler;
|
||||
int is_far = 0;
|
||||
rtx rtl;
|
||||
|
||||
if (TREE_CODE (decl) != FUNCTION_DECL)
|
||||
return;
|
||||
|
||||
rtl = DECL_RTL (decl);
|
||||
|
||||
func_attr = TYPE_ATTRIBUTES (TREE_TYPE (decl));
|
||||
|
||||
|
||||
|
|
|
@ -75,7 +75,7 @@ static void m88k_svr3_asm_out_destructor PARAMS ((rtx, int));
|
|||
#endif
|
||||
static void m88k_select_section PARAMS ((tree, int, unsigned HOST_WIDE_INT));
|
||||
static int m88k_adjust_cost PARAMS ((rtx, rtx, rtx, int));
|
||||
static void m88k_encode_section_info PARAMS ((tree, int));
|
||||
static void m88k_encode_section_info PARAMS ((tree, rtx, int));
|
||||
#ifdef AS_BUG_DOT_LABELS
|
||||
static void m88k_internal_label PARAMS ((FILE *, const char *, unsigned long));
|
||||
#endif
|
||||
|
@ -3335,8 +3335,9 @@ m88k_adjust_cost (insn, link, dep, cost)
|
|||
/* For the m88k, determine if the item should go in the global pool. */
|
||||
|
||||
static void
|
||||
m88k_encode_section_info (decl, first)
|
||||
m88k_encode_section_info (decl, rtl, first)
|
||||
tree decl;
|
||||
rtx rtl;
|
||||
int first ATTRIBUTE_UNUSED;
|
||||
{
|
||||
if (m88k_gp_threshold > 0)
|
||||
|
@ -3348,13 +3349,13 @@ m88k_encode_section_info (decl, first)
|
|||
int size = int_size_in_bytes (TREE_TYPE (decl));
|
||||
|
||||
if (size > 0 && size <= m88k_gp_threshold)
|
||||
SYMBOL_REF_FLAG (XEXP (DECL_RTL (decl), 0)) = 1;
|
||||
SYMBOL_REF_FLAG (XEXP (rtl, 0)) = 1;
|
||||
}
|
||||
}
|
||||
else if (TREE_CODE (decl) == STRING_CST
|
||||
&& flag_writable_strings
|
||||
&& TREE_STRING_LENGTH (decl) <= m88k_gp_threshold)
|
||||
SYMBOL_REF_FLAG (XEXP (TREE_CST_RTL (decl), 0)) = 1;
|
||||
SYMBOL_REF_FLAG (XEXP (rtl, 0)) = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -139,7 +139,7 @@ static void mcore_asm_named_section PARAMS ((const char *,
|
|||
unsigned int));
|
||||
#endif
|
||||
static void mcore_unique_section PARAMS ((tree, int));
|
||||
static void mcore_encode_section_info PARAMS ((tree, int));
|
||||
static void mcore_encode_section_info PARAMS ((tree, rtx, int));
|
||||
static const char *mcore_strip_name_encoding PARAMS ((const char *));
|
||||
static int mcore_const_costs PARAMS ((rtx, RTX_CODE));
|
||||
static int mcore_and_cost PARAMS ((rtx));
|
||||
|
@ -3464,8 +3464,9 @@ mcore_dllimport_p (decl)
|
|||
install some info in the .drective (PE) or .exports (ELF) sections. */
|
||||
|
||||
static void
|
||||
mcore_encode_section_info (decl, first)
|
||||
mcore_encode_section_info (decl, rtl, first)
|
||||
tree decl;
|
||||
rtx rtl ATTRIBUTE_UNUSED;
|
||||
int first ATTRIBUTE_UNUSED;
|
||||
{
|
||||
/* Mark the decl so we can tell from the rtl whether the object is
|
||||
|
|
|
@ -154,7 +154,7 @@ static void mips_unique_section PARAMS ((tree, int))
|
|||
static void mips_select_rtx_section PARAMS ((enum machine_mode, rtx,
|
||||
unsigned HOST_WIDE_INT));
|
||||
static int mips_use_dfa_pipeline_interface PARAMS ((void));
|
||||
static void mips_encode_section_info PARAMS ((tree, int));
|
||||
static void mips_encode_section_info PARAMS ((tree, rtx, int));
|
||||
static bool mips_rtx_costs PARAMS ((rtx, int, int, int *));
|
||||
static int mips_address_cost PARAMS ((rtx));
|
||||
|
||||
|
@ -8521,8 +8521,9 @@ mips_select_section (decl, reloc, align)
|
|||
is why the DECL_INITIAL macros differ from mips_select_section. */
|
||||
|
||||
static void
|
||||
mips_encode_section_info (decl, first)
|
||||
mips_encode_section_info (decl, rtl, first)
|
||||
tree decl;
|
||||
rtx rtl;
|
||||
int first;
|
||||
{
|
||||
if (TARGET_MIPS16)
|
||||
|
@ -8545,7 +8546,7 @@ mips_encode_section_info (decl, first)
|
|||
{
|
||||
rtx symref;
|
||||
|
||||
symref = XEXP (TREE_CST_RTL (decl), 0);
|
||||
symref = XEXP (rtl, 0);
|
||||
mips16_strings = alloc_EXPR_LIST (0, symref, mips16_strings);
|
||||
SYMBOL_REF_FLAG (symref) = 1;
|
||||
mips_string_length += TREE_STRING_LENGTH (decl);
|
||||
|
@ -8558,20 +8559,20 @@ mips_encode_section_info (decl, first)
|
|||
&& (!DECL_INITIAL (decl)
|
||||
|| TREE_CONSTANT (DECL_INITIAL (decl))))
|
||||
{
|
||||
SYMBOL_REF_FLAG (XEXP (DECL_RTL (decl), 0)) = 0;
|
||||
SYMBOL_REF_FLAG (XEXP (rtl, 0)) = 0;
|
||||
}
|
||||
|
||||
else if (TARGET_EMBEDDED_PIC)
|
||||
{
|
||||
if (TREE_CODE (decl) == VAR_DECL)
|
||||
SYMBOL_REF_FLAG (XEXP (DECL_RTL (decl), 0)) = 1;
|
||||
SYMBOL_REF_FLAG (XEXP (rtl, 0)) = 1;
|
||||
else if (TREE_CODE (decl) == FUNCTION_DECL)
|
||||
SYMBOL_REF_FLAG (XEXP (DECL_RTL (decl), 0)) = 0;
|
||||
SYMBOL_REF_FLAG (XEXP (rtl, 0)) = 0;
|
||||
else if (TREE_CODE (decl) == STRING_CST
|
||||
&& ! flag_writable_strings)
|
||||
SYMBOL_REF_FLAG (XEXP (TREE_CST_RTL (decl), 0)) = 0;
|
||||
SYMBOL_REF_FLAG (XEXP (rtl, 0)) = 0;
|
||||
else
|
||||
SYMBOL_REF_FLAG (XEXP (TREE_CST_RTL (decl), 0)) = 1;
|
||||
SYMBOL_REF_FLAG (XEXP (rtl, 0)) = 1;
|
||||
}
|
||||
|
||||
else if (TREE_CODE (decl) == VAR_DECL
|
||||
|
@ -8581,7 +8582,7 @@ mips_encode_section_info (decl, first)
|
|||
|| 0 == strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)),
|
||||
".sbss")))
|
||||
{
|
||||
SYMBOL_REF_FLAG (XEXP (DECL_RTL (decl), 0)) = 1;
|
||||
SYMBOL_REF_FLAG (XEXP (rtl, 0)) = 1;
|
||||
}
|
||||
|
||||
/* We can not perform GP optimizations on variables which are in
|
||||
|
@ -8597,7 +8598,7 @@ mips_encode_section_info (decl, first)
|
|||
int size = int_size_in_bytes (TREE_TYPE (decl));
|
||||
|
||||
if (size > 0 && size <= mips_section_threshold)
|
||||
SYMBOL_REF_FLAG (XEXP (DECL_RTL (decl), 0)) = 1;
|
||||
SYMBOL_REF_FLAG (XEXP (rtl, 0)) = 1;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -124,7 +124,7 @@ static HOST_WIDEST_INT mmix_intval PARAMS ((rtx));
|
|||
static void mmix_output_octa PARAMS ((FILE *, HOST_WIDEST_INT, int));
|
||||
static bool mmix_assemble_integer PARAMS ((rtx, unsigned int, int));
|
||||
static struct machine_function * mmix_init_machine_status PARAMS ((void));
|
||||
static void mmix_encode_section_info PARAMS ((tree, int));
|
||||
static void mmix_encode_section_info PARAMS ((tree, rtx, int));
|
||||
static const char *mmix_strip_name_encoding PARAMS ((const char *));
|
||||
static void mmix_emit_sp_add PARAMS ((HOST_WIDE_INT offset));
|
||||
static void mmix_target_asm_function_prologue
|
||||
|
@ -1235,8 +1235,9 @@ mmix_data_section_asm_op ()
|
|||
}
|
||||
|
||||
static void
|
||||
mmix_encode_section_info (decl, first)
|
||||
mmix_encode_section_info (decl, rtl, first)
|
||||
tree decl;
|
||||
rtx rtl;
|
||||
int first;
|
||||
{
|
||||
/* Test for an external declaration, and do nothing if it is one. */
|
||||
|
@ -1256,7 +1257,7 @@ mmix_encode_section_info (decl, first)
|
|||
means that when -mtoplevel-symbols is in use, we can just handle
|
||||
well-behaved ISO-compliant code. */
|
||||
|
||||
const char *str = XSTR (XEXP (DECL_RTL (decl), 0), 0);
|
||||
const char *str = XSTR (XEXP (rtl, 0), 0);
|
||||
int len = strlen (str);
|
||||
char *newstr;
|
||||
|
||||
|
@ -1265,7 +1266,7 @@ mmix_encode_section_info (decl, first)
|
|||
|
||||
strcpy (newstr + 1, str);
|
||||
*newstr = '@';
|
||||
XSTR (XEXP (DECL_RTL (decl), 0), 0) = newstr;
|
||||
XSTR (XEXP (rtl, 0), 0) = newstr;
|
||||
}
|
||||
|
||||
/* Set SYMBOL_REF_FLAG for things that we want to access with GETA. We
|
||||
|
@ -1278,11 +1279,7 @@ mmix_encode_section_info (decl, first)
|
|||
&& !TREE_SIDE_EFFECTS (decl)
|
||||
&& (!DECL_INITIAL (decl)
|
||||
|| TREE_CONSTANT (DECL_INITIAL (decl)))))
|
||||
{
|
||||
rtx rtl = (TREE_CODE_CLASS (TREE_CODE (decl)) != 'd'
|
||||
? TREE_CST_RTL (decl) : DECL_RTL (decl));
|
||||
SYMBOL_REF_FLAG (XEXP (rtl, 0)) = 1;
|
||||
}
|
||||
SYMBOL_REF_FLAG (XEXP (rtl, 0)) = 1;
|
||||
}
|
||||
|
||||
static const char *
|
||||
|
|
|
@ -119,7 +119,7 @@ static int pa_adjust_priority PARAMS ((rtx, int));
|
|||
static int pa_issue_rate PARAMS ((void));
|
||||
static void pa_select_section PARAMS ((tree, int, unsigned HOST_WIDE_INT))
|
||||
ATTRIBUTE_UNUSED;
|
||||
static void pa_encode_section_info PARAMS ((tree, int));
|
||||
static void pa_encode_section_info PARAMS ((tree, rtx, int));
|
||||
static const char *pa_strip_name_encoding PARAMS ((const char *));
|
||||
static bool pa_function_ok_for_sibcall PARAMS ((tree, tree));
|
||||
static void pa_globalize_label PARAMS ((FILE *, const char *))
|
||||
|
@ -7114,21 +7114,16 @@ hppa_encode_label (sym)
|
|||
}
|
||||
|
||||
static void
|
||||
pa_encode_section_info (decl, first)
|
||||
pa_encode_section_info (decl, rtl, first)
|
||||
tree decl;
|
||||
rtx rtl;
|
||||
int first;
|
||||
{
|
||||
if (first && TEXT_SPACE_P (decl))
|
||||
{
|
||||
rtx rtl;
|
||||
if (TREE_CODE (decl) == FUNCTION_DECL
|
||||
|| TREE_CODE (decl) == VAR_DECL)
|
||||
rtl = DECL_RTL (decl);
|
||||
else
|
||||
rtl = TREE_CST_RTL (decl);
|
||||
SYMBOL_REF_FLAG (XEXP (rtl, 0)) = 1;
|
||||
if (TREE_CODE (decl) == FUNCTION_DECL)
|
||||
hppa_encode_label (XEXP (DECL_RTL (decl), 0));
|
||||
hppa_encode_label (XEXP (rtl, 0));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -58,7 +58,7 @@ static void romp_output_function_prologue PARAMS ((FILE *, HOST_WIDE_INT));
|
|||
static void romp_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT));
|
||||
static void romp_select_rtx_section PARAMS ((enum machine_mode, rtx,
|
||||
unsigned HOST_WIDE_INT));
|
||||
static void romp_encode_section_info PARAMS ((tree, int));
|
||||
static void romp_encode_section_info PARAMS ((tree, rtx, int));
|
||||
static bool romp_rtx_costs PARAMS ((rtx, int, int, int *));
|
||||
static int romp_address_cost PARAMS ((rtx));
|
||||
|
||||
|
@ -2098,12 +2098,13 @@ romp_select_rtx_section (mode, x, align)
|
|||
that we need to mark such SYMBOL_REFs. We do so here. */
|
||||
|
||||
static void
|
||||
romp_encode_section_info (decl, first)
|
||||
romp_encode_section_info (decl, rtl, first)
|
||||
tree decl;
|
||||
rtx rtl;
|
||||
int first ATTRIBUTE_UNUSED;
|
||||
{
|
||||
if (TREE_CODE (TREE_TYPE (decl)) == FUNCTION_TYPE)
|
||||
SYMBOL_REF_FLAG (XEXP (DECL_RTL (decl), 0)) = 1;
|
||||
SYMBOL_REF_FLAG (XEXP (rtl, 0)) = 1;
|
||||
}
|
||||
|
||||
static bool
|
||||
|
|
|
@ -229,7 +229,7 @@ static void rs6000_elf_select_section PARAMS ((tree, int,
|
|||
static void rs6000_elf_unique_section PARAMS ((tree, int));
|
||||
static void rs6000_elf_select_rtx_section PARAMS ((enum machine_mode, rtx,
|
||||
unsigned HOST_WIDE_INT));
|
||||
static void rs6000_elf_encode_section_info PARAMS ((tree, int))
|
||||
static void rs6000_elf_encode_section_info PARAMS ((tree, rtx, int))
|
||||
ATTRIBUTE_UNUSED;
|
||||
static const char *rs6000_elf_strip_name_encoding PARAMS ((const char *));
|
||||
static bool rs6000_elf_in_small_data_p PARAMS ((tree));
|
||||
|
@ -244,7 +244,7 @@ static void rs6000_xcoff_select_rtx_section PARAMS ((enum machine_mode, rtx,
|
|||
unsigned HOST_WIDE_INT));
|
||||
static const char * rs6000_xcoff_strip_name_encoding PARAMS ((const char *));
|
||||
static unsigned int rs6000_xcoff_section_type_flags PARAMS ((tree, const char *, int));
|
||||
static void rs6000_xcoff_encode_section_info PARAMS ((tree, int))
|
||||
static void rs6000_xcoff_encode_section_info PARAMS ((tree, rtx, int))
|
||||
ATTRIBUTE_UNUSED;
|
||||
#endif
|
||||
#if TARGET_MACHO
|
||||
|
@ -12935,8 +12935,9 @@ rs6000_elf_unique_section (decl, reloc)
|
|||
to read the prefixes. */
|
||||
|
||||
static void
|
||||
rs6000_elf_encode_section_info (decl, first)
|
||||
rs6000_elf_encode_section_info (decl, rtl, first)
|
||||
tree decl;
|
||||
rtx rtl;
|
||||
int first;
|
||||
{
|
||||
if (!first)
|
||||
|
@ -12944,7 +12945,7 @@ rs6000_elf_encode_section_info (decl, first)
|
|||
|
||||
if (TREE_CODE (decl) == FUNCTION_DECL)
|
||||
{
|
||||
rtx sym_ref = XEXP (DECL_RTL (decl), 0);
|
||||
rtx sym_ref = XEXP (rtl, 0);
|
||||
if ((*targetm.binds_local_p) (decl))
|
||||
SYMBOL_REF_FLAG (sym_ref) = 1;
|
||||
|
||||
|
@ -12964,7 +12965,7 @@ rs6000_elf_encode_section_info (decl, first)
|
|||
&& DEFAULT_ABI == ABI_V4
|
||||
&& TREE_CODE (decl) == VAR_DECL)
|
||||
{
|
||||
rtx sym_ref = XEXP (DECL_RTL (decl), 0);
|
||||
rtx sym_ref = XEXP (rtl, 0);
|
||||
int size = int_size_in_bytes (TREE_TYPE (decl));
|
||||
tree section_name = DECL_SECTION_NAME (decl);
|
||||
const char *name = (char *)0;
|
||||
|
@ -13628,13 +13629,14 @@ rs6000_xcoff_section_type_flags (decl, name, reloc)
|
|||
}
|
||||
|
||||
static void
|
||||
rs6000_xcoff_encode_section_info (decl, first)
|
||||
rs6000_xcoff_encode_section_info (decl, rtl, first)
|
||||
tree decl;
|
||||
rtx rtl;
|
||||
int first ATTRIBUTE_UNUSED;
|
||||
{
|
||||
if (TREE_CODE (decl) == FUNCTION_DECL
|
||||
&& (*targetm.binds_local_p) (decl))
|
||||
SYMBOL_REF_FLAG (XEXP (DECL_RTL (decl), 0)) = 1;
|
||||
SYMBOL_REF_FLAG (XEXP (rtl, 0)) = 1;
|
||||
}
|
||||
#endif /* TARGET_XCOFF */
|
||||
|
||||
|
|
|
@ -57,7 +57,7 @@ Boston, MA 02111-1307, USA. */
|
|||
static bool s390_assemble_integer PARAMS ((rtx, unsigned int, int));
|
||||
static void s390_select_rtx_section PARAMS ((enum machine_mode, rtx,
|
||||
unsigned HOST_WIDE_INT));
|
||||
static void s390_encode_section_info PARAMS ((tree, int));
|
||||
static void s390_encode_section_info PARAMS ((tree, rtx, int));
|
||||
static bool s390_cannot_force_const_mem PARAMS ((rtx));
|
||||
static rtx s390_delegitimize_address PARAMS ((rtx));
|
||||
static void s390_init_builtins PARAMS ((void));
|
||||
|
@ -6406,17 +6406,18 @@ s390_select_rtx_section (mode, x, align)
|
|||
into its SYMBOL_REF_FLAGS. */
|
||||
|
||||
static void
|
||||
s390_encode_section_info (decl, first)
|
||||
s390_encode_section_info (decl, rtl, first)
|
||||
tree decl;
|
||||
rtx rtl;
|
||||
int first;
|
||||
{
|
||||
default_encode_section_info (decl, first);
|
||||
default_encode_section_info (decl, rtl, first);
|
||||
|
||||
/* If a variable has a forced alignment to < 2 bytes, mark it with
|
||||
SYMBOL_FLAG_ALIGN1 to prevent it from being used as LARL operand. */
|
||||
if (TREE_CODE (decl) == VAR_DECL
|
||||
&& DECL_USER_ALIGN (decl) && DECL_ALIGN (decl) < 16)
|
||||
SYMBOL_REF_FLAGS (XEXP (DECL_RTL (decl), 0)) |= SYMBOL_FLAG_ALIGN1;
|
||||
SYMBOL_REF_FLAGS (XEXP (rtl, 0)) |= SYMBOL_FLAG_ALIGN1;
|
||||
}
|
||||
|
||||
/* Output thunk to FILE that implements a C++ virtual function call (with
|
||||
|
|
|
@ -61,8 +61,8 @@ static tree v850_handle_interrupt_attribute PARAMS ((tree *, tree, tree, int, bo
|
|||
static tree v850_handle_data_area_attribute PARAMS ((tree *, tree, tree, int, bool *));
|
||||
static void v850_insert_attributes PARAMS ((tree, tree *));
|
||||
static void v850_select_section PARAMS ((tree, int, unsigned HOST_WIDE_INT));
|
||||
static void v850_encode_data_area PARAMS ((tree));
|
||||
static void v850_encode_section_info PARAMS ((tree, int));
|
||||
static void v850_encode_data_area PARAMS ((tree, rtx));
|
||||
static void v850_encode_section_info PARAMS ((tree, rtx, int));
|
||||
|
||||
/* Information about the various small memory areas. */
|
||||
struct small_memory_info small_memory[ (int)SMALL_MEMORY_max ] =
|
||||
|
@ -2324,11 +2324,11 @@ v850_interrupt_function_p (func)
|
|||
|
||||
|
||||
static void
|
||||
v850_encode_data_area (decl)
|
||||
v850_encode_data_area (decl, symbol)
|
||||
tree decl;
|
||||
rtx symbol;
|
||||
{
|
||||
int flags;
|
||||
rtx symbol;
|
||||
|
||||
/* Map explict sections into the appropriate attribute */
|
||||
if (v850_get_data_area (decl) == DATA_AREA_NORMAL)
|
||||
|
@ -2368,7 +2368,6 @@ v850_encode_data_area (decl)
|
|||
return;
|
||||
}
|
||||
|
||||
symbol = XEXP (DECL_RTL (decl), 0);
|
||||
flags = SYMBOL_REF_FLAGS (symbol);
|
||||
switch (v850_get_data_area (decl))
|
||||
{
|
||||
|
@ -2381,15 +2380,16 @@ v850_encode_data_area (decl)
|
|||
}
|
||||
|
||||
static void
|
||||
v850_encode_section_info (decl, first)
|
||||
v850_encode_section_info (decl, rtl, first)
|
||||
tree decl;
|
||||
rtx rtl;
|
||||
int first;
|
||||
{
|
||||
default_encode_section_info (decl, first);
|
||||
default_encode_section_info (decl, rtl, first);
|
||||
|
||||
if (TREE_CODE (decl) == VAR_DECL
|
||||
&& (TREE_STATIC (decl) || DECL_EXTERNAL (decl)))
|
||||
v850_encode_data_area (decl);
|
||||
v850_encode_data_area (decl, XEXP (rtl, 0));
|
||||
}
|
||||
|
||||
/* Return true if the given RTX is a register which can be restored
|
||||
|
|
|
@ -6047,30 +6047,43 @@ constants in @code{flag_pic} mode in @code{data_section} and everything
|
|||
else in @code{readonly_data_section}.
|
||||
@end deftypefn
|
||||
|
||||
@deftypefn {Target Hook} void TARGET_ENCODE_SECTION_INFO (tree @var{decl}, int @var{new_decl_p})
|
||||
@deftypefn {Target Hook} void TARGET_ENCODE_SECTION_INFO (tree @var{decl}, rtx @var{rtl}, int @var{new_decl_p})
|
||||
Define this hook if references to a symbol or a constant must be
|
||||
treated differently depending on something about the variable or
|
||||
function named by the symbol (such as what section it is in).
|
||||
|
||||
The hook is executed under two circumstances. One is immediately after
|
||||
the rtl for @var{decl} that represents a variable or a function has been
|
||||
created and stored in @code{DECL_RTL(@var{decl})}. The value of the rtl
|
||||
will be a @code{mem} whose address is a @code{symbol_ref}. The other is
|
||||
immediately after the rtl for @var{decl} that represents a constant has
|
||||
been created and stored in @code{TREE_CST_RTL (@var{decl})}. The macro
|
||||
is called once for each distinct constant in a source file.
|
||||
The hook is executed immediately after rtl has been created for
|
||||
@var{decl}, which may be a variable or function declaration or
|
||||
an entry in the constant pool. In either case, @var{rtl} is the
|
||||
rtl in question. Do @emph{not} use @code{DECL_RTL (@var{decl})}
|
||||
or @code{TREE_CST_RTL (@var{decl})} in this hook; that field may
|
||||
not have been initialized yet.
|
||||
|
||||
In the case of a constant, it is safe to assume that the rtl is
|
||||
a @code{mem} whose address is a @code{symbol_ref}. Most decls
|
||||
will also have this form, but that is not guaranteed. Global
|
||||
register variables, for instance, will have a @code{reg} for their
|
||||
rtl. (Normally the right thing to do with such unusual rtl is
|
||||
leave it alone.)
|
||||
|
||||
The @var{new_decl_p} argument will be true if this is the first time
|
||||
that @code{ENCODE_SECTION_INFO} has been invoked on this decl. It will
|
||||
that @code{TARGET_ENCODE_SECTION_INFO} has been invoked on this decl. It will
|
||||
be false for subsequent invocations, which will happen for duplicate
|
||||
declarations. Whether or not anything must be done for the duplicate
|
||||
declaration depends on whether the hook examines @code{DECL_ATTRIBUTES}.
|
||||
@var{new_decl_p} is always true when the hook is called for a constant.
|
||||
|
||||
@cindex @code{SYMBOL_REF_FLAG}, in @code{TARGET_ENCODE_SECTION_INFO}
|
||||
The usual thing for this hook to do is to record a flag in the
|
||||
@code{symbol_ref} (such as @code{SYMBOL_REF_FLAG}) or to store a
|
||||
modified name string in the @code{symbol_ref} (if one bit is not
|
||||
enough information).
|
||||
The usual thing for this hook to do is to record flags in the
|
||||
@code{symbol_ref}, using @code{SYMBOL_REF_FLAG} or @code{SYMBOL_REF_FLAGS}.
|
||||
Historically, the name string was modified if it was necessary to
|
||||
encode more than one bit of information, but this practice is now
|
||||
discouraged; use @code{SYMBOL_REF_FLAGS}.
|
||||
|
||||
The default definition of this hook, @code{default_encode_section_info}
|
||||
in @file{varasm.c}, sets a number of commonly-useful bits in
|
||||
@code{SYMBOL_REF_FLAGS}. Check whether the default does what you need
|
||||
before overriding it.
|
||||
@end deftypefn
|
||||
|
||||
@deftypefn {Target Hook} const char *TARGET_STRIP_NAME_ENCODING (const char *name)
|
||||
|
|
|
@ -519,7 +519,7 @@ extern void default_select_rtx_section PARAMS ((enum machine_mode, rtx,
|
|||
unsigned HOST_WIDE_INT));
|
||||
extern void default_elf_select_rtx_section PARAMS ((enum machine_mode, rtx,
|
||||
unsigned HOST_WIDE_INT));
|
||||
extern void default_encode_section_info PARAMS ((tree, int));
|
||||
extern void default_encode_section_info PARAMS ((tree, rtx, int));
|
||||
extern const char *default_strip_name_encoding PARAMS ((const char *));
|
||||
extern bool default_binds_local_p PARAMS ((tree));
|
||||
extern bool default_binds_local_p_1 PARAMS ((tree, int));
|
||||
|
|
|
@ -312,7 +312,7 @@ struct gcc_target
|
|||
|
||||
/* Do something target-specific to record properties of the DECL into
|
||||
the associated SYMBOL_REF. */
|
||||
void (* encode_section_info) PARAMS ((tree, int));
|
||||
void (* encode_section_info) PARAMS ((tree, rtx, int));
|
||||
|
||||
/* Undo the effects of encode_section_info on the symbol string. */
|
||||
const char * (* strip_name_encoding) PARAMS ((const char *));
|
||||
|
|
16
gcc/varasm.c
16
gcc/varasm.c
|
@ -809,7 +809,7 @@ make_decl_rtl (decl, asmspec)
|
|||
/* Let the target reassign the RTL if it wants.
|
||||
This is necessary, for example, when one machine specific
|
||||
decl attribute overrides another. */
|
||||
(* targetm.encode_section_info) (decl, false);
|
||||
(* targetm.encode_section_info) (decl, DECL_RTL (decl), false);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -932,7 +932,7 @@ make_decl_rtl (decl, asmspec)
|
|||
such as that it is a function name.
|
||||
If the name is changed, the macro ASM_OUTPUT_LABELREF
|
||||
will have to know how to strip this information. */
|
||||
(* targetm.encode_section_info) (decl, true);
|
||||
(* targetm.encode_section_info) (decl, DECL_RTL (decl), true);
|
||||
}
|
||||
|
||||
/* Make the rtl for variable VAR be volatile.
|
||||
|
@ -2674,10 +2674,7 @@ output_constant_def (exp, defer)
|
|||
encoded in it. */
|
||||
if (! found)
|
||||
{
|
||||
/* Take care not to invoke targetm.encode_section_info for
|
||||
constants which don't have a TREE_CST_RTL. */
|
||||
if (TREE_CODE (exp) != INTEGER_CST)
|
||||
(*targetm.encode_section_info) (exp, true);
|
||||
(*targetm.encode_section_info) (exp, rtl, true);
|
||||
|
||||
desc->rtl = rtl;
|
||||
desc->label = XSTR (XEXP (desc->rtl, 0), 0);
|
||||
|
@ -5346,15 +5343,14 @@ default_elf_select_rtx_section (mode, x, align)
|
|||
/* Set the generally applicable flags on the SYMBOL_REF for EXP. */
|
||||
|
||||
void
|
||||
default_encode_section_info (decl, first)
|
||||
default_encode_section_info (decl, rtl, first)
|
||||
tree decl;
|
||||
rtx rtl;
|
||||
int first ATTRIBUTE_UNUSED;
|
||||
{
|
||||
rtx rtl, symbol;
|
||||
rtx symbol;
|
||||
int flags;
|
||||
|
||||
rtl = DECL_P (decl) ? DECL_RTL (decl) : TREE_CST_RTL (decl);
|
||||
|
||||
/* Careful not to prod global register variables. */
|
||||
if (GET_CODE (rtl) != MEM)
|
||||
return;
|
||||
|
|
Loading…
Add table
Reference in a new issue