aboutsummaryrefslogtreecommitdiff
path: root/ld/ldlang.c
diff options
context:
space:
mode:
authorTristan Gingold <gingold@adacore.com>2008-01-11 09:11:18 +0000
committerTristan Gingold <gingold@adacore.com>2008-01-11 09:11:18 +0000
commitac69cbc672a0702152d34bac2da436dcee2e5346 (patch)
tree6ffc8a7b8272f96af39210413806e543b28c186b /ld/ldlang.c
parent7dda2462a7035e0c9cc9706abfda31861c551b14 (diff)
downloadgdb-ac69cbc672a0702152d34bac2da436dcee2e5346.zip
gdb-ac69cbc672a0702152d34bac2da436dcee2e5346.tar.gz
gdb-ac69cbc672a0702152d34bac2da436dcee2e5346.tar.bz2
ld:
2008-01-11 Tristan Gingold <gingold@adacore.com> Eric Botcazou <ebotcazou@adacore.com> * ldlang.c (lang_end): Warns if the entry point is not found when --gc-sections. Emit an error if no root is specified when --gc-sections -r. * ld.texinfo (Options): Document that --gc-sections is compatible with -r and -q. * ldmain.c (main): Do not error out if -r and --gc-sections. * scripttempl/elf.sc: Emit ENTRY command only if relocating. ld/testsuite: 2008-01-11 Tristan Gingold <gingold@adacore.com> * lib/ld-lib.exp (check_gc_sections_available): Now available on VxWorks. * ld-gc: New directory for testing --gc-sections. * ld-gc/gc.c: New file. * ld-gc/gc.exp: New file. * ld-gc/noent.s: New file. * ld-gc/noent.d: New file.
Diffstat (limited to 'ld/ldlang.c')
-rw-r--r--ld/ldlang.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/ld/ldlang.c b/ld/ldlang.c
index 9d3c513..63326e5 100644
--- a/ld/ldlang.c
+++ b/ld/ldlang.c
@@ -5077,11 +5077,20 @@ lang_end (void)
struct bfd_link_hash_entry *h;
bfd_boolean warn;
- if (link_info.relocatable || link_info.shared)
+ if ((link_info.relocatable && !link_info.gc_sections)
+ || link_info.shared)
warn = entry_from_cmdline;
else
warn = TRUE;
+ /* Force the user to specify a root when generating a relocatable with
+ --gc-sections. */
+ if (link_info.gc_sections && link_info.relocatable
+ && (entry_symbol.name == NULL
+ && ldlang_undef_chain_list_head == NULL))
+ einfo (_("%P%F: gc-sections requires either an entry or "
+ "an undefined symbol\n"));
+
if (entry_symbol.name == NULL)
{
/* No entry has been specified. Look for the default entry, but