1
0
mirror of https://github.com/cc65/cc65.git synced 2024-12-23 04:30:10 +00:00

Fixed a bug: If all output data was discarded (by using file = "" in the

linker config), CheckExports was never called, which in turn meant that
the list of all exports was never built. This caused a crash later when
the linker tried to generate a map file. The solution is to separate the
creation of the exports list and the check for unresolved imports.


git-svn-id: svn://svn.cc65.org/cc65/trunk@3360 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
cuz 2005-01-09 13:16:51 +00:00
parent a456e503e4
commit 9cd0b7705c
5 changed files with 29 additions and 13 deletions

View File

@ -262,7 +262,7 @@ void BinWriteTarget (BinDesc* D, struct File* F)
* if we get an unresolved symbol. * if we get an unresolved symbol.
*/ */
D->Undef = 0; /* Reset the counter */ D->Undef = 0; /* Reset the counter */
CheckExports (BinUnresolved, D); CheckUnresolvedImports (BinUnresolved, D);
if (D->Undef > 0) { if (D->Undef > 0) {
/* We had unresolved symbols, cannot create output file */ /* We had unresolved symbols, cannot create output file */
Error ("%u unresolved external(s) found - cannot create output file", D->Undef); Error ("%u unresolved external(s) found - cannot create output file", D->Undef);

View File

@ -6,7 +6,7 @@
/* */ /* */
/* */ /* */
/* */ /* */
/* (C) 1998-2003 Ullrich von Bassewitz */ /* (C) 1998-2005 Ullrich von Bassewitz */
/* Römerstraße 52 */ /* Römerstraße 52 */
/* D-70794 Filderstadt */ /* D-70794 Filderstadt */
/* EMail: uz@cc65.org */ /* EMail: uz@cc65.org */
@ -669,9 +669,9 @@ static void CreateExportPool (void)
void CheckExports (ExpCheckFunc F, void* Data) void CheckExports (void)
/* Check if there are any unresolved symbols. On unresolved symbols, F is /* Setup the list of all exports and check for export/import symbol type
* called (see the comments on ExpCheckFunc in the data section). * mismatches.
*/ */
{ {
/* Create an export pool */ /* Create an export pool */
@ -679,8 +679,16 @@ void CheckExports (ExpCheckFunc F, void* Data)
/* Check for symbol type mismatches */ /* Check for symbol type mismatches */
CheckSymTypes (); CheckSymTypes ();
}
/* Check for unresolved externals (check here for special bin formats) */
void CheckUnresolvedImports (ExpCheckFunc F, void* Data)
/* Check if there are any unresolved imports. On unresolved imports, F is
* called (see the comments on ExpCheckFunc in the data section).
*/
{
/* Check for unresolved externals */
if (ImpOpen != 0) { if (ImpOpen != 0) {
/* Print all open imports */ /* Print all open imports */
PrintUnresolved (F, Data); PrintUnresolved (F, Data);

View File

@ -158,8 +158,13 @@ int IsConstExport (const Export* E);
long GetExportVal (const Export* E); long GetExportVal (const Export* E);
/* Get the value of this export */ /* Get the value of this export */
void CheckExports (ExpCheckFunc F, void* Data); void CheckExports (void);
/* Check if there are any unresolved symbols. On unresolved symbols, F is /* Setup the list of all exports and check for export/import symbol type
* mismatches.
*/
void CheckUnresolvedImports (ExpCheckFunc F, void* Data);
/* Check if there are any unresolved imports. On unresolved imports, F is
* called (see the comments on ExpCheckFunc in the data section). * called (see the comments on ExpCheckFunc in the data section).
*/ */

View File

@ -6,7 +6,7 @@
/* */ /* */
/* */ /* */
/* */ /* */
/* (C) 1998-2003 Ullrich von Bassewitz */ /* (C) 1998-2005 Ullrich von Bassewitz */
/* Römerstrasse 52 */ /* Römerstrasse 52 */
/* D-70794 Filderstadt */ /* D-70794 Filderstadt */
/* EMail: uz@cc65.org */ /* EMail: uz@cc65.org */
@ -512,6 +512,9 @@ int main (int argc, char* argv [])
/* Check module assertions */ /* Check module assertions */
CheckAssertions (); CheckAssertions ();
/* Check for import/export mismatches */
CheckExports ();
/* Create the output file */ /* Create the output file */
CfgWriteTarget (); CfgWriteTarget ();

View File

@ -6,7 +6,7 @@
/* */ /* */
/* */ /* */
/* */ /* */
/* (C) 1999-2003 Ullrich von Bassewitz */ /* (C) 1999-2005 Ullrich von Bassewitz */
/* Römerstraße 52 */ /* Römerstraße 52 */
/* D-70794 Filderstadt */ /* D-70794 Filderstadt */
/* EMail: uz@cc65.org */ /* EMail: uz@cc65.org */
@ -1356,7 +1356,7 @@ void O65WriteTarget (O65Desc* D, File* F)
* if we get an unresolved symbol. * if we get an unresolved symbol.
*/ */
D->Undef = 0; /* Reset the counter */ D->Undef = 0; /* Reset the counter */
CheckExports (O65Unresolved, D); CheckUnresolvedImports (O65Unresolved, D);
if (D->Undef > 0) { if (D->Undef > 0) {
/* We had unresolved symbols, cannot create output file */ /* We had unresolved symbols, cannot create output file */
Error ("%u unresolved external(s) found - cannot create output file", D->Undef); Error ("%u unresolved external(s) found - cannot create output file", D->Undef);