maxRAMaddress = (int)floatFromVal(maxRAMVal);
pic16_setMaxRAM(maxRAMaddress);
}
+
+ return 0;
}
/* #pragma stack [stack-position] [stack-len] */
if(stackLen < 1) {
stackLen = 64;
- fprintf(stderr, "%s:%d setting stack to default size %d\n", __FILE__, __LINE__, stackLen);
+ fprintf(stderr, "%s:%d: warning: setting stack to default size %d (0x%04x)\n",
+ filename, lineno-1, stackLen, stackLen);
+
+// fprintf(stderr, "%s:%d setting stack to default size %d\n", __FILE__, __LINE__, stackLen);
}
// fprintf(stderr, "Initializing stack pointer at 0x%x len 0x%x\n", stackPos, stackLen);
value *addr;
absS = Safe_calloc(1, sizeof(absSym));
- absS->name = Safe_strdup( symname );
+ sprintf(absS->name, "_%s", symname);
+
addr = constVal( location );
absS->address = (unsigned int)floatFromVal( addr );
+ if((absS->address % 2) != 0) {
+ absS->address--;
+ fprintf(stderr, "%s:%d: warning: code memory locations should be word aligned, will locate to 0x%06x instead\n",
+ filename, lineno-1, absS->address);
+ }
+
addSet(&absSymSet, absS);
- fprintf(stderr, "%s:%d symbol %s will be placed in location 0x%06x in code memory\n",
- __FILE__, __LINE__, symname, absS->address);
+// fprintf(stderr, "%s:%d symbol %s will be placed in location 0x%06x in code memory\n",
+// __FILE__, __LINE__, symname, absS->address);
return 0;
}
if(startsWith(ptr, "udata")) {
char *sectname = strtok((char *)NULL, WHITE);
char *symname = strtok((char *)NULL, WHITE);
+ symbol *nsym;
sectSym *ssym;
sectName *snam;
int found=0;
while(symname) {
-
ssym = Safe_calloc(1, sizeof(sectSyms));
ssym->name = Safe_calloc(1, strlen(symname)+2);
sprintf(ssym->name, "_%s", symname);
addSet(§Syms, ssym);
+ nsym = newSymbol(symname, 0);
+ strcpy(nsym->rname, ssym->name);
+ checkAddSym(&publics, nsym);
+
found = 0;
for(snam=setFirstItem(sectNames);snam;snam=setNextItem(sectNames)) {
if(!strcmp(sectname, snam->name)){ found=1; break; }
if(ISOPT(USE_CRT)) {
pic16_options.no_crt = 0;
pic16_options.crt_name = Safe_strdup( getStringArg(USE_CRT, argv, i, *pargc) );
+
+ return TRUE;
}
return FALSE;
*
*/
- sprintf(lfrm, "{linker} {incdirs} {lflags} -o {outfile} {spec_ofiles} {ofiles} {libs}");
+ sprintf(lfrm, "{linker} {incdirs} {lflags} -o {outfile} {user_ofile} {spec_ofiles} {ofiles} {libs}");
shash_add(&linkValues, "linker", "gplink");
if(fullSrcFileName) {
sprintf(temp, "%s.o", dstFileName);
- addSetHead(&relFilesSet, Safe_strdup(temp));
+// addSetHead(&relFilesSet, Safe_strdup(temp));
+ shash_add(&linkValues, "user_ofile", temp);
}
if(!pic16_options.no_crt)
"CSEG (CODE)", // code
"DSEG (DATA)", // data
"ISEG (DATA)", // idata
+ NULL, // pdata
"XSEG (XDATA)", // xdata
"BSEG (BIT)", // bit
"RSEG (DATA)", // reg