Returning pointers from relocated code should work (even if it's not a great idea).
This commit is contained in:
parent
a6cee7f529
commit
c7d21f850f
2 changed files with 17 additions and 3 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
Loading…
Add table
Reference in a new issue