This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Ignore symbols defined in SHF_EXCLUDE sections


On Wed, Aug 31, 2016 at 2:56 AM, Alan Modra <amodra@gmail.com> wrote:
>         PR 20513
>         * ldlang.c (section_already_linked): Deal with SHF_EXCLUDE sections.
>
> diff --git a/ld/ldlang.c b/ld/ldlang.c
> index aee8720..07c2182 100644
> --- a/ld/ldlang.c
> +++ b/ld/ldlang.c
> @@ -2294,6 +2294,12 @@ section_already_linked (bfd *abfd, asection *sec, void *data)
>        return;
>      }
>
> +  /* Deal with SHF_EXCLUDE ELF sections.  */
> +  if (!bfd_link_relocatable (&link_info)
> +      && (abfd->flags & BFD_PLUGIN) == 0
> +      && (sec->flags & (SEC_GROUP | SEC_KEEP | SEC_EXCLUDE)) == SEC_EXCLUDE)
> +    sec->output_section = bfd_abs_section_ptr;
> +
>    if (!(abfd->flags & DYNAMIC))
>      bfd_section_already_linked (abfd, sec, &link_info);
>  }
>

I checked in this patch to add some tests.

-- 
H.J.
From 252f2bff1fdd10999925b2dd6f2a08f9b0fbaf9e Mon Sep 17 00:00:00 2001
From: "H.J. Lu" <hjl.tools@gmail.com>
Date: Fri, 26 Aug 2016 11:05:23 -0700
Subject: [PATCH] Add tests for PR ld/20513

	PR ld/20513
	* testsuite/ld-elf/pr20513a.d: New file.
	* testsuite/ld-elf/pr20513a.s: Likewise.
	* testsuite/ld-elf/pr20513b.d: Likewise.
	* testsuite/ld-elf/pr20513b.s: Likewise.
	* testsuite/ld-elf/pr20513c.d: Likewise.
	* testsuite/ld-elf/pr20513d.d: Likewise.
	* testsuite/ld-elf/pr20513e.d: Likewise.
	* testsuite/ld-elf/pr20513f.d: Likewise.
---
 ld/testsuite/ld-elf/pr20513a.d |  9 +++++++++
 ld/testsuite/ld-elf/pr20513a.s | 14 ++++++++++++++
 ld/testsuite/ld-elf/pr20513b.d |  9 +++++++++
 ld/testsuite/ld-elf/pr20513b.s | 14 ++++++++++++++
 ld/testsuite/ld-elf/pr20513c.d |  9 +++++++++
 ld/testsuite/ld-elf/pr20513d.d |  9 +++++++++
 ld/testsuite/ld-elf/pr20513e.d |  4 ++++
 ld/testsuite/ld-elf/pr20513f.d |  4 ++++
 8 files changed, 72 insertions(+)
 create mode 100644 ld/testsuite/ld-elf/pr20513a.d
 create mode 100644 ld/testsuite/ld-elf/pr20513a.s
 create mode 100644 ld/testsuite/ld-elf/pr20513b.d
 create mode 100644 ld/testsuite/ld-elf/pr20513b.s
 create mode 100644 ld/testsuite/ld-elf/pr20513c.d
 create mode 100644 ld/testsuite/ld-elf/pr20513d.d
 create mode 100644 ld/testsuite/ld-elf/pr20513e.d
 create mode 100644 ld/testsuite/ld-elf/pr20513f.d

diff --git a/ld/testsuite/ld-elf/pr20513a.d b/ld/testsuite/ld-elf/pr20513a.d
new file mode 100644
index 0000000..4a9ee96
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr20513a.d
@@ -0,0 +1,9 @@
+#source: pr20513a.s
+#source: pr20513b.s
+#ld:
+#readelf: -S --wide
+
+#failif
+#...
+[ 	]*\[.*\][ 	]+\..text\.exclude[ 	]+.*
+#...
diff --git a/ld/testsuite/ld-elf/pr20513a.s b/ld/testsuite/ld-elf/pr20513a.s
new file mode 100644
index 0000000..0f54bb1
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr20513a.s
@@ -0,0 +1,14 @@
+	.section .text.startup,"ax","progbits"
+	.type start,"function"
+	.global start
+start:
+	.type _start,"function"
+	.global _start
+_start:
+	.type __start,"function"
+	.global __start
+__start:
+	.type main,"function"
+	.global main
+main:
+	.long 0
diff --git a/ld/testsuite/ld-elf/pr20513b.d b/ld/testsuite/ld-elf/pr20513b.d
new file mode 100644
index 0000000..73de4ed
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr20513b.d
@@ -0,0 +1,9 @@
+#source: pr20513b.s
+#source: pr20513a.s
+#ld:
+#readelf: -S --wide
+
+#failif
+#...
+[ 	]*\[.*\][ 	]+\..text\.exclude[ 	]+.*
+#...
diff --git a/ld/testsuite/ld-elf/pr20513b.s b/ld/testsuite/ld-elf/pr20513b.s
new file mode 100644
index 0000000..b6741fc
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr20513b.s
@@ -0,0 +1,14 @@
+	.section .text.exclude,"axe","progbits"
+	.type start,"function"
+	.global start
+start:
+	.type _start,"function"
+	.global _start
+_start:
+	.type __start,"function"
+	.global __start
+__start:
+	.type main,"function"
+	.global main
+main:
+	.long 0
diff --git a/ld/testsuite/ld-elf/pr20513c.d b/ld/testsuite/ld-elf/pr20513c.d
new file mode 100644
index 0000000..6a019ef
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr20513c.d
@@ -0,0 +1,9 @@
+#source: pr20513a.s
+#source: pr20513b.s
+#ld: -shared
+#readelf: -S --wide
+
+#failif
+#...
+[ 	]*\[.*\][ 	]+\..text\.exclude[ 	]+.*
+#...
diff --git a/ld/testsuite/ld-elf/pr20513d.d b/ld/testsuite/ld-elf/pr20513d.d
new file mode 100644
index 0000000..9b7199f
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr20513d.d
@@ -0,0 +1,9 @@
+#source: pr20513b.s
+#source: pr20513a.s
+#ld: -shared
+#readelf: -S --wide
+
+#failif
+#...
+[ 	]*\[.*\][ 	]+\..text\.exclude[ 	]+.*
+#...
diff --git a/ld/testsuite/ld-elf/pr20513e.d b/ld/testsuite/ld-elf/pr20513e.d
new file mode 100644
index 0000000..6994652
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr20513e.d
@@ -0,0 +1,4 @@
+#source: pr20513a.s
+#source: pr20513b.s
+#ld: -r
+#error: multiple definition of
diff --git a/ld/testsuite/ld-elf/pr20513f.d b/ld/testsuite/ld-elf/pr20513f.d
new file mode 100644
index 0000000..83043f3
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr20513f.d
@@ -0,0 +1,4 @@
+#source: pr20513b.s
+#source: pr20513a.s
+#ld: -r
+#error: multiple definition of
-- 
2.7.4


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]