X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?p=rmac;a=blobdiff_plain;f=object.c;h=4614c38d66ed373eed028d7f0ed9a849f1282017;hp=baed1bdb3c0a519edade750d094742d3f1a2b54d;hb=9d0b53158275f8f9f542fb4d4a873d54789fe027;hpb=71cec8e7896b200c6ae63ebc428339bef147240a diff --git a/object.c b/object.c index baed1bd..4614c38 100644 --- a/object.c +++ b/object.c @@ -220,10 +220,24 @@ int WriteObject(int fd) LONG trsize, drsize; // Size of relocations long unused; // For supressing 'write' warnings - // Write requested object file... - switch (obj_format) + if (verb_flag) { - case BSD: + printf("TEXT segment: %d bytes\n", sect[TEXT].sloc); + printf("DATA segment: %d bytes\n", sect[DATA].sloc); + printf("BSS segment: %d bytes\n", sect[BSS].sloc); + } + + // Write requested object file... + if ((obj_format == BSD) || ((obj_format == ALCYON) && (prg_flag == 0))) + { + // Force BSD format from here onwards + obj_format = BSD; + + 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 @@ -301,9 +315,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... @@ -322,24 +348,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; @@ -377,7 +403,6 @@ int WriteObject(int fd) */ tds = markimg(buf, tds, sect[TEXT].sloc, 1); write(fd, buf, tds); - break; } return 0;