Commit 5b0a9c7c by Bernd Edlinger Committed by Bernd Edlinger

re PR rtl-optimization/89490 (char array constant put in string merge section)

2019-02-27  Bernd Edlinger  <bernd.edlinger@hotmail.de>

        PR rtl-optimization/89490
        * varasm.c (get_block_for_section): Bail out for mergeable sections.
        (default_use_anchors_for_symbol_p, output_object_block): Assert the
        block section is not mergeable.

From-SVN: r269264
parent 867a4ad2
2019-02-27 Bernd Edlinger <bernd.edlinger@hotmail.de>
PR rtl-optimization/89490
* varasm.c (get_block_for_section): Bail out for mergeable sections.
(default_use_anchors_for_symbol_p, output_object_block): Assert the
block section is not mergeable.
2019-02-27 Jakub Jelinek <jakub@redhat.com> 2019-02-27 Jakub Jelinek <jakub@redhat.com>
PR target/70341 PR target/70341
......
...@@ -363,7 +363,11 @@ use_object_blocks_p (void) ...@@ -363,7 +363,11 @@ use_object_blocks_p (void)
/* Return the object_block structure for section SECT. Create a new /* Return the object_block structure for section SECT. Create a new
structure if we haven't created one already. Return null if SECT structure if we haven't created one already. Return null if SECT
itself is null. */ itself is null. Return also null for mergeable sections since
section anchors can't be used in mergeable sections anyway,
because the linker might move objects around, and using the
object blocks infrastructure in that case is both a waste and a
maintenance burden. */
static struct object_block * static struct object_block *
get_block_for_section (section *sect) get_block_for_section (section *sect)
...@@ -373,6 +377,9 @@ get_block_for_section (section *sect) ...@@ -373,6 +377,9 @@ get_block_for_section (section *sect)
if (sect == NULL) if (sect == NULL)
return NULL; return NULL;
if (sect->common.flags & SECTION_MERGE)
return NULL;
object_block **slot object_block **slot
= object_block_htab->find_slot_with_hash (sect, hash_section (sect), = object_block_htab->find_slot_with_hash (sect, hash_section (sect),
INSERT); INSERT);
...@@ -7014,14 +7021,13 @@ default_asm_output_anchor (rtx symbol) ...@@ -7014,14 +7021,13 @@ default_asm_output_anchor (rtx symbol)
bool bool
default_use_anchors_for_symbol_p (const_rtx symbol) default_use_anchors_for_symbol_p (const_rtx symbol)
{ {
section *sect;
tree decl; tree decl;
section *sect = SYMBOL_REF_BLOCK (symbol)->sect;
/* Don't use anchors for mergeable sections. The linker might move /* This function should only be called with non-zero SYMBOL_REF_BLOCK,
the objects around. */ furthermore get_block_for_section should not create object blocks
sect = SYMBOL_REF_BLOCK (symbol)->sect; for mergeable sections. */
if (sect->common.flags & SECTION_MERGE) gcc_checking_assert (sect && !(sect->common.flags & SECTION_MERGE));
return false;
/* Don't use anchors for small data sections. The small data register /* Don't use anchors for small data sections. The small data register
acts as an anchor for such sections. */ acts as an anchor for such sections. */
...@@ -7630,6 +7636,7 @@ output_object_block (struct object_block *block) ...@@ -7630,6 +7636,7 @@ output_object_block (struct object_block *block)
else else
switch_to_section (block->sect); switch_to_section (block->sect);
gcc_checking_assert (!(block->sect->common.flags & SECTION_MERGE));
assemble_align (block->alignment); assemble_align (block->alignment);
/* Define the values of all anchors relative to the current section /* Define the values of all anchors relative to the current section
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment