public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
From: Michael Matz <matz@suse.de>
To: binutils@sourceware.org
Subject: [PATCH 3/3] Add testcase ld-elf/merge4
Date: Wed, 18 Jan 2023 17:32:24 +0000 (UTC)	[thread overview]
Message-ID: <alpine.LSU.2.20.2301181732140.30340@wotan.suse.de> (raw)

to check a situation that once failed with the new section merging
when it mishandled offsets pointing into alignment padding in mergable
string sections (i.e. pointing to zeros).  It made bootstrap.exp fail
but that depends on many factors to actually go wrong so this is a more
explicit variant of it.
---
 ld/testsuite/ld-elf/elf.exp    |  6 ++++++
 ld/testsuite/ld-elf/merge4.out |  3 +++
 ld/testsuite/ld-elf/merge4a.c  | 23 +++++++++++++++++++++++
 ld/testsuite/ld-elf/merge4b.s  | 23 +++++++++++++++++++++++
 4 files changed, 55 insertions(+)
 create mode 100644 ld/testsuite/ld-elf/merge4.out
 create mode 100644 ld/testsuite/ld-elf/merge4a.c
 create mode 100644 ld/testsuite/ld-elf/merge4b.s

diff --git a/ld/testsuite/ld-elf/elf.exp b/ld/testsuite/ld-elf/elf.exp
index a3a8994749d..1a160d084e0 100644
--- a/ld/testsuite/ld-elf/elf.exp
+++ b/ld/testsuite/ld-elf/elf.exp
@@ -607,4 +607,10 @@ run_ld_link_exec_tests [list \
     ] \
 ]
 
+set merge_exec_tests {
+    {"merge4" "" ""
+	{merge4a.c merge4b.s} "merge4" "merge4.out"}
+}
+run_ld_link_exec_tests $merge_exec_tests
+
 catch "exec rm -f tmpdir/preinit tmpdir/init tmpdir/fini tmpdir/init-mixed" status
diff --git a/ld/testsuite/ld-elf/merge4.out b/ld/testsuite/ld-elf/merge4.out
new file mode 100644
index 00000000000..92c1b71f712
--- /dev/null
+++ b/ld/testsuite/ld-elf/merge4.out
@@ -0,0 +1,3 @@
+1: foobar
+2: 
+3: blabla
diff --git a/ld/testsuite/ld-elf/merge4a.c b/ld/testsuite/ld-elf/merge4a.c
new file mode 100644
index 00000000000..133303e11ac
--- /dev/null
+++ b/ld/testsuite/ld-elf/merge4a.c
@@ -0,0 +1,23 @@
+extern const char * getstr3(int);
+extern int printf (const char *, ...);
+
+extern const char *addr_of_str;
+extern const char *addr_of_str2;
+
+/* "foobar" needs to be a string literal, so that it's put into
+   a mergable string section, then merged with the "foobar" from merge4b.s
+   and then (when the linker is buggy) doesn't cover the additional
+   nul byte after "foobar" in the asm source (which addr_of_str2 is supposed
+   to point into.  */
+const char * getstr3(int i)
+{
+  return i ? "blabla" : "foobar";
+}
+
+int main(void)
+{
+  printf ("1: %s\n", addr_of_str);
+  printf ("2: %s\n", addr_of_str2);
+  printf ("3: %s\n", getstr3(1));
+  return 0;
+}
diff --git a/ld/testsuite/ld-elf/merge4b.s b/ld/testsuite/ld-elf/merge4b.s
new file mode 100644
index 00000000000..d4b66aab5e6
--- /dev/null
+++ b/ld/testsuite/ld-elf/merge4b.s
@@ -0,0 +1,23 @@
+/* Check that pointing into padding zeros of string sections works. */
+	.section	.rodata.str1.1,"aMS",@progbits,1
+	.string ""
+.LC0:
+	.string	"foobar"
+1:
+	.string ""
+	.string "whatever"
+	.section .data
+	.globl addr_of_str
+	.type addr_of_str, @object
+addr_of_str:
+	.dc.a str
+	.globl addr_of_str2
+	.type addr_of_str2, @object
+addr_of_str2:
+	.dc.a 1b
+	.section	.rodata
+	.type	str, @object
+	.size	str, 7
+str:
+	.string	"foobar"
+	.section	.note.GNU-stack,"",@progbits
-- 
2.36.1

                 reply	other threads:[~2023-01-18 17:32 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=alpine.LSU.2.20.2301181732140.30340@wotan.suse.de \
    --to=matz@suse.de \
    --cc=binutils@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).