X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fpic%2Fmain.c;h=dcb0aca0b107f5633b6ab04dca61dc7abb345c6b;hb=f983558a0e07566cf65dca67cddd3f4bf81328e0;hp=486a4b819e897f2c3feb4a882eee05f0536827b0;hpb=f92718a10905fc3571ec395c2bf69b4cac7fdcf7;p=fw%2Fsdcc diff --git a/src/pic/main.c b/src/pic/main.c index 486a4b81..dcb0aca0 100644 --- a/src/pic/main.c +++ b/src/pic/main.c @@ -9,6 +9,7 @@ #include "ralloc.h" #include "device.h" #include "SDCCutil.h" +#include "glue.h" //#include "gen.h" @@ -140,12 +141,32 @@ _process_pragma(const char *sz) return 1; } +extern char *udata_section_name; + static bool _pic14_parseOptions (int *pargc, char **argv, int *i) { + char buf[128]; + /* TODO: allow port-specific command line options to specify * segment names here. */ + + /* This is a temporary hack, to solve problems with some processors + * that do not have udata section. It will be changed when a more + * robust solution is figured out -- VR 27-11-2003 FIXME + */ + strcpy(buf, "--udata-section-name"); + if(!strncmp(buf, argv[ *i ], strlen(buf))) { + if(strlen(argv[ *i ]) <= strlen(buf)+1) { + fprintf(stderr, "WARNING: no `%s' entered\n", buf+2); + exit(-1); + } else { + udata_section_name = strdup( strchr(argv[*i], '=') + 1 ); + } + return 1; + } + return FALSE; } @@ -319,6 +340,32 @@ _hasNativeMulFor (iCode *ic, sym_link *left, sym_link *right) */ } +/* Indicate which extended bit operations this port supports */ +static bool +hasExtBitOp (int op, int size) +{ + if (op == RRC + || op == RLC + /* || op == GETHBIT */ /* GETHBIT doesn't look complete for PIC */ + ) + return TRUE; + else + return FALSE; +} + +/* Indicate the expense of an access to an output storage class */ +static int +oclsExpense (struct memmap *oclass) +{ + /* The IN_FARSPACE test is compatible with historical behaviour, */ + /* but I don't think it is applicable to PIC. If so, please feel */ + /* free to remove this test -- EEP */ + if (IN_FARSPACE(oclass)) + return 1; + + return 0; +} + /** $1 is always the basename. $2 is always the output file. $3 varies @@ -327,12 +374,12 @@ _hasNativeMulFor (iCode *ic, sym_link *left, sym_link *right) */ static const char *_linkCmd[] = { - "gplink", "-nf", "$1", NULL + "gplink", "-o $2", "\"$1.o\"", "$l", NULL }; static const char *_asmCmd[] = { - "gpasm", "-c", "$1.asm", NULL + "gpasm", "$l", "-c", "\"$1.asm\"", NULL }; @@ -344,6 +391,7 @@ PORT pic_port = "MCU pic", /* Target name */ "", /* Processor */ { + picglue, TRUE, /* Emit glue around main */ MODEL_SMALL | MODEL_LARGE | MODEL_FLAT24, MODEL_SMALL @@ -363,7 +411,8 @@ PORT pic_port = _linkCmd, NULL, NULL, - ".o" + ".o", + 0 }, { _defaultRules @@ -395,6 +444,7 @@ PORT pic_port = NULL, 1 // code is read only }, + { NULL, NULL }, { +1, 1, 4, 1, 1, 0 }, @@ -420,7 +470,10 @@ PORT pic_port = _process_pragma, /* process a pragma */ NULL, _hasNativeMulFor, + hasExtBitOp, /* hasExtBitOp */ + oclsExpense, /* oclsExpense */ FALSE, + TRUE, /* little endian */ 0, /* leave lt */ 0, /* leave gt */ 1, /* transform <= to ! > */