X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2FSDCCmain.c;h=86440ad3e0adf447826de80b97ba6cbe1a5036c1;hb=26ca26f89a9800d7e0baf3d2747c324188bbd662;hp=75dbcf8c5e0ebedbf3feb5a6f16bbf3dc5a9eac1;hpb=e76852b452d77ea7be72440493797b96f3504a5e;p=fw%2Fsdcc diff --git a/src/SDCCmain.c b/src/SDCCmain.c index 75dbcf8c..86440ad3 100644 --- a/src/SDCCmain.c +++ b/src/SDCCmain.c @@ -96,6 +96,7 @@ char buffer[PATH_MAX * 2]; #define OPTION_STACK_8BIT "--stack-8bit" #define OPTION_OUT_FMT_IHX "--out-fmt-ihx" +#define OPTION_OUT_FMT_S19 "--out-fmt-s19" #define OPTION_LARGE_MODEL "--model-large" #define OPTION_MEDIUM_MODEL "--model-medium" #define OPTION_SMALL_MODEL "--model-small" @@ -239,7 +240,7 @@ optionsTable[] = { { 'L', NULL, NULL, "Add the next field to the library search path" }, { 0, OPTION_LIB_PATH, NULL, " use this path to search for libraries" }, { 0, OPTION_OUT_FMT_IHX, NULL, "Output in Intel hex format" }, - { 0, "--out-fmt-s19", &options.out_fmt, "Output in S19 hex format" }, + { 0, OPTION_OUT_FMT_S19, NULL, "Output in S19 hex format" }, { 0, OPTION_XRAM_LOC, NULL, " External Ram start location" }, { 0, OPTION_XRAM_SIZE, NULL, " External Ram size" }, { 0, OPTION_IRAM_SIZE, NULL, " Internal Ram size" }, @@ -882,6 +883,12 @@ parseCmdLine (int argc, char **argv) continue; } + if (strcmp (argv[i], OPTION_OUT_FMT_S19) == 0) + { + options.out_fmt = 1; + continue; + } + if (strcmp (argv[i], OPTION_LARGE_MODEL) == 0) { _setModel (MODEL_LARGE, argv[i]); @@ -1344,6 +1351,12 @@ parseCmdLine (int argc, char **argv) options.float_rent++; } + /* mcs51 has an assembly coded float library that's always reentrant */ + if (TARGET_IS_MCS51) + { + options.float_rent++; + } + /* set up external stack location if not explicitly specified */ if (!options.xstack_loc) options.xstack_loc = options.xdata_loc; @@ -1474,7 +1487,8 @@ linkEdit (char **envp) WRITE_SEG_LOC (BIT_NAME, 0); /* stack start */ - if ( (options.stack_loc) && (options.stack_loc<0x100) ) + if ( (options.stack_loc) && (options.stack_loc<0x100) && + !TARGET_IS_HC08) { WRITE_SEG_LOC ("SSEG", options.stack_loc); } @@ -1617,14 +1631,20 @@ linkEdit (char **envp) It is very important for this file to be first on the linking proccess so the areas are set in the correct order, expecially _GSINIT*/ if ((TARGET_IS_Z80 || TARGET_IS_GBZ80) && - !options.no_std_crt0 && !options.nostdlib) /*For the z80, gbz80*/ + !options.no_std_crt0) /*For the z80, gbz80*/ { char crt0path[PATH_MAX]; FILE * crt0fp; - for (s = setFirstItem(libDirsSet); s != NULL; s = setNextItem(libDirsSet)) + set *tempSet=NULL; + + tempSet = appendStrSet(libDirsSet, NULL, DIR_SEPARATOR_STRING); + tempSet = appendStrSet(libDirsSet, NULL, c); + mergeSets(&tempSet, libPathsSet); + + for (s = setFirstItem(tempSet); s != NULL; s = setNextItem(tempSet)) { - sprintf (crt0path, "%s%s%s%scrt0.o", - s, DIR_SEPARATOR_STRING, c, DIR_SEPARATOR_STRING); + sprintf (crt0path, "%s%scrt0.o", + s, DIR_SEPARATOR_STRING); crt0fp=fopen(crt0path, "r"); if(crt0fp!=NULL)/*Found it!*/ @@ -2004,17 +2024,28 @@ static void setIncludePath(void) { char *p; + set *tempSet=NULL; /* * Search logic: * - * 1. - $SDCC_INCLUDE - * 2. - $SDCC_HOME/PREFIX2DATA_DIR/INCLUDE_DIR_SUFFIX - * 3. - path(argv[0])/BIN2DATA_DIR/INCLUDE_DIR_SUFFIX - * 4. - DATADIR/INCLUDE_DIR_SUFFIX (only on *nix) + * 1. - $SDCC_INCLUDE/target + * 2. - $SDCC_HOME/PREFIX2DATA_DIR/INCLUDE_DIR_SUFFIX/target + * 3. - path(argv[0])/BIN2DATA_DIR/INCLUDE_DIR_SUFFIX/target + * 4. - DATADIR/INCLUDE_DIR_SUFFIX/target (only on *nix) + * 5. - $SDCC_INCLUDE + * 6. - $SDCC_HOME/PREFIX2DATA_DIR/INCLUDE_DIR_SUFFIX + * 7. - path(argv[0])/BIN2DATA_DIR/INCLUDE_DIR_SUFFIX + * 8. - DATADIR/INCLUDE_DIR_SUFFIX (only on *nix) */ - includeDirsSet = appendStrSet(dataDirsSet, NULL, INCLUDE_DIR_SUFFIX); + if (options.nostdinc) + return; + + tempSet = appendStrSet(dataDirsSet, NULL, INCLUDE_DIR_SUFFIX); + includeDirsSet = appendStrSet(tempSet, NULL, DIR_SEPARATOR_STRING); + includeDirsSet = appendStrSet(includeDirsSet, NULL, port->target); + mergeSets(&includeDirsSet, tempSet); if ((p = getenv(SDCC_INCLUDE_NAME)) != NULL) addSetHead(&includeDirsSet, p); @@ -2042,6 +2073,9 @@ setLibPath(void) * 4. - DATADIR/LIB_DIR_SUFFIX/ (only on *nix) */ + if (options.nostdlib) + return; + libDirsSet = appendStrSet(dataDirsSet, NULL, LIB_DIR_SUFFIX); if ((p = getenv(SDCC_LIB_NAME)) != NULL)