Path fubar in overlay fixed.

This commit is contained in:
Scott Duensing 2024-02-18 18:12:59 -06:00
parent 9e95c1fab0
commit f1031351ed
2 changed files with 15 additions and 31 deletions

View file

@ -21,21 +21,17 @@
*/
#include "f256.h"
#include "f256.c"
#include <stdarg.h>
#define test(...) ( *(volatile byte *)(0x000D) = 8; REAL_test(__VA_ARGS__); *(volatile byte *)(0x000D) = 5; )
#define SEGMENT_TEST
void test(int arg1, int arg2) {
}
#define SEGMENT_MAIN
int main(int argc, char *argv[]) {
test(test);
test(1, 2);
return 0;
}

View file

@ -92,7 +92,6 @@ void parseCFile(char *filename, char *targetFile, FILE *trampoline, char *trampo
* This parser sucks.
*
* - It only handles C, not C++.
* - It should scan for function names backwards from the '(' and not by skipping possible modifiers like 'static' and 'struct'.
* - It can only handle single-line function definitions with the opening '{' on the same line as the function.
* - It can be borked by comments.
* - It always generates trampolines, not just when they're needed.
@ -152,26 +151,14 @@ void parseCFile(char *filename, char *targetFile, FILE *trampoline, char *trampo
if (buffer[strlen(buffer) - 1] == ')') {
// Function. Annotate it!
fprintf(out, "__attribute__((noinline, section(\".block%d\")))\n", _currentBank);
// Scan forward to find function name.
found = false;
start = buffer;
do {
b = start;
while (*b != ' ') b++;
// This could be 'struct' or 'static'. Put a null there and check. (Then put the space back!)
*b = 0;
if ((strcmp(start, "struct") == 0) || (strcmp(start, "static") == 0)) {
// Keep looking.
start = ++b;
found = true;
}
*b = ' ';
} while (found);
// Now that we could have a 'static struct' or something, put the zero back for later.
*b = 0;
// We're past the types. Now find the '(' after the function name.
start = ++b;
// Scan forward to find the '(' after the function name.
b = buffer;
while (*b != '(') b++;
// Now go backwards and look for a space.
start = b;
while (*start != ' ') start--;
*start++ = 0;
// Yank the function name out.
*b = 0;
temp = strdup(start);
@ -314,9 +301,9 @@ int main(int argc, char *argv[]) {
fprintf(out, "#define TRAMPOLINE_H\n\n");
// Find common inital path so we can remove it later.
sourceDir = strdup(argv[x]);
sourceDir = strdup(argv[3]);
utilFixPathSeparators(&sourceDir, true);
sourceDirOffset = strlen(sourceDir);
sourceDirOffset = strlen(sourceDir) - 1;
if (argc > 4) {
for (x=4; x<argc; x++) {
thisOffset = 0;
@ -363,6 +350,7 @@ int main(int argc, char *argv[]) {
}
free(thisDir);
parseCFile(cFile, targetFile, out, trampolineFile, nearSlot + 8);
//printf("%s --> %s\n", cFile, targetFile);
free(cFile);
free(targetFile);
}