* ldfile.c: merge in VMS filename support
* ldmain.c (main): take out ./ from library path, and close file before unlinking. Make multiple defs of a symbol create an unexecable file. * ldmisc.c: fatal errosrs delete output file
This commit is contained in:
parent
9c99a57eca
commit
a72f4e5f84
2 changed files with 109 additions and 13 deletions
83
ld/descrip.mms
Normal file
83
ld/descrip.mms
Normal file
|
@ -0,0 +1,83 @@
|
|||
# mms file to build vms-i960 ld
|
||||
# sac@cygnus.com
|
||||
|
||||
.FIRST
|
||||
@[-.deci960]define-gnu
|
||||
|
||||
|
||||
CC = gcc
|
||||
CFLAGS = /define=(VMS, LNK960_LITTLE) /cc1_options="-mvaxc-alignment" /inc=([],[-.include],[-.bfd], [-.include.aout])
|
||||
|
||||
all : ld.exe
|
||||
copy descrip.mms all
|
||||
|
||||
BFD_OBJ = [-.bfd]archive.obj, -
|
||||
[-.bfd]coff-i960.obj, -
|
||||
[-.bfd]format.obj, -
|
||||
[-.bfd]reloc.obj, -
|
||||
[-.bfd]archures.obj, -
|
||||
[-.bfd]core.obj, -
|
||||
[-.bfd]init.obj, -
|
||||
[-.bfd]section.obj, -
|
||||
[-.bfd]bfd.obj, -
|
||||
[-.bfd]cpu-i960.obj, -
|
||||
[-.bfd]libbfd.obj, -
|
||||
[-.bfd]srec.obj, -
|
||||
[-.bfd]cache.obj, -
|
||||
[-.bfd]ctor.obj, -
|
||||
[-.bfd]opncls.obj, -
|
||||
[-.bfd]targets.obj, -
|
||||
[-.bfd]syms.obj,-
|
||||
[-.bfd]seclet.obj
|
||||
|
||||
LIBIBERTY_OBJ = -
|
||||
[]bzero.obj, getopt1.obj,obstack.obj,[-.libiberty]bcopy.obj,-
|
||||
[-.libiberty]getopt.obj,[-.libiberty]index.obj,[-.libiberty]strdup.obj,alloca.obj
|
||||
|
||||
LD_OBJ = -
|
||||
cplus-dem.obj, -
|
||||
ld__a29k.obj, -
|
||||
ld__ebmon29k.obj, -
|
||||
ld__gld960.obj, -
|
||||
ld__go32.obj, -
|
||||
ld__h8300hms.obj, -
|
||||
ld__h8300xray.obj, -
|
||||
ld__hp300bsd.obj, -
|
||||
ld__i386aout.obj, -
|
||||
ld__lnk960.obj, -
|
||||
ld__m88kbcs.obj, -
|
||||
ld__news.obj, -
|
||||
ld__st2000.obj, -
|
||||
ld__sun3.obj, -
|
||||
ld__sun4.obj, -
|
||||
ld__vanilla.obj, -
|
||||
ldctor.obj, -
|
||||
ldemul.obj, -
|
||||
lderror.obj, -
|
||||
ldexp.obj, -
|
||||
ldfile.obj, -
|
||||
ldgram.obj, -
|
||||
ldindr.obj, -
|
||||
ldlang.obj, -
|
||||
ldlex.obj, -
|
||||
ldmain.obj, -
|
||||
ldsym.obj, -
|
||||
ldver.obj, -
|
||||
ldwarn.obj, -
|
||||
ldmisc.obj,-
|
||||
ldwrite.obj, -
|
||||
lexsup.obj, -
|
||||
mri.obj, -
|
||||
relax.obj
|
||||
|
||||
|
||||
LIBS=$(BFD_OBJ), $(LIBIBERTY_OBJ)
|
||||
|
||||
ld.exe : $(LD_OBJ)
|
||||
copy [-.libiberty]bzero.obj []
|
||||
copy [-.libiberty]getopt1.obj []
|
||||
copy [-.libiberty]obstack.obj []
|
||||
$(LINK)/exe=ld.exe $(LD_OBJ), $(LIBS)
|
||||
|
||||
|
||||
|
39
ld/ldmain.c
39
ld/ldmain.c
|
@ -159,9 +159,9 @@ main (argc, argv)
|
|||
command_line.force_common_definition = false;
|
||||
|
||||
init_bfd_error_vector();
|
||||
ldsym_init();
|
||||
ldsym_init();
|
||||
ldfile_add_arch("");
|
||||
ldfile_add_library_path("./");
|
||||
|
||||
config.make_executable = true;
|
||||
force_make_executable = false;
|
||||
|
||||
|
@ -176,7 +176,7 @@ ldsym_init();
|
|||
config.text_read_only = true;
|
||||
config.make_executable = true;
|
||||
if (emulation == (char *)NULL) {
|
||||
emulation= DEFAULT_EMULATION;
|
||||
emulation= DEFAULT_EMULATION;
|
||||
}
|
||||
|
||||
ldemul_choose_mode(emulation);
|
||||
|
@ -237,18 +237,31 @@ ldsym_init();
|
|||
ldwrite();
|
||||
bfd_close(output_bfd);
|
||||
}
|
||||
else {
|
||||
output_bfd->flags |= EXEC_P;
|
||||
|
||||
ldwrite();
|
||||
else
|
||||
{
|
||||
|
||||
if (config.make_executable == false && force_make_executable ==false) {
|
||||
output_bfd->flags |= EXEC_P;
|
||||
|
||||
unlink(output_filename);
|
||||
}
|
||||
else { bfd_close(output_bfd); };
|
||||
exit (!config.make_executable);
|
||||
ldwrite();
|
||||
|
||||
|
||||
if (config.make_executable == false && force_make_executable ==false)
|
||||
{
|
||||
printf("Link errors found, deleting executable %s\n",
|
||||
output_filename);
|
||||
if (output_bfd->iostream)
|
||||
fclose(output_bfd->iostream);
|
||||
|
||||
unlink(output_filename);
|
||||
exit(1);
|
||||
}
|
||||
else {
|
||||
bfd_close(output_bfd);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
exit(0);
|
||||
} /* main() */
|
||||
|
@ -391,10 +404,10 @@ Q_enter_global_ref (nlist_p)
|
|||
asymbol ** stat_symbols = stat ? stat->asymbols:0;
|
||||
|
||||
multiple_def_count++;
|
||||
einfo("%C: multiple definition of `%T'\n",
|
||||
einfo("%X%C: multiple definition of `%T'\n",
|
||||
sym->the_bfd, sym->section, stat1_symbols, sym->value, sym);
|
||||
|
||||
einfo("%C: first seen here\n",
|
||||
einfo("%X%C: first seen here\n",
|
||||
sy->the_bfd, sy->section, stat_symbols, sy->value);
|
||||
}
|
||||
else {
|
||||
|
|
Loading…
Add table
Reference in a new issue