+Wed Jan 29 08:35:39 1992 Steve Chamberlain (sac at rtl.cygnus.com)
+
+ * config/mh-sparc.h: now uses libgcc.a
+ * ldmain.c: quit using exit
+ * *sc: use *(COMMON) rather than [COMMON]
+ * ldlex.l, lexsup.c: much thinking moved from .l and put into .c,
+ to allow preprocessing of .l file.
+ * Makefile.in: New ldlex.l mangling
+ * ldexp.c (fold_binary): perform expressions with % and / in
+ integer.
+ * ldfile.c (open_a): open archives on VMS in a special way
+
+
Tue Jan 28 10:18:16 1992 Steve Chamberlain (sac at rtl.cygnus.com)
* ldgram.y: map -M behave in the same way as -Map (sets file name
BFDLIB=$(unsubdir)/../bfd$(subdir)/libbfd.a
LIBIBERTY=$(unsubdir)/../libiberty$(subdir)/libiberty.a
-OFILES= ldgram.o ldlex.o ldlang.o ldctor.o ldmain.o ldindr.o \
+OFILES= ldgram.o ldlex.o lexsup.o ldlang.o ldctor.o ldmain.o ldindr.o \
ldwarn.o ldwrite.o ldexp.o ldlnk960.o ld__gld68k.o ld__i386aout.o \
ld__m88k.o ld__glda29k.o ld__news.o h8300hds.o ld__ebmon29k.o \
ld__gld.o ldgld960.o ldemul.o ldver.o ldmisc.o ldsym.o \
MANSOURCES=ld.tex
-LDCSOURCES=ldlang.c ldctor.c ldindr.c ldmain.c ldwrite.c ldwarn.c ldlnk960.c \
+LDCSOURCES=ldlang.c lexsup.c ldctor.c ldindr.c ldmain.c ldwrite.c ldwarn.c ldlnk960.c \
ld__gld.c ld__gld68k.c ld__m88k.c ld__ebmon29k.c \
ldgld960.c ldemul.c ldver.c ldmisc.c ldexp.c ldsym.c ldfile.c \
ldvanilla.c relax.c lderror.c
mv -f y.tab.h ldgram.h
ldlex.c: ldlex.l
- lex -t $(VPATH)/ldlex.l >ldlex.c
+ /lib/cpp -E -P $(INCLUDES) $(HDEFINES) $(TDEFINES) $(CDEFINES) $(VPATH)/ldlex.l >ldlex.p
+ lex -t ldlex.p >ldlex.q
+ sed -e "s/define input/define old_input/" \
+ -e "s/define unput/define old_unput/" \
+ -e "s/input/lex_input/" \
+ -e "s/unput/lex_unput/" <ldlex.q >ldlex.c
+
# These all start with ld__ so 'make clean' can find them.
--- /dev/null
+#include "bfd.h"
+#include "sysdep.h"
+#include "../bfd/seclet.h"
+#include "ld.h"
+
+#define MAX_ERRORS_IN_A_ROW 5
+
+extern ld_config_type config;
+
+extern bfd_error_vector_type bfd_error_vector;
+
+
+/* BFD has failed to link something, give a better error message */
+
+static void
+DEFUN(ld_undefined_symbol,(relent, seclet),
+ CONST arelent *relent AND
+ bfd_seclet_type *seclet)
+{
+ asymbol *s = *(relent->sym_ptr_ptr);
+ static asymbol *error_symbol;
+ static unsigned int error_count;
+ if (seclet != (bfd_seclet_type *)NULL)
+ {
+
+ asection *section = seclet->u.indirect.section;
+ bfd *abfd = section->owner;
+
+
+ /* We remember the symbol, and never print more than
+ a reasonable number of them in a row */
+ if (s == error_symbol) {
+ error_count++;
+ }
+ else {
+ error_count = 0;
+ error_symbol = s;
+ }
+ if (error_count < MAX_ERRORS_IN_A_ROW) {
+ einfo("%C: undefined reference to `%T'\n",
+ abfd,section, seclet->u.indirect.symbols,
+ relent->address, s);
+ config.make_executable = false;
+
+ }
+ else if (error_count == MAX_ERRORS_IN_A_ROW) {
+ einfo("%C: more undefined references to `%T' follow\n",
+ abfd, section,
+ seclet->u.indirect.symbols,
+ relent->address, s);
+ }
+ else {
+ /* Don't print any more */
+ }
+ }
+ else
+ {
+ einfo("undefined reference to %s\n", (*(relent->sym_ptr_ptr))->name);
+ }
+}
+static void
+DEFUN(ld_reloc_truncated,(relent, seclet),
+ CONST arelent *relent AND
+ bfd_seclet_type *seclet)
+{
+ asymbol *s = *(relent->sym_ptr_ptr);
+ asection *section = seclet->u.indirect.section;
+ bfd *abfd = section->owner;
+
+ einfo("%X%C: relocation truncated to fit %R\n",
+ abfd, section, seclet->u.indirect.symbols, relent->address, relent);
+
+}
+
+
+void
+DEFUN_VOID(init_bfd_error_vector)
+{
+bfd_error_vector.undefined_symbol = ld_undefined_symbol;
+bfd_error_vector.reloc_value_truncated = ld_reloc_truncated;
+
+}