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:
parent
c9b9069208
commit
a2b7ef2b08
6 changed files with 49 additions and 37 deletions
|
@ -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;
|
||||||
|
|
|
@ -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.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -6,8 +6,8 @@
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* (C) 1998-2003 Ullrich von Bassewitz */
|
/* (C) 1998-2010, Ullrich von Bassewitz */
|
||||||
/* Rö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 */
|
||||||
|
|
||||||
|
|
|
@ -6,8 +6,8 @@
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* (C) 1998-2003 Ullrich von Bassewitz */
|
/* (C) 1998-2010, Ullrich von Bassewitz */
|
||||||
/* Rö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 */
|
||||||
|
|
||||||
|
|
|
@ -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 ();
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue