src: portability updates

This commit is contained in:
Markus F.X.J. Oberhumer
2024-07-07 14:50:27 +02:00
parent 285472bc78
commit 16c8f6d160
21 changed files with 700 additions and 129 deletions
+25 -9
View File
@@ -114,13 +114,15 @@ struct PackerNames final {
unsigned methods[PackerBase::MAX_METHODS];
unsigned filters[PackerBase::MAX_FILTERS];
};
Entry names[MAX_NAMES];
Entry names_array[MAX_NAMES];
Entry *names[MAX_NAMES];
unsigned names_count = 0;
const Options *o = nullptr;
void add(const PackerBase *pb) {
assert_noexcept(names_count < MAX_NAMES);
Entry &e = names[names_count++];
Entry &e = names_array[names_count];
names[names_count++] = &e;
e.fname = pb->getFullName(o);
e.sname = pb->getName();
e.methods_count = e.filters_count = 0;
@@ -147,11 +149,10 @@ struct PackerNames final {
self->add(pb);
return false;
}
static int __acc_cdecl_qsort compare_fname(const void *a, const void *b) {
return strcmp(((const Entry *) a)->fname, ((const Entry *) b)->fname);
}
static int __acc_cdecl_qsort compare_sname(const void *a, const void *b) {
return strcmp(((const Entry *) a)->sname, ((const Entry *) b)->sname);
static int __acc_cdecl_qsort compare_fname(const void *aa, const void *bb) {
const Entry *a = *(const Entry *const *) aa;
const Entry *b = *(const Entry *const *) bb;
return strcmp(a->fname, b->fname);
}
};
} // namespace
@@ -162,10 +163,10 @@ static noinline void list_all_packers(FILE *f, int verbose) {
PackerNames pn;
pn.o = &o;
(void) PackMaster::visitAllPackers(PackerNames::visit, nullptr, &o, &pn);
upx_gnomesort(pn.names, pn.names_count, sizeof(PackerNames::Entry), PackerNames::compare_fname);
upx_gnomesort(pn.names, pn.names_count, sizeof(pn.names[0]), PackerNames::compare_fname);
size_t pos = 0;
for (size_t i = 0; i < pn.names_count; i++) {
const PackerNames::Entry &e = pn.names[i];
const PackerNames::Entry &e = *pn.names[i];
const char *const fn = e.fname;
const char *const sn = e.sname;
if (verbose >= 3) {
@@ -570,6 +571,12 @@ void show_sysinfo(const char *options_var) {
#endif
// architecture
#if defined(__CHERI__)
cf_print("__CHERI__", "%lld", __CHERI__ + 0, 3);
#endif
#if defined(__CHERI_PURE_CAPABILITY__)
cf_print("__CHERI_PURE_CAPABILITY__", "%lld", __CHERI_PURE_CAPABILITY__ + 0, 3);
#endif
#if defined(__mips_hard_float)
cf_print("__mips_hard_float", "%lld", __mips_hard_float + 0);
#endif
@@ -628,6 +635,15 @@ void show_sysinfo(const char *options_var) {
#elif defined(__pie__)
cf_print("__pie__", "%lld", __pie__ + 0, 3);
#endif
#if defined(__SIZEOF_INT128__)
cf_print("__SIZEOF_INT128__", "%lld", __SIZEOF_INT128__ + 0, 3);
#endif
#if defined(__SIZEOF_LONG_LONG__) && (__SIZEOF_LONG_LONG__ + 0 > 8)
cf_print("__SIZEOF_LONG_LONG__", "%lld", __SIZEOF_LONG_LONG__ + 0, 3);
#endif
#if defined(__SIZEOF_POINTER__) && (__SIZEOF_POINTER__ + 0 > 8)
cf_print("__SIZEOF_POINTER__", "%lld", __SIZEOF_POINTER__ + 0, 3);
#endif
#if defined(UPX_CONFIG_DISABLE_WSTRICT)
cf_print("UPX_CONFIG_DISABLE_WSTRICT", "%lld", UPX_CONFIG_DISABLE_WSTRICT + 0, 3);
#endif