Mint APE Loader v1.5

This change ports APE Loader to Linux AARCH64, so that Raspberry Pi
users can run programs like redbean, without the executable needing
to modify itself. Progress has also slipped into this change on the
issue of making progress better conforming to user expectations and
industry standards regarding which symbols we're allowed to declare
This commit is contained in:
Justine Tunney 2023-07-26 13:54:49 -07:00
parent 6843150e0c
commit 7e0a09feec
No known key found for this signature in database
GPG key ID: BE714B4575D6E328
510 changed files with 1783 additions and 1483 deletions

View file

@ -74,15 +74,17 @@ BENCH(crc32c, bench) {
EZBENCH_N("crc32c", i, crc32c(0, kHyperion, i));
EZBENCH_N("crc32_z", i, crc32_z(0, kHyperion, i));
EZBENCH_N("fnv_hash", i,
EXPROPRIATE(fnv_hash(VEIL("r", kHyperion), VEIL("r", i))));
EZBENCH_N("KMH", i, EXPROPRIATE(KMH(VEIL("r", kHyperion), VEIL("r", i))));
__expropriate(fnv_hash(__veil("r", kHyperion), __veil("r", i))));
EZBENCH_N("KMH", i,
__expropriate(KMH(__veil("r", kHyperion), __veil("r", i))));
fprintf(stderr, "\n");
}
EZBENCH_N("crc32c", kHyperionSize, crc32c(0, kHyperion, kHyperionSize));
EZBENCH_N("crc32_z", kHyperionSize, crc32_z(0, kHyperion, kHyperionSize));
EZBENCH_N("fnv_hash", kHyperionSize,
__expropriate(
fnv_hash(__veil("r", kHyperion), __veil("r", kHyperionSize))));
EZBENCH_N(
"fnv_hash", kHyperionSize,
EXPROPRIATE(fnv_hash(VEIL("r", kHyperion), VEIL("r", kHyperionSize))));
EZBENCH_N("KMH", kHyperionSize,
EXPROPRIATE(KMH(VEIL("r", kHyperion), VEIL("r", kHyperionSize))));
"KMH", kHyperionSize,
__expropriate(KMH(__veil("r", kHyperion), __veil("r", kHyperionSize))));
}

View file

@ -113,10 +113,10 @@ BENCH(highwayhash64, newbench) {
BENCH(highwayhash64, bench) {
EZBENCH2("knuth small", donothing,
EXPROPRIATE(KnuthMultiplicativeHash32(VEIL("r", "hello"), 5)));
__expropriate(KnuthMultiplicativeHash32(__veil("r", "hello"), 5)));
EZBENCH2("crc32c small", donothing, crc32c(0, "hello", 5));
EZBENCH2("crc32 small", donothing,
EXPROPRIATE(crc32_z(0, VEIL("r", "hello"), 5)));
__expropriate(crc32_z(0, __veil("r", "hello"), 5)));
EZBENCH2("highwayhash64 small", donothing,
HighwayHash64((void *)"hello", 5, kTestKey1));
EZBENCH2("crc32 big", donothing, crc32_z(0, kHyperion, kHyperionSize));
@ -124,6 +124,6 @@ BENCH(highwayhash64, bench) {
EZBENCH2("highwayhash64 big", donothing,
HighwayHash64((void *)kHyperion, kHyperionSize, kTestKey1));
EZBENCH2("knuth big", donothing,
EXPROPRIATE(
KnuthMultiplicativeHash32(VEIL("r", kHyperion), kHyperionSize)));
__expropriate(KnuthMultiplicativeHash32(__veil("r", kHyperion),
kHyperionSize)));
}

View file

@ -16,8 +16,8 @@
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
*/
#include "libc/mem/mem.h"
#include "libc/mem/gc.internal.h"
#include "libc/mem/mem.h"
#include "libc/str/str.h"
#include "libc/testlib/ezbench.h"
#include "libc/testlib/hyperion.h"
@ -35,5 +35,5 @@ TEST(memcasecmp, test) {
BENCH(memcasecmp, bench) {
volatile char *copy = gc(strdup(kHyperion));
EZBENCH2("memcasecmp", donothing,
EXPROPRIATE(memcasecmp(kHyperion, copy, kHyperionSize)));
__expropriate(memcasecmp(kHyperion, copy, kHyperionSize)));
}

View file

@ -154,20 +154,20 @@ TEST(memcpy, testBackwardsOverlap3) {
volatile char *c;
c = malloc(3);
memcpy(c, "\e[C", 3);
memcpy(c, c + 1, VEIL("r", 3) - 1);
memcpy(c, c + 1, __veil("r", 3) - 1);
EXPECT_EQ('[', c[0]);
EXPECT_EQ('C', c[1]);
free(c);
}
#define B(F, N) \
do { \
char *d = rngset(malloc(N), N, _rand64, -1); \
char *s = rngset(malloc(N), N, _rand64, -1); \
EZBENCH2(#F " " #N, donothing, \
EXPROPRIATE(F(VEIL("r", d), VEIL("r", s), N))); \
free(d); \
free(s); \
#define B(F, N) \
do { \
char *d = rngset(malloc(N), N, _rand64, -1); \
char *s = rngset(malloc(N), N, _rand64, -1); \
EZBENCH2(#F " " #N, donothing, \
__expropriate(F(__veil("r", d), __veil("r", s), N))); \
free(d); \
free(s); \
} while (0)
void BB(size_t N) {

View file

@ -193,11 +193,11 @@ TEST(memmem, fuzz) {
*/
BENCH(memmem, bench) {
EZBENCH2("memmem naive", donothing,
EXPROPRIATE(memmem_naive(kHyperion, kHyperionSize, "THE END", 7)));
__expropriate(memmem_naive(kHyperion, kHyperionSize, "THE END", 7)));
EZBENCH2("memmem", donothing,
EXPROPRIATE(memmem(kHyperion, kHyperionSize, "THE END", 7)));
__expropriate(memmem(kHyperion, kHyperionSize, "THE END", 7)));
EZBENCH2("memmem", donothing,
EXPROPRIATE(memmem(
__expropriate(memmem(
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab",
62, "aaaaaab", 7)));
}

View file

@ -31,7 +31,7 @@ TEST(memrchr16, test) {
BENCH(memrchr16, bench) {
EZBENCH2("memrchr16", donothing,
EXPROPRIATE(memrchr16(u"yo.hi.there", '.', 11)));
__expropriate(memrchr16(u"yo.hi.there", '.', 11)));
EZBENCH2("memrchr16 hyperion", donothing,
EXPROPRIATE(memrchr16(kHyperion, '.', kHyperionSize / 2)));
__expropriate(memrchr16(kHyperion, '.', kHyperionSize / 2)));
}

View file

@ -32,9 +32,9 @@ TEST(strcasecmp, test) {
BENCH(strcasecmp, bench) {
EZBENCH2("strcasecmp 16 eq (same)", donothing,
EXPROPRIATE(
strcasecmp(VEIL("r", "abcdefghijklmnop"), "abcdefghijklmnop")));
__expropriate(strcasecmp(__veil("r", "abcdefghijklmnop"),
"abcdefghijklmnop")));
EZBENCH2("strcasecmp 16 eq (evil)", donothing,
EXPROPRIATE(
strcasecmp(VEIL("r", "abcdefghijklmnop"), "ABCDEFGHIJKLMNOP")));
__expropriate(strcasecmp(__veil("r", "abcdefghijklmnop"),
"ABCDEFGHIJKLMNOP")));
}

View file

@ -122,41 +122,41 @@ TEST(strcasestr, test) {
*/
BENCH(strcasestr, bench) {
EZBENCH2("strcasestr naive", donothing,
EXPROPRIATE(strcasestr_naive(kHyperion, "THE END")));
__expropriate(strcasestr_naive(kHyperion, "THE END")));
EZBENCH2("strcasestr", donothing,
EXPROPRIATE(strcasestr(kHyperion, "THE END")));
__expropriate(strcasestr(kHyperion, "THE END")));
EZBENCH2("strcasestr tort 1", donothing,
EXPROPRIATE(strcasestr(
__expropriate(strcasestr(
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab",
"B")));
EZBENCH2("strcasestr tort 2", donothing,
EXPROPRIATE(strcasestr(
__expropriate(strcasestr(
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab",
"ab")));
EZBENCH2("strcasestr tort 4", donothing,
EXPROPRIATE(strcasestr(
__expropriate(strcasestr(
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab",
"aaab")));
EZBENCH2("strcasestr tort 8", donothing,
EXPROPRIATE(strcasestr(
__expropriate(strcasestr(
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab",
"aaaaaaab")));
EZBENCH2("strcasestr tort 16", donothing,
EXPROPRIATE(strcasestr(
__expropriate(strcasestr(
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab",
"aaaaaaaaaaaaaaab")));
EZBENCH2("strcasestr tort 32", donothing,
EXPROPRIATE(strcasestr(
__expropriate(strcasestr(
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab",

View file

@ -40,8 +40,10 @@ TEST(strlcpy, testShortBuffer_copies) {
BENCH(strlcpy, bench) {
char buf[256];
EZBENCH2("strlcpy", donothing,
EXPROPRIATE(strlcpy(VEIL("r", buf), "hello there", sizeof(buf))));
EZBENCH2("strncpy", donothing,
EXPROPRIATE(strncpy(VEIL("r", buf), "hello there", sizeof(buf))));
EZBENCH2(
"strlcpy", donothing,
__expropriate(strlcpy(__veil("r", buf), "hello there", sizeof(buf))));
EZBENCH2(
"strncpy", donothing,
__expropriate(strncpy(__veil("r", buf), "hello there", sizeof(buf))));
}

View file

@ -53,5 +53,5 @@ TEST(strwidth, cjk) {
}
BENCH(strnwidth, bench) {
EZBENCH2("strnwidth", donothing, EXPROPRIATE(strnwidth(kHyperion, -1, 0)));
EZBENCH2("strnwidth", donothing, __expropriate(strnwidth(kHyperion, -1, 0)));
}

View file

@ -129,40 +129,40 @@ TEST(strstr, breakit) {
*/
BENCH(strstr, bench) {
EZBENCH2("strstr naive", donothing,
EXPROPRIATE(strstr_naive(kHyperion, "THE END")));
EZBENCH2("strstr", donothing, EXPROPRIATE(strstr(kHyperion, "THE END")));
__expropriate(strstr_naive(kHyperion, "THE END")));
EZBENCH2("strstr", donothing, __expropriate(strstr(kHyperion, "THE END")));
EZBENCH2("strstr torture 1", donothing,
EXPROPRIATE(strstr(
__expropriate(strstr(
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab",
"b")));
EZBENCH2("strstr torture 2", donothing,
EXPROPRIATE(strstr(
__expropriate(strstr(
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab",
"ab")));
EZBENCH2("strstr torture 4", donothing,
EXPROPRIATE(strstr(
__expropriate(strstr(
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab",
"aaab")));
EZBENCH2("strstr torture 8", donothing,
EXPROPRIATE(strstr(
__expropriate(strstr(
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab",
"aaaaaaab")));
EZBENCH2("strstr torture 16", donothing,
EXPROPRIATE(strstr(
__expropriate(strstr(
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab",
"aaaaaaaaaaaaaaab")));
EZBENCH2("strstr torture 32", donothing,
EXPROPRIATE(strstr(
__expropriate(strstr(
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab",

View file

@ -44,39 +44,45 @@ TEST(towlower, test) {
}
BENCH(towupper, bench) {
EZBENCH2("towupper ascii", donothing, EXPROPRIATE(towupper(VEIL("r", L'a'))));
EZBENCH2("towupper ascii", donothing,
__expropriate(towupper(__veil("r", L'a'))));
EZBENCH2("towupper latin1", donothing,
EXPROPRIATE(towupper(VEIL("r", u'A'))));
__expropriate(towupper(__veil("r", u'A'))));
EZBENCH2("towupper watinc", donothing,
EXPROPRIATE(towupper(VEIL("r", u''))));
EZBENCH2("towupper greek", donothing, EXPROPRIATE(towupper(VEIL("r", u'α'))));
__expropriate(towupper(__veil("r", u''))));
EZBENCH2("towupper greek", donothing,
__expropriate(towupper(__veil("r", u'α'))));
EZBENCH2("towupper astral", donothing,
EXPROPRIATE(towupper(VEIL("r", L'𝛿'))));
__expropriate(towupper(__veil("r", L'𝛿'))));
}
BENCH(towlower, bench) {
EZBENCH2("towlower ascii", donothing, EXPROPRIATE(towlower(VEIL("r", L'a'))));
EZBENCH2("towlower ascii", donothing,
__expropriate(towlower(__veil("r", L'a'))));
EZBENCH2("towlower latin1", donothing,
EXPROPRIATE(towlower(VEIL("r", u'A'))));
__expropriate(towlower(__veil("r", u'A'))));
EZBENCH2("towlower watinc", donothing,
EXPROPRIATE(towlower(VEIL("r", u''))));
EZBENCH2("towlower greek", donothing, EXPROPRIATE(towupper(VEIL("r", u'α'))));
__expropriate(towlower(__veil("r", u''))));
EZBENCH2("towlower greek", donothing,
__expropriate(towupper(__veil("r", u'α'))));
EZBENCH2("towlower astral", donothing,
EXPROPRIATE(towlower(VEIL("r", L'𝛿'))));
__expropriate(towlower(__veil("r", L'𝛿'))));
}
BENCH(iswupper, bench) {
EZBENCH2("iswupper ascii", donothing, EXPROPRIATE(iswupper(VEIL("r", L'A'))));
EZBENCH2("iswupper ascii", donothing,
__expropriate(iswupper(__veil("r", L'A'))));
EZBENCH2("iswupper latin1", donothing,
EXPROPRIATE(iswupper(VEIL("r", u'A'))));
__expropriate(iswupper(__veil("r", u'A'))));
EZBENCH2("iswupper astral", donothing,
EXPROPRIATE(iswupper(VEIL("r", L'𝛿'))));
__expropriate(iswupper(__veil("r", L'𝛿'))));
}
BENCH(iswlower, bench) {
EZBENCH2("iswlower ascii", donothing, EXPROPRIATE(iswlower(VEIL("r", L'a'))));
EZBENCH2("iswlower ascii", donothing,
__expropriate(iswlower(__veil("r", L'a'))));
EZBENCH2("iswlower latin1", donothing,
EXPROPRIATE(iswlower(VEIL("r", u'A'))));
__expropriate(iswlower(__veil("r", u'A'))));
EZBENCH2("iswlower astral", donothing,
EXPROPRIATE(iswlower(VEIL("r", L'𝛿'))));
__expropriate(iswlower(__veil("r", L'𝛿'))));
}

View file

@ -23,7 +23,7 @@
#include "libc/testlib/ezbench.h"
#include "libc/testlib/testlib.h"
STATIC_YOINK("strwidth");
__static_yoink("strwidth");
volatile uint64_t v;
@ -45,7 +45,7 @@ TEST(_tpenc, testBeyondTheStandard) {
}
uint64_t _Tpenc(int x) {
return (v = EXPROPRIATE(_tpenc(VEIL("r", x))));
return (v = __expropriate(_tpenc(__veil("r", x))));
}
BENCH(_tpenc, bench) {

View file

@ -77,5 +77,5 @@ TEST(strwidth, testTextDelimitingControlCodes_dontHaveSubstance) {
BENCH(wcwidth, bench) {
volatile int x;
EZBENCH2("wcwidth", donothing, x = wcwidth(VEIL("r", u'')));
EZBENCH2("wcwidth", donothing, x = wcwidth(__veil("r", u'')));
}

View file

@ -30,5 +30,5 @@ TEST(wmemrchr, test) {
BENCH(wmemrchr, bench) {
EZBENCH2("wmemrchr", donothing,
EXPROPRIATE(wmemrchr(L"yo.hi.there", '.', 11)));
__expropriate(wmemrchr(L"yo.hi.there", '.', 11)));
}