From c7d21f850fc87e9b0b357ba0b0c64e56dd83f8c9 Mon Sep 17 00:00:00 2001 From: Scott Duensing Date: Sun, 18 Feb 2024 18:55:12 -0600 Subject: [PATCH] Returning pointers from relocated code should work (even if it's not a great idea). --- examples/overlay/overlay.c | 7 ++++++- tools/overlay/src/overlay.c | 13 +++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) 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"