aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gold/ChangeLog10
-rw-r--r--gold/gold.cc2
-rw-r--r--gold/options.cc6
-rw-r--r--gold/testsuite/Makefile.am4
-rw-r--r--gold/testsuite/Makefile.in27
-rwxr-xr-xgold/testsuite/empty_command_line_test.sh43
6 files changed, 81 insertions, 11 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog
index e4b890e..bb84efa 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,3 +1,13 @@
+2017-12-01 Benjamin Peterson <bp@benjamin.pe>
+
+ PR gold/22406
+ * gold.cc (queue_initial_tasks) Check for number of real input files.
+ * options.cc (Command_line::process) Check for unterminated --start-lib
+ options.
+ * testsuite/Makefile.am: Add new test script.
+ * testsuite/Makefile.in: Regenerate.
+ * testsuite/check_empty_command_lines.sh: New test script.
+
2017-11-17 Stephen Crane <sjc@immunant.com>
PR gold/22448
diff --git a/gold/gold.cc b/gold/gold.cc
index a76d155..3916f89 100644
--- a/gold/gold.cc
+++ b/gold/gold.cc
@@ -175,7 +175,7 @@ queue_initial_tasks(const General_options& options,
Workqueue* workqueue, Input_objects* input_objects,
Symbol_table* symtab, Layout* layout, Mapfile* mapfile)
{
- if (cmdline.begin() == cmdline.end())
+ if (cmdline.number_of_input_files() == 0)
{
bool is_ok = false;
if (options.printed_version())
diff --git a/gold/options.cc b/gold/options.cc
index ed63b6f..f54fb9b 100644
--- a/gold/options.cc
+++ b/gold/options.cc
@@ -1569,6 +1569,12 @@ Command_line::process(int argc, const char** argv)
usage();
}
+ if (this->inputs_.in_lib())
+ {
+ fprintf(stderr, _("%s: missing lib end\n"), program_name);
+ usage();
+ }
+
// Normalize the options and ensure they don't contradict each other.
this->options_.finalize();
}
diff --git a/gold/testsuite/Makefile.am b/gold/testsuite/Makefile.am
index d8426db..5f7f66f 100644
--- a/gold/testsuite/Makefile.am
+++ b/gold/testsuite/Makefile.am
@@ -157,6 +157,10 @@ endif NATIVE_OR_CROSS_LINKER
if NATIVE_LINKER
if GCC
+# Test empty command line error conditions.
+check_SCRIPTS += empty_command_line_test.sh
+empty_command_line_test.sh: gcctestdir/ld
+
# Each of these .o's is a useful, small complete program. They're
# particularly useful for making sure ld-new's flags do what they're
# supposed to (hence their names), but are used for many tests that
diff --git a/gold/testsuite/Makefile.in b/gold/testsuite/Makefile.in
index c42c472..9bb3b56 100644
--- a/gold/testsuite/Makefile.in
+++ b/gold/testsuite/Makefile.in
@@ -74,7 +74,20 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
@NATIVE_OR_CROSS_LINKER_TRUE@am__append_1 = object_unittest \
@NATIVE_OR_CROSS_LINKER_TRUE@ binary_unittest leb128_unittest \
@NATIVE_OR_CROSS_LINKER_TRUE@ overflow_unittest
-@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_2 = incremental_test.sh \
+
+# ---------------------------------------------------------------------
+# These tests test the output of gold (end-to-end tests). In
+# particular, they make sure that gold can link "difficult" object
+# files, and the resulting object files run correctly. These can only
+# run if we've built ld-new for the native architecture (that is,
+# we're not cross-compiling it), since we run ld-new as part of these
+# tests. We use the gcc-specific flag '-B' to use our linker instead
+# of the default linker, which is why we only run our tests under gcc.
+
+# Test empty command line error conditions.
+@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_2 = \
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ empty_command_line_test.sh \
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test.sh \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ gc_comdat_test.sh gc_tls_test.sh \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ gc_orphan_section_test.sh \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ pr14265.sh pr20717.sh \
@@ -5137,6 +5150,8 @@ check-html recheck-html:
rv=0; $(MAKE) $(AM_MAKEFLAGS) $$target || rv=$$?; \
$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_HTML) TEST_LOGS= || exit 4; \
exit $$rv
+empty_command_line_test.sh.log: empty_command_line_test.sh
+ @p='empty_command_line_test.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post)
incremental_test.sh.log: incremental_test.sh
@p='incremental_test.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post)
gc_comdat_test.sh.log: gc_comdat_test.sh
@@ -5906,15 +5921,7 @@ uninstall-am:
@GCC_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ (cd gcctestdir && $(LN_S) $(abs_top_builddir)/../gas/as-new as)
@NATIVE_OR_CROSS_LINKER_TRUE@overflow_unittest.o: overflow_unittest.cc
@NATIVE_OR_CROSS_LINKER_TRUE@ $(CXXCOMPILE) -O3 -c -o $@ $<
-
-# ---------------------------------------------------------------------
-# These tests test the output of gold (end-to-end tests). In
-# particular, they make sure that gold can link "difficult" object
-# files, and the resulting object files run correctly. These can only
-# run if we've built ld-new for the native architecture (that is,
-# we're not cross-compiling it), since we run ld-new as part of these
-# tests. We use the gcc-specific flag '-B' to use our linker instead
-# of the default linker, which is why we only run our tests under gcc.
+@GCC_TRUE@@NATIVE_LINKER_TRUE@empty_command_line_test.sh: gcctestdir/ld
# Each of these .o's is a useful, small complete program. They're
# particularly useful for making sure ld-new's flags do what they're
diff --git a/gold/testsuite/empty_command_line_test.sh b/gold/testsuite/empty_command_line_test.sh
new file mode 100755
index 0000000..ab6a0d8
--- /dev/null
+++ b/gold/testsuite/empty_command_line_test.sh
@@ -0,0 +1,43 @@
+#!/bin/sh
+
+# empty_command_line_test.sh -- test various command lines with no inputs
+
+# Copyright (C) 2017 Free Software Foundation, Inc.
+# Written by Benjamin Peterson <bp@benjamin.pe>
+
+# This file is part of gold.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+check()
+{
+ expected_msg="$1"
+ shift
+ echo "checking empty command line '$@'"
+ err=$(gcctestdir/ld "$@" 2>&1)
+ if [ $? != 1 ]; then
+ echo "gold didn't fail"
+ exit 1
+ fi
+ echo "$err" | grep -q "$expected_msg" || {
+ echo "unexpected error message: $err"
+ exit 1
+ }
+}
+
+check "no input files"
+check "missing lib end" --start-lib
+check "missing group end" --start-group