/* */
/* */
/* */
-/* (C) 1998-2010, Ullrich von Bassewitz */
+/* (C) 1998-2012, Ullrich von Bassewitz */
/* Roemerstrasse 52 */
/* D-70794 Filderstadt */
/* EMail: uz@cc65.org */
#include <stdio.h>
/* common */
+#include "coll.h"
#include "exprdefs.h"
+/* Forwards */
+struct MemoryArea;
+
/* Segment structure */
typedef struct Segment Segment;
struct Segment {
unsigned Name; /* Name index of the segment */
unsigned Id; /* Segment id for debug info */
- Segment* Next; /* Hash list */
- Segment* List; /* List of all segments */
- struct Section* SecRoot; /* Section list */
- struct Section* SecLast; /* Pointer to last section */
+ Segment* Next; /* Hash list */
+ unsigned Flags; /* Segment flags */
+ Collection Sections; /* Sections in this segment */
+ struct MemoryArea* MemArea; /* Run memory area once placed */
unsigned long PC; /* PC were this segment is located */
unsigned long Size; /* Size of data so far */
- struct ObjData* AlignObj; /* Module that requested the alignment */
- unsigned char Align; /* Alignment needed */
+ const char* OutputName; /* Name of output file or NULL */
+ unsigned long OutputOffs; /* Offset in output file */
+ unsigned long Alignment; /* Alignment needed */
unsigned char FillVal; /* Value to use for fill bytes */
unsigned char AddrSize; /* Address size of segment */
unsigned char ReadOnly; /* True for readonly segments (config) */
- unsigned char Relocatable; /* True if the segment is relocatable */
unsigned char Dumped; /* Did we dump this segment? */
};
struct Section {
Section* Next; /* List of sections in a segment */
Segment* Seg; /* Segment that contains the section */
+ struct ObjData* Obj; /* Object file this section comes from */
struct Fragment* FragRoot; /* Fragment list */
struct Fragment* FragLast; /* Pointer to last fragment */
unsigned long Offs; /* Offset into the segment */
unsigned long Size; /* Size of the section */
- unsigned char Align; /* Alignment */
- unsigned char Fill; /* Fill bytes for alignment */
+ unsigned long Fill; /* Fill bytes for alignment */
+ unsigned long Alignment; /* Alignment */
unsigned char AddrSize; /* Address size of segment */
};
* message and may be NULL if the segment is linker generated.
*/
-Section* NewSection (Segment* Seg, unsigned char Align, unsigned char AddrSize);
+Section* NewSection (Segment* Seg, unsigned long Alignment, unsigned char AddrSize);
/* Create a new section for the given segment */
Section* ReadSection (FILE* F, struct ObjData* O);
* check and return one of the SEG_EXPR_xxx codes.
*/
-void SegWrite (FILE* Tgt, Segment* S, SegWriteFunc F, void* Data);
+void SegWrite (const char* TgtName, FILE* Tgt, Segment* S, SegWriteFunc F, void* Data);
/* Write the data from the given segment to a file. For expressions, F is
* called (see description of SegWriteFunc above).
*/
+unsigned SegmentCount (void);
+/* Return the total number of segments */
+
void PrintSegmentMap (FILE* F);
/* Print a segment map to the given file */