- /* #pragma udata [section-name] [symbol] */
- 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);
- ssym->reg = NULL;
-
- 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(!found) {
- snam = Safe_calloc(1, sizeof(sectNames));
- snam->name = Safe_strdup( sectname );
- snam->regsSet = NULL;
-
- addSet(§Names, snam);
- }
-
- ssym->section = snam;
-
-// fprintf(stderr, "%s:%d placing symbol %s at section %s (%p)\n", __FILE__, __LINE__,
-// ssym->name, snam->name, snam);
-
- symname = strtok((char *)NULL, WHITE);
- }
+ symname = strtok((char *)NULL, WHITE);
+ }
+
+ return 0;
+ }
+
+ /* #pragma wparam function1[, function2[,...]] */
+ if(startsWith(ptr, "wparam")) {
+ char *fname = strtok((char *)NULL, WHITECOMMA);
+
+
+ while(fname) {
+ fprintf(stderr, "PIC16 Warning: `%s' wparam pragma is obsolete. use function attribute `wparam' instead.\n", fname);
+ addSet(&wparamList, Safe_strdup(fname));
+
+// debugf("passing with WREG to %s\n", fname);
+ fname = strtok((char *)NULL, WHITECOMMA);
+ }
+
+ return 0;
+ }
+
+ /* #pragma library library_module */
+ if(startsWith(ptr, "library")) {
+ char *lmodule = strtok((char *)NULL, WHITE);
+
+ if(lmodule) {
+ /* lmodule can be:
+ * c link the C library
+ * math link the math library
+ * io link the IO library
+ * debug link the debug libary
+ * anything else, will link as-is */
+
+ if(!strcmp(lmodule, "c"))libflags.want_libc = 1;
+ else if(!strcmp(lmodule, "math"))libflags.want_libm = 1;
+ else if(!strcmp(lmodule, "io"))libflags.want_libio = 1;
+ else if(!strcmp(lmodule, "debug"))libflags.want_libdebug = 1;
+ else if(!strcmp(lmodule, "ignore"))libflags.ignore = 1;
+ else {
+ if(!libflags.ignore) {
+ fprintf(stderr, "link library %s\n", lmodule);
+ addSetHead(&libFilesSet, lmodule);
+ }
+ }
+ }
+
+ return 0;
+ }
+
+#if 0
+ /* This is an experimental code for #pragma inline
+ and is temporarily disabled for 2.5.0 release */
+ if(startsWith(ptr, "inline")) {
+ char *tmp = strtok((char *)NULL, WHITECOMMA);
+
+ while(tmp) {
+ addSet(&asmInlineMap, Safe_strdup( tmp ));
+ tmp = strtok((char *)NULL, WHITECOMMA);
+ }
+
+ {
+ char *s;
+
+ for(s = setFirstItem(asmInlineMap); s ; s = setNextItem(asmInlineMap)) {
+ debugf("inline asm: `%s'\n", s);
+ }
+ }
+
+ return 0;
+ }
+#endif /* 0 */