public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
From: Nick Clifton <nickc@redhat.com>
To: binutils@sourceware.org
Subject: Commit: Running the linker testsuite with clang
Date: Fri, 17 Apr 2020 13:03:37 +0100	[thread overview]
Message-ID: <87eesm5nfq.fsf@redhat.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 1027 bytes --]

Hi Guys,

  We have been able to build the binutils with clang for a while now,
  but there are still problems with using it to run the testsuites.
  So I am applying the patch below to add the use of clang's magic
  CCC_OVERRIDE_OPTIONS environment variable.  This alters the command
  line passed to clang, allowing unsupported options to be dropped, 
  unwanted warnings to be disabled and so on.

  The patch also makes a couple of minor changes to the tests as well,
  in order to fix a couple of problems when using clang.

  Tested with clang and with a lot of gcc-built toolchains.
  
Cheers
  Nick

ld/ChangeLog
2020-04-17  Nick Clifton  <nickc@redhat.com>

	* testsuite/config/default.exp: If not already set then create the
	CCC_OVERRIDE_OPTIONS environment variable to help when running the
	testsuite with clang.
	* testsuite/ld-elf/pr22269-1.c: Add a missing return statement.
	* testsuite/ld-elfvers/vers.exp: Add checks to detect if files
	were built before attempting to copy them.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: clang-ld-testsuite.patch --]
[-- Type: text/x-patch, Size: 4095 bytes --]

diff --git a/ld/testsuite/config/default.exp b/ld/testsuite/config/default.exp
index 64b78cd18a..5b7ca7a939 100644
--- a/ld/testsuite/config/default.exp
+++ b/ld/testsuite/config/default.exp
@@ -95,6 +95,56 @@ if {![info exists CXXFLAGS]} {
     set CXXFLAGS ""
 }
 
+# This allows us to run the linker testsuite with clang as the compilation
+# driver instead of gcc.  The syntax of the overrides are as follows, one
+# per line:
+#
+#  '#': Silence information about the changes to the command line arguments.
+#
+#  '^': Add FOO as a new argument at the beginning of the command line.
+#
+#  '+': Add FOO as a new argument at the end of the command line.
+#
+#  's/XXX/YYY/': Substitute the regular expression XXX with YYY in the command
+#  line.
+#
+#  'xOPTION': Removes all instances of the literal argument OPTION.
+#
+#  'XOPTION': Removes all instances of the literal argument OPTION,
+#  and the following argument.
+#
+#  'Ox': Removes all flags matching 'O' or 'O[sz0-9]' and adds 'Ox'
+#  at the end of the command line.
+#
+# \param OS - The stream to write edit information to.
+# \param Args - The vector of command line arguments.
+# \param Edit - The override command to perform.
+# \param SavedStrings - Set to use for storing string representations.
+
+global env
+# Only set up the environment variable if the user has not already provided one.
+if {! [info exists env(CCC_OVERRIDE_OPTIONS)]} {
+    set env(CCC_OVERRIDE_OPTIONS) "#\
+  +-Wno-unused-command-line-argument \
+  +-Wno-unknown-attributes \
+  +-Wno-tautological-compare \
+  +-Wno-ignored-optimization-argument \
+  +-Wno-deprecated \
+  +-fuse-ld=$ld \
+  x-Wa,--elf-stt-common=yes \
+  x-Wa,-mx86-used-note=no \
+  x-Wa,-mx86-used-note=yes \
+  x-Wa,-madd-bnd-prefix \
+  x-fno-early-inlining \
+  x-fno-toplevel-reorder \
+  x-flto-partition=none \
+  x-feliminate-dwarf2-dups \
+  s/-Wa,-mrelax-relocations=yes,-mx86-used-note=yes/-Wa,-mrelax-relocations=yes/ \
+  s/-Wa,--compress-debug-sections=zlib/-Wa,-compress-debug-sections=zlib/ \
+  s/-Wa,--compress-debug-sections=zlib-gabi/-Wa,-compress-debug-sections=zlib-gabi/ \
+"
+}
+
 # The mips64-*-linux-gnu compiler defaults to the N32 ABI after
 # installed, but to the O32 ABI in the build tree, because of some
 # specs-file hacks.  Make sure we use an ABI that is compatible with
diff --git a/ld/testsuite/ld-elf/pr22269-1.c b/ld/testsuite/ld-elf/pr22269-1.c
index 8197687198..0d3c6ba8ac 100644
--- a/ld/testsuite/ld-elf/pr22269-1.c
+++ b/ld/testsuite/ld-elf/pr22269-1.c
@@ -5,4 +5,5 @@ _start (void)
 {
   if (&foo)
     return foo;
+  return 0;
 }
diff --git a/ld/testsuite/ld-elfvers/vers.exp b/ld/testsuite/ld-elfvers/vers.exp
index 6ab1e75db6..ed48e1a697 100644
--- a/ld/testsuite/ld-elfvers/vers.exp
+++ b/ld/testsuite/ld-elfvers/vers.exp
@@ -668,6 +668,10 @@ proc test_strip_vers_lib { test srclib libname verexp versymexp } {
     global tmpdir
     global objdump
 
+    if {! [file exists $tmpdir/$srclib] } then {
+	fail "$test ($tmpdir/$srclib does not exist)"
+	return	
+    }
     verbose -log "cp $tmpdir/$srclib $tmpdir/$libname.so"
     exec cp $tmpdir/$srclib $tmpdir/$libname.so
 
@@ -903,8 +907,12 @@ build_vers_lib_pic "vers18" vers18.c vers18 vers17.so vers18.map vers18.ver vers
 build_exec "vers19" vers19.c vers19 "-Wl,--no-as-needed,-rpath,.,-rpath-link,." vers18.so vers19.ver vers19.dsym ""
 
 build_vers_lib_no_pic "vers20a" vers20.c vers20a "" vers20.map vers20a.ver vers20.dsym ""
-exec cp $tmpdir/vers20a.so $tmpdir/vers20b.so
-build_vers_lib_no_pic "vers20" vers20.c vers20 "vers20a.so vers20b.so" vers20.map vers20.ver vers20.dsym ""
+if {! [file exists $tmpdir/vers20a.so] } then {
+    fail "Building vers20a.so"
+} else {
+    exec cp $tmpdir/vers20a.so $tmpdir/vers20b.so
+    build_vers_lib_no_pic "vers20" vers20.c vers20 "vers20a.so vers20b.so" vers20.map vers20.ver vers20.dsym ""
+}
 
 # Test .symver override.
 build_vers_lib_pic "vers21" vers21.c vers21 "" vers21.map vers21.ver vers21.dsym vers21.sym

                 reply	other threads:[~2020-04-17 12:03 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=87eesm5nfq.fsf@redhat.com \
    --to=nickc@redhat.com \
    --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).