diff --git a/examples/overlay/overlay.c b/examples/overlay/overlay.c index 96e2dd9..3dc9754 100644 --- a/examples/overlay/overlay.c +++ b/examples/overlay/overlay.c @@ -29,7 +29,12 @@ Breaking things { with comments! */ -void test(int arg1, int arg2) { +const char *test(int arg1, int arg2) { + return "Pointers from a swapped bank is probably a bad idea."; +} + +int test2(int arg1, int arg2) { + return 1; } diff --git a/tools/overlay/src/overlay.c b/tools/overlay/src/overlay.c index ee728f6..222505c 100644 --- a/tools/overlay/src/overlay.c +++ b/tools/overlay/src/overlay.c @@ -171,13 +171,22 @@ void parseCFile(char *filename, char *targetFile, FILE *trampoline, char *trampo // Now go backwards and look for a space. start = b; while (*start != ' ') start--; - *start++ = 0; + // Are they returning a pointer? + found = false; + if (*(start+1) == '*') { + found = true; + ++start; + *start++ = 0; + } else { + *start++ = 0; + found = false; + } // Yank the function name out. *b = 0; temp = strdup(start); *b = '('; // Write out new function definition. - fprintf(out, "%s FAR%d_%s {\n", buffer, 8, start); + fprintf(out, "%s%sFAR%d_%s {\n", buffer, found ? "*" : " ", 8, start); // Create trampoline macro. fprintf(trampoline, "#define %s(...) ({ \\\n" "\t\tunsigned char ___mmu = (unsigned char)*(volatile unsigned char *)%#06x; \\\n"