beihl%cadillac.cad.mcc.com@MCC.COM (Gary Beihl) (10/01/88)
Here's a patch to ld.c which returns a non-zero exit status if multiply-defined symbols are found or if undefined symbols are found when non-relocatable output is desired. *** ld.c.orig Fri Sep 30 15:04:36 1988 --- ld.c Fri Sep 30 15:09:15 1988 *************** *** 452,457 **** --- 452,460 ---- /* Nonzero means should make the output file executable when done. */ /* Cleared by nonfatal errors. */ int make_executable; + + /* Value to return upon termination */ + int return_status; /* C++: Take care of global constructors and destructors. */ void symtab_init_for_cplusplus (); *************** *** 578,583 **** --- 581,587 ---- T_flag_specified = 0; magic = ZMAGIC; make_executable = 1; + return_status = 0; /* Initialize the cumulative counts of symbols. */ *************** *** 642,648 **** if (cplusplus && unlink (ctor_and_dtor_filename)) perror_file (&file_table[number_of_files-1]); ! return 0; } void decode_option (); --- 646,652 ---- if (cplusplus && unlink (ctor_and_dtor_filename)) perror_file (&file_table[number_of_files-1]); ! return return_status; } void decode_option (); *************** *** 2154,2159 **** --- 2158,2164 ---- if (defs++ && sp->value != p->n_value) if (!erred++) { + return_status = 1; make_executable = 0; error ("multiple definitions of symbol %s", sp->name); } *************** *** 2361,2368 **** if (count) fprintf (outfile, "\n"); ! if (count) make_executable = 0; } /* Write the output file */ --- 2366,2376 ---- if (count) fprintf (outfile, "\n"); ! if (count) ! { make_executable = 0; + return_status = 1; + } } /* Write the output file */