X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?p=rmac;a=blobdiff_plain;f=object.c;h=590f2631fe6fabb71b1fd132b834fa2f91e588aa;hp=cef73eea72babb0f8cf001c82008527addbea5f0;hb=ae7127773aa49608da898bb9f9a0e5f87a3c1816;hpb=622cef2655a59d715480af165caed8cd4ba0040c diff --git a/object.c b/object.c index cef73ee..590f263 100644 --- a/object.c +++ b/object.c @@ -228,9 +228,12 @@ int WriteObject(int fd) } // Write requested object file... - switch (obj_format) - { - case BSD: + if (obj_format==BSD || (obj_format==ALCYON && prg_flag==0)) + { + if (verb_flag) + { + printf("Total : %d bytes\n", sect[TEXT].sloc + sect[DATA].sloc + sect[BSS].sloc); + } ssize = ((LONG)sy_assign(NULL, NULL)); // Assign index numbers to the symbols tds = sect[TEXT].sloc + sect[DATA].sloc; // Get size of TEXT and DATA segment buf = malloc(0x600000); // Allocate 6mb object file image memory @@ -308,9 +311,21 @@ int WriteObject(int fd) if (buf) free(buf); // Free allocated memory - break; - - case ALCYON: + } + else if (obj_format==ALCYON) + { + if (verb_flag) + { + if (prg_flag) + { + printf("TOS header : 28 bytes\n"); + printf("Total : %d bytes\n", 28 + sect[TEXT].sloc + sect[DATA].sloc + sect[BSS].sloc); + } + else + { + printf("Total : %d bytes\n", sect[TEXT].sloc + sect[DATA].sloc + sect[BSS].sloc); + } + } /* * Compute size of symbol table; * assign numbers to the symbols... @@ -329,24 +344,24 @@ int WriteObject(int fd) if (t < ssize) t = ssize; - buf = malloc(t + HDRSIZE) + HDRSIZE; + buf = (char *)((int)malloc(t + HDRSIZE) + HDRSIZE); /* * Build object file header * just before the text+data image */ chptr = buf - HDRSIZE; /* -> base of header */ - D_word(0x601a); /* magic number */ - t = sect[TEXT].sloc; /* TEXT size */ + D_word(0x601a); /* 00 - magic number */ + t = sect[TEXT].sloc; /* 02 - TEXT size */ D_long(t); - t = sect[DATA].sloc; /* DATA size */ + t = sect[DATA].sloc; /* 06 - DATA size */ D_long(t); - t = sect[BSS].sloc; /* BSS size */ + t = sect[BSS].sloc; /* 0a - BSS size */ D_long(t); - D_long(ssize); /* symbol table size */ - D_long(0); /* stack size (unused) */ - D_long(0); /* entry point (unused) */ - D_word(0); /* relocation information exists */ + D_long(ssize); /* 0e - symbol table size */ + D_long(0); /* 12 - stack size (unused) */ + D_long(PRGFLAGS); /* 16 - PRGFLAGS */ + D_word(0); /* 1a - relocation information exists */ /* * Construct text and data segments; @@ -384,7 +399,6 @@ int WriteObject(int fd) */ tds = markimg(buf, tds, sect[TEXT].sloc, 1); write(fd, buf, tds); - break; } return 0;