mach.h - scc - simple c99 compiler
 (HTM) git clone git://git.simple-cc.org/scc
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Submodules
 (DIR) README
 (DIR) LICENSE
       ---
       mach.h (2545B)
       ---
            1 typedef struct segment Segment;
            2 typedef struct section Section;
            3 typedef struct symbol Symbol;
            4 typedef struct objops Objops;
            5 typedef struct obj Obj;
            6 typedef struct map Map;
            7 typedef struct mapsec Mapsec;
            8 
            9 /**
           10  * enum sectype - Section property flags
           11  * @SREAD: The segment has read rights
           12  * @SWRITE: The segment has write rights
           13  * @SEXEC: The segment has execution rights
           14  * @SLOAD: Segment data is loaded from disk to memory
           15  * @SALLOC: Segment is allocated in memory
           16  * @SRELOC: Segment has to be relocated
           17  * @SABS: Segment is loaded in a specific address
           18  */
           19 enum sectype {
           20         SREAD   = 1 << 0,
           21         SWRITE  = 1 << 1,
           22         SEXEC   = 1 << 2,
           23         SLOAD   = 1 << 3,
           24         SALLOC  = 1 << 4,
           25         SRELOC  = 1 << 5,
           26         SABS    = 1 << 6,
           27 };
           28 
           29 enum symtype {
           30         SYMNOTYPE,
           31         SYMOBJECT,
           32         SYMFUNC,
           33         SYMSECTION,
           34         SYMFILE,
           35         SYMCOMMON,
           36 };
           37 
           38 struct obj {
           39         char *index;
           40         Objops *ops;
           41         int type;
           42         long pos;
           43         void *data;
           44         Obj *next;
           45 };
           46 
           47 struct segment {
           48         char *name;
           49         unsigned long long base;
           50         unsigned long long size;
           51         unsigned flags;
           52         int index;
           53         int type;
           54         int align;
           55         int nsec;
           56         Section **sections;
           57 };
           58 
           59 struct section {
           60         char *name;
           61         unsigned long long base;
           62         unsigned long long size;
           63 
           64         unsigned flags;
           65         int index;
           66         int align;
           67         int fill;
           68         char type;
           69 };
           70 
           71 /**
           72  * @stype: Used internally by libmach
           73  * @dtype: Coff debug type
           74  * @flags: Used only by the assembler
           75  */
           76 struct symbol {
           77         char *name;
           78         unsigned long long size;
           79         unsigned long long value;
           80         int index;
           81         int section;
           82         char type;
           83         int stype;
           84         int dtype;
           85         unsigned flags;
           86 };
           87 
           88 #ifdef stdin
           89 extern int archive(FILE *);
           90 extern long armember(FILE *, char *);
           91 
           92 extern int objprobe(FILE *, char **);
           93 
           94 extern int readobj(Obj *, FILE *);
           95 extern int writeobj(Obj *, Map *, FILE *);
           96 
           97 extern Map *loadmap(Obj *, FILE *);
           98 
           99 extern int setmap(Map *,
          100                   char *,
          101                   FILE *,
          102                   unsigned long long,
          103                   unsigned long long,
          104                   long);
          105 
          106 extern int setindex(int, long, char **, long *, FILE *);
          107 extern int getindex(int, long *, char ***, long **, FILE *);
          108 
          109 #endif
          110 
          111 extern Map *newmap(Map *, int);
          112 extern Map *remap(Map *, int);
          113 
          114 extern int objtype(char *);
          115 extern Obj *newobj(int);
          116 extern void delobj(Obj *);
          117 
          118 extern int strip(Obj *);
          119 extern int pc2line(Obj *, unsigned long long, char *, int *);
          120 extern int rebase(Obj *, int, unsigned long long);
          121 
          122 extern int findsec(Map *, char *);
          123 
          124 extern Symbol *getsym(Obj *, int *, Symbol *);
          125 extern Symbol *setsym(Obj *, int *, Symbol *);
          126 extern Section *getsec(Obj *, int *, Section *);
          127 extern Section *setsec(Obj *, int *, Section *);