Make considerably more progress on AARCH64

- Utilities like pledge.com now build
- kprintf() will no longer balk at 48-bit addresses
- There's a new aarch64-dbg build mode that should work
- gc() and defer() are mostly pacified; avoid using them on aarch64
- THIRD_PART_STB now has Arm Neon intrinsics for fast image handling
This commit is contained in:
Justine Tunney 2023-05-12 22:42:57 -07:00
parent 1bfb3aab1b
commit fd34ef732d
No known key found for this signature in database
GPG key ID: BE714B4575D6E328
91 changed files with 1288 additions and 1192 deletions

View file

@ -41,6 +41,6 @@
int main(int argc, char *argv[]) {
ShowCrashReports();
asm("int3"); /* cf. __die(), perror("msg"), abort(), exit(1), _Exit(1) */
__builtin_trap();
return 0;
}

View file

@ -23,13 +23,7 @@ int main(int argc, char *argv[]) {
kprintf("try running: o//tool/build/strace.com %s%n", argv[0]);
}
asm volatile("mov\t%4,%%r10\n\t"
"mov\t%5,%%r8\n\t"
"mov\t%6,%%r9\n\t"
"int3"
: /* no outputs */
: "a"(0), "D"(1), "S"(2), "d"(3), "g"(4), "g"(5), "g"(6)
: "r8", "r9", "r10");
__builtin_trap();
printf("recovered from SIGTRAP without handler\r\n");
return 0;

View file

@ -96,6 +96,10 @@ $(EXAMPLES_PACKAGE_LIB_A).pkg: \
# Invalidates objects in package when makefile is edited.
$(EXAMPLES_PACKAGE_LIB_A_OBJS): examples/package/lib/build.mk
# let these assembly objects build on aarch64
o/$(MODE)/examples/package/lib/myasm.o: examples/package/lib/myasm.S
@$(COMPILE) -AOBJECTIFY.S $(OBJECTIFY.S) $(OUTPUT_OPTION) -c $<
EXAMPLES_PACKAGE_LIB_LIBS = $(foreach x,$(EXAMPLES_PACKAGE_LIB_ARTIFACTS),$($(x)))
EXAMPLES_PACKAGE_LIB_SRCS = $(foreach x,$(EXAMPLES_PACKAGE_LIB_ARTIFACTS),$($(x)_SRCS))
EXAMPLES_PACKAGE_LIB_HDRS = $(foreach x,$(EXAMPLES_PACKAGE_LIB_ARTIFACTS),$($(x)_HDRS))

View file

@ -8,9 +8,18 @@
// somehow they usually make code faster
// it's convention for keeping stack 16-byte aligned
// cpus still devote much to pushing & popping b/c i386
MyAsm: push %rbp
MyAsm:
#ifdef __x86_64__
push %rbp
mov %rsp,%rbp
call MyPrint2
pop %rbp
#elif defined(__aarch64__)
bl MyPrint2
#else
#error "unsupported architecture"
#endif
ret
.endfn MyAsm,globl

View file

@ -16,6 +16,8 @@
#include "libc/sysv/consts/sig.h"
#include "third_party/xed/x86.h"
#ifdef __x86_64__
/**
* @fileoverview How to change CPU state on signal delivery
*
@ -43,3 +45,5 @@ int main(int argc, char *argv[]) {
printf("123/0 = %ld\n", 123 / x);
return 0;
}
#endif /* __x86_64__ */

View file

@ -15,6 +15,8 @@
#include "libc/str/str.h"
#include "libc/sysv/consts/termios.h"
#ifdef __x86_64__
/**
* @fileoverview Bare Metal VGA TTY demo.
*
@ -58,3 +60,5 @@ int main(int argc, char *argv[]) {
}
}
}
#endif /* __x86_64__ */

View file

@ -15,6 +15,8 @@
#include "libc/str/str.h"
#include "libc/sysv/consts/termios.h"
#ifdef __x86_64__
/**
* @fileoverview Demo of program crash reporting with Bare Metal VGA TTY.
*
@ -35,5 +37,8 @@ int main(int argc, char *argv[]) {
printf("argv[%d] = \"%s\"\n", i, argv[i]);
}
printf("\e[92;44mHello World!\e[0m %d\n", 1 / (x + y - 3));
for (;;);
for (;;)
;
}
#endif /* __x86_64__ */

View file

@ -132,12 +132,12 @@ int main(int argc, char *argv[]) {
appends(&msg, "\r\n\e[K\e[0m\e8"); // restore
// try to send message to all pseudoteletypewriters
for (int i = 0;; ++i) {
for (int i = 0; i < 100; ++i) {
int fd;
char pts[32];
snprintf(pts, sizeof(pts), "/dev/pts/%d", i);
if ((fd = open(pts, O_WRONLY | O_NOCTTY)) == -1) {
if (errno == ENOENT) break;
if (errno == ENOENT) continue;
if (g_verbose) perror(pts);
}
write(fd, msg, appendz(msg).i);