X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fld65%2Fobjdata.c;h=2a7a0ac1d9a9f1161c6fe246da4e2294193c68fc;hb=35e1184901ca38bdb2e56d154ed3b71f6096eacc;hp=1635c14a07fa0263e276ecf3f709fcc03a2be79d;hpb=17e9b810459d123f09374b8d4a2b43b1ea4926e5;p=cc65 diff --git a/src/ld65/objdata.c b/src/ld65/objdata.c index 1635c14a0..2a7a0ac1d 100644 --- a/src/ld65/objdata.c +++ b/src/ld65/objdata.c @@ -79,18 +79,22 @@ ObjData* NewObjData (void) O->MTime = 0; O->Start = 0; O->Flags = 0; + O->HLLSymBaseId = 0; O->SymBaseId = 0; O->ScopeBaseId = 0; + O->SpanBaseId = 0; O->Files = EmptyCollection; O->Sections = EmptyCollection; O->Exports = EmptyCollection; O->Imports = EmptyCollection; O->DbgSyms = EmptyCollection; + O->HLLDbgSyms = EmptyCollection; O->LineInfos = EmptyCollection; O->StringCount = 0; O->Strings = 0; O->Assertions = EmptyCollection; O->Scopes = EmptyCollection; + O->Spans = EmptyCollection; /* Return the new entry */ return O; @@ -120,6 +124,7 @@ void FreeObjData (ObjData* O) } DoneCollection (&O->Imports); DoneCollection (&O->DbgSyms); + DoneCollection (&O->HLLDbgSyms); for (I = 0; I < CollCount (&O->LineInfos); ++I) { FreeLineInfo (CollAtUnchecked (&O->LineInfos, I)); @@ -128,6 +133,11 @@ void FreeObjData (ObjData* O) xfree (O->Strings); DoneCollection (&O->Assertions); DoneCollection (&O->Scopes); + for (I = 0; I < CollCount (&O->Spans); ++I) { + FreeSpan (CollAtUnchecked (&O->Spans, I)); + } + DoneCollection (&O->Spans); + xfree (O); } @@ -192,7 +202,15 @@ const char* GetObjFileName (const ObjData* O) -struct Section* GetObjSection (ObjData* O, unsigned Id) +const struct StrBuf* GetObjString (const ObjData* Obj, unsigned Id) +/* Get a string from an object file checking for an invalid index */ +{ + return GetStrBuf (MakeGlobalStringId (Obj, Id)); +} + + + +struct Section* GetObjSection (const ObjData* O, unsigned Id) /* Get a section from an object file checking for a valid index */ { if (Id >= CollCount (&O->Sections)) { @@ -204,7 +222,43 @@ struct Section* GetObjSection (ObjData* O, unsigned Id) -struct Scope* GetObjScope (ObjData* O, unsigned Id) +struct Import* GetObjImport (const ObjData* O, unsigned Id) +/* Get an import from an object file checking for a valid index */ +{ + if (Id >= CollCount (&O->Imports)) { + Error ("Invalid import index (%u) in module `%s'", + Id, GetObjFileName (O)); + } + return CollAtUnchecked (&O->Imports, Id); +} + + + +struct Export* GetObjExport (const ObjData* O, unsigned Id) +/* Get an export from an object file checking for a valid index */ +{ + if (Id >= CollCount (&O->Exports)) { + Error ("Invalid export index (%u) in module `%s'", + Id, GetObjFileName (O)); + } + return CollAtUnchecked (&O->Exports, Id); +} + + + +struct DbgSym* GetObjDbgSym (const ObjData* O, unsigned Id) +/* Get a debug symbol from an object file checking for a valid index */ +{ + if (Id >= CollCount (&O->DbgSyms)) { + Error ("Invalid debug symbol index (%u) in module `%s'", + Id, GetObjFileName (O)); + } + return CollAtUnchecked (&O->DbgSyms, Id); +} + + + +struct Scope* GetObjScope (const ObjData* O, unsigned Id) /* Get a scope from an object file checking for a valid index */ { if (Id >= CollCount (&O->Scopes)) { @@ -216,6 +270,14 @@ struct Scope* GetObjScope (ObjData* O, unsigned Id) +unsigned ObjDataCount (void) +/* Return the total number of modules */ +{ + return CollCount (&ObjDataList); +} + + + void PrintDbgModules (FILE* F) /* Output the modules to a debug info file */ { @@ -250,3 +312,4 @@ void PrintDbgModules (FILE* F) +