Skip to content
Snippets Groups Projects
Commit 151d1347 authored by H.J. Lu's avatar H.J. Lu
Browse files

Require .init_array/.fini_array support for SHF_GNU_RETAIN

Since SHF_GNU_RETAIN support doesn't work for crtstuff.c which switches
the output section directly with asm statement:

---
static void __attribute__((used))
__do_global_dtors_aux (void)
{
  static _Bool completed;

  if (__builtin_expect (completed, 0))
    return;
  completed = 1;
}

static void __attribute__((__used__))
call___do_global_dtors_aux (void)
{
  asm ("\t.section\t.fini");
  __do_global_dtors_aux ();
  asm ("\t.section\t.text");
}
---

use SHF_GNU_RETAIN only if .init_array/.fini_array section is supported.

gcc/

	PR target/98146
	* defaults.h (SUPPORTS_SHF_GNU_RETAIN): New.
	* varasm.c (get_section): Replace HAVE_GAS_SHF_GNU_RETAIN with
	SUPPORTS_SHF_GNU_RETAIN.
	(resolve_unique_section): Likewise.
	(get_variable_section): Likewise.
	(switch_to_section): Likewise.

gcc/testsuite/

	PR target/98146
	* lib/target-supports.exp
	(check_effective_target_R_flag_in_section): Also check
	HAVE_INITFINI_ARRAY_SUPPORT != 0.
parent 2a976020
No related branches found
No related tags found
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment