Apparently the compiler did not care if an INCBIN happened in a BSS
section or not. Now the compiler cares and gives an error if you try to
do this terrible, terrible thing. :-D
long pos, size;
char buf;
+ // Check to see if we're in BSS, and, if so, throw an error
+ if (scattr & SBSS)
+ {
+ errors("Cannot include binary file \"%s\" in BSS section", string[tok[1]]);
+ return ERROR;
+ }
+
if (*tok != STRING)
{
error(syntax_error);
size = lseek(j, 0L, SEEK_END);
chcheck(size);
pos = lseek(j, 0L, SEEK_SET);
-
+
+ DEBUG
+ {
+ printf("INCBIN: File '%s' is %li bytes.\n", string[tok[1]], size);
+ }
+
for(i=0; i<size; i++)
{
buf = '\0';
//
int chcheck(LONG amt)
{
+ DEBUG { printf("chcheck(%u)\n", amt); }
// If in BSS section, no allocation required
if (scattr & SBSS)
return 0;
if (!amt)
amt = CH_THRESHOLD;
+ DEBUG { printf(" challoc=%i, ch_size=%i, diff=%i\n", challoc, ch_size, challoc-ch_size); }
if ((int)(challoc - ch_size) >= (int)amt)
return 0;
if (amt < CH_CODE_SIZE)
amt = CH_CODE_SIZE;
+ DEBUG { printf(" amt (adjusted)=%u\n", amt); }
SECT * p = §[cursect];
CHUNK * cp = malloc(sizeof(CHUNK) + amt);