diff --git a/include/link/assign.h b/include/link/assign.h index 754e0906..1dab916a 100644 --- a/include/link/assign.h +++ b/include/link/assign.h @@ -35,6 +35,9 @@ extern void CreateSymbolTable(void); extern SLONG MaxBankUsed; extern SLONG MaxAvail[MAXBANKS]; +void +SetLinkerscriptName(char *tzLinkerscriptFile); + int IsSectionSameTypeBankAndFloating(const char *name, enum eSectionType type, int bank); diff --git a/src/link/assign.c b/src/link/assign.c index 0c7a0c4b..00829b9e 100644 --- a/src/link/assign.c +++ b/src/link/assign.c @@ -4,10 +4,11 @@ #include #include "extern/err.h" +#include "link/assign.h" #include "link/mylink.h" #include "link/main.h" +#include "link/script.h" #include "link/symbol.h" -#include "link/assign.h" struct sFreeArea { SLONG nOrg; @@ -338,6 +339,14 @@ AssignFloatingBankSections(enum eSectionType type) } } +char *tzLinkerscriptName = NULL; + +void +SetLinkerscriptName(char *tzLinkerscriptFile) +{ + tzLinkerscriptName = tzLinkerscriptFile; +} + void AssignSections(void) { @@ -415,8 +424,16 @@ AssignSections(void) } /* - * First, let's assign all the fixed sections... - * And all because of that Jens Restemeier character ;) + * First, let's parse the linkerscript. + * + */ + + if (tzLinkerscriptName) { + script_Parse(tzLinkerscriptName); + } + + /* + * Second, let's assign all the fixed sections... * */ diff --git a/src/link/main.c b/src/link/main.c index 9c8c01ee..78c7dfb6 100644 --- a/src/link/main.c +++ b/src/link/main.c @@ -31,12 +31,12 @@ char *progname; * */ -static void +static void usage(void) { printf( -"usage: rgblink [-tw] [-m mapfile] [-n symfile] [-O overlay] [-o outfile] \n" -" [-p pad_value] [-s symbol] file [...]\n"); +"usage: rgblink [-tw] [-l linkerscript] [-m mapfile] [-n symfile] [-O overlay]\n" +" [-o outfile] [-p pad_value] [-s symbol] file [...]\n"); exit(1); } @@ -45,7 +45,7 @@ usage(void) * */ -int +int main(int argc, char *argv[]) { int ch; @@ -56,8 +56,11 @@ main(int argc, char *argv[]) progname = argv[0]; - while ((ch = getopt(argc, argv, "m:n:o:O:p:s:tw")) != -1) { + while ((ch = getopt(argc, argv, "l:m:n:o:O:p:s:tw")) != -1) { switch (ch) { + case 'l': + SetLinkerscriptName(optarg); + break; case 'm': SetMapfileName(optarg); break;