This commit was generated by cvs2svn to compensate for changes in r2,
which included commits to RCS files with non-trunk default branches. git-svn-id: svn://svn.cc65.org/cc65/trunk@3 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
164
src/ld65/exports.h
Normal file
164
src/ld65/exports.h
Normal file
@@ -0,0 +1,164 @@
|
||||
/*****************************************************************************/
|
||||
/* */
|
||||
/* exports.h */
|
||||
/* */
|
||||
/* Exports handing for the ld65 linker */
|
||||
/* */
|
||||
/* */
|
||||
/* */
|
||||
/* (C) 1998 Ullrich von Bassewitz */
|
||||
/* Wacholderweg 14 */
|
||||
/* D-70597 Stuttgart */
|
||||
/* EMail: uz@musoftware.de */
|
||||
/* */
|
||||
/* */
|
||||
/* This software is provided 'as-is', without any expressed or implied */
|
||||
/* warranty. In no event will the authors be held liable for any damages */
|
||||
/* arising from the use of this software. */
|
||||
/* */
|
||||
/* Permission is granted to anyone to use this software for any purpose, */
|
||||
/* including commercial applications, and to alter it and redistribute it */
|
||||
/* freely, subject to the following restrictions: */
|
||||
/* */
|
||||
/* 1. The origin of this software must not be misrepresented; you must not */
|
||||
/* claim that you wrote the original software. If you use this software */
|
||||
/* in a product, an acknowledgment in the product documentation would be */
|
||||
/* appreciated but is not required. */
|
||||
/* 2. Altered source versions must be plainly marked as such, and must not */
|
||||
/* be misrepresented as being the original software. */
|
||||
/* 3. This notice may not be removed or altered from any source */
|
||||
/* distribution. */
|
||||
/* */
|
||||
/*****************************************************************************/
|
||||
|
||||
|
||||
|
||||
#ifndef EXPORTS_H
|
||||
#define EXPORTS_H
|
||||
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include "../common/exprdefs.h"
|
||||
#include "../common/filepos.h"
|
||||
|
||||
#include "objdata.h"
|
||||
#include "config.h"
|
||||
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Data */
|
||||
/*****************************************************************************/
|
||||
|
||||
|
||||
|
||||
/* Import symbol structure */
|
||||
typedef struct Import_ Import;
|
||||
struct Import_ {
|
||||
Import* Next; /* Single linked list */
|
||||
ObjData* Obj; /* Object file that imports the name */
|
||||
FilePos Pos; /* File position of reference */
|
||||
union {
|
||||
struct Export_* Exp; /* Matching export for this import */
|
||||
const char* Name; /* Name if not in table */
|
||||
} V;
|
||||
unsigned char Type; /* Type of import */
|
||||
};
|
||||
|
||||
|
||||
|
||||
/* Export symbol structure */
|
||||
typedef struct Export_ Export;
|
||||
struct Export_ {
|
||||
Export* Next; /* Hash table link */
|
||||
unsigned Flags; /* Generic flags */
|
||||
ObjData* Obj; /* Object file that exports the name */
|
||||
unsigned ImpCount; /* How many imports for this symbol? */
|
||||
Import* ImpList; /* List of imports for this symbol */
|
||||
FilePos Pos; /* File position of definition */
|
||||
ExprNode* Expr; /* Expression (0 if not def'd) */
|
||||
unsigned char Type; /* Type of export */
|
||||
char Name [1]; /* Name - dynamically allocated */
|
||||
};
|
||||
|
||||
|
||||
|
||||
/* Prototype of a function that is called if an undefined symbol is found. It
|
||||
* may check if the symbol is an external symbol (for binary formats that
|
||||
* support externals) and will return zero if the symbol could not be
|
||||
* resolved, or a value != zero if the symbol could be resolved. The
|
||||
* CheckExports routine will print out the missing symbol in the first case.
|
||||
*/
|
||||
typedef int (*ExpCheckFunc) (const char* Name, void* Data);
|
||||
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Code */
|
||||
/*****************************************************************************/
|
||||
|
||||
|
||||
|
||||
Import* ReadImport (FILE* F, ObjData* Obj);
|
||||
/* Read an import from a file and insert it into the table */
|
||||
|
||||
void InsertImport (Import* I);
|
||||
/* Insert an import into the table */
|
||||
|
||||
Export* ReadExport (FILE* F, ObjData* Obj);
|
||||
/* Read an export from a file */
|
||||
|
||||
void InsertExport (Export* E);
|
||||
/* Insert an exported identifier and check if it's already in the list */
|
||||
|
||||
Export* CreateConstExport (const char* Name, long Value);
|
||||
/* Create an export for a literal date */
|
||||
|
||||
Export* CreateMemExport (const char* Name, Memory* Mem, unsigned long Offs);
|
||||
/* Create an relative export for a memory area offset */
|
||||
|
||||
int IsUnresolved (const char* Name);
|
||||
/* Check if this symbol is an unresolved export */
|
||||
|
||||
int IsConstExport (const Export* E);
|
||||
/* Return true if the expression associated with this export is const */
|
||||
|
||||
long GetExportVal (const Export* E);
|
||||
/* Get the value of this export */
|
||||
|
||||
void CheckExports (ExpCheckFunc F, void* Data);
|
||||
/* Check if there are any unresolved symbols. On unresolved symbols, F is
|
||||
* called (see the comments on ExpCheckFunc in the data section).
|
||||
*/
|
||||
|
||||
void PrintExportMap (FILE* F);
|
||||
/* Print an export map to the given file */
|
||||
|
||||
void PrintImportMap (FILE* F);
|
||||
/* Print an import map to the given file */
|
||||
|
||||
void PrintExportLabels (FILE* F);
|
||||
/* Print the exports in a VICE label file */
|
||||
|
||||
void MarkExport (Export* E);
|
||||
/* Mark the export */
|
||||
|
||||
void UnmarkExport (Export* E);
|
||||
/* Remove the mark from the export */
|
||||
|
||||
int ExportHasMark (Export* E);
|
||||
/* Return true if the export has a mark */
|
||||
|
||||
void CircularRefError (const Export* E);
|
||||
/* Print an error about a circular reference using to define the given export */
|
||||
|
||||
|
||||
|
||||
/* End of exports.h */
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user