Annotation of GNUtools/cctools/include/stuff/breakout.h, revision 1.1

1.1     ! root        1: #import "stuff/ofile.h"
        !             2: 
        !             3: /*
        !             4:  * The input files are broken out in to their object files and then placed in
        !             5:  * these structures.  These structures are then used to edit the object files'
        !             6:  * symbol table.  And then finally used to reassemble the object file for
        !             7:  * output.
        !             8:  */
        !             9: struct arch {
        !            10:     char *file_name;           /* name of file this arch came from */
        !            11:     enum ofile_type type;      /* The type of file for this architecture */
        !            12:                                /*  can be OFILE_ARCHIVE, OFILE_Mach_O or */
        !            13:                                /*  OFILE_UNKNOWN. */
        !            14:     struct fat_arch *fat_arch; /* If this came from fat file this is valid */
        !            15:                                /*  and not NULL (needed for the align value */
        !            16:                                /*  and to output a fat file if only one arch)*/
        !            17:     char *fat_arch_name;       /* If this came from fat file this is valid */
        !            18:                                /*  and is tthe name of this architecture */
        !            19:                                /*  (used for error messages). */
        !            20: 
        !            21:     /* if this is an archive: the members of this archive */
        !            22:     struct member *members;    /* the members of the library for this arch */
        !            23:     unsigned long nmembers;    /* the number of the above members */
        !            24:     /*
        !            25:      * The output table of contents (toc) for this arch in the library (this
        !            26:      * must be recreated, or at least the time of the toc member set, when
        !            27:      * the output is modified because modifiy time is shared by all libraries
        !            28:      * in the file).
        !            29:      */
        !            30:     unsigned long  toc_size;   /* total size of the toc including ar_hdr */
        !            31:     struct ar_hdr  toc_ar_hdr; /* the archive header for this member */
        !            32:     struct ranlib *toc_ranlibs;        /* ranlib structs */
        !            33:     unsigned long  toc_nranlibs;/* number of ranlib structs */
        !            34:     char         *toc_strings; /* strings of symbol names for ranlib structs */
        !            35:     unsigned long  toc_strsize;        /* number of bytes for the strings above */
        !            36:     unsigned long library_size;        /* current working size and final output size */
        !            37:                                /*  for this arch when it's a library (used */
        !            38:                                /*  for creating the toc entries). */
        !            39: 
        !            40:     /* if this is an object file: the object file */
        !            41:     struct object *object;     /* the object file */
        !            42: 
        !            43:     /* if this is an unknown file: the addr and size of the file */
        !            44:     char *unknown_addr;
        !            45:     unsigned long unknown_size;
        !            46: };
        !            47: 
        !            48: struct member {
        !            49:     enum ofile_type type;      /* the type of this member can be OFILE_Mach_O*/
        !            50:                                /*  or OFILE_UNKNOWN */
        !            51:     struct ar_hdr *ar_hdr;     /* the archive header for this member */
        !            52:     unsigned long offset;      /* current working offset and final offset */
        !            53:                                /*  use in creating the table of contents */
        !            54: 
        !            55:     /* if this member is an object file: the object file */
        !            56:     struct object *object;     /* the object file */
        !            57: 
        !            58:     /* if this member is an unknown file: the addr and size of the member */
        !            59:     char *unknown_addr;
        !            60:     unsigned long unknown_size;
        !            61: 
        !            62:     /*
        !            63:      * If this member was created from a file then input_file_name is set else
        !            64:      * it is NULL and input_ar_hdr is set (these are recorded to allow
        !            65:      * warn_member() messages to be printed)
        !            66:      */
        !            67:     char *input_file_name;
        !            68:     struct ar_hdr *input_ar_hdr;
        !            69: };
        !            70: 
        !            71: struct object {
        !            72:     char *object_addr;             /* the address of the object file */
        !            73:     unsigned long object_size;     /* the size of the object file on input */
        !            74:     enum byte_sex object_byte_sex;  /* the byte sex of the object file */
        !            75:     struct mach_header *mh;        /* the mach_header of the object file */
        !            76:     struct load_command                    /* the start of the load commands */
        !            77:        *load_commands;
        !            78:     struct symtab_command *st;     /* the symbol table command */
        !            79:     struct dysymtab_command *dyst;  /* the dynamic symbol table command */
        !            80:     struct segment_command
        !            81:        *seg_linkedit;              /* the link edit segment command */
        !            82: 
        !            83:     unsigned long input_sym_info_size;
        !            84:     unsigned long output_sym_info_size;
        !            85: 
        !            86:     struct nlist *output_symbols;
        !            87:     unsigned long output_nsymbols;
        !            88:     char        *output_strings;
        !            89:     unsigned long output_strings_size;
        !            90: 
        !            91:     unsigned long output_ilocalsym;
        !            92:     unsigned long output_nlocalsym;
        !            93:     unsigned long output_iextdefsym;
        !            94:     unsigned long output_nextdefsym;
        !            95:     unsigned long output_iundefsym;
        !            96:     unsigned long output_nundefsym;
        !            97: 
        !            98:     struct relocation_info *output_loc_relocs;
        !            99:     struct relocation_info *output_ext_relocs;
        !           100:     unsigned long *output_indirect_symtab;
        !           101: 
        !           102:     struct dylib_table_of_contents *output_tocs;
        !           103:     unsigned long output_ntoc;
        !           104:     struct dylib_module *output_mods;
        !           105:     unsigned long output_nmodtab;
        !           106:     struct dylib_reference *output_refs;
        !           107:     unsigned long output_nextrefsyms;
        !           108: };
        !           109: 
        !           110: extern void breakout(
        !           111:     char *filename,
        !           112:     struct arch **archs,
        !           113:     unsigned long *narchs);
        !           114: 
        !           115: extern void free_archs(
        !           116:     struct arch *archs,
        !           117:     unsigned long narchs);
        !           118: 
        !           119: extern void writeout(
        !           120:     struct arch *archs,
        !           121:     unsigned long narchs,
        !           122:     char *output,
        !           123:     unsigned short mode,
        !           124:     enum bool sort_toc,
        !           125:     enum bool commons_in_toc,
        !           126:     enum bool library_warnings);
        !           127: 
        !           128: void checkout(
        !           129:     struct arch *archs,
        !           130:     unsigned long narchs);
        !           131: 
        !           132: void warning_arch(
        !           133:     struct arch *arch,
        !           134:     struct member *member,
        !           135:     char *format, ...) __attribute__ ((format (printf, 3, 4)));
        !           136: 
        !           137: void error_arch(
        !           138:     struct arch *arch,
        !           139:     struct member *member,
        !           140:     char *format, ...) __attribute__ ((format (printf, 3, 4)));
        !           141: 
        !           142: void fatal_arch(
        !           143:     struct arch *arch,
        !           144:     struct member *member,
        !           145:     char *format, ...) __attribute__ ((format (printf, 3, 4)));

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.