summaryrefslogtreecommitdiffhomepage
path: root/src/internal
diff options
context:
space:
mode:
Diffstat (limited to 'src/internal')
-rw-r--r--src/internal/perk_ar_impl.h52
-rw-r--r--src/internal/perk_driver_impl.h16
-rw-r--r--src/internal/perk_synopsis_impl.h46
-rw-r--r--src/internal/perk_visibility_impl.h16
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