diff -N -urp a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c --- a/gcc/config/aarch64/aarch64.c 2018-11-16 18:02:11.000000000 +0800 +++ b/gcc/config/aarch64/aarch64.c 2018-11-16 18:07:39.000000000 +0800 @@ -6102,7 +6102,7 @@ aarch64_elf_asm_constructor (rtx symbol, -Wformat-truncation false positive, use a larger size. */ char buf[23]; snprintf (buf, sizeof (buf), ".init_array.%.5u", priority); - s = get_section (buf, SECTION_WRITE, NULL); + s = get_section (buf, SECTION_WRITE | SECTION_NOTYPE, NULL); switch_to_section (s); assemble_align (POINTER_SIZE); assemble_aligned_integer (POINTER_BYTES, symbol); @@ -6122,7 +6122,7 @@ aarch64_elf_asm_destructor (rtx symbol, -Wformat-truncation false positive, use a larger size. */ char buf[23]; snprintf (buf, sizeof (buf), ".fini_array.%.5u", priority); - s = get_section (buf, SECTION_WRITE, NULL); + s = get_section (buf, SECTION_WRITE | SECTION_NOTYPE, NULL); switch_to_section (s); assemble_align (POINTER_SIZE); assemble_aligned_integer (POINTER_BYTES, symbol);