/* */
/* */
/* */
-/* (C) 1998-2003 Ullrich von Bassewitz */
+/* (C) 1998-2004 Ullrich von Bassewitz */
/* Römerstraße 52 */
/* D-70794 Filderstadt */
/* EMail: uz@cc65.org */
+void SymExportFromGlobal (SymEntry* S)
+/* Called at the end of assembly. Converts a global symbol that is defined
+ * into an export.
+ */
+{
+ /* Remove the global flag and make the symbol an export */
+ S->Flags &= ~SF_GLOBAL;
+ S->Flags |= SF_EXPORT;
+}
+
+
+
+void SymImportFromGlobal (SymEntry* S)
+/* Called at the end of assembly. Converts a global symbol that is undefined
+ * into an import.
+ */
+{
+ /* Remove the global flag and make it an import */
+ S->Flags &= ~SF_GLOBAL;
+ S->Flags |= SF_IMPORT;
+}
+
+
+
int SymIsConst (SymEntry* S, long* Val)
/* Return true if the given symbol has a constant value. If Val is not NULL
* and the symbol has a constant value, store it's value there.
/* */
/* */
/* */
-/* (C) 1998-2003 Ullrich von Bassewitz */
+/* (C) 1998-2004 Ullrich von Bassewitz */
/* Römerstraße 52 */
/* D-70794 Filderstadt */
/* EMail: uz@cc65.org */
* mark the symbol as an export. Initializers may never be zero page symbols.
*/
+void SymExportFromGlobal (SymEntry* S);
+/* Called at the end of assembly. Converts a global symbol that is defined
+ * into an export.
+ */
+
+void SymImportFromGlobal (SymEntry* S);
+/* Called at the end of assembly. Converts a global symbol that is undefined
+ * into an import.
+ */
+
#if defined(HAVE_INLINE)
INLINE int SymIsDef (const SymEntry* S)
/* Return true if the given symbol is already defined */
# define SymIsImport(S) (((S)->Flags & SF_IMPORT) != 0)
#endif
+#if defined(HAVE_INLINE)
+INLINE int SymIsExport (const SymEntry* S)
+/* Return true if the given symbol is marked as export */
+{
+ /* Check the export flag */
+ return (S->Flags & SF_EXPORT) != 0;
+}
+#else
+# define SymIsExport(S) (((S)->Flags & SF_EXPORT) != 0)
+#endif
+
int SymIsConst (SymEntry* Sym, long* Val);
/* Return true if the given symbol has a constant value. If Val is not NULL
* and the symbol has a constant value, store it's value there.
/* */
/* */
/* */
-/* (C) 1998-2003 Ullrich von Bassewitz */
+/* (C) 1998-2004 Ullrich von Bassewitz */
/* Römerstraße 52 */
/* D-70794 Filderstadt */
/* EMail: uz@cc65.org */
* already defined, otherwise mark it as import.
*/
if (S->Flags & SF_GLOBAL) {
- S->Flags &= ~SF_GLOBAL;
if (S->Flags & SF_DEFINED) {
- S->Flags |= SF_EXPORT;
+ SymExportFromGlobal (S);
} else {
- S->Flags |= SF_IMPORT;
+ SymImportFromGlobal (S);
}
}
ED_Init (&ED);
StudyExpr (S->Expr, &ED);
S->AddrSize = ED.AddrSize;
+ if (SymIsExport (S)) {
+ if (S->ExportSize == ADDR_SIZE_DEFAULT) {
+ /* Use the real export size */
+ S->ExportSize = S->AddrSize;
+ } else if (S->AddrSize > S->ExportSize) {
+ /* We're exporting a symbol smaller than it actually is */
+ PWarning (&S->Pos, 1,
+ "Symbol `%s' is %s but exported %s",
+ GetSymName (S), AddrSizeToStr (S->AddrSize),
+ AddrSizeToStr (S->ExportSize));
+ }
+ }
ED_Done (&ED);
}
}