mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-07-01 08:48:29 +00:00
Fix weird behavior issue w/ kprintf() on aarch64
This commit is contained in:
parent
4e81d3277c
commit
64aca4dc4f
1 changed files with 6 additions and 11 deletions
|
@ -18,6 +18,7 @@
|
||||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||||
#define ShouldUseMsabiAttribute() 1
|
#define ShouldUseMsabiAttribute() 1
|
||||||
#include "libc/intrin/kprintf.h"
|
#include "libc/intrin/kprintf.h"
|
||||||
|
#include "ape/sections.internal.h"
|
||||||
#include "libc/calls/calls.h"
|
#include "libc/calls/calls.h"
|
||||||
#include "libc/calls/state.internal.h"
|
#include "libc/calls/state.internal.h"
|
||||||
#include "libc/calls/syscall-sysv.internal.h"
|
#include "libc/calls/syscall-sysv.internal.h"
|
||||||
|
@ -131,17 +132,8 @@ privileged static inline bool kistextpointer(const void *p) {
|
||||||
return _base <= (const unsigned char *)p && (const unsigned char *)p < _etext;
|
return _base <= (const unsigned char *)p && (const unsigned char *)p < _etext;
|
||||||
}
|
}
|
||||||
|
|
||||||
privileged static inline unsigned char *kend(void) {
|
|
||||||
unsigned char *p;
|
|
||||||
if (_weaken(__brk) && (p = _weaken(__brk)->p)) {
|
|
||||||
return p;
|
|
||||||
} else {
|
|
||||||
return _end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
privileged static inline bool kisimagepointer(const void *p) {
|
privileged static inline bool kisimagepointer(const void *p) {
|
||||||
return _base <= (const unsigned char *)p && (const unsigned char *)p < kend();
|
return _base <= (const unsigned char *)p && (const unsigned char *)p < _end;
|
||||||
}
|
}
|
||||||
|
|
||||||
privileged static inline bool kischarmisaligned(const char *p, signed char t) {
|
privileged static inline bool kischarmisaligned(const char *p, signed char t) {
|
||||||
|
@ -179,6 +171,7 @@ privileged static bool kismapped(int x) {
|
||||||
|
|
||||||
privileged bool kisdangerous(const void *p) {
|
privileged bool kisdangerous(const void *p) {
|
||||||
int frame;
|
int frame;
|
||||||
|
if (1) return false;
|
||||||
if (kisimagepointer(p)) return false;
|
if (kisimagepointer(p)) return false;
|
||||||
if (kiskernelpointer(p)) return false;
|
if (kiskernelpointer(p)) return false;
|
||||||
if (IsLegalPointer(p)) {
|
if (IsLegalPointer(p)) {
|
||||||
|
@ -223,7 +216,7 @@ privileged static void klog(const char *b, size_t n) {
|
||||||
: "0"(__NR_write), "1"(2), "2"(b), "3"(n)
|
: "0"(__NR_write), "1"(2), "2"(b), "3"(n)
|
||||||
: "rcx", "r8", "r9", "r10", "r11", "memory", "cc");
|
: "rcx", "r8", "r9", "r10", "r11", "memory", "cc");
|
||||||
}
|
}
|
||||||
#else
|
#elif defined(__aarch64__)
|
||||||
register long r0 asm("x0") = (long)2;
|
register long r0 asm("x0") = (long)2;
|
||||||
register long r1 asm("x1") = (long)b;
|
register long r1 asm("x1") = (long)b;
|
||||||
register long r2 asm("x2") = (long)n;
|
register long r2 asm("x2") = (long)n;
|
||||||
|
@ -233,6 +226,8 @@ privileged static void klog(const char *b, size_t n) {
|
||||||
: "=r"(res_x0)
|
: "=r"(res_x0)
|
||||||
: "i"(64), "r"(r0), "r"(r1), "r"(r2)
|
: "i"(64), "r"(r0), "r"(r1), "r"(r2)
|
||||||
: "x8", "memory");
|
: "x8", "memory");
|
||||||
|
#else
|
||||||
|
#error "unsupported architecture"
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue