Merge CfgProcess and CfgAssignSegments because both do some sort of

postprocessing. Print a warning if %O was used in the config file and the
output file name is changed later using -o.


git-svn-id: svn://svn.cc65.org/cc65/trunk@4842 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
uz 2010-11-09 21:01:27 +00:00
parent c9b9069208
commit a2b7ef2b08
6 changed files with 49 additions and 37 deletions

View file

@ -1683,17 +1683,6 @@ static void ProcessSymbols (void)
void CfgProcess (void)
/* Process the config file after reading in object files and libraries */
{
ProcessSymbols (); /* ######## */
ProcessMemory ();
ProcessSegments ();
ProcessFormats ();
}
static void CreateRunDefines (SegDesc* S, unsigned long SegAddr) static void CreateRunDefines (SegDesc* S, unsigned long SegAddr)
/* Create the defines for a RUN segment */ /* Create the defines for a RUN segment */
{ {
@ -1722,20 +1711,28 @@ static void CreateLoadDefines (SegDesc* S, unsigned long SegAddr)
unsigned CfgAssignSegments (void) unsigned CfgProcess (void)
/* Assign segments, define linker symbols where requested. The function will /* Process the config file after reading in object files and libraries. This
* return the number of memory area overflows (so zero means anything went ok). * includes postprocessing of the config file data but also assigning segments
* and defining segment/memory area related symbols. The function will return
* the number of memory area overflows (so zero means anything went ok).
* In case of overflows, a short mapfile can be generated later, to ease the * In case of overflows, a short mapfile can be generated later, to ease the
* task of rearranging segments for the user. * task of rearranging segments for the user.
*/ */
{ {
unsigned Overflows = 0; unsigned Overflows = 0;
unsigned I;
/* Do postprocessing of the config file data */
ProcessSymbols (); /* ######## */
ProcessMemory ();
ProcessSegments ();
ProcessFormats ();
/* Walk through each of the memory sections. Add up the sizes and check /* Walk through each of the memory sections. Add up the sizes and check
* for an overflow of the section. Assign the start addresses of the * for an overflow of the section. Assign the start addresses of the
* segments while doing this. * segments while doing this.
*/ */
unsigned I;
for (I = 0; I < CollCount (&MemoryAreas); ++I) { for (I = 0; I < CollCount (&MemoryAreas); ++I) {
unsigned J; unsigned J;

View file

@ -102,12 +102,11 @@ struct SegDesc {
void CfgRead (void); void CfgRead (void);
/* Read the configuration */ /* Read the configuration */
void CfgProcess (void); unsigned CfgProcess (void);
/* Process the config file after reading in object files and libraries */ /* Process the config file after reading in object files and libraries. This
* includes postprocessing of the config file data but also assigning segments
unsigned CfgAssignSegments (void); * and defining segment/memory area related symbols. The function will return
/* Assign segments, define linker symbols where requested. The function will * the number of memory area overflows (so zero means anything went ok).
* return the number of memory area overflows (so zero means anything went ok).
* In case of overflows, a short mapfile can be generated later, to ease the * In case of overflows, a short mapfile can be generated later, to ease the
* task of rearranging segments for the user. * task of rearranging segments for the user.
*/ */

View file

@ -6,8 +6,8 @@
/* */ /* */
/* */ /* */
/* */ /* */
/* (C) 1998-2003 Ullrich von Bassewitz */ /* (C) 1998-2010, Ullrich von Bassewitz */
/* merstrasse 52 */ /* Roemerstrasse 52 */
/* D-70794 Filderstadt */ /* D-70794 Filderstadt */
/* EMail: uz@cc65.org */ /* EMail: uz@cc65.org */
/* */ /* */
@ -44,6 +44,7 @@
const char* OutputName = "a.out"; /* Name of output file */ const char* OutputName = "a.out"; /* Name of output file */
unsigned OutputNameUsed = 0; /* Output name was used by %O */
unsigned ModuleId = 0; /* Id for o65 module */ unsigned ModuleId = 0; /* Id for o65 module */

View file

@ -6,8 +6,8 @@
/* */ /* */
/* */ /* */
/* */ /* */
/* (C) 1998-2003 Ullrich von Bassewitz */ /* (C) 1998-2010, Ullrich von Bassewitz */
/* merstrasse 52 */ /* Roemerstrasse 52 */
/* D-70794 Filderstadt */ /* D-70794 Filderstadt */
/* EMail: uz@cc65.org */ /* EMail: uz@cc65.org */
/* */ /* */
@ -45,6 +45,7 @@
extern const char* OutputName; /* Name of output file */ extern const char* OutputName; /* Name of output file */
extern unsigned OutputNameUsed; /* Output name was used by %O */
extern unsigned ModuleId; /* Id for o65 module */ extern unsigned ModuleId; /* Id for o65 module */

View file

@ -449,6 +449,21 @@ static void OptObjPath (const char* Opt attribute ((unused)), const char* Arg)
static void OptOutputName (const char* Opt, const char* Arg)
/* Give the name of the output file */
{
/* If the name of the output file has been used in the config before
* (by using %O) we're actually changing it later, which - in most cases -
* gives unexpected results, so emit a warning in this case.
*/
if (OutputNameUsed) {
Warning ("Option `%s' should preceede options `-t' or `-C'", Opt);
}
OutputName = Arg;
}
static void OptStartAddr (const char* Opt, const char* Arg) static void OptStartAddr (const char* Opt, const char* Arg)
/* Set the default start address */ /* Set the default start address */
{ {
@ -574,7 +589,7 @@ int main (int argc, char* argv [])
break; break;
case 'o': case 'o':
OutputName = GetArg (&I, 2); OptOutputName (Arg, GetArg (&I, 2));
break; break;
case 't': case 't':
@ -652,14 +667,11 @@ int main (int argc, char* argv [])
/* Create the condes tables if requested */ /* Create the condes tables if requested */
ConDesCreate (); ConDesCreate ();
/* Process data from the config file */ /* Process data from the config file. Assign start addresses for the
CfgProcess (); * segments, define linker symbols. The function will return the number
* of memory area overflows (zero on success).
/* Assign start addresses for the segments, define linker symbols. The
* function will return the number of memory area overflows (zero on
* success).
*/ */
MemoryAreaOverflows = CfgAssignSegments (); MemoryAreaOverflows = CfgProcess ();
/* Check module assertions */ /* Check module assertions */
CheckAssertions (); CheckAssertions ();

View file

@ -200,6 +200,7 @@ static void StrVal (void)
if (OutputName) { if (OutputName) {
SB_AppendStr (&CfgSVal, OutputName); SB_AppendStr (&CfgSVal, OutputName);
} }
OutputNameUsed = 1;
NextChar (); NextChar ();
break; break;
@ -378,6 +379,7 @@ Again:
SB_Clear (&CfgSVal); SB_Clear (&CfgSVal);
} }
SB_Terminate (&CfgSVal); SB_Terminate (&CfgSVal);
OutputNameUsed = 1;
CfgTok = CFGTOK_STRCON; CfgTok = CFGTOK_STRCON;
break; break;