2003-06-03  H.J. Lu <hongjiu.lu@intel.com>

	* elflink.h (elf_link_input_bfd): Call linker error_handler
	for discarded definitions.

include/

2003-06-03  H.J. Lu <hongjiu.lu@intel.com>

	* bfdlink.h (LD_DEFINITION_IN_DISCARDED_SECTION): New.

ld/

2003-06-03  H.J. Lu <hongjiu.lu@intel.com>

	* ldmisc.c: Include "bfdlink.h".
	(error_handler): Handle LD_DEFINITION_IN_DISCARDED_SECTION
	and -LD_DEFINITION_IN_DISCARDED_SECTION.

	* Makefile.am: Rebuild dependency.
	* Makefile.in: Regenerated.

ld/testsuite/

2003-06-03  H.J. Lu <hongjiu.lu@intel.com>

	* ld-discard/extern.d: Updated.
	* ld-discard/start.d: Likewise.
	* ld-discard/static.d: Likewise.
This commit is contained in:
H.J. Lu 2003-06-03 18:15:05 +00:00
parent a3b6428fe7
commit 6f6f27f842
12 changed files with 111 additions and 37 deletions

View File

@ -1,3 +1,8 @@
2003-06-03 H.J. Lu <hongjiu.lu@intel.com>
* elflink.h (elf_link_input_bfd): Call linker error_handler
for discarded definitions.
2003-06-03 Elias Athanasopoulos <elathan@phys.uoa.gr>
* syms.c (decode_section_type): Return 'n' if section flags are

View File

@ -5003,13 +5003,13 @@ elf_link_input_bfd (finfo, input_bfd)
memset (rel, 0, sizeof (*rel));
}
else
{
if (! ((*finfo->info->callbacks->undefined_symbol)
(finfo->info, h->root.root.string,
input_bfd, o, rel->r_offset,
TRUE)))
return FALSE;
}
finfo->info->callbacks->error_handler
(LD_DEFINITION_IN_DISCARDED_SECTION,
_("%T: discarded in section `%s' from %s\n"),
h->root.root.string,
h->root.root.string,
h->root.u.def.section->name,
bfd_archive_filename (h->root.u.def.section->owner));
}
}
else
@ -5028,26 +5028,21 @@ elf_link_input_bfd (finfo, input_bfd)
}
else
{
bfd_boolean ok;
const char *msg
= _("local symbols in discarded section %s");
bfd_size_type amt
= strlen (sec->name) + strlen (msg) - 1;
char *buf = (char *) bfd_malloc (amt);
static int count;
int ok;
char *buf;
if (buf != NULL)
sprintf (buf, msg, sec->name);
else
buf = (char *) sec->name;
ok = (*finfo->info->callbacks
->undefined_symbol) (finfo->info, buf,
input_bfd, o,
rel->r_offset,
TRUE);
if (buf != sec->name)
ok = asprintf (&buf, "local symbol %d",
count++);
if (ok <= 0)
buf = (char *) "local symbol";
finfo->info->callbacks->error_handler
(LD_DEFINITION_IN_DISCARDED_SECTION,
_("%T: discarded in section `%s' from %s\n"),
buf, buf, sec->name,
bfd_archive_filename (input_bfd));
if (ok != -1)
free (buf);
if (!ok)
return FALSE;
}
}
}

View File

@ -1,3 +1,7 @@
2003-06-03 H.J. Lu <hongjiu.lu@intel.com>
* bfdlink.h (LD_DEFINITION_IN_DISCARDED_SECTION): New.
2003-05-30 Ulrich Drepper <drepper@redhat.com>
Jakub Jelinek <jakub@redhat.com>

View File

@ -495,6 +495,9 @@ struct bfd_link_callbacks
ld. */
bfd_boolean (*error_handler)
PARAMS ((int id, const char * fmt, ...));
/* Identifiers of linker error messages used by error_handler. */
#define LD_DEFINITION_IN_DISCARDED_SECTION 1
};
/* The linker builds link_order structures which tell the code how to

View File

@ -1,3 +1,12 @@
2003-06-03 H.J. Lu <hongjiu.lu@intel.com>
* ldmisc.c: Include "bfdlink.h".
(error_handler): Handle LD_DEFINITION_IN_DISCARDED_SECTION
and -LD_DEFINITION_IN_DISCARDED_SECTION.
* Makefile.am: Rebuild dependency.
* Makefile.in: Regenerated.
2003-06-03 Kaz Kojima <kkojima@rr.iij4u.or.jp>
* emulparams/shlelf_linux.sh (GENERATE_PIE_SCRIPT): Set to yes.

View File

@ -1662,10 +1662,10 @@ ldmain.o: ldmain.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
ldmain.h ldmisc.h ldwrite.h ldexp.h ldlang.h ldgram.h \
ldlex.h ldfile.h ldemul.h ldctor.h
ldmisc.o: ldmisc.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
$(INCDIR)/symcat.h sysdep.h config.h $(INCDIR)/fopen-same.h \
$(INCDIR)/libiberty.h $(INCDIR)/demangle.h ld.h $(INCDIR)/bin-bugs.h \
ldmisc.h ldexp.h ldlang.h ldgram.h ldlex.h ldmain.h \
ldfile.h
$(INCDIR)/symcat.h $(INCDIR)/bfdlink.h sysdep.h config.h \
$(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h $(INCDIR)/demangle.h \
ld.h $(INCDIR)/bin-bugs.h ldmisc.h ldexp.h ldlang.h \
ldgram.h ldlex.h ldmain.h ldfile.h
ldver.o: ldver.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
$(INCDIR)/symcat.h ../bfd/bfdver.h sysdep.h config.h \
$(INCDIR)/fopen-same.h ld.h $(INCDIR)/bin-bugs.h ldver.h \

View File

@ -2362,10 +2362,10 @@ ldmain.o: ldmain.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
ldmain.h ldmisc.h ldwrite.h ldexp.h ldlang.h ldgram.h \
ldlex.h ldfile.h ldemul.h ldctor.h
ldmisc.o: ldmisc.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
$(INCDIR)/symcat.h sysdep.h config.h $(INCDIR)/fopen-same.h \
$(INCDIR)/libiberty.h $(INCDIR)/demangle.h ld.h $(INCDIR)/bin-bugs.h \
ldmisc.h ldexp.h ldlang.h ldgram.h ldlex.h ldmain.h \
ldfile.h
$(INCDIR)/symcat.h $(INCDIR)/bfdlink.h sysdep.h config.h \
$(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h $(INCDIR)/demangle.h \
ld.h $(INCDIR)/bin-bugs.h ldmisc.h ldexp.h ldlang.h \
ldgram.h ldlex.h ldmain.h ldfile.h
ldver.o: ldver.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
$(INCDIR)/symcat.h ../bfd/bfdver.h sysdep.h config.h \
$(INCDIR)/fopen-same.h ld.h $(INCDIR)/bin-bugs.h ldver.h \

View File

@ -22,6 +22,7 @@
02111-1307, USA. */
#include "bfd.h"
#include "bfdlink.h"
#include "sysdep.h"
#include "libiberty.h"
#include "demangle.h"
@ -508,12 +509,63 @@ ld_abort (file, line, fn)
}
bfd_boolean
error_handler VPARAMS ((int id ATTRIBUTE_UNUSED, const char *fmt, ...))
error_handler VPARAMS ((int id, const char *fmt, ...))
{
VA_OPEN (arg, fmt);
VA_FIXEDARG (arg, const char *, fmt);
va_start (arg, fmt);
switch (id)
{
default:
break;
/* We can be called with
error_handler (-LD_DEFINITION_IN_DISCARDED_SECTION, "", 0);
to make this error non-fatal and
error_handler (-LD_DEFINITION_IN_DISCARDED_SECTION, "", 1);
to make this error fatal. */
case -LD_DEFINITION_IN_DISCARDED_SECTION:
case LD_DEFINITION_IN_DISCARDED_SECTION:
{
static struct bfd_hash_table *hash;
static int fatal = 1;
const char *name;
if (id == -LD_DEFINITION_IN_DISCARDED_SECTION)
{
fatal = va_arg (arg, int);
goto out;
}
name = va_arg (arg, const char *);
/* Only warn once about a particular undefined symbol. */
if (hash == NULL)
{
hash = ((struct bfd_hash_table *)
xmalloc (sizeof (struct bfd_hash_table)));
if (! bfd_hash_table_init (hash, bfd_hash_newfunc))
einfo (_("%F%P: bfd_hash_table_init failed: %E\n"));
}
if (bfd_hash_lookup (hash, name, FALSE, FALSE) != NULL)
goto out;
if (bfd_hash_lookup (hash, name, TRUE, TRUE) == NULL)
einfo (_("%F%P: bfd_hash_lookup failed: %E\n"));
if (fatal)
config.make_executable = FALSE;
}
break;
}
vfinfo (stderr, fmt, arg);
out:
VA_CLOSE (arg);
return TRUE;
}

View File

@ -1,3 +1,9 @@
2003-06-03 H.J. Lu <hongjiu.lu@intel.com>
* ld-discard/extern.d: Updated.
* ld-discard/start.d: Likewise.
* ld-discard/static.d: Likewise.
2003-06-03 H.J. Lu <hongjiu.lu@intel.com>
* ld-elfcomm/elfcomm.exp: Mark tests untested if compiler is

View File

@ -1,3 +1,3 @@
#source: extern.s
#ld: -T discard.ld
#error: undefined reference to `(data|local symbols in discarded section \.data\.exit)'
#error: data: discarded in section `\.data\.exit' from tmpdir/dump0.o

View File

@ -1,4 +1,4 @@
#source: start.s
#source: exit.s
#ld: -T discard.ld
#error: undefined reference to `data'
#error: data: discarded in section `\.data\.exit' from tmpdir/dump1.o

View File

@ -1,3 +1,3 @@
#source: static.s
#ld: -T discard.ld
#error: undefined reference to `local symbols in discarded section \.data\.exit'
#error: local symbol 0: discarded in section `\.data\.exit' from tmpdir/dump0.o