public inbox for gdb-testers@sourceware.org
help / color / mirror / Atom feed
From: gdb-buildbot@sergiodj.net
To: gdb-testers@sourceware.org
Subject: [binutils-gdb] ELF: Support the section flag 'o' in .section directive
Date: Fri, 07 Feb 2020 02:57:00 -0000	[thread overview]
Message-ID: <b7d072167715829eed0622616f6ae0182900de3e@gdb-build> (raw)

*** TEST RESULTS FOR COMMIT b7d072167715829eed0622616f6ae0182900de3e ***

commit b7d072167715829eed0622616f6ae0182900de3e
Author:     H.J. Lu <hjl.tools@gmail.com>
AuthorDate: Thu Feb 6 18:04:58 2020 -0800
Commit:     H.J. Lu <hjl.tools@gmail.com>
CommitDate: Thu Feb 6 18:05:10 2020 -0800

    ELF: Support the section flag 'o' in .section directive
    
    As shown in
    
    https://sourceware.org/bugzilla/show_bug.cgi?id=25490
    
    --gc-sections will silently remove __patchable_function_entries section
    and generate corrupt result.  This patch adds the section flag 'o' to
    .section directive:
    
    .section __patchable_function_entries,"awo",@progbits,foo
    .section __patchable_function_entries,"awoG",@progbits,foo,foo,comdat
    .section __patchable_function_entries,"awo",@progbits,bar,unique,4
    .section __patchable_function_entries,"awoG",@progbits,foo,foo,comdat,unique,1
    
    which specifies the symbol name which the section references.  Assmebler
    will set its elf_linked_to_section to a local section where the symbol
    is defined.
    
    Linker is updated to call mark_hook if gc_mark of any of its linked-to
    sections is set after all sections, except for backend specific ones,
    have been garbage collected.
    
    bfd/
    
            PR gas/25381
            * bfd-in2.h: Regenerated.
            * elflink.c (_bfd_elf_gc_mark_extra_sections): Call mark_hook
            on section if gc_mark of any of its linked-to sections is set
            and don't set gc_mark again.
            * section.c (asection): Add linked_to_symbol_name to map_head
            union.
    
    gas/
    
            PR gas/25381
            * config/obj-elf.c (get_section): Also check
            linked_to_symbol_name.
            (obj_elf_change_section): Also set map_head.linked_to_symbol_name.
            (obj_elf_parse_section_letters): Handle the 'o' flag.
            (build_group_lists): Renamed to ...
            (build_additional_section_info): This.  Set elf_linked_to_section
            from map_head.linked_to_symbol_name.
            (elf_adjust_symtab): Updated.
            * config/obj-elf.h (elf_section_match): Add linked_to_symbol_name.
            * doc/as.texi: Document the 'o' flag.
            * testsuite/gas/elf/elf.exp: Run PR gas/25381 tests.
            * testsuite/gas/elf/section18.d: New file.
            * testsuite/gas/elf/section18.s: Likewise.
            * testsuite/gas/elf/section19.d: Likewise.
            * testsuite/gas/elf/section19.s: Likewise.
            * testsuite/gas/elf/section20.d: Likewise.
            * testsuite/gas/elf/section20.s: Likewise.
            * testsuite/gas/elf/section21.d: Likewise.
            * testsuite/gas/elf/section21.l: Likewise.
            * testsuite/gas/elf/section21.s: Likewise.
    
    ld/
    
            PR ld/24526
            PR ld/25021
            PR ld/25490
            * testsuite/ld-elf/elf.exp: Run PR ld/25490 tests.
            * testsuite/ld-elf/pr24526.d: New file.
            * testsuite/ld-elf/pr24526.s: Likewise.
            * testsuite/ld-elf/pr25021.d: Likewise.
            * testsuite/ld-elf/pr25021.s: Likewise.
            * testsuite/ld-elf/pr25490-2-16.rd: Likewise.
            * testsuite/ld-elf/pr25490-2-32.rd: Likewise.
            * testsuite/ld-elf/pr25490-2-64.rd: Likewise.
            * testsuite/ld-elf/pr25490-2.s: Likewise.
            * testsuite/ld-elf/pr25490-3-16.rd: Likewise.
            * testsuite/ld-elf/pr25490-3-32.rd: Likewise.
            * testsuite/ld-elf/pr25490-3-64.rd: Likewise.
            * testsuite/ld-elf/pr25490-3.s: Likewise.
            * testsuite/ld-elf/pr25490-4-16.rd: Likewise.
            * testsuite/ld-elf/pr25490-4-32.rd: Likewise.
            * testsuite/ld-elf/pr25490-4-64.rd: Likewise.
            * testsuite/ld-elf/pr25490-4.s: Likewise.
            * testsuite/ld-elf/pr25490-5-16.rd: Likewise.
            * testsuite/ld-elf/pr25490-5-32.rd: Likewise.
            * testsuite/ld-elf/pr25490-5-64.rd: Likewise.
            * testsuite/ld-elf/pr25490-5.s: Likewise.
            * testsuite/ld-elf/pr25490-6-16.rd: Likewise.
            * testsuite/ld-elf/pr25490-6-32.rd: Likewise.
            * testsuite/ld-elf/pr25490-6-64.rd: Likewise.
            * testsuite/ld-elf/pr25490-6.s: Likewise.

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 95152add84..9971885707 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,13 @@
+2020-02-06  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR gas/25381
+	* bfd-in2.h: Regenerated.
+	* elflink.c (_bfd_elf_gc_mark_extra_sections): Call mark_hook
+	on section if gc_mark of any of its linked-to sections is set
+	and don't set gc_mark again.
+	* section.c (asection): Add linked_to_symbol_name to map_head
+	union.
+
 2020-02-06  Maciej W. Rozycki  <macro@wdc.com>
 
 	* elf32-v850.c (v850_elf_relax_section): Fix the index used for
diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
index 09a5a39ff5..2d26b81db3 100644
--- a/bfd/bfd-in2.h
+++ b/bfd/bfd-in2.h
@@ -1185,10 +1185,12 @@ typedef struct bfd_section
   /* Early in the link process, map_head and map_tail are used to build
      a list of input sections attached to an output section.  Later,
      output sections use these fields for a list of bfd_link_order
-     structs.  */
+     structs.  The linked_to_symbol_name field is for ELF assembler
+     internal use.  */
   union {
     struct bfd_link_order *link_order;
     struct bfd_section *s;
+    const char *linked_to_symbol_name;
   } map_head, map_tail;
 } asection;
 
diff --git a/bfd/elflink.c b/bfd/elflink.c
index 5217528a79..30a572d32d 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -13316,7 +13316,7 @@ _bfd_elf_gc_mark_debug_special_section_group (asection *grp)
 
 bfd_boolean
 _bfd_elf_gc_mark_extra_sections (struct bfd_link_info *info,
-				 elf_gc_mark_hook_fn mark_hook ATTRIBUTE_UNUSED)
+				 elf_gc_mark_hook_fn mark_hook)
 {
   bfd *ibfd;
 
@@ -13345,6 +13345,21 @@ _bfd_elf_gc_mark_extra_sections (struct bfd_link_info *info,
 		   && (isec->flags & SEC_ALLOC) != 0
 		   && elf_section_type (isec) != SHT_NOTE)
 	    some_kept = TRUE;
+	  else
+	    {
+	      /* Since all sections, except for backend specific ones,
+		 have been garbage collected, call mark_hook on this
+		 section if any of its linked-to sections is marked.  */
+	      asection *linked_to_sec = elf_linked_to_section (isec);
+	      for (; linked_to_sec != NULL;
+		   linked_to_sec = elf_linked_to_section (linked_to_sec))
+		if (linked_to_sec->gc_mark)
+		  {
+		    if (!_bfd_elf_gc_mark (info, isec, mark_hook))
+		      return FALSE;
+		    break;
+		  }
+	    }
 
 	  if (!debug_frag_seen
 	      && (isec->flags & SEC_DEBUGGING)
@@ -13359,14 +13374,16 @@ _bfd_elf_gc_mark_extra_sections (struct bfd_link_info *info,
 
       /* Keep debug and special sections like .comment when they are
 	 not part of a group.  Also keep section groups that contain
-	 just debug sections or special sections.  */
+	 just debug sections or special sections.  NB: Sections with
+	 linked-to section has been handled above.  */
       for (isec = ibfd->sections; isec != NULL; isec = isec->next)
 	{
 	  if ((isec->flags & SEC_GROUP) != 0)
 	    _bfd_elf_gc_mark_debug_special_section_group (isec);
 	  else if (((isec->flags & SEC_DEBUGGING) != 0
 		    || (isec->flags & (SEC_ALLOC | SEC_LOAD | SEC_RELOC)) == 0)
-		   && elf_next_in_group (isec) == NULL)
+		   && elf_next_in_group (isec) == NULL
+		   && elf_linked_to_section (isec) == NULL)
 	    isec->gc_mark = 1;
 	  if (isec->gc_mark && (isec->flags & SEC_DEBUGGING) != 0)
 	    has_kept_debug_info = TRUE;
diff --git a/bfd/section.c b/bfd/section.c
index 0c15a0d646..7de0a2d7a8 100644
--- a/bfd/section.c
+++ b/bfd/section.c
@@ -544,10 +544,12 @@ CODE_FRAGMENT
 .  {* Early in the link process, map_head and map_tail are used to build
 .     a list of input sections attached to an output section.  Later,
 .     output sections use these fields for a list of bfd_link_order
-.     structs.  *}
+.     structs.  The linked_to_symbol_name field is for ELF assembler
+.     internal use.  *}
 .  union {
 .    struct bfd_link_order *link_order;
 .    struct bfd_section *s;
+.    const char *linked_to_symbol_name;
 .  } map_head, map_tail;
 .} asection;
 .
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 9fa0350ec8..b6001807b9 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,27 @@
+2020-02-06  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR gas/25381
+	* config/obj-elf.c (get_section): Also check
+	linked_to_symbol_name.
+	(obj_elf_change_section): Also set map_head.linked_to_symbol_name.
+	(obj_elf_parse_section_letters): Handle the 'o' flag.
+	(build_group_lists): Renamed to ...
+	(build_additional_section_info): This.  Set elf_linked_to_section
+	from map_head.linked_to_symbol_name.
+	(elf_adjust_symtab): Updated.
+	* config/obj-elf.h (elf_section_match): Add linked_to_symbol_name.
+	* doc/as.texi: Document the 'o' flag.
+	* testsuite/gas/elf/elf.exp: Run PR gas/25381 tests.
+	* testsuite/gas/elf/section18.d: New file.
+	* testsuite/gas/elf/section18.s: Likewise.
+	* testsuite/gas/elf/section19.d: Likewise.
+	* testsuite/gas/elf/section19.s: Likewise.
+	* testsuite/gas/elf/section20.d: Likewise.
+	* testsuite/gas/elf/section20.s: Likewise.
+	* testsuite/gas/elf/section21.d: Likewise.
+	* testsuite/gas/elf/section21.l: Likewise.
+	* testsuite/gas/elf/section21.s: Likewise.
+
 2020-02-06  H.J. Lu  <hongjiu.lu@intel.com>
 
 	* NEWS: Mention x86 assembler options to align branches for
diff --git a/gas/config/obj-elf.c b/gas/config/obj-elf.c
index 2958490c32..d7a07fec6b 100644
--- a/gas/config/obj-elf.c
+++ b/gas/config/obj-elf.c
@@ -524,6 +524,8 @@ get_section (bfd *abfd ATTRIBUTE_UNUSED, asection *sec, void *inf)
   struct elf_section_match *match = (struct elf_section_match *) inf;
   const char *gname = match->group_name;
   const char *group_name = elf_group_name (sec);
+  const char *linked_to_symbol_name
+    = sec->map_head.linked_to_symbol_name;
   unsigned int info = elf_section_data (sec)->this_hdr.sh_info;
 
   return (info == match->info
@@ -533,7 +535,12 @@ get_section (bfd *abfd ATTRIBUTE_UNUSED, asection *sec, void *inf)
 	  && (group_name == gname
 	      || (group_name != NULL
 		  && gname != NULL
-		  && strcmp (group_name, gname) == 0)));
+		  && strcmp (group_name, gname) == 0))
+	  && (linked_to_symbol_name == match->linked_to_symbol_name
+	      || (linked_to_symbol_name != NULL
+		  && match->linked_to_symbol_name != NULL
+		  && strcmp (linked_to_symbol_name,
+			     match->linked_to_symbol_name) == 0)));
 }
 
 /* Handle the .section pseudo-op.  This code supports two different
@@ -740,6 +747,10 @@ obj_elf_change_section (const char *name,
       sec->section_id = match_p->section_id;
       flags |= match_p->flags;
 
+      /* Set the linked-to symbol name.  */
+      sec->map_head.linked_to_symbol_name
+	= match_p->linked_to_symbol_name;
+
       bfd_set_section_flags (sec, flags);
       if (flags & SEC_MERGE)
 	sec->entsize = entsize;
@@ -801,6 +812,9 @@ obj_elf_parse_section_letters (char *str, size_t len,
 	case 'e':
 	  attr |= SHF_EXCLUDE;
 	  break;
+	case 'o':
+	  attr |= SHF_LINK_ORDER;
+	  break;
 	case 'w':
 	  attr |= SHF_WRITE;
 	  break;
@@ -841,7 +855,7 @@ obj_elf_parse_section_letters (char *str, size_t len,
 	default:
 	  {
 	    const char *bad_msg = _("unrecognized .section attribute:"
-				    " want a,e,w,x,M,S,G,T or number");
+				    " want a,e,o,w,x,M,S,G,T or number");
 #ifdef md_elf_section_letter
 	    bfd_vma md_attr = md_elf_section_letter (*str, &bad_msg);
 	    if (md_attr != (bfd_vma) -1)
@@ -1154,6 +1168,19 @@ obj_elf_section (int push)
 	      attr &= ~SHF_MERGE;
 	    }
 
+	  if ((attr & SHF_LINK_ORDER) != 0 && *input_line_pointer == ',')
+	    {
+	      char c;
+	      unsigned int length;
+	      ++input_line_pointer;
+	      SKIP_WHITESPACE ();
+	      c = get_symbol_name (& beg);
+	      (void) restore_line_pointer (c);
+	      length = input_line_pointer - beg;
+	      if (length)
+		match.linked_to_symbol_name = xmemdup0 (beg, length);
+	    }
+
 	  if ((attr & SHF_GROUP) != 0 && is_clone)
 	    {
 	      as_warn (_("? section flag ignored with G present"));
@@ -2476,10 +2503,12 @@ static struct group_list groups;
 /* Called via bfd_map_over_sections.  If SEC is a member of a group,
    add it to a list of sections belonging to the group.  INF is a
    pointer to a struct group_list, which is where we store the head of
-   each list.  */
+   each list.  If its link_to_symbol_name isn't NULL, set up its
+   linked-to section.  */
 
 static void
-build_group_lists (bfd *abfd ATTRIBUTE_UNUSED, asection *sec, void *inf)
+build_additional_section_info (bfd *abfd ATTRIBUTE_UNUSED,
+				  asection *sec, void *inf)
 {
   struct group_list *list = (struct group_list *) inf;
   const char *group_name = elf_group_name (sec);
@@ -2487,6 +2516,18 @@ build_group_lists (bfd *abfd ATTRIBUTE_UNUSED, asection *sec, void *inf)
   unsigned int *elem_idx;
   unsigned int *idx_ptr;
 
+  if (sec->map_head.linked_to_symbol_name)
+    {
+      symbolS *linked_to_sym;
+      linked_to_sym = symbol_find (sec->map_head.linked_to_symbol_name);
+      if (!linked_to_sym || !S_IS_DEFINED (linked_to_sym))
+	as_bad (_("undefined linked-to symbol `%s' on section `%s'"),
+		sec->map_head.linked_to_symbol_name,
+		bfd_section_name (sec));
+      else
+	elf_linked_to_section (sec) = S_GET_SEGMENT (linked_to_sym);
+    }
+
   if (group_name == NULL)
     return;
 
@@ -2533,7 +2574,8 @@ elf_adjust_symtab (void)
   groups.num_group = 0;
   groups.head = NULL;
   groups.indexes = hash_new ();
-  bfd_map_over_sections (stdoutput, build_group_lists, &groups);
+  bfd_map_over_sections (stdoutput, build_additional_section_info,
+			 &groups);
 
   /* Make the SHT_GROUP sections that describe each section group.  We
      can't set up the section contents here yet, because elf section
diff --git a/gas/config/obj-elf.h b/gas/config/obj-elf.h
index 7cfcc25482..54af9ebc0e 100644
--- a/gas/config/obj-elf.h
+++ b/gas/config/obj-elf.h
@@ -82,6 +82,7 @@ struct elf_obj_sy
 struct elf_section_match
 {
   const char *group_name;
+  const char *linked_to_symbol_name;
   unsigned int info;
   unsigned int section_id;
   flagword flags;
diff --git a/gas/doc/as.texi b/gas/doc/as.texi
index 152bbfdd00..1554c51ad2 100644
--- a/gas/doc/as.texi
+++ b/gas/doc/as.texi
@@ -6599,6 +6599,9 @@ section is allocatable
 section is a GNU_MBIND section
 @item e
 section is excluded from executable and shared library.
+@item o
+section references a symbol defined in another section (the linked-to
+section) in the same file.
 @item w
 section is writable
 @item x
@@ -6678,6 +6681,23 @@ which is a suffix of a larger string is considered a duplicate.  Thus
 @code{"def"} will be merged with @code{"abcdef"};  A reference to the first
 @code{"def"} will be changed to a reference to @code{"abcdef"+3}.
 
+If @var{flags} contains the @code{o} flag, then the @var{type} argument
+must be present along with an additional field like this:
+
+@smallexample
+.section @var{name},"@var{flags}"o,@@@var{type},@var{SymbolName}
+@end smallexample
+
+The @var{SymbolName} field specifies the symbol name which the section
+references.
+
+Note: If both the @var{M} and @var{o} flags are present, then the fields
+for the Merge flag should come first, like this:
+
+@smallexample
+.section @var{name},"@var{flags}"Mo,@@@var{type},@var{entsize},@var{SymbolName}
+@end smallexample
+
 If @var{flags} contains the @code{G} symbol then the @var{type} argument must
 be present along with an additional field like this:
 
@@ -6702,6 +6722,13 @@ the Merge flag should come first, like this:
 .section @var{name} , "@var{flags}"MG, @@@var{type}, @var{entsize}, @var{GroupName}[, @var{linkage}]
 @end smallexample
 
+If both @code{o} flag and @code{G} flag are present, then the
+@var{SymbolName} field for @code{o} comes first, like this:
+
+@smallexample
+.section @var{name},"@var{flags}"oG,@@@var{type},@var{SymbolName},@var{GroupName}[,@var{linkage}]
+@end smallexample
+
 If @var{flags} contains the @code{?} symbol then it may not also contain the
 @code{G} symbol and the @var{GroupName} or @var{linkage} fields should not be
 present.  Instead, @code{?} says to consider the section that's current before
diff --git a/gas/testsuite/gas/elf/elf.exp b/gas/testsuite/gas/elf/elf.exp
index 08c6830e0d..0f9b2672c4 100644
--- a/gas/testsuite/gas/elf/elf.exp
+++ b/gas/testsuite/gas/elf/elf.exp
@@ -249,6 +249,10 @@ if { [is_elf_format] } then {
     run_dump_test "section16a"
     run_dump_test "section16b"
     run_dump_test "section17"
+    run_dump_test "section18"
+    run_dump_test "section19"
+    run_dump_test "section20"
+    run_dump_test "section21"
     run_dump_test "dwarf2-1" $dump_opts
     run_dump_test "dwarf2-2" $dump_opts
     run_dump_test "dwarf2-3" $dump_opts
diff --git a/gas/testsuite/gas/elf/section18.d b/gas/testsuite/gas/elf/section18.d
new file mode 100644
index 0000000000..f4f2930b00
--- /dev/null
+++ b/gas/testsuite/gas/elf/section18.d
@@ -0,0 +1,8 @@
+#readelf: -SW
+#name: linked-to section 1
+
+#...
+ +\[ *[0-9]+\] +__patchable_function_entries +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +0+[248] +00 +WAL +.*
+#...
+ +\[ *[0-9]+\] +__patchable_function_entries +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +0+[248] +00 +WAL +.*
+#pass
diff --git a/gas/testsuite/gas/elf/section18.s b/gas/testsuite/gas/elf/section18.s
new file mode 100644
index 0000000000..d51eb68131
--- /dev/null
+++ b/gas/testsuite/gas/elf/section18.s
@@ -0,0 +1,13 @@
+	.text
+foo:
+	.section __patchable_function_entries,"awo",%progbits,foo
+	.dc.a	.LPFE1
+	.text
+.LPFE1:
+	.byte 0
+	.section __patchable_function_entries,"awo",%progbits,bar
+	.dc.a	.LPFE2
+	.text
+bar:
+.LPFE2:
+	.byte 0
diff --git a/gas/testsuite/gas/elf/section19.d b/gas/testsuite/gas/elf/section19.d
new file mode 100644
index 0000000000..edf2b9480b
--- /dev/null
+++ b/gas/testsuite/gas/elf/section19.d
@@ -0,0 +1,8 @@
+#readelf: -SW
+#name: linked-to section 2
+
+#...
+ +\[ *[0-9]+\] +__patchable_function_entries +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +0+[248] +00 +WAL +.*
+#...
+ +\[ *[0-9]+\] +__patchable_function_entries +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +0+[248] +00 +WAL +.*
+#pass
diff --git a/gas/testsuite/gas/elf/section19.s b/gas/testsuite/gas/elf/section19.s
new file mode 100644
index 0000000000..7d30ea1ff9
--- /dev/null
+++ b/gas/testsuite/gas/elf/section19.s
@@ -0,0 +1,13 @@
+	.section .text,"ax",%progbits,unique,20
+foo:
+	.section __patchable_function_entries,"awo",%progbits,foo,unique,2
+	.dc.a	.LPFE1
+	.section .text,"ax",%progbits,unique,20
+.LPFE1:
+	.byte 0
+	.section __patchable_function_entries,"awo",%progbits,bar,unique,102
+	.dc.a	.LPFE2
+	.section .text,"ax",%progbits,unique,2
+bar:
+.LPFE2:
+	.byte 0
diff --git a/gas/testsuite/gas/elf/section20.d b/gas/testsuite/gas/elf/section20.d
new file mode 100644
index 0000000000..cd7ab5e07c
--- /dev/null
+++ b/gas/testsuite/gas/elf/section20.d
@@ -0,0 +1,17 @@
+#readelf: -SWg
+#name: linked-to section 3
+
+#...
+ +\[ *[0-9]+\] +__patchable_function_entries +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +0+[248] +00 +WALG +.*
+#...
+ +\[ *[0-9]+\] +__patchable_function_entries +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +0+[248] +00 +WALG +.*
+#...
+COMDAT group section \[[ 0-9]+\] `.group' \[foo\] contains [0-9]+ sections:
+   \[Index\]    Name
+#...
+   \[[ 0-9]+\]   __patchable_function_entries
+#...
+COMDAT group section \[[ 0-9]+\] `.group' \[bar\] contains [0-9]+ sections:
+#...
+   \[[ 0-9]+\]   __patchable_function_entries
+#pass
diff --git a/gas/testsuite/gas/elf/section20.s b/gas/testsuite/gas/elf/section20.s
new file mode 100644
index 0000000000..1e9639ef4a
--- /dev/null
+++ b/gas/testsuite/gas/elf/section20.s
@@ -0,0 +1,13 @@
+	.section .text,"axG",%progbits,foo,comdat
+foo:
+	.section __patchable_function_entries,"awoG",%progbits,foo,foo,comdat
+	.dc.a	.LPFE1
+	.section .text,"axG",%progbits,foo,comdat
+.LPFE1:
+	.byte 0
+	.section __patchable_function_entries,"awoG",%progbits,bar,bar,comdat,unique,4
+	.dc.a	.LPFE2
+	.section .text,"axG",%progbits,bar,comdat,unique,24
+bar:
+.LPFE2:
+	.byte 0
diff --git a/gas/testsuite/gas/elf/section21.d b/gas/testsuite/gas/elf/section21.d
new file mode 100644
index 0000000000..54fa9d419b
--- /dev/null
+++ b/gas/testsuite/gas/elf/section21.d
@@ -0,0 +1,2 @@
+#name: incorrect linked-to symbols
+#error_output: section21.l
diff --git a/gas/testsuite/gas/elf/section21.l b/gas/testsuite/gas/elf/section21.l
new file mode 100644
index 0000000000..50342ec659
--- /dev/null
+++ b/gas/testsuite/gas/elf/section21.l
@@ -0,0 +1,5 @@
+[^:]*: Assembler messages:
+[^:]*:11: Error: junk at end of line, first unrecognized character is `1'
+#...
+[^:]*: Error: undefined linked-to symbol `bar' on section `__patchable_function_entries'
+[^:]*: Error: undefined linked-to symbol `foo' on section `__patchable_function_entries'
diff --git a/gas/testsuite/gas/elf/section21.s b/gas/testsuite/gas/elf/section21.s
new file mode 100644
index 0000000000..ae5f848b29
--- /dev/null
+++ b/gas/testsuite/gas/elf/section21.s
@@ -0,0 +1,15 @@
+	.section __patchable_function_entries,"awo",%progbits,bar
+	.dc.a	.LPFE1
+	.text
+.LPFE1:
+	.byte 0
+	.section __patchable_function_entries,"awo",%progbits,foo
+	.dc.a	.LPFE2
+	.text
+.LPFE2:
+	.dc.a foo
+	.section __patchable_function_entries,"awo",%progbits,1foo
+	.dc.a	.LPFE3
+	.text
+.LPFE3:
+	.byte 0
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 66a5049091..b5c8326efb 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,4 +1,35 @@
-2020-02-07  H.J. Lu  <hongjiu.lu@intel.com>
+2020-02-06  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/24526
+	PR ld/25021
+	PR ld/25490
+	* testsuite/ld-elf/elf.exp: Run PR ld/25490 tests.
+	* testsuite/ld-elf/pr24526.d: New file.
+	* testsuite/ld-elf/pr24526.s: Likewise.
+	* testsuite/ld-elf/pr25021.d: Likewise.
+	* testsuite/ld-elf/pr25021.s: Likewise.
+	* testsuite/ld-elf/pr25490-2-16.rd: Likewise.
+	* testsuite/ld-elf/pr25490-2-32.rd: Likewise.
+	* testsuite/ld-elf/pr25490-2-64.rd: Likewise.
+	* testsuite/ld-elf/pr25490-2.s: Likewise.
+	* testsuite/ld-elf/pr25490-3-16.rd: Likewise.
+	* testsuite/ld-elf/pr25490-3-32.rd: Likewise.
+	* testsuite/ld-elf/pr25490-3-64.rd: Likewise.
+	* testsuite/ld-elf/pr25490-3.s: Likewise.
+	* testsuite/ld-elf/pr25490-4-16.rd: Likewise.
+	* testsuite/ld-elf/pr25490-4-32.rd: Likewise.
+	* testsuite/ld-elf/pr25490-4-64.rd: Likewise.
+	* testsuite/ld-elf/pr25490-4.s: Likewise.
+	* testsuite/ld-elf/pr25490-5-16.rd: Likewise.
+	* testsuite/ld-elf/pr25490-5-32.rd: Likewise.
+	* testsuite/ld-elf/pr25490-5-64.rd: Likewise.
+	* testsuite/ld-elf/pr25490-5.s: Likewise.
+	* testsuite/ld-elf/pr25490-6-16.rd: Likewise.
+	* testsuite/ld-elf/pr25490-6-32.rd: Likewise.
+	* testsuite/ld-elf/pr25490-6-64.rd: Likewise.
+	* testsuite/ld-elf/pr25490-6.s: Likewise.
+
+2020-02-06  H.J. Lu  <hongjiu.lu@intel.com>
 
 	* testsuite/lib/ld-lib.exp (check_gc_sections_available): Mark
 	z80 as not supported.
diff --git a/ld/testsuite/ld-elf/elf.exp b/ld/testsuite/ld-elf/elf.exp
index 989fb50d4a..7b8e8f6f3c 100644
--- a/ld/testsuite/ld-elf/elf.exp
+++ b/ld/testsuite/ld-elf/elf.exp
@@ -76,9 +76,32 @@ run_ld_link_tests [list \
 if [is_elf64 tmpdir/symbol3w.a] {
     set ASFLAGS "$ASFLAGS --defsym ALIGN=3"
     set pr23900_1_exp "pr23900-1-64.rd"
+    set pr25490_2_exp "pr25490-2-64.rd"
+    set pr25490_3_exp "pr25490-3-64.rd"
+    set pr25490_4_exp "pr25490-4-64.rd"
+    set pr25490_5_exp "pr25490-5-64.rd"
+    set pr25490_6_exp "pr25490-6-64.rd"
 } else {
     set ASFLAGS "$ASFLAGS --defsym ALIGN=2"
     set pr23900_1_exp "pr23900-1-32.rd"
+    if {    [istarget avr-*-*]
+	 || [istarget h8300-*-*]
+	 || [istarget ip2k-*-*]
+	 || [istarget m68hc11-*]
+	 || [istarget "xc16x-*"]
+	 || [istarget "z80-*-*"] } {
+	set pr25490_2_exp "pr25490-2-16.rd"
+	set pr25490_3_exp "pr25490-3-16.rd"
+	set pr25490_4_exp "pr25490-4-16.rd"
+	set pr25490_5_exp "pr25490-5-16.rd"
+	set pr25490_6_exp "pr25490-6-16.rd"
+    } else {
+	set pr25490_2_exp "pr25490-2-32.rd"
+	set pr25490_3_exp "pr25490-3-32.rd"
+	set pr25490_4_exp "pr25490-4-32.rd"
+	set pr25490_5_exp "pr25490-5-32.rd"
+	set pr25490_6_exp "pr25490-6-32.rd"
+    }
 }
 
 
@@ -172,6 +195,46 @@ if { [istarget *-*-*linux*]
 	]
 }
 
+if [check_gc_sections_available] {
+    run_ld_link_tests [list \
+	[list "__patchable_function_entries section 2" \
+	    "--gc-sections -e _start" \
+	    "" \
+	    "" \
+	    {pr25490-2.s} \
+	    [list [list "readelf" {-SW} $pr25490_2_exp]] \
+	    "pr25490-2.exe"] \
+	[list "__patchable_function_entries section 3" \
+	    "--gc-sections -e _start" \
+	    "" \
+	    "" \
+	    {pr25490-3.s} \
+	    [list [list "readelf" {-SW} $pr25490_3_exp]] \
+	    "pr25490-3.exe"] \
+	[list "__patchable_function_entries section 4" \
+	    "--gc-sections -e _start" \
+	    "" \
+	    "" \
+	    {pr25490-4.s} \
+	    [list [list "readelf" {-SW} $pr25490_4_exp]] \
+	    "pr25490-4.exe"] \
+	[list "__patchable_function_entries section 5" \
+	    "--gc-sections -e _start" \
+	    "" \
+	    "" \
+	    {pr25490-5.s} \
+	    [list [list "readelf" {-SW} $pr25490_5_exp]] \
+	    "pr25490-5.exe"] \
+	[list "__patchable_function_entries section 6" \
+	    "--gc-sections -e _start" \
+	    "" \
+	    "" \
+	    {pr25490-6.s} \
+	    [list [list "readelf" {-SW} $pr25490_6_exp]] \
+	    "pr25490-6.exe"] \
+	]
+}
+
 set LDFLAGS $old_ldflags
 set ASFLAGS $old_asflags
 
diff --git a/ld/testsuite/ld-elf/pr24526.d b/ld/testsuite/ld-elf/pr24526.d
new file mode 100644
index 0000000000..3faaa1e6f6
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr24526.d
@@ -0,0 +1,9 @@
+#ld: --gc-sections -e _start
+#target: [check_gc_sections_available]
+#readelf: -SW
+
+#...
+ +\[ *[0-9]+\] \.bar +PROGBITS +[0-9a-f]+ +[0-9a-f]+ [0-9a-f]+ +00 +AL .*
+#...
+ +\[ *[0-9]+\] \.zed +PROGBITS +[0-9a-f]+ +[0-9a-f]+ [0-9a-f]+ +00 +AL .*
+#pass
diff --git a/ld/testsuite/ld-elf/pr24526.s b/ld/testsuite/ld-elf/pr24526.s
new file mode 100644
index 0000000000..7d773387aa
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr24526.s
@@ -0,0 +1,13 @@
+	.text
+	.globl _start
+_start:
+	.byte 0
+	.section .note,"",%note
+	.dc.a .foo
+
+	.section .foo,"a"
+	.dc.a	0
+	.section .bar,"ao",%progbits,.foo
+	.dc.a	0
+	.section .zed,"ao",%progbits,.foo
+	.dc.a	0
diff --git a/ld/testsuite/ld-elf/pr25021.d b/ld/testsuite/ld-elf/pr25021.d
new file mode 100644
index 0000000000..1cb6a87184
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr25021.d
@@ -0,0 +1,7 @@
+#ld: --gc-sections -e _start
+#target: [check_gc_sections_available]
+#readelf: -SW
+
+#...
+ +\[ *[0-9]+\] \.stack_sizes +PROGBITS +0+ +[0-9a-f]+ 0+1 +00 +L +[0-9] .*
+#pass
diff --git a/ld/testsuite/ld-elf/pr25021.s b/ld/testsuite/ld-elf/pr25021.s
new file mode 100644
index 0000000000..dd71202eb6
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr25021.s
@@ -0,0 +1,22 @@
+	.section .text.live,"ax",%progbits
+	.globl live
+live:
+	.byte 0
+
+	.section .stack_sizes,"o",%progbits,.text.live,unique,0
+	.byte 1
+
+	.section .text.dead,"ax",%progbits
+	.globl dead
+dead:
+	.byte 1
+
+	.section .stack_sizes,"o",%progbits,.text.dead,unique,1
+	.byte 2
+
+	.section .text.main,"ax",%progbits
+	.globl _start
+_start:
+	.byte 0
+	.section .note,"",%note
+	.dc.a live
diff --git a/ld/testsuite/ld-elf/pr25490-2-16.rd b/ld/testsuite/ld-elf/pr25490-2-16.rd
new file mode 100644
index 0000000000..2e521cf2ef
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr25490-2-16.rd
@@ -0,0 +1,7 @@
+#source: pr25490-2.s
+#ld: --gc-sections -e _start
+#readelf: -SW
+
+#...
+ +\[ *[0-9]+\] __patchable_function_entries +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +0+2 +00 +WAL +[0-9] +0 +[1248]
+#pass
diff --git a/ld/testsuite/ld-elf/pr25490-2-32.rd b/ld/testsuite/ld-elf/pr25490-2-32.rd
new file mode 100644
index 0000000000..8b13348225
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr25490-2-32.rd
@@ -0,0 +1,7 @@
+#source: pr25490-2.s
+#ld: --gc-sections -e _start
+#readelf: -SW
+
+#...
+ +\[ *[0-9]+\] __patchable_function_entries +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +0+4 +00 +WAL +[0-9] +0 +[1248]
+#pass
diff --git a/ld/testsuite/ld-elf/pr25490-2-64.rd b/ld/testsuite/ld-elf/pr25490-2-64.rd
new file mode 100644
index 0000000000..6533042c58
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr25490-2-64.rd
@@ -0,0 +1,7 @@
+#source: pr25490-2.s
+#ld: --gc-sections -e _start
+#readelf: -SW
+
+#...
+ +\[ *[0-9]+\] __patchable_function_entries +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +0+8 +00 +WAL +[0-9] +0 +[1248]
+#pass
diff --git a/ld/testsuite/ld-elf/pr25490-2.s b/ld/testsuite/ld-elf/pr25490-2.s
new file mode 100644
index 0000000000..856bb5fe9d
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr25490-2.s
@@ -0,0 +1,9 @@
+	.text
+	.globl	_start
+	.type	_start, %function
+_start:
+	.section __patchable_function_entries,"awo",%progbits,_start
+	.dc.a	.LPFE1
+	.text
+.LPFE1:
+	.byte 0
diff --git a/ld/testsuite/ld-elf/pr25490-3-16.rd b/ld/testsuite/ld-elf/pr25490-3-16.rd
new file mode 100644
index 0000000000..1c2f3d1bab
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr25490-3-16.rd
@@ -0,0 +1,7 @@
+#source: pr25490-3.s
+#ld: --gc-sections -e _start
+#readelf: -SW
+
+#...
+ +\[ *[0-9]+\] __patchable_function_entries +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +0+2 +00 +WAL +[0-9] +0 +[1248]
+#pass
diff --git a/ld/testsuite/ld-elf/pr25490-3-32.rd b/ld/testsuite/ld-elf/pr25490-3-32.rd
new file mode 100644
index 0000000000..eb5587f5f3
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr25490-3-32.rd
@@ -0,0 +1,7 @@
+#source: pr25490-3.s
+#ld: --gc-sections -e _start
+#readelf: -SW
+
+#...
+ +\[ *[0-9]+\] __patchable_function_entries +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +0+4 +00 +WAL +[0-9] +0 +[1248]
+#pass
diff --git a/ld/testsuite/ld-elf/pr25490-3-64.rd b/ld/testsuite/ld-elf/pr25490-3-64.rd
new file mode 100644
index 0000000000..9fe794bc80
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr25490-3-64.rd
@@ -0,0 +1,7 @@
+#source: pr25490-3.s
+#ld: --gc-sections -e _start
+#readelf: -SW
+
+#...
+ +\[ *[0-9]+\] __patchable_function_entries +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +0+8 +00 +WAL +[0-9] +0 +[1248]
+#pass
diff --git a/ld/testsuite/ld-elf/pr25490-3.s b/ld/testsuite/ld-elf/pr25490-3.s
new file mode 100644
index 0000000000..427ad69b53
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr25490-3.s
@@ -0,0 +1,18 @@
+	.section	.text.bar,"ax",%progbits
+	.globl	bar
+	.type	bar, %function
+bar:
+	.section __patchable_function_entries,"awo",%progbits,bar
+	.dc.a	.LPFE1
+	.section	.text.bar,"ax",%progbits
+.LPFE1:
+	.byte 0
+	.section	.text._start,"ax",%progbits
+	.globl	_start
+	.type	_start, %function
+_start:
+	.section __patchable_function_entries,"awo",%progbits,_start
+	.dc.a	.LPFE2
+	.section	.text._start,"ax",%progbits
+.LPFE2:
+	.byte 0
diff --git a/ld/testsuite/ld-elf/pr25490-4-16.rd b/ld/testsuite/ld-elf/pr25490-4-16.rd
new file mode 100644
index 0000000000..1f89d504e8
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr25490-4-16.rd
@@ -0,0 +1,7 @@
+#source: pr25490-4.s
+#ld: --gc-sections -e _start
+#readelf: -SW
+
+#...
+ +\[ *[0-9]+\] __patchable_function_entries +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +0+4 +00 +WAL +[0-9] +0 +[1248]
+#pass
diff --git a/ld/testsuite/ld-elf/pr25490-4-32.rd b/ld/testsuite/ld-elf/pr25490-4-32.rd
new file mode 100644
index 0000000000..4562a6eb1e
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr25490-4-32.rd
@@ -0,0 +1,7 @@
+#source: pr25490-4.s
+#ld: --gc-sections -e _start
+#readelf: -SW
+
+#...
+ +\[ *[0-9]+\] __patchable_function_entries +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +0+8 +00 +WAL +[0-9] +0 +[1248]
+#pass
diff --git a/ld/testsuite/ld-elf/pr25490-4-64.rd b/ld/testsuite/ld-elf/pr25490-4-64.rd
new file mode 100644
index 0000000000..da295f3018
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr25490-4-64.rd
@@ -0,0 +1,7 @@
+#source: pr25490-4.s
+#ld: --gc-sections -e _start
+#readelf: -SW
+
+#...
+ +\[ *[0-9]+\] __patchable_function_entries +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +0+10 +00 +WAL +[0-9] +0 +[1248]
+#pass
diff --git a/ld/testsuite/ld-elf/pr25490-4.s b/ld/testsuite/ld-elf/pr25490-4.s
new file mode 100644
index 0000000000..5a31f8e086
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr25490-4.s
@@ -0,0 +1,20 @@
+	.section	.text.bar,"ax",%progbits
+	.globl	bar
+	.type	bar, %function
+bar:
+	.section __patchable_function_entries,"awo",%progbits,bar
+	.dc.a	.LPFE1
+	.section	.text.bar,"ax",%progbits
+.LPFE1:
+	.byte 0
+	.section	.text._start,"ax",%progbits
+	.globl	_start
+	.type	_start, %function
+_start:
+	.section __patchable_function_entries,"awo",%progbits,_start
+	.dc.a	.LPFE2
+	.section	.text._start,"ax",%progbits
+.LPFE2:
+	.byte 0
+	.section .note,"",%note
+	.dc.a	bar
diff --git a/ld/testsuite/ld-elf/pr25490-5-16.rd b/ld/testsuite/ld-elf/pr25490-5-16.rd
new file mode 100644
index 0000000000..b51eb533a6
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr25490-5-16.rd
@@ -0,0 +1,7 @@
+#source: pr25490-5.s
+#ld: --gc-sections -e _start
+#readelf: -SW
+
+#...
+ +\[ *[0-9]+\] __patchable_function_entries +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +0+4 +00 +WAL +[0-9] +0 +[1248]
+#pass
diff --git a/ld/testsuite/ld-elf/pr25490-5-32.rd b/ld/testsuite/ld-elf/pr25490-5-32.rd
new file mode 100644
index 0000000000..8d6efb7582
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr25490-5-32.rd
@@ -0,0 +1,7 @@
+#source: pr25490-5.s
+#ld: --gc-sections -e _start
+#readelf: -SW
+
+#...
+ +\[ *[0-9]+\] __patchable_function_entries +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +0+8 +00 +WAL +[0-9] +0 +[1248]
+#pass
diff --git a/ld/testsuite/ld-elf/pr25490-5-64.rd b/ld/testsuite/ld-elf/pr25490-5-64.rd
new file mode 100644
index 0000000000..1375f9abce
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr25490-5-64.rd
@@ -0,0 +1,7 @@
+#source: pr25490-5.s
+#ld: --gc-sections -e _start
+#readelf: -SW
+
+#...
+ +\[ *[0-9]+\] __patchable_function_entries +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +0+10 +00 +WAL +[0-9] +0 +[1248]
+#pass
diff --git a/ld/testsuite/ld-elf/pr25490-5.s b/ld/testsuite/ld-elf/pr25490-5.s
new file mode 100644
index 0000000000..f9d46b8e0b
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr25490-5.s
@@ -0,0 +1,17 @@
+	.text
+	.type	bar, %function
+bar:
+	.section __patchable_function_entries,"awo",%progbits,bar
+	.dc.a	.LPFE1
+	.text
+.LPFE1:
+	.byte 0
+	.text
+	.globl	_start
+	.type	_start, %function
+_start:
+	.section __patchable_function_entries,"awo",%progbits,_start
+	.dc.a	.LPFE2
+	.text
+.LPFE2:
+	.byte	0
diff --git a/ld/testsuite/ld-elf/pr25490-6-16.rd b/ld/testsuite/ld-elf/pr25490-6-16.rd
new file mode 100644
index 0000000000..80eda13e65
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr25490-6-16.rd
@@ -0,0 +1,7 @@
+#source: pr25490-6.s
+#ld: --gc-sections -e _start
+#readelf: -SW
+
+#...
+ +\[ *[0-9]+\] __patchable_function_entries +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +0+6 +00 +WAL +[0-9] +0 +[1248]
+#pass
diff --git a/ld/testsuite/ld-elf/pr25490-6-32.rd b/ld/testsuite/ld-elf/pr25490-6-32.rd
new file mode 100644
index 0000000000..37928429c0
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr25490-6-32.rd
@@ -0,0 +1,7 @@
+#source: pr25490-6.s
+#ld: --gc-sections -e _start
+#readelf: -SW
+
+#...
+ +\[ *[0-9]+\] __patchable_function_entries +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +0+c +00 +WAL +[0-9] +0 +[1248]
+#pass
diff --git a/ld/testsuite/ld-elf/pr25490-6-64.rd b/ld/testsuite/ld-elf/pr25490-6-64.rd
new file mode 100644
index 0000000000..a95ca48e02
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr25490-6-64.rd
@@ -0,0 +1,7 @@
+#source: pr25490-6.s
+#ld: --gc-sections -e _start
+#readelf: -SW
+
+#...
+ +\[ *[0-9]+\] __patchable_function_entries +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +0+18 +00 +WAL +[0-9] +0 +[1248]
+#pass
diff --git a/ld/testsuite/ld-elf/pr25490-6.s b/ld/testsuite/ld-elf/pr25490-6.s
new file mode 100644
index 0000000000..43fbc17989
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr25490-6.s
@@ -0,0 +1,30 @@
+	.section .text,"axG",%progbits,bar,comdat
+	.globl	bar
+	.type	bar, %function
+bar:
+	.section __patchable_function_entries,"awo",%progbits,bar
+	.dc.a	.LPFE1
+	.section .text,"axG",%progbits,bar,comdat
+.LPFE1:
+	.byte 0
+	.section .text,"axG",%progbits,foo,comdat
+	.globl	foo
+	.type	foo, %function
+foo:
+	.section __patchable_function_entries,"awo",%progbits,foo,unique,0
+	.dc.a	.LPFE2
+	.section .text,"axG",%progbits,foo,comdat
+.LPFE2:
+	.byte 0
+	.section .text,"axG",%progbits,_start,comdat,unique,1
+	.globl	_start
+	.type	_start, %function
+_start:
+	.section __patchable_function_entries,"awoG",%progbits,_start,_start,comdat,unique,3
+	.dc.a	.LPFE3
+	.section .text,"axG",%progbits,_start,comdat,unique,1
+.LPFE3:
+	.byte 0
+	.section .note,"",%note
+	.dc.a	foo
+	.dc.a	bar


             reply	other threads:[~2020-02-07  2:41 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-07  2:57 gdb-buildbot [this message]
2020-02-07  3:00 ` Failures on Fedora-i686, branch master gdb-buildbot
2020-02-07  3:11 ` Failures on Ubuntu-Aarch64-native-extended-gdbserver-m64, " gdb-buildbot
2020-02-07  3:16 ` Failures on Fedora-x86_64-native-extended-gdbserver-m32, " gdb-buildbot
2020-02-07  3:30 ` Failures on Fedora-x86_64-m64, " gdb-buildbot
2020-02-07  4:17 ` Failures on Fedora-x86_64-cc-with-index, " gdb-buildbot
2020-02-07  4:17 ` Failures on Fedora-x86_64-native-extended-gdbserver-m64, " gdb-buildbot
2020-02-07  4:27 ` Failures on Fedora-x86_64-m32, " gdb-buildbot
2020-02-07  5:18 ` Failures on Ubuntu-Aarch64-native-gdbserver-m64, " gdb-buildbot
2020-02-07  5:44 ` Failures on Fedora-x86_64-native-gdbserver-m32, " gdb-buildbot
2020-02-07  7:10 ` Failures on Fedora-x86_64-native-gdbserver-m64, " gdb-buildbot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=b7d072167715829eed0622616f6ae0182900de3e@gdb-build \
    --to=gdb-buildbot@sergiodj.net \
    --cc=gdb-testers@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).