diff options
Diffstat (limited to 'include/slibtool')
-rw-r--r-- | include/slibtool/slibtool.h | 287 | ||||
-rw-r--r-- | include/slibtool/slibtool_arbits.h | 187 | ||||
-rw-r--r-- | include/slibtool/slibtool_output.h | 23 |
3 files changed, 462 insertions, 35 deletions
diff --git a/include/slibtool/slibtool.h b/include/slibtool/slibtool.h index ee34b9a..f05de74 100644 --- a/include/slibtool/slibtool.h +++ b/include/slibtool/slibtool.h @@ -1,12 +1,14 @@ #ifndef SLIBTOOL_H #define SLIBTOOL_H +#include <fcntl.h> #include <stdint.h> #include <stddef.h> #include <stdio.h> #include <unistd.h> #include "slibtool_api.h" +#include "slibtool_arbits.h" #ifdef __cplusplus extern "C" { @@ -36,7 +38,7 @@ extern "C" { #define SLBT_DRIVER_VERSION 0x0010 #define SLBT_DRIVER_DRY_RUN 0x0020 -#define SLBT_DRIVER_CONFIG 0x0040 +#define SLBT_DRIVER_INFO 0x0040 #define SLBT_DRIVER_DEBUG 0x0080 #define SLBT_DRIVER_FEATURES 0x0100 #define SLBT_DRIVER_DEPS 0x0200 @@ -69,7 +71,33 @@ extern "C" { #define SLBT_DRIVER_IMPLIB_DSOMETA SLBT_DRIVER_XFLAG(0x0002) #define SLBT_DRIVER_EXPORT_DYNAMIC SLBT_DRIVER_XFLAG(0x0010) #define SLBT_DRIVER_STATIC_LIBTOOL_LIBS SLBT_DRIVER_XFLAG(0x0100) + #define SLBT_DRIVER_OUTPUT_MACHINE SLBT_DRIVER_XFLAG(0x1000) +#define SLBT_DRIVER_OUTPUT_CONFIG SLBT_DRIVER_XFLAG(0x2000) +#define SLBT_DRIVER_OUTPUT_AUX_DIR SLBT_DRIVER_XFLAG(0x4000) +#define SLBT_DRIVER_OUTPUT_M4_DIR SLBT_DRIVER_XFLAG(0x8000) + +#define SLBT_DRIVER_MODE_AR SLBT_DRIVER_XFLAG(0x010000) +#define SLBT_DRIVER_MODE_AR_CHECK SLBT_DRIVER_XFLAG(0x020000) +#define SLBT_DRIVER_MODE_AR_MERGE SLBT_DRIVER_XFLAG(0x040000) + +#define SLBT_DRIVER_MODE_STOOLIE SLBT_DRIVER_XFLAG(0x080000) +#define SLBT_DRIVER_MODE_SLIBTOOLIZE SLBT_DRIVER_XFLAG(0x080000) + +#define SLBT_DRIVER_PREFER_SHARED SLBT_DRIVER_XFLAG(0x100000) +#define SLBT_DRIVER_PREFER_STATIC SLBT_DRIVER_XFLAG(0x200000) + +#define SLBT_DRIVER_STOOLIE_COPY SLBT_DRIVER_XFLAG(0x01000000) +#define SLBT_DRIVER_STOOLIE_FORCE SLBT_DRIVER_XFLAG(0x02000000) +#define SLBT_DRIVER_STOOLIE_INSTALL SLBT_DRIVER_XFLAG(0x04000000) + +#define SLBT_DRIVER_DLOPEN_SELF SLBT_DRIVER_XFLAG(0x10000000) +#define SLBT_DRIVER_DLOPEN_FORCE SLBT_DRIVER_XFLAG(0x20000000) +#define SLBT_DRIVER_DLPREOPEN_SELF SLBT_DRIVER_XFLAG(0x40000000) +#define SLBT_DRIVER_DLPREOPEN_FORCE SLBT_DRIVER_XFLAG(0x80000000) + +/* unit action flags */ +#define SLBT_ACTION_MAP_READWRITE 0x0001 /* error flags */ #define SLBT_ERROR_TOP_LEVEL 0x0001 @@ -80,6 +108,13 @@ extern "C" { enum slbt_custom_error { SLBT_ERR_FLOW_ERROR, SLBT_ERR_FLEE_ERROR, + SLBT_ERR_COMPILE_ERROR, + SLBT_ERR_LINK_ERROR, + SLBT_ERR_INSTALL_ERROR, + SLBT_ERR_AR_ERROR, + SLBT_ERR_COPY_ERROR, + SLBT_ERR_MDSO_ERROR, + SLBT_ERR_DLLTOOL_ERROR, SLBT_ERR_ARCHIVE_IMPORT, SLBT_ERR_HOST_INIT, SLBT_ERR_INSTALL_FAIL, @@ -93,11 +128,36 @@ enum slbt_custom_error { SLBT_ERR_LCONF_OPEN, SLBT_ERR_LCONF_MAP, SLBT_ERR_LCONF_PARSE, + SLBT_ERR_MKVARS_OPEN, + SLBT_ERR_MKVARS_MAP, + SLBT_ERR_MKVARS_PARSE, + SLBT_ERR_AR_FAIL, + SLBT_ERR_AR_EMPTY_FILE, + SLBT_ERR_AR_INVALID_SIGNATURE, + SLBT_ERR_AR_INVALID_HEADER, + SLBT_ERR_AR_TRUNCATED_DATA, + SLBT_ERR_AR_DUPLICATE_LONG_NAMES, + SLBT_ERR_AR_DUPLICATE_ARMAP_MEMBER, + SLBT_ERR_AR_MISPLACED_ARMAP_MEMBER, + SLBT_ERR_AR_NO_ACTION_SPECIFIED, + SLBT_ERR_AR_NO_INPUT_SPECIFIED, + SLBT_ERR_AR_DRIVER_MISMATCH, + SLBT_ERR_AR_ARMAP_MISMATCH, + SLBT_ERR_AR_INVALID_ARMAP_NUMBER_OF_SYMS, + SLBT_ERR_AR_INVALID_ARMAP_SIZE_OF_REFS, + SLBT_ERR_AR_INVALID_ARMAP_SIZE_OF_STRS, + SLBT_ERR_AR_INVALID_ARMAP_STRING_TABLE, + SLBT_ERR_AR_INVALID_ARMAP_MEMBER_OFFSET, + SLBT_ERR_AR_INVALID_ARMAP_NAME_OFFSET, + SLBT_ERR_AR_DLUNIT_NOT_SPECIFIED, + SLBT_ERR_AR_OUTPUT_NOT_SPECIFIED, + SLBT_ERR_AR_OUTPUT_NOT_APPLICABLE, }; /* execution modes */ enum slbt_mode { SLBT_MODE_UNKNOWN, + SLBT_MODE_CONFIG, SLBT_MODE_INFO, SLBT_MODE_CLEAN, SLBT_MODE_COMPILE, @@ -106,6 +166,8 @@ enum slbt_mode { SLBT_MODE_INSTALL, SLBT_MODE_LINK, SLBT_MODE_UNINSTALL, + SLBT_MODE_AR, + SLBT_MODE_STOOLIE, }; enum slbt_tag { @@ -114,6 +176,7 @@ enum slbt_tag { SLBT_TAG_CXX, SLBT_TAG_FC, SLBT_TAG_F77, + SLBT_TAG_ASM, SLBT_TAG_NASM, SLBT_TAG_RC, }; @@ -125,6 +188,11 @@ enum slbt_warning_level { SLBT_WARNING_LEVEL_NONE, }; +struct slbt_input { + void * addr; + size_t size; +}; + struct slbt_source_version { int major; int minor; @@ -144,44 +212,67 @@ struct slbt_fd_ctx { struct slbt_exec_ctx { char * program; char * compiler; + char ** cargv; char ** xargv; char ** argv; char ** envp; char ** altv; + char ** dpic; char ** fpic; + char ** cass; char ** noundef; char ** soname; char ** lsoname; + char ** symdefs; char ** symfile; + + char ** explarg; + char ** expsyms; + char ** lout[2]; char ** mout[2]; char ** rpath[2]; + char ** sentinel; char * csrc; + int ldirdepth; char * ldirname; char * lbasename; + char * lobjname; char * aobjname; char * ltobjname; + + char * dlunit; + char * dlopensrc; + char * dlopenobj; + char * dlpreopen; + char * arfilename; char * lafilename; char * laifilename; + char * dsobasename; char * dsofilename; + char * relfilename; char * dsorellnkname; char * deffilename; + char * mapfilename; char * rpathfilename; + char * dimpfilename; char * pimpfilename; char * vimpfilename; + char * exefilename; char * sonameprefix; + pid_t pid; int exitcode; }; @@ -208,6 +299,8 @@ struct slbt_host_params { const char * host; const char * flavor; const char * ar; + const char * as; + const char * nm; const char * ranlib; const char * windres; const char * dlltool; @@ -227,6 +320,7 @@ struct slbt_flavor_settings { const char * exesuffix; const char * impprefix; const char * impsuffix; + const char * mapsuffix; const char * ldpathenv; char * picswitch; }; @@ -248,6 +342,7 @@ struct slbt_common_ctx { char ** cargv; char ** targv; char * libname; + const char * dlunit; const char * ccwrap; const char * target; const char * output; @@ -255,7 +350,7 @@ struct slbt_common_ctx { const char * rpath; const char * sysroot; const char * release; - const char * symfile; + const char * expsyms; const char * regex; const char * user; }; @@ -268,63 +363,185 @@ struct slbt_driver_ctx { void * any; }; +struct slbt_raw_archive { + void * map_addr; + size_t map_size; +}; + +struct slbt_archive_meta { + struct slbt_raw_archive r_archive; + struct ar_raw_signature * r_signature; + + struct ar_meta_signature * m_signature; + + struct ar_meta_member_info ** a_memberv; + struct ar_meta_member_info * a_arref_longnames; + struct ar_meta_armap_info a_armap_primary; + struct ar_meta_armap_info a_armap_pecoff; +}; + +struct slbt_archive_ctx { + const char * const * path; + const struct slbt_raw_archive * map; + const struct slbt_archive_meta *meta; + void * any; +}; + +struct slbt_symlist_ctx { + const char * const * path; + const char ** symstrv; +}; + +struct slbt_txtfile_ctx { + const char * const * path; + const char ** txtlinev; +}; + +struct slbt_stoolie_ctx { + const char * const * path; + const struct slbt_txtfile_ctx * acinc; + const struct slbt_txtfile_ctx * cfgac; + const struct slbt_txtfile_ctx * makam; + const char * const * auxarg; + const char * const * m4arg; +}; + +/* raw input api */ +slbt_api int slbt_fs_map_input (const struct slbt_driver_ctx *, + int, const char *, int, + struct slbt_input *); + +slbt_api int slbt_fs_unmap_input (struct slbt_input *); + /* driver api */ -slbt_api int slbt_get_driver_ctx (char ** argv, char ** envp, uint32_t flags, +slbt_api int slbt_lib_get_driver_ctx (char ** argv, char ** envp, uint64_t flags, const struct slbt_fd_ctx *, struct slbt_driver_ctx **); -slbt_api void slbt_free_driver_ctx (struct slbt_driver_ctx *); +slbt_api void slbt_lib_free_driver_ctx (struct slbt_driver_ctx *); + +slbt_api int slbt_lib_get_driver_fdctx (const struct slbt_driver_ctx *, struct slbt_fd_ctx *); -slbt_api int slbt_get_driver_fdctx (const struct slbt_driver_ctx *, struct slbt_fd_ctx *); -slbt_api int slbt_set_driver_fdctx (struct slbt_driver_ctx *, const struct slbt_fd_ctx *); +slbt_api int slbt_lib_set_driver_fdctx (struct slbt_driver_ctx *, const struct slbt_fd_ctx *); -/* execution context api */ -slbt_api int slbt_get_exec_ctx (const struct slbt_driver_ctx *, struct slbt_exec_ctx **); -slbt_api void slbt_free_exec_ctx (struct slbt_exec_ctx *); -slbt_api void slbt_reset_argvector (struct slbt_exec_ctx *); -slbt_api void slbt_reset_arguments (struct slbt_exec_ctx *); -slbt_api void slbt_reset_placeholders (struct slbt_exec_ctx *); -slbt_api void slbt_disable_placeholders (struct slbt_exec_ctx *); +slbt_api int slbt_lib_get_symlist_ctx (const struct slbt_driver_ctx *, const char *, struct slbt_symlist_ctx **); + +slbt_api void slbt_lib_free_symlist_ctx (struct slbt_symlist_ctx *); + +slbt_api int slbt_lib_get_txtfile_ctx (const struct slbt_driver_ctx *, const char *, struct slbt_txtfile_ctx **); + +slbt_api void slbt_lib_free_txtfile_ctx (struct slbt_txtfile_ctx *); + +/* command execution context api */ +slbt_api int slbt_ectx_get_exec_ctx (const struct slbt_driver_ctx *, struct slbt_exec_ctx **); +slbt_api void slbt_ectx_free_exec_ctx (struct slbt_exec_ctx *); +slbt_api void slbt_ectx_reset_argvector (struct slbt_exec_ctx *); +slbt_api void slbt_ectx_reset_arguments (struct slbt_exec_ctx *); /* core api */ -slbt_api int slbt_exec_compile (const struct slbt_driver_ctx *, struct slbt_exec_ctx *); -slbt_api int slbt_exec_execute (const struct slbt_driver_ctx *, struct slbt_exec_ctx *); -slbt_api int slbt_exec_install (const struct slbt_driver_ctx *, struct slbt_exec_ctx *); -slbt_api int slbt_exec_link (const struct slbt_driver_ctx *, struct slbt_exec_ctx *); -slbt_api int slbt_exec_uninstall (const struct slbt_driver_ctx *, struct slbt_exec_ctx *); +slbt_api int slbt_exec_compile (const struct slbt_driver_ctx *); +slbt_api int slbt_exec_execute (const struct slbt_driver_ctx *); +slbt_api int slbt_exec_install (const struct slbt_driver_ctx *); +slbt_api int slbt_exec_link (const struct slbt_driver_ctx *); +slbt_api int slbt_exec_uninstall (const struct slbt_driver_ctx *); +slbt_api int slbt_exec_ar (const struct slbt_driver_ctx *); +slbt_api int slbt_exec_stoolie (const struct slbt_driver_ctx *); +slbt_api int slbt_exec_slibtoolize (const struct slbt_driver_ctx *); + +/* host and flavor interfaces */ +slbt_api int slbt_host_set_althost (const struct slbt_driver_ctx *, const char * host, const char * flavor); -slbt_api int slbt_set_alternate_host (const struct slbt_driver_ctx *, const char * host, const char * flavor); -slbt_api void slbt_reset_alternate_host (const struct slbt_driver_ctx *); +slbt_api void slbt_host_reset_althost (const struct slbt_driver_ctx *); -slbt_api int slbt_get_flavor_settings (const char *, const struct slbt_flavor_settings **); +slbt_api int slbt_host_objfmt_is_coff (const struct slbt_driver_ctx *); -/* helper api */ -slbt_api int slbt_archive_import (const struct slbt_driver_ctx *, struct slbt_exec_ctx *, +slbt_api int slbt_host_objfmt_is_macho (const struct slbt_driver_ctx *); + +slbt_api int slbt_host_group_is_winnt (const struct slbt_driver_ctx *); + +slbt_api int slbt_host_group_is_darwin (const struct slbt_driver_ctx *); + +slbt_api int slbt_host_flavor_settings (const char *, const struct slbt_flavor_settings **); + +/* utility helper interfaces */ +slbt_api int slbt_util_import_archive (const struct slbt_exec_ctx *, char * dstarchive, char * srcarchive); -slbt_api int slbt_copy_file (const struct slbt_driver_ctx *, struct slbt_exec_ctx *, - char * src, char * dst); -slbt_api int slbt_dump_machine (const char * compiler, char * machine, size_t bufsize); -slbt_api int slbt_realpath (int, const char *, int, char *, size_t); + +slbt_api int slbt_util_copy_file (struct slbt_exec_ctx *, + const char * from, const char * to); + +slbt_api int slbt_util_create_mapfile (const struct slbt_symlist_ctx *, const char *, mode_t); + +slbt_api int slbt_util_create_symfile (const struct slbt_symlist_ctx *, const char *, mode_t); + +slbt_api int slbt_util_dump_machine (const char * compiler, char * machine, size_t bufsize); + +slbt_api int slbt_util_real_path (int, const char *, int, char *, size_t); + +/* archiver api */ +slbt_api int slbt_ar_get_archive_ctx (const struct slbt_driver_ctx *, const char * path, + struct slbt_archive_ctx **); + +slbt_api void slbt_ar_free_archive_ctx (struct slbt_archive_ctx *); + +slbt_api int slbt_ar_get_varchive_ctx (const struct slbt_driver_ctx *, + struct slbt_archive_ctx **); + +slbt_api int slbt_ar_get_archive_meta (const struct slbt_driver_ctx *, + const struct slbt_raw_archive *, + struct slbt_archive_meta **); + +slbt_api void slbt_ar_free_archive_meta (struct slbt_archive_meta *); + +slbt_api int slbt_ar_merge_archives (struct slbt_archive_ctx * const [], + struct slbt_archive_ctx **); + +slbt_api int slbt_ar_store_archive (struct slbt_archive_ctx *, + const char *, mode_t); + +slbt_api int slbt_ar_create_mapfile (const struct slbt_archive_meta *, const char *, mode_t); + +slbt_api int slbt_ar_create_symfile (const struct slbt_archive_meta *, const char *, mode_t); + +slbt_api int slbt_ar_create_dlsyms (struct slbt_archive_ctx **, const char *, const char *, mode_t); + +/* slibtoolize api */ +slbt_api int slbt_st_get_stoolie_ctx (const struct slbt_driver_ctx *, const char * path, + struct slbt_stoolie_ctx **); + +slbt_api void slbt_st_free_stoolie_ctx (struct slbt_stoolie_ctx *); /* utility api */ slbt_api int slbt_main (char **, char **, const struct slbt_fd_ctx *); +slbt_api int slbt_output_info (const struct slbt_driver_ctx *); slbt_api int slbt_output_config (const struct slbt_driver_ctx *); slbt_api int slbt_output_machine (const struct slbt_driver_ctx *); slbt_api int slbt_output_features (const struct slbt_driver_ctx *); slbt_api int slbt_output_fdcwd (const struct slbt_driver_ctx *); -slbt_api int slbt_output_exec (const struct slbt_driver_ctx *, const struct slbt_exec_ctx *, const char *); -slbt_api int slbt_output_compile (const struct slbt_driver_ctx *, const struct slbt_exec_ctx *); -slbt_api int slbt_output_execute (const struct slbt_driver_ctx *, const struct slbt_exec_ctx *); -slbt_api int slbt_output_install (const struct slbt_driver_ctx *, const struct slbt_exec_ctx *); -slbt_api int slbt_output_link (const struct slbt_driver_ctx *, const struct slbt_exec_ctx *); -slbt_api int slbt_output_uninstall (const struct slbt_driver_ctx *, const struct slbt_exec_ctx *); -slbt_api int slbt_output_error_record (const struct slbt_driver_ctx *, const struct slbt_error_info *); + +slbt_api int slbt_output_exec (const struct slbt_exec_ctx *, const char *); +slbt_api int slbt_output_compile (const struct slbt_exec_ctx *); +slbt_api int slbt_output_execute (const struct slbt_exec_ctx *); +slbt_api int slbt_output_install (const struct slbt_exec_ctx *); +slbt_api int slbt_output_link (const struct slbt_exec_ctx *); +slbt_api int slbt_output_uninstall (const struct slbt_exec_ctx *); +slbt_api int slbt_output_mapfile (const struct slbt_symlist_ctx *); + slbt_api int slbt_output_error_vector (const struct slbt_driver_ctx *); +slbt_api int slbt_output_error_record (const struct slbt_driver_ctx *, const struct slbt_error_info *); + +/* archiver utility api */ +slbt_api int slbt_au_output_arname (const struct slbt_archive_ctx *); +slbt_api int slbt_au_output_members (const struct slbt_archive_meta *); +slbt_api int slbt_au_output_symbols (const struct slbt_archive_meta *); +slbt_api int slbt_au_output_mapfile (const struct slbt_archive_meta *); + +slbt_api int slbt_au_output_dlsyms (struct slbt_archive_ctx **, const char *); /* package info */ -slbt_api const struct slbt_source_version * slbt_source_version(void); +slbt_api const struct slbt_source_version * slbt_api_source_version(void); #ifdef __cplusplus } diff --git a/include/slibtool/slibtool_arbits.h b/include/slibtool/slibtool_arbits.h new file mode 100644 index 0000000..8ab8d0c --- /dev/null +++ b/include/slibtool/slibtool_arbits.h @@ -0,0 +1,187 @@ +#ifndef SLIBTOOL_ARBITS_H +#define SLIBTOOL_ARBITS_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include <stddef.h> + +#define AR_SIGNATURE "!<arch>\n" + +#define AR_MEMBER_ATTR_DEFAULT (0x00) +#define AR_MEMBER_ATTR_ASCII (0x01) +#define AR_MEMBER_ATTR_UTF8 (0x02) +#define AR_MEMBER_ATTR_OBJECT (0x04) +#define AR_MEMBER_ATTR_ARCHIVE (0x08) +#define AR_MEMBER_ATTR_ARMAP (0x10) +#define AR_MEMBER_ATTR_NAMESTRS (0x20) +#define AR_MEMBER_ATTR_LINKINFO (0x40) + +#define AR_HEADER_ATTR_DEFAULT (0x00) +#define AR_HEADER_ATTR_FILE_ID (0x01) +#define AR_HEADER_ATTR_NAME_REF (0x02) +#define AR_HEADER_ATTR_BSD (0x10) +#define AR_HEADER_ATTR_SYSV (0x20) + +#define AR_ARMAP_ATTR_PLAIN (0x0000) +#define AR_ARMAP_ATTR_SORTED (0x0001) +#define AR_ARMAP_ATTR_BSD (0x0010) +#define AR_ARMAP_ATTR_SYSV (0x0020) +#define AR_ARMAP_ATTR_COFF (0x0040) +#define AR_ARMAP_ATTR_LE_32 (0x0100) +#define AR_ARMAP_ATTR_LE_64 (0x0200) +#define AR_ARMAP_ATTR_BE_32 (0x0400) +#define AR_ARMAP_ATTR_BE_64 (0x0800) + +#define AR_OBJECT_ATTR_NONE (0X0000) +#define AR_OBJECT_ATTR_ELF (0x0001) +#define AR_OBJECT_ATTR_COFF (0x0002) +#define AR_OBJECT_ATTR_MACHO (0x0004) +#define AR_OBJECT_ATTR_LE_32 (0x0100) +#define AR_OBJECT_ATTR_LE_64 (0x0200) +#define AR_OBJECT_ATTR_BE_32 (0x0400) +#define AR_OBJECT_ATTR_BE_64 (0x0800) + +struct ar_raw_signature { + char ar_signature [0x08]; /* 0x00 */ +}; + +struct ar_raw_file_header { + char ar_file_id [0x10]; /* 0x00 */ + char ar_time_date_stamp [0x0c]; /* 0x10 */ + char ar_uid [0x06]; /* 0x1c */ + char ar_gid [0x06]; /* 0x22 */ + char ar_file_mode [0x08]; /* 0x28 */ + char ar_file_size [0x0a]; /* 0x30 */ + char ar_end_tag [0x02]; /* 0x3a */ +}; + +struct ar_raw_armap_ref_32 { + unsigned char ar_name_offset [0x04]; /* 0x00 */ + unsigned char ar_member_offset [0x04]; /* 0x04 */ +}; + +struct ar_raw_armap_ref_64 { + unsigned char ar_name_offset [0x08]; /* 0x00 */ + unsigned char ar_member_offset [0x08]; /* 0x08 */ +}; + +struct ar_raw_armap_bsd_32 { + unsigned char (*ar_size_of_refs) [0x04]; + unsigned char (*ar_first_name_offset) [0x04]; + unsigned char (*ar_size_of_strs) [0x04]; + const char * (*ar_string_table); +}; + +struct ar_raw_armap_bsd_64 { + unsigned char (*ar_size_of_refs) [0x08]; + unsigned char (*ar_first_name_offset) [0x08]; + unsigned char (*ar_size_of_strs) [0x08]; + const char * (*ar_string_table); +}; + +struct ar_raw_armap_sysv_32 { + unsigned char (*ar_num_of_syms) [0x04]; + unsigned char (*ar_first_ref_offset) [0x04]; + const char * (*ar_string_table); +}; + +struct ar_raw_armap_sysv_64 { + unsigned char (*ar_num_of_syms) [0x08]; + unsigned char (*ar_first_ref_offset) [0x08]; + const char * (*ar_string_table); +}; + +struct ar_raw_armap_xcoff_32 { + unsigned char (*ar_num_of_members) [0x04]; + unsigned char (*ar_first_member_offset) [0x04]; + unsigned char (*ar_num_of_symbols) [0x04]; + unsigned char (*ar_sym_member_indices) [0x02]; + char (*ar_string_table) []; +}; + +struct ar_meta_signature { + const char * ar_signature; +}; + +struct ar_meta_file_header { + const char * ar_member_name; + uint32_t ar_header_attr; + uint32_t ar_uid; + uint32_t ar_gid; + uint32_t ar_file_mode; + uint64_t ar_file_size; + uint64_t ar_time_date_stamp; +}; + +struct ar_meta_member_info { + struct ar_meta_file_header ar_file_header; + struct ar_raw_file_header * ar_member_data; + uint32_t ar_member_attr; + uint32_t ar_object_attr; + uint64_t ar_object_size; + void * ar_object_data; +}; + +struct ar_meta_armap_ref_32 { + uint32_t ar_name_offset; + uint32_t ar_member_offset; +}; + +struct ar_meta_armap_ref_64 { + uint64_t ar_name_offset; + uint64_t ar_member_offset; +}; + +struct ar_meta_armap_common_32 { + struct ar_meta_member_info * ar_member; + struct ar_meta_armap_ref_32 * ar_symrefs; + struct ar_raw_armap_bsd_32 * ar_armap_bsd; + struct ar_raw_armap_sysv_32 * ar_armap_sysv; + struct ar_raw_armap_xcoff_32 * ar_armap_xcoff; + uint32_t ar_armap_attr; + uint32_t ar_num_of_symbols; + uint32_t ar_num_of_members; + uint32_t ar_first_member_offset; + uint32_t ar_size_of_refs; + uint32_t ar_size_of_strs; + uint16_t * ar_sym_member_indices; + const char * ar_string_table; +}; + +struct ar_meta_armap_common_64 { + struct ar_meta_member_info * ar_member; + struct ar_meta_armap_ref_64 * ar_symrefs; + struct ar_raw_armap_bsd_64 * ar_armap_bsd; + struct ar_raw_armap_sysv_64 * ar_armap_sysv; + void * ar_armap_xcoff; + uint32_t ar_armap_attr; + uint64_t ar_num_of_symbols; + uint64_t ar_num_of_members; + uint64_t ar_first_member_offset; + uint64_t ar_size_of_refs; + uint64_t ar_size_of_strs; + uint16_t * ar_sym_member_indices; + const char * ar_string_table; +}; + +struct ar_meta_symbol_info { + const char * ar_archive_name; + const char * ar_object_name; + const char * ar_symbol_name; + const char * ar_symbol_type; + uint64_t ar_symbol_value; + uint64_t ar_symbol_size; +}; + +struct ar_meta_armap_info { + const struct ar_meta_armap_common_32 * ar_armap_common_32; + const struct ar_meta_armap_common_64 * ar_armap_common_64; +}; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/slibtool/slibtool_output.h b/include/slibtool/slibtool_output.h new file mode 100644 index 0000000..263e4d7 --- /dev/null +++ b/include/slibtool/slibtool_output.h @@ -0,0 +1,23 @@ +#ifndef SLIBTOOL_OUTPUT_H +#define SLIBTOOL_OUTPUT_H + +#include <stdint.h> + +#define SLBT_PRETTY(x) ((uint64_t)x << 32) + +/* output actions */ +#define SLBT_OUTPUT_ARCHIVE_MEMBERS 0x00000001 +#define SLBT_OUTPUT_ARCHIVE_HEADERS 0x00000002 +#define SLBT_OUTPUT_ARCHIVE_SYMBOLS 0x00000004 +#define SLBT_OUTPUT_ARCHIVE_ARMAPS 0x00000008 +#define SLBT_OUTPUT_ARCHIVE_MAPFILE 0x00000010 +#define SLBT_OUTPUT_ARCHIVE_DLSYMS 0x00000020 +#define SLBT_OUTPUT_ARCHIVE_NOSORT 0x00000040 + +/* pretty-printer flags */ +#define SLBT_PRETTY_YAML SLBT_PRETTY(0x00000001) +#define SLBT_PRETTY_POSIX SLBT_PRETTY(0x00000002) +#define SLBT_PRETTY_HEXDATA SLBT_PRETTY(0x00000004) +#define SLBT_PRETTY_VERBOSE SLBT_PRETTY(0x00000008) + +#endif |