Added call to trap signals.
This commit is contained in:
parent
55017702e2
commit
58126396af
80
util/led/output.c
Normal file
80
util/led/output.c
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
#ifndef lint
|
||||||
|
static char rcsid[] = "$Header$";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "out.h"
|
||||||
|
#include "const.h"
|
||||||
|
#include "memory.h"
|
||||||
|
|
||||||
|
extern struct outhead outhead;
|
||||||
|
extern bool incore;
|
||||||
|
extern int flagword;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We have counted all relocation structs but we know only now if
|
||||||
|
* these must be emitted.We add all names here,unless the -s(trip)
|
||||||
|
* flag was given.
|
||||||
|
* If this flag is given we don't need the string table either.
|
||||||
|
*/
|
||||||
|
beginoutput()
|
||||||
|
{
|
||||||
|
extern ushort NLocals, NGlobals;
|
||||||
|
extern long NLChars, NGChars;
|
||||||
|
|
||||||
|
if (incore)
|
||||||
|
generate_section_names();
|
||||||
|
|
||||||
|
if (!(flagword & RFLAG))
|
||||||
|
outhead.oh_nrelo = (ushort)0;
|
||||||
|
if (flagword & SFLAG) {
|
||||||
|
outhead.oh_nname = (ushort)0;
|
||||||
|
outhead.oh_nchar = (long)0;
|
||||||
|
} else {
|
||||||
|
outhead.oh_nname = NLocals + NGlobals + outhead.oh_nsect;
|
||||||
|
outhead.oh_nchar = NLChars + NGChars;
|
||||||
|
}
|
||||||
|
trap_signals();
|
||||||
|
if (!incore)
|
||||||
|
begin_write();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Generate names for all sections and put them after the global names.
|
||||||
|
* Section names are used for relocation.
|
||||||
|
*/
|
||||||
|
static
|
||||||
|
generate_section_names()
|
||||||
|
{
|
||||||
|
register struct outname *name;
|
||||||
|
register int sectindex;
|
||||||
|
register long size;
|
||||||
|
extern struct outsect outsect[];
|
||||||
|
extern char *core_alloc();
|
||||||
|
|
||||||
|
size = (long)outhead.oh_nsect * sizeof(struct outname);
|
||||||
|
name = (struct outname *)core_alloc(ALLOGLOB, size);
|
||||||
|
if (name == (struct outname *)0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (sectindex = 0; sectindex < outhead.oh_nsect; sectindex++, name++) {
|
||||||
|
name->on_foff = (long)0; /* No string name. */
|
||||||
|
name->on_type = (S_MIN + sectindex) | S_SCT;
|
||||||
|
name->on_desc = (ushort)0;
|
||||||
|
name->on_valu = outsect[sectindex].os_base;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If we didn't keep the whole output file in core, most of it has been
|
||||||
|
* written out, and we just finish that.
|
||||||
|
* If we did, we write out our pieces of core.
|
||||||
|
*/
|
||||||
|
endoutput()
|
||||||
|
{
|
||||||
|
if (!incore) {
|
||||||
|
if (!(flagword & SFLAG))
|
||||||
|
end_write();
|
||||||
|
} else {
|
||||||
|
write_bytes();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue