aboutsummaryrefslogtreecommitdiff
path: root/ld/testsuite/ld-elf
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2024-01-24 13:53:11 -0800
committerH.J. Lu <hjl.tools@gmail.com>2024-01-25 05:42:04 -0800
commit3eb33b8875a032678c375a76f689f928f57dfb15 (patch)
treefa521d89416ecbcd97e19ab28cf42ba0d351c180 /ld/testsuite/ld-elf
parent726f209eb1b05842d816eac8b0b8f9c7f6cd9fbc (diff)
downloadgdb-3eb33b8875a032678c375a76f689f928f57dfb15.zip
gdb-3eb33b8875a032678c375a76f689f928f57dfb15.tar.gz
gdb-3eb33b8875a032678c375a76f689f928f57dfb15.tar.bz2
ld: Improve --fatal-warnings for unknown command-line options
There are 2 problems with --fatal-warnings for unknown command-line options: 1. --fatal-warnings doesn't trigger an error for an unknown command-line option when --fatal-warnings is the last command-line option. 2. When --fatal-warnings triggers an error for an unknown command-line option, the message says that the unknown command-line option is ignored. This patch queues unknown command-line option warnings and outputs queued command-line option warnings after all command-line options have been processed so that --fatal-warnings can work for unknown command-line options regardless of the order of --fatal-warnings. When --fatal-warnings is used, the linker message is changed from ld: warning: -z bad-option ignored to ld: error: unsupported option: -z bad-option The above also applies to "-z dynamic-undefined-weak" when the known "-z dynamic-undefined-weak" option is ignored. PR ld/31289 * ldelf.c (ldelf_after_parse): Use queue_unknown_cmdline_warning to warn the ignored -z dynamic-undefined-weak option. * ldmain.c (main): Call output_unknown_cmdline_warnings after calling ldemul_after_parse. * ldmisc.c (CMDLINE_WARNING_SIZE): New. (cmdline_warning_list): Likewise. (cmdline_warning_head): Likewise. (cmdline_warning_tail): Likewise. (queue_unknown_cmdline_warning): Likewise. (output_unknown_cmdline_warnings): Likewise. * ldmisc.h (queue_unknown_cmdline_warning): Likewise. (output_unknown_cmdline_warnings): Likewise. * emultempl/elf.em (gld${EMULATION_NAME}_handle_option): Use queue_unknown_cmdline_warning to warn unknown -z option. * testsuite/ld-elf/fatal-warnings-1a.d: New file. * testsuite/ld-elf/fatal-warnings-1b.d: Likewise. * testsuite/ld-elf/fatal-warnings-2a.d: Likewise. * testsuite/ld-elf/fatal-warnings-2b.d: Likewise. * testsuite/ld-elf/fatal-warnings-3a.d: Likewise. * testsuite/ld-elf/fatal-warnings-3b.d: Likewise. * testsuite/ld-elf/fatal-warnings-4a.d: Likewise. * testsuite/ld-elf/fatal-warnings-4b.d: Likewise.
Diffstat (limited to 'ld/testsuite/ld-elf')
-rw-r--r--ld/testsuite/ld-elf/fatal-warnings-1a.d6
-rw-r--r--ld/testsuite/ld-elf/fatal-warnings-1b.d6
-rw-r--r--ld/testsuite/ld-elf/fatal-warnings-2a.d6
-rw-r--r--ld/testsuite/ld-elf/fatal-warnings-2b.d6
-rw-r--r--ld/testsuite/ld-elf/fatal-warnings-3a.d6
-rw-r--r--ld/testsuite/ld-elf/fatal-warnings-3b.d6
-rw-r--r--ld/testsuite/ld-elf/fatal-warnings-4a.d6
-rw-r--r--ld/testsuite/ld-elf/fatal-warnings-4b.d6
8 files changed, 48 insertions, 0 deletions
diff --git a/ld/testsuite/ld-elf/fatal-warnings-1a.d b/ld/testsuite/ld-elf/fatal-warnings-1a.d
new file mode 100644
index 0000000..d669392
--- /dev/null
+++ b/ld/testsuite/ld-elf/fatal-warnings-1a.d
@@ -0,0 +1,6 @@
+#PR ld/31289
+#source: pr22269.s
+#ld: -pie --no-dynamic-linker --fatal-warnings -z dynamic-undefined-weak
+#readelf: -r -x .data.rel.ro
+#error: unsupported option: -z dynamic-undefined-weak
+#target: *-*-linux* *-*-gnu* *-*-nacl* arm*-*-uclinuxfdpiceabi
diff --git a/ld/testsuite/ld-elf/fatal-warnings-1b.d b/ld/testsuite/ld-elf/fatal-warnings-1b.d
new file mode 100644
index 0000000..644e96b
--- /dev/null
+++ b/ld/testsuite/ld-elf/fatal-warnings-1b.d
@@ -0,0 +1,6 @@
+#PR ld/31289
+#source: pr22269.s
+#ld: -pie --no-dynamic-linker -z dynamic-undefined-weak --fatal-warnings
+#readelf: -r -x .data.rel.ro
+#error: unsupported option: -z dynamic-undefined-weak
+#target: *-*-linux* *-*-gnu* *-*-nacl* arm*-*-uclinuxfdpiceabi
diff --git a/ld/testsuite/ld-elf/fatal-warnings-2a.d b/ld/testsuite/ld-elf/fatal-warnings-2a.d
new file mode 100644
index 0000000..5c46f43
--- /dev/null
+++ b/ld/testsuite/ld-elf/fatal-warnings-2a.d
@@ -0,0 +1,6 @@
+#PR ld/31289
+#source: start.s
+#ld: -z bad-option1 -z bad-option2
+#warning: -z bad-option1 ignored
+#xfail: [is_generic]
+# generic linker targets don't support -z options.
diff --git a/ld/testsuite/ld-elf/fatal-warnings-2b.d b/ld/testsuite/ld-elf/fatal-warnings-2b.d
new file mode 100644
index 0000000..5fa94e4
--- /dev/null
+++ b/ld/testsuite/ld-elf/fatal-warnings-2b.d
@@ -0,0 +1,6 @@
+#PR ld/31289
+#source: start.s
+#ld: -z bad-option1 -z bad-option2
+#warning: -z bad-option2 ignored
+#xfail: [is_generic]
+# generic linker targets don't support -z options.
diff --git a/ld/testsuite/ld-elf/fatal-warnings-3a.d b/ld/testsuite/ld-elf/fatal-warnings-3a.d
new file mode 100644
index 0000000..a377b73
--- /dev/null
+++ b/ld/testsuite/ld-elf/fatal-warnings-3a.d
@@ -0,0 +1,6 @@
+#PR ld/31289
+#source: start.s
+#ld: --fatal-warnings -z bad-option1 -z bad-option2
+#error: unsupported option: -z bad-option1
+#xfail: [is_generic]
+# generic linker targets don't support -z options.
diff --git a/ld/testsuite/ld-elf/fatal-warnings-3b.d b/ld/testsuite/ld-elf/fatal-warnings-3b.d
new file mode 100644
index 0000000..87ea286
--- /dev/null
+++ b/ld/testsuite/ld-elf/fatal-warnings-3b.d
@@ -0,0 +1,6 @@
+#PR ld/31289
+#source: start.s
+#ld: --fatal-warnings -z bad-option1 -z bad-option2
+#error: unsupported option: -z bad-option2
+#xfail: [is_generic]
+# generic linker targets don't support -z options.
diff --git a/ld/testsuite/ld-elf/fatal-warnings-4a.d b/ld/testsuite/ld-elf/fatal-warnings-4a.d
new file mode 100644
index 0000000..4685e38
--- /dev/null
+++ b/ld/testsuite/ld-elf/fatal-warnings-4a.d
@@ -0,0 +1,6 @@
+#PR ld/31289
+#source: start.s
+#ld: -z bad-option1 -z bad-option2 --fatal-warnings
+#error: unsupported option: -z bad-option1
+#xfail: [is_generic]
+# generic linker targets don't support -z options.
diff --git a/ld/testsuite/ld-elf/fatal-warnings-4b.d b/ld/testsuite/ld-elf/fatal-warnings-4b.d
new file mode 100644
index 0000000..6fc2185
--- /dev/null
+++ b/ld/testsuite/ld-elf/fatal-warnings-4b.d
@@ -0,0 +1,6 @@
+#PR ld/31289
+#source: start.s
+#ld: -z bad-option1 -z bad-option2 --fatal-warnings
+#error: unsupported option: -z bad-option2
+#xfail: [is_generic]
+# generic linker targets don't support -z options.