Safe_[mc]?alloc()'ed variables
* src/pic16/gen.c (pic16_aopOp,pic16_popGet): added handling
of (byte sized) temporaries (assign them to WREG for now)
* src/pic16/main.c (_process_pragma): fixed nasty malloc bug
(used sizeof(set *sectSyms) instead of sizeof(struct sectSym)),
this might fix SIGSEGVs on MinGW...
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@3651
4a8a32a2-be11-0410-ad9d-
d568d2c75423
+2005-01-23 Raphael Neider <rneider AT web.de>
+
+ * src/pic16/{device.c,pcode.c}: s/free/Safe_free/g for
+ Safe_[mc]?alloc()'ed variables
+ * src/pic16/gen.c (pic16_aopOp,pic16_popGet): added handling
+ of (byte sized) temporaries (assign them to WREG for now)
+ * src/pic16/main.c (_process_pragma): fixed nasty malloc bug
+ (used sizeof(set *sectSyms) instead of sizeof(struct sectSym)),
+ this might fix SIGSEGVs on MinGW...
+
2005-01-23 Vangelis Rokas <vrokas AT otenet.gr>
* src/pic16/gen.c: fixed bug #1106975,
}
if(!i) {
- if(rlist)free(rlist);
+ if(rlist)Safe_free(rlist);
return;
}
rprev = r;
}
}
- free(rlist);
+ Safe_free(rlist);
}
void pic16_dump_gsection(FILE *of, set *sections)
}
if(!i) {
- if(slist)free(slist);
+ if(slist)Safe_free(slist);
return;
}
sprev = s;
}
}
- free(slist);
+ Safe_free(slist);
}
qsort(rlist, elementsInSet(section), sizeof(regs *), regCompare);
if(!i) {
- if(rlist)free(rlist);
+ if(rlist)Safe_free(rlist);
return;
}
statistics.intsize += r->size;
}
- free(rlist);
+ Safe_free(rlist);
}
sym->aop = op->aop = aop = newAsmop(AOP_PCODE);
//aop->aopu.pcop = pic16_popGetImmd(sym->usl.spillLoc->rname,0,sym->usl.spillLoc->offset);
- aop->aopu.pcop = pic16_popRegFromString(sym->usl.spillLoc->rname,
- getSize(sym->type),
- sym->usl.spillLoc->offset, op);
+ if (sym->usl.spillLoc && sym->usl.spillLoc->rname) {
+ aop->aopu.pcop = pic16_popRegFromString(sym->usl.spillLoc->rname,
+ getSize(sym->type),
+ sym->usl.spillLoc->offset, op);
+ } else {
+ fprintf (stderr, "%s:%d called for a spillLocation -- assigning WREG instead --- CHECK!\n", __FUNCTION__, __LINE__);
+ DEBUGpic16_emitcode (";","%s:%d called for a spillLocation -- assigning WREG instead --- CHECK", __FUNCTION__, __LINE__);
+ assert (getSize(sym->type) <= 1);
+ aop->aopu.pcop = pic16_popCopyReg (&pic16_pc_wreg);//pic16_popRegFromString("_WREG", getSize(sym->type), 0, op);
+ }
aop->size = getSize(sym->type);
return;
switch( aop->aopu.pcop->type ) {
case PO_DIR: PCOR(pcop)->instance += offset; break;
case PO_IMMEDIATE: PCOI(pcop)->offset = offset; break;
+ case PO_WREG: assert (offset==0); break;
default:
+ fprintf (stderr, "%s: unhandled aop->aopu.pcop->type %d\n", __FUNCTION__, aop->aopu.pcop->type);
assert( 0 ); /* should never reach here */;
}
return pcop;
int found=0;
while(symname) {
- ssym = Safe_calloc(1, sizeof(sectSyms));
+ ssym = Safe_calloc(1, sizeof(sectSym));
ssym->name = Safe_calloc(1, strlen(symname)+2);
sprintf(ssym->name, "_%s", symname);
ssym->reg = NULL;
pc->type = PC_BAD;
pic16_addpCode2pBlock(pb_dead_pcodes, pc);
-// free(pc);
+// Safe_free(pc);
}
return;
// if((pc->type == PC_LABEL) && PCL(pc)->label)
-// free(PCL(pc)->label);
+// Safe_free(PCL(pc)->label);
/* Instead of deleting the memory used by this pCode, mark
* the object as bad so that if there's a pointer to this pCode
pc->type = PC_BAD;
pic16_addpCode2pBlock(pb_dead_pcodes, pc);
-// free(pc);
+// Safe_free(pc);
}
pc->type = PC_BAD;
pic16_addpCode2pBlock(pb_dead_pcodes, pc);
- //free(pc);
+ //Safe_free(pc);
}
/* Found a label */
if(bprev) {
bprev->next = b->next; /* Not first pCode in chain */
-// free(b);
+// Safe_free(b);
} else {
pc->destruct(pc);
PCI(pcl)->label = b->next; /* First pCode in chain */
-// free(b);
+// Safe_free(b);
}
return; /* A label can't occur more than once */
}
pc->seq = 0;
if(PCI(pc)->pcflow) {
- //free(PCI(pc)->pcflow);
+ //Safe_free(PCI(pc)->pcflow);
PCI(pc)->pcflow = NULL;
}
// fprintf(stderr,"changing label key from %d to %d\n",pcol->key, pcl->key);
// if(pcol->pcop.name)
-// free(pcol->pcop.name);
+// Safe_free(pcol->pcop.name);
/* If the key is negative, then we (probably) have a label to
* a function and the name is already defined */
} else {
unlinkpCodeFromBranch(pc, PCODE(pcl));
/*if(pc->label->next == NULL && pc->label->pc == NULL) {
- free(pc->label);
+ Safe_free(pc->label);
}*/
}
return;
-// free(pb);
+// Safe_free(pb);
}
DFPRINTF((stderr,"Cool found register collision nIdx=%d moving to %d\n",
r1->rIdx, newreg->rIdx));
r2->rIdx = newreg->rIdx;
- //if(r2->name) free(r2->name);
+ //if(r2->name) Safe_free(r2->name);
if(newreg->name)
r2->name = Safe_strdup(newreg->name);
else