From d4473b3be02d429a72347914a6fc7e5688ad98e5 Mon Sep 17 00:00:00 2001 From: midipix Date: Sat, 6 Jan 2024 09:15:26 +0000 Subject: slbt_get_archive_meta(): initial implementation. --- src/internal/slibtool_ar_impl.h | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'src/internal/slibtool_ar_impl.h') diff --git a/src/internal/slibtool_ar_impl.h b/src/internal/slibtool_ar_impl.h index 3dfabe7..13cd6ef 100644 --- a/src/internal/slibtool_ar_impl.h +++ b/src/internal/slibtool_ar_impl.h @@ -2,6 +2,8 @@ #define SLIBTOOL_AR_IMPL_H #include "argv/argv.h" +#include +#include extern const struct argv_option slbt_ar_options[]; @@ -9,4 +11,37 @@ enum ar_tags { TAG_AR_HELP, }; +struct ar_armaps_impl { + struct ar_raw_armap_bsd_32 armap_bsd_32; + struct ar_raw_armap_bsd_64 armap_bsd_64; + struct ar_raw_armap_sysv_32 armap_sysv_32; + struct ar_raw_armap_sysv_64 armap_sysv_64; + struct ar_meta_armap_common_32 armap_common_32; + struct ar_meta_armap_common_64 armap_common_64; + uint64_t armap_nsyms; +}; + +struct slbt_archive_meta_impl { + void * hdrinfov; + char * namestrs; + const char * symstrs; + const char ** symstrv; + struct ar_meta_member_info ** memberv; + struct ar_meta_member_info * members; + struct ar_armaps_impl armaps; + struct slbt_archive_meta armeta; +}; + +static inline struct slbt_archive_meta_impl * slbt_archive_meta_ictx(const struct slbt_archive_meta * meta) +{ + uintptr_t addr; + + if (meta) { + addr = (uintptr_t)meta - offsetof(struct slbt_archive_meta_impl,armeta); + return (struct slbt_archive_meta_impl *)addr; + } + + return 0; +} + #endif -- cgit v1.2.3