diff options
Diffstat (limited to 'src/internal')
-rw-r--r-- | src/internal/perk_ar_impl.h | 52 | ||||
-rw-r--r-- | src/internal/perk_driver_impl.h | 16 | ||||
-rw-r--r-- | src/internal/perk_synopsis_impl.h | 46 | ||||
-rw-r--r-- | src/internal/perk_visibility_impl.h | 16 |
4 files changed, 100 insertions, 30 deletions
diff --git a/src/internal/perk_ar_impl.h b/src/internal/perk_ar_impl.h index 323dc56..0da7559 100644 --- a/src/internal/perk_ar_impl.h +++ b/src/internal/perk_ar_impl.h @@ -20,6 +20,22 @@ /* initial number of elements in the transient, on-stack vector */ # define AR_STACK_VECTOR_ELEMENTS (0x200) +/* bit mask to indicate that the first non-option argument is <posname> */ +#define AR_POSNAME_MASK (PERK_DRIVER_AR_POSITION_AFTER \ + |PERK_DRIVER_AR_POSITION_BEFORE) + +#define AR_UPDATE_MASK (PERK_DRIVER_AR_UPDATE_MEMBERS \ + |PERK_DRIVER_AR_REPLACE_MEMBERS) + +#define AR_ACTION_MASK (PERK_DRIVER_AR_LIST_MEMBERS \ + |PERK_DRIVER_AR_MOVE_MEMBERS \ + |PERK_DRIVER_AR_UPDATE_MEMBERS \ + |PERK_DRIVER_AR_DELETE_MEMBERS \ + |PERK_DRIVER_AR_APPEND_MEMBERS \ + |PERK_DRIVER_AR_REPLACE_MEMBERS \ + |PERK_DRIVER_AR_EXTRACT_MEMBERS \ + |PERK_DRIVER_AR_PRINT_MEMBERS) + extern const struct argv_option pe_ar_options[]; struct ar_armaps_impl { @@ -35,8 +51,8 @@ struct ar_armaps_impl { }; struct pe_archive_meta_impl { - const struct pe_driver_ctx * dctx; - struct pe_archive_ctx * actx; + const struct pe_driver_ctx * dctx; + struct pe_archive_ctx * actx; size_t ofmtattr; size_t nentries; void * hdrinfov; @@ -50,40 +66,40 @@ struct pe_archive_meta_impl { struct ar_meta_member_info ** memberv; struct ar_meta_member_info * members; struct ar_armaps_impl armaps; - struct pe_txtfile_ctx * nminfo; - struct pe_archive_meta armeta; + struct pe_txtfile_ctx * nminfo; + struct pe_archive_meta armeta; }; struct ar_meta_member_info * pe_archive_member_from_offset( - struct pe_archive_meta_impl * meta, + struct pe_archive_meta_impl * meta, off_t offset); int pe_ar_parse_primary_armap_bsd_32( - const struct pe_driver_ctx * dctx, - struct pe_archive_meta_impl * m); + const struct pe_driver_ctx * dctx, + struct pe_archive_meta_impl * m); int pe_ar_parse_primary_armap_bsd_64( - const struct pe_driver_ctx * dctx, - struct pe_archive_meta_impl * m); + const struct pe_driver_ctx * dctx, + struct pe_archive_meta_impl * m); int pe_ar_parse_primary_armap_sysv_32( - const struct pe_driver_ctx * dctx, - struct pe_archive_meta_impl * m); + const struct pe_driver_ctx * dctx, + struct pe_archive_meta_impl * m); int pe_ar_parse_primary_armap_sysv_64( - const struct pe_driver_ctx * dctx, - struct pe_archive_meta_impl * m); + const struct pe_driver_ctx * dctx, + struct pe_archive_meta_impl * m); int pe_update_mapstrv( - const struct pe_driver_ctx * dctx, - struct pe_archive_meta_impl * m); + const struct pe_driver_ctx * dctx, + struct pe_archive_meta_impl * m); int pe_ar_update_syminfo( - struct pe_archive_ctx * actx); + struct pe_archive_ctx * actx); int pe_ar_update_syminfo_ex( - struct pe_archive_ctx * actx, - int fdout); + struct pe_archive_ctx * actx, + int fdout); static inline struct pe_archive_meta_impl * pe_archive_meta_ictx(const struct pe_archive_meta * meta) { diff --git a/src/internal/perk_driver_impl.h b/src/internal/perk_driver_impl.h index e50d08a..22e7894 100644 --- a/src/internal/perk_driver_impl.h +++ b/src/internal/perk_driver_impl.h @@ -14,12 +14,14 @@ extern const struct argv_option pe_default_options[]; extern const struct argv_option pe_perk_options[]; +extern const struct argv_option pe_ar_options[]; enum app_tags { TAG_HELP, TAG_VERSION, TAG_CMD, TAG_PRETTY, + TAG_VERBOSE, TAG_CATEGORY, TAG_SECTIONS, TAG_SYMBOLS, @@ -30,6 +32,8 @@ enum app_tags { TAG_DSOLIBS, TAG_DSOSYMS, TAG_HDRDUMP, + TAG_AR_LIST_MEMBERS, + TAG_AR_PRINT_MEMBERS, }; struct pe_driver_ctx_impl { @@ -45,10 +49,14 @@ struct pe_driver_ctx_impl { }; struct pe_unit_ctx_impl { - const char * path; - struct pe_raw_image map; - struct pe_image_meta * meta; - struct pe_unit_ctx uctx; + const char * path; + struct pe_raw_image map; + struct pe_image_meta * meta; + struct pe_raw_archive armap; + struct pe_archive_meta * armeta; + struct pe_image_meta ** objmeta; + const struct pe_image_meta**usrobjmeta; + struct pe_unit_ctx uctx; }; diff --git a/src/internal/perk_synopsis_impl.h b/src/internal/perk_synopsis_impl.h new file mode 100644 index 0000000..f3d0a3a --- /dev/null +++ b/src/internal/perk_synopsis_impl.h @@ -0,0 +1,46 @@ +/***************************************************************/ +/* perk: PE Resource Kit */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ +/* Released under GPLv2 and GPLv3; see COPYING.PERK. */ +/***************************************************************/ + +#ifndef SLIBTOOL_SYNOPSIS_IMPL_H +#define SLIBTOOL_SYNOPSIS_IMPL_H + +#define PERK_DEFAULT_CMD_SYNOPSIS \ + "%s — PE/COFF Resource Kit\n\n" \ + "Synopsis:\n" \ + " %s [option] ...\n" \ + " %s --cmd=<command> [option] ...\n" \ + " %s --cmd=<command> [option] ... <file> ...\n\n" \ + "Options:\n" + +#define PERK_PERK_CMD_SYNOPSIS \ + "%s — PE/COFF Resource Kit\n\n" \ + "Synopsis:\n" \ + " %s [option] ...\n" \ + " %s [option] ... <file> ...\n\n" \ + "Options:\n" + +#define PERK_AR_CMD_SYNOPSIS \ + "%s — the PE/COFF Resource Kit Archiver\n\n" \ + "Synopsis:\n" \ + " %s -d [-v] <archive> <file> ...\n" \ + " %s -p [-v] [-s] <archive> <file> ...\n" \ + " %s -q [-v] [-c] <archive> <file> ...\n" \ + " %s -r [-v] [-c] [-u] <archive> <file> ...\n" \ + " %s -t [-v] [-s] <archive> [<file> ...]\n" \ + " %s -x [-v] [-s] [-C] [-T] <archive> [<file> ...]\n\n" \ + \ + " %s -m [-v] <archive> <file> ...\n" \ + " %s -m -a [-v] <posname> <archive> <file> ...\n" \ + " %s -m -b [-v] <posname> <archive> <file> ...\n" \ + " %s -m -i [-v] <posname> <archive> <file> ...\n\n" \ + \ + " %s -r [-v] [-c] [-u] <archive> <file> ...\n" \ + " %s -r -a [-v] [-c] [-u] <posname> <archive> <file> ...\n" \ + " %s -r -b [-v] [-c] [-u] <posname> <archive> <file> ...\n" \ + " %s -r -i [-v] [-c] [-u] <posname> <archive> <file> ...\n\n" \ + "Options:\n" + +#endif diff --git a/src/internal/perk_visibility_impl.h b/src/internal/perk_visibility_impl.h index df45efc..0057b8b 100644 --- a/src/internal/perk_visibility_impl.h +++ b/src/internal/perk_visibility_impl.h @@ -7,20 +7,20 @@ /* attribute not only redundant, but also tricky if not properly */ /* supported by the toolchain. */ /* */ -/* When targeting Midipix, __PE__, __dllexport and __dllimport are */ -/* always defined by the toolchain. Otherwise, the absnece of these */ -/* macros has been detected by sofort's ccenv.sh during ./configure, */ -/* and they have accordingly been added to CFLAGS_OS. */ +/* When targeting Midipix hosts, where elf-like visibility is fully */ +/* supported and may be detected via the __PE_VISIBILITY__ macro, */ +/* we utilize the attribute to render private symbols invisibile */ +/* to dlsym(), as well as reduce the size of the .gotstrs section. */ /**********************************************************************/ -#ifdef __PE__ +#if defined(__PE_VISIBILITY__) +#define perk_hidden _ATTR_VISIBILITY_HIDDEN +#elif defined(__PE__) #define perk_hidden -#else -#ifdef _ATTR_VISIBILITY_HIDDEN +#elif defined(_ATTR_VISIBILITY_HIDDEN) #define perk_hidden _ATTR_VISIBILITY_HIDDEN #else #define perk_hidden #endif -#endif #endif |