bfd/
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:
parent
a3b6428fe7
commit
6f6f27f842
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
|
@ -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 \
|
||||
|
@ -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 \
|
||||
|
54
ld/ldmisc.c
54
ld/ldmisc.c
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user