[binutils-gdb] elf: Handle the section flag 'o' linked to special sections
H.J. Lu
hjl@sourceware.org
Tue Jan 13 22:59:53 GMT 2026
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=2b17961bfb8b2b0d9701c9c0796a5f5749337fc7
commit 2b17961bfb8b2b0d9701c9c0796a5f5749337fc7
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Sun Jan 11 11:43:40 2026 +0800
elf: Handle the section flag 'o' linked to special sections
Call _bfd_elf_section_from_bfd_section to get the sh_link value from
the section flag 'o' directive, which may point to special sections,
like SHN_ABS or SHN_COMM. Update readelf to print the special section
names in the sh_link field and replace "internal->sh_link > num" with
"internal->sh_link >= num".
bfd/
PR gas/33744
* elf.c (assign_section_numbers): Call
_bfd_elf_section_from_bfd_section to get the sh_link value.
binutils/
PR gas/33744
* readelf.c (special_defined_section_index): New.
(get_32bit_section_headers): Don't warn special section indexes
in the sh_link field.
(get_64bit_section_headers): Likewise.
(process_section_headers): Print special defined section names.
gas/
PR gas/33744
* testsuite/gas/elf/elf.exp: Run PR gas/33744 tests.
* testsuite/gas/elf/sh-link-abs-1.d: New file.
* testsuite/gas/elf/sh-link-abs-2.d: Likewise.
* testsuite/gas/elf/sh-link-abs-3-32.d: Likewise.
* testsuite/gas/elf/sh-link-abs-3-64.d: Likewise.
* testsuite/gas/elf/sh-link-abs-4-32.d: Likewise.
* testsuite/gas/elf/sh-link-abs-4-64.d: Likewise.
* testsuite/gas/elf/sh-link-abs.s: Likewise.
* testsuite/gas/elf/sh-link-common-1.d: Likewise.
* testsuite/gas/elf/sh-link-common-2.d: Likewise.
* testsuite/gas/elf/sh-link-common-3-32.d: Likewise.
* testsuite/gas/elf/sh-link-common-3-64.d: Likewise.
* testsuite/gas/elf/sh-link-common-4-32.d: Likewise.
* testsuite/gas/elf/sh-link-common-4-64.d: Likewise.
* testsuite/gas/elf/sh-link-common.s: Likewise.
* testsuite/gas/elf/sh-link-large-common-1.d: Likewise.
* testsuite/gas/elf/sh-link-large-common-2.d: Likewise.
* testsuite/gas/elf/sh-link-large-common-3.d: Likewise.
* testsuite/gas/elf/sh-link-large-common-4.d: Likewise.
* testsuite/gas/elf/sh-link-large-common.s: Likewise.
Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
Diff:
---
bfd/elf.c | 3 +-
binutils/readelf.c | 122 +++++++++++++++++++++----
gas/testsuite/gas/elf/elf.exp | 19 ++++
gas/testsuite/gas/elf/sh-link-abs-1.d | 6 ++
gas/testsuite/gas/elf/sh-link-abs-2.d | 8 ++
gas/testsuite/gas/elf/sh-link-abs-3-32.d | 6 ++
gas/testsuite/gas/elf/sh-link-abs-3-64.d | 7 ++
gas/testsuite/gas/elf/sh-link-abs-4-32.d | 8 ++
gas/testsuite/gas/elf/sh-link-abs-4-64.d | 9 ++
gas/testsuite/gas/elf/sh-link-abs.s | 6 ++
gas/testsuite/gas/elf/sh-link-common-1.d | 6 ++
gas/testsuite/gas/elf/sh-link-common-2.d | 8 ++
gas/testsuite/gas/elf/sh-link-common-3-32.d | 6 ++
gas/testsuite/gas/elf/sh-link-common-3-64.d | 7 ++
gas/testsuite/gas/elf/sh-link-common-4-32.d | 8 ++
gas/testsuite/gas/elf/sh-link-common-4-64.d | 9 ++
gas/testsuite/gas/elf/sh-link-common.s | 6 ++
gas/testsuite/gas/elf/sh-link-large-common-1.d | 8 ++
gas/testsuite/gas/elf/sh-link-large-common-2.d | 7 ++
gas/testsuite/gas/elf/sh-link-large-common-3.d | 10 ++
gas/testsuite/gas/elf/sh-link-large-common-4.d | 9 ++
gas/testsuite/gas/elf/sh-link-large-common.s | 6 ++
22 files changed, 263 insertions(+), 21 deletions(-)
diff --git a/bfd/elf.c b/bfd/elf.c
index 8b6dd3ce370..1177c3c3016 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -4333,7 +4333,8 @@ assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info)
return false;
}
s = s->output_section;
- d->this_hdr.sh_link = elf_section_data (s)->this_idx;
+ d->this_hdr.sh_link
+ = _bfd_elf_section_from_bfd_section (abfd, s);
}
}
diff --git a/binutils/readelf.c b/binutils/readelf.c
index d26e2bfa7b9..5b7fc0dc1de 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -1010,6 +1010,50 @@ is_ia64_vms (Filedata * filedata)
&& filedata->file_header.e_ident[EI_OSABI] == ELFOSABI_OPENVMS;
}
+/* Return true if NDX is a special defined section index. */
+
+static bool
+special_defined_section_index (Filedata *filedata, size_t ndx)
+{
+ if (ndx == SHN_ABS || ndx == SHN_COMMON)
+ return true;
+
+ if (filedata != NULL)
+ switch (filedata->file_header.e_machine)
+ {
+ case EM_MIPS:
+ if (ndx == SHN_MIPS_SCOMMON)
+ return true;
+ break;
+
+ case EM_TI_C6000:
+ if (ndx == SHN_TIC6X_SCOMMON)
+ return true;
+ break;
+
+ case EM_X86_64:
+ case EM_L1OM:
+ case EM_K1OM:
+ if (ndx == SHN_X86_64_LCOMMON)
+ return true;
+ break;
+
+ case EM_IA_64:
+ if (filedata->file_header.e_ident[EI_OSABI] == ELFOSABI_HPUX
+ && ndx == SHN_IA_64_ANSI_COMMON)
+ return true;
+
+ if (is_ia64_vms (filedata) && ndx == SHN_IA_64_VMS_SYMVEC)
+ return true;
+ break;
+
+ default:
+ break;
+ }
+
+ return false;
+}
+
static const char *
printable_section_name_from_index (Filedata * filedata,
size_t ndx,
@@ -7833,7 +7877,10 @@ get_32bit_section_headers (Filedata * filedata, bool probe)
internal->sh_info = BYTE_GET (shdrs[i].sh_info);
internal->sh_addralign = BYTE_GET (shdrs[i].sh_addralign);
internal->sh_entsize = BYTE_GET (shdrs[i].sh_entsize);
- if (!probe && internal->sh_link > num)
+ if (!probe
+ && internal->sh_link >= num
+ && !special_defined_section_index (filedata,
+ internal->sh_link))
warn (_("Section %u has an out of range sh_link value of %u\n"), i, internal->sh_link);
if (!probe && internal->sh_flags & SHF_INFO_LINK && internal->sh_info > num)
warn (_("Section %u has an out of range sh_info value of %u\n"), i, internal->sh_info);
@@ -7905,7 +7952,10 @@ get_64bit_section_headers (Filedata * filedata, bool probe)
internal->sh_info = BYTE_GET (shdrs[i].sh_info);
internal->sh_offset = BYTE_GET (shdrs[i].sh_offset);
internal->sh_addralign = BYTE_GET (shdrs[i].sh_addralign);
- if (!probe && internal->sh_link > num)
+ if (!probe
+ && internal->sh_link >= num
+ && !special_defined_section_index (filedata,
+ internal->sh_link))
warn (_("Section %u has an out of range sh_link value of %u\n"), i, internal->sh_link);
if (!probe && internal->sh_flags & SHF_INFO_LINK && internal->sh_info > num)
warn (_("Section %u has an out of range sh_info value of %u\n"), i, internal->sh_info);
@@ -9004,6 +9054,9 @@ process_section_headers (Filedata * filedata)
printf (do_wide ? " %-15s " : " %-15.15s ",
get_section_type_name (filedata, section->sh_type));
+ bool special_defined_section
+ = special_defined_section_index (filedata, section->sh_link);
+
if (is_32bit_elf)
{
const char * link_too_big = NULL;
@@ -9020,7 +9073,8 @@ process_section_headers (Filedata * filedata)
else
printf (" %3s ", get_elf_section_flags (filedata, section->sh_flags));
- if (section->sh_link >= filedata->file_header.e_shnum)
+ if (!special_defined_section
+ && section->sh_link >= filedata->file_header.e_shnum)
{
link_too_big = "";
/* The sh_link value is out of range. Normally this indicates
@@ -9046,20 +9100,27 @@ process_section_headers (Filedata * filedata)
}
}
+ if (special_defined_section)
+ printf ("%2s ",
+ printable_section_name_from_index (filedata,
+ section->sh_link,
+ NULL));
+
if (do_section_details)
{
- if (link_too_big != NULL && * link_too_big)
- printf ("<%s> ", link_too_big);
- else
- printf ("%2u ", section->sh_link);
- printf ("%3u %2lu\n", section->sh_info,
- (unsigned long) section->sh_addralign);
+ if (!special_defined_section)
+ {
+ if (link_too_big != NULL && * link_too_big)
+ printf ("<%s> ", link_too_big);
+ else
+ printf ("%2u ", section->sh_link);
+ }
}
- else
- printf ("%2u %3u %2lu\n",
- section->sh_link,
- section->sh_info,
- (unsigned long) section->sh_addralign);
+ else if (!special_defined_section)
+ printf ("%2u ", section->sh_link);
+
+ printf ("%3u %2lu\n", section->sh_info,
+ (unsigned long) section->sh_addralign);
if (link_too_big && ! * link_too_big)
warn (_("section %u: sh_link value of %u is larger than the number of sections\n"),
@@ -9096,9 +9157,17 @@ process_section_headers (Filedata * filedata)
if (do_section_details)
fputs (" ", stdout);
else
- printf (" %3s ", get_elf_section_flags (filedata, section->sh_flags));
-
- printf ("%2u %3u ", section->sh_link, section->sh_info);
+ printf (" %3s ", get_elf_section_flags (filedata,
+ section->sh_flags));
+
+ if (special_defined_section)
+ printf ("%2s ",
+ printable_section_name_from_index (filedata,
+ section->sh_link,
+ NULL));
+ else
+ printf ("%2u ", section->sh_link);
+ printf ("%3u ", section->sh_info);
if ((unsigned long) section->sh_addralign == section->sh_addralign)
printf ("%2lu\n", (unsigned long) section->sh_addralign);
@@ -9119,7 +9188,13 @@ process_section_headers (Filedata * filedata)
printf (" ");
print_vma (section->sh_offset, LONG_HEX);
}
- printf (" %u\n ", section->sh_link);
+ if (special_defined_section)
+ printf (" %s\n ",
+ printable_section_name_from_index (filedata,
+ section->sh_link,
+ NULL));
+ else
+ printf (" %u\n ", section->sh_link);
print_vma (section->sh_size, LONG_HEX);
putchar (' ');
print_vma (section->sh_entsize, LONG_HEX);
@@ -9146,8 +9221,15 @@ process_section_headers (Filedata * filedata)
printf (" %3s ", get_elf_section_flags (filedata, section->sh_flags));
- printf (" %2u %3u %lu\n",
- section->sh_link,
+ if (special_defined_section)
+ printf (" %2s",
+ printable_section_name_from_index (filedata,
+ section->sh_link,
+ NULL));
+ else
+ printf (" %2u",
+ section->sh_link);
+ printf (" %3u %lu\n",
section->sh_info,
(unsigned long) section->sh_addralign);
}
diff --git a/gas/testsuite/gas/elf/elf.exp b/gas/testsuite/gas/elf/elf.exp
index 35e06ce58b3..b4b4272ab9f 100644
--- a/gas/testsuite/gas/elf/elf.exp
+++ b/gas/testsuite/gas/elf/elf.exp
@@ -290,6 +290,25 @@ if { [is_elf_format] } then {
run_dump_test "section28"
run_dump_test "section29"
run_dump_test "section30" $dump_opts
+ run_dump_test "sh-link-abs-1"
+ run_dump_test "sh-link-abs-2"
+ run_dump_test "sh-link-common-1"
+ run_dump_test "sh-link-common-2"
+ if [is_elf64 tmpdir/section30.o] {
+ run_dump_test "sh-link-abs-3-64"
+ run_dump_test "sh-link-abs-4-64"
+ run_dump_test "sh-link-common-3-64"
+ run_dump_test "sh-link-common-4-64"
+ run_dump_test "sh-link-large-common-1"
+ run_dump_test "sh-link-large-common-2"
+ run_dump_test "sh-link-large-common-3"
+ run_dump_test "sh-link-large-common-4"
+ } else {
+ run_dump_test "sh-link-abs-3-32"
+ run_dump_test "sh-link-abs-4-32"
+ run_dump_test "sh-link-common-3-32"
+ run_dump_test "sh-link-common-4-32"
+ }
run_dump_test "sh-link-zero"
run_dump_test "string"
run_dump_test "size"
diff --git a/gas/testsuite/gas/elf/sh-link-abs-1.d b/gas/testsuite/gas/elf/sh-link-abs-1.d
new file mode 100644
index 00000000000..7010df0425f
--- /dev/null
+++ b/gas/testsuite/gas/elf/sh-link-abs-1.d
@@ -0,0 +1,6 @@
+#source: sh-link-abs.s
+#readelf: -SW
+
+#...
+ +\[ *[0-9]+\] +__patchable_function_entries +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +0+[248] +0+ +WAL +ABS +0 +1
+#pass
diff --git a/gas/testsuite/gas/elf/sh-link-abs-2.d b/gas/testsuite/gas/elf/sh-link-abs-2.d
new file mode 100644
index 00000000000..e3058a97288
--- /dev/null
+++ b/gas/testsuite/gas/elf/sh-link-abs-2.d
@@ -0,0 +1,8 @@
+#source: sh-link-abs.s
+#readelf: -tW
+
+#...
+ +\[ *[0-9]+\] +__patchable_function_entries
+ +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +0+[248] +0+ +ABS +0 +1
+ +\[0+83\]: WRITE, ALLOC, LINK ORDER
+#pass
diff --git a/gas/testsuite/gas/elf/sh-link-abs-3-32.d b/gas/testsuite/gas/elf/sh-link-abs-3-32.d
new file mode 100644
index 00000000000..efac2f115fc
--- /dev/null
+++ b/gas/testsuite/gas/elf/sh-link-abs-3-32.d
@@ -0,0 +1,6 @@
+#source: sh-link-abs.s
+#readelf: -S
+
+#...
+ +\[ *[0-9]+\] +__patchable_\[\.\.\.\] +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +0+[248] +0+ +WAL +ABS +0 +1
+#pass
diff --git a/gas/testsuite/gas/elf/sh-link-abs-3-64.d b/gas/testsuite/gas/elf/sh-link-abs-3-64.d
new file mode 100644
index 00000000000..5724d27b2c9
--- /dev/null
+++ b/gas/testsuite/gas/elf/sh-link-abs-3-64.d
@@ -0,0 +1,7 @@
+#source: sh-link-abs.s
+#readelf: -S
+
+#...
+ +\[ *[0-9]+\] +__patchable_\[\.\.\.\] +PROGBITS +[0-9a-f]+ +[0-9a-f]+
+ +0+[248] +0+ +WAL +ABS +0 +1
+#pass
diff --git a/gas/testsuite/gas/elf/sh-link-abs-4-32.d b/gas/testsuite/gas/elf/sh-link-abs-4-32.d
new file mode 100644
index 00000000000..31387c4b7f2
--- /dev/null
+++ b/gas/testsuite/gas/elf/sh-link-abs-4-32.d
@@ -0,0 +1,8 @@
+#source: sh-link-abs.s
+#readelf: -t
+
+#...
+ +\[ *[0-9]+\] +__patchable_function_entries
+ +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +0+[248] +0+ +ABS +0 +1
+ +\[0+83\]: WRITE, ALLOC, LINK ORDER
+#pass
diff --git a/gas/testsuite/gas/elf/sh-link-abs-4-64.d b/gas/testsuite/gas/elf/sh-link-abs-4-64.d
new file mode 100644
index 00000000000..d0ae74d01d5
--- /dev/null
+++ b/gas/testsuite/gas/elf/sh-link-abs-4-64.d
@@ -0,0 +1,9 @@
+#source: sh-link-abs.s
+#readelf: -t
+
+#...
+ +\[ *[0-9]+\] +__patchable_function_entries
+ +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +ABS
+ +0+[248] +0+ +0 +1
+ +\[0+83\]: WRITE, ALLOC, LINK ORDER
+#pass
diff --git a/gas/testsuite/gas/elf/sh-link-abs.s b/gas/testsuite/gas/elf/sh-link-abs.s
new file mode 100644
index 00000000000..7094c770299
--- /dev/null
+++ b/gas/testsuite/gas/elf/sh-link-abs.s
@@ -0,0 +1,6 @@
+ .section __patchable_function_entries,"awo",%progbits,foo
+ .dc.a .LPFE1
+ .text
+.LPFE1:
+ .byte 0
+ .set foo,0x1000
diff --git a/gas/testsuite/gas/elf/sh-link-common-1.d b/gas/testsuite/gas/elf/sh-link-common-1.d
new file mode 100644
index 00000000000..1e042efbc17
--- /dev/null
+++ b/gas/testsuite/gas/elf/sh-link-common-1.d
@@ -0,0 +1,6 @@
+#source: sh-link-common.s
+#readelf: -SW
+
+#...
+ +\[ *[0-9]+\] +__patchable_function_entries +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +0+[248] +0+ +WAL +COM +0 +1
+#pass
diff --git a/gas/testsuite/gas/elf/sh-link-common-2.d b/gas/testsuite/gas/elf/sh-link-common-2.d
new file mode 100644
index 00000000000..aaed278bccf
--- /dev/null
+++ b/gas/testsuite/gas/elf/sh-link-common-2.d
@@ -0,0 +1,8 @@
+#source: sh-link-common.s
+#readelf: -tW
+
+#...
+ +\[ *[0-9]+\] +__patchable_function_entries
+ +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +0+[248] +0+ +COM +0 +1
+ +\[0+83\]: WRITE, ALLOC, LINK ORDER
+#pass
diff --git a/gas/testsuite/gas/elf/sh-link-common-3-32.d b/gas/testsuite/gas/elf/sh-link-common-3-32.d
new file mode 100644
index 00000000000..e2ca20f447f
--- /dev/null
+++ b/gas/testsuite/gas/elf/sh-link-common-3-32.d
@@ -0,0 +1,6 @@
+#source: sh-link-common.s
+#readelf: -S
+
+#...
+ +\[ *[0-9]+\] +__patchable_\[\.\.\.\] +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +0+[248] +0+ +WAL +COM +0 +1
+#pass
diff --git a/gas/testsuite/gas/elf/sh-link-common-3-64.d b/gas/testsuite/gas/elf/sh-link-common-3-64.d
new file mode 100644
index 00000000000..86a2b9f7f39
--- /dev/null
+++ b/gas/testsuite/gas/elf/sh-link-common-3-64.d
@@ -0,0 +1,7 @@
+#source: sh-link-common.s
+#readelf: -S
+
+#...
+ +\[ *[0-9]+\] +__patchable_\[\.\.\.\] +PROGBITS +[0-9a-f]+ +[0-9a-f]+
+ +0+[248] +0+ +WAL +COM +0 +1
+#pass
diff --git a/gas/testsuite/gas/elf/sh-link-common-4-32.d b/gas/testsuite/gas/elf/sh-link-common-4-32.d
new file mode 100644
index 00000000000..ad0bb1b8193
--- /dev/null
+++ b/gas/testsuite/gas/elf/sh-link-common-4-32.d
@@ -0,0 +1,8 @@
+#source: sh-link-common.s
+#readelf: -t
+
+#...
+ +\[ *[0-9]+\] +__patchable_function_entries
+ +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +0+[248] +0+ +COM +0 +1
+ +\[0+83\]: WRITE, ALLOC, LINK ORDER
+#pass
diff --git a/gas/testsuite/gas/elf/sh-link-common-4-64.d b/gas/testsuite/gas/elf/sh-link-common-4-64.d
new file mode 100644
index 00000000000..4637b72883b
--- /dev/null
+++ b/gas/testsuite/gas/elf/sh-link-common-4-64.d
@@ -0,0 +1,9 @@
+#source: sh-link-common.s
+#readelf: -t
+
+#...
+ +\[ *[0-9]+\] +__patchable_function_entries
+ +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +COM
+ +0+[248] +0+ +0 +1
+ +\[0+83\]: WRITE, ALLOC, LINK ORDER
+#pass
diff --git a/gas/testsuite/gas/elf/sh-link-common.s b/gas/testsuite/gas/elf/sh-link-common.s
new file mode 100644
index 00000000000..84ec3e446df
--- /dev/null
+++ b/gas/testsuite/gas/elf/sh-link-common.s
@@ -0,0 +1,6 @@
+ .section __patchable_function_entries,"awo",%progbits,foo
+ .dc.a .LPFE1
+ .text
+.LPFE1:
+ .byte 0
+ .comm foo,8
diff --git a/gas/testsuite/gas/elf/sh-link-large-common-1.d b/gas/testsuite/gas/elf/sh-link-large-common-1.d
new file mode 100644
index 00000000000..acf238c8d1c
--- /dev/null
+++ b/gas/testsuite/gas/elf/sh-link-large-common-1.d
@@ -0,0 +1,8 @@
+#source: sh-link-large-common.s
+#readelf: -S
+#target: x86_64-*-*
+
+#...
+ +\[ *[0-9]+\] +__patchable_\[\.\.\.\] +PROGBITS +[0-9a-f]+ +[0-9a-f]+
+ +0+[248] +0+ +WAL +LARGE_COM +0 +1
+#pass
diff --git a/gas/testsuite/gas/elf/sh-link-large-common-2.d b/gas/testsuite/gas/elf/sh-link-large-common-2.d
new file mode 100644
index 00000000000..36d983761b7
--- /dev/null
+++ b/gas/testsuite/gas/elf/sh-link-large-common-2.d
@@ -0,0 +1,7 @@
+#source: sh-link-large-common.s
+#readelf: -SW
+#target: x86_64-*-*
+
+#...
+ +\[ *[0-9]+\] +__patchable_function_entries +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +0+[248] +0+ +WAL +LARGE_COM +0 +1
+#pass
diff --git a/gas/testsuite/gas/elf/sh-link-large-common-3.d b/gas/testsuite/gas/elf/sh-link-large-common-3.d
new file mode 100644
index 00000000000..d738a90482e
--- /dev/null
+++ b/gas/testsuite/gas/elf/sh-link-large-common-3.d
@@ -0,0 +1,10 @@
+#source: sh-link-large-common.s
+#readelf: -t
+#target: x86_64-*-*
+
+#...
+ +\[ *[0-9]+\] +__patchable_function_entries
+ +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +LARGE_COM
+ +0+[248] +0+ +0 +1
+ +\[0+83\]: WRITE, ALLOC, LINK ORDER
+#pass
diff --git a/gas/testsuite/gas/elf/sh-link-large-common-4.d b/gas/testsuite/gas/elf/sh-link-large-common-4.d
new file mode 100644
index 00000000000..0101e54da7a
--- /dev/null
+++ b/gas/testsuite/gas/elf/sh-link-large-common-4.d
@@ -0,0 +1,9 @@
+#source: sh-link-large-common.s
+#readelf: -tW
+#target: x86_64-*-*
+
+#...
+ +\[ *[0-9]+\] +__patchable_function_entries
+ +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +0+[248] +0+ +LARGE_COM +0 +1
+ +\[0+83\]: WRITE, ALLOC, LINK ORDER
+#pass
diff --git a/gas/testsuite/gas/elf/sh-link-large-common.s b/gas/testsuite/gas/elf/sh-link-large-common.s
new file mode 100644
index 00000000000..b2ef554dbc9
--- /dev/null
+++ b/gas/testsuite/gas/elf/sh-link-large-common.s
@@ -0,0 +1,6 @@
+ .section __patchable_function_entries,"awo",%progbits,foo
+ .dc.a .LPFE1
+ .text
+.LPFE1:
+ .byte 0
+ .largecomm foo,30,8
More information about the Binutils-cvs
mailing list