mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-01-31 11:37:35 +00:00
Fix C stack remaining check in MODE=tiny
This commit is contained in:
parent
bcdd5c5f74
commit
28b9d9f781
5 changed files with 11 additions and 7 deletions
|
@ -121,6 +121,13 @@ extern char ape_stack_align[] __attribute__((__weak__));
|
||||||
vAddr; \
|
vAddr; \
|
||||||
})
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if at least `n` bytes of stack are available.
|
||||||
|
*/
|
||||||
|
#define HaveStackMemory(n) \
|
||||||
|
(IsTiny() || \
|
||||||
|
(intptr_t)__builtin_frame_address(0) >= GetStackAddr() + PAGESIZE * (n))
|
||||||
|
|
||||||
COSMOPOLITAN_C_END_
|
COSMOPOLITAN_C_END_
|
||||||
#endif /* GNU ELF */
|
#endif /* GNU ELF */
|
||||||
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
||||||
|
|
|
@ -124,9 +124,6 @@ res, err = DecodeJson([[
|
||||||
{"k":{"k":{"k":{"k":0}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
|
{"k":{"k":{"k":{"k":0}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
|
||||||
}}}}}}}}}
|
}}}}}}}}}
|
||||||
]])
|
]])
|
||||||
if not res then
|
|
||||||
print('wut', err)
|
|
||||||
end
|
|
||||||
assert(res)
|
assert(res)
|
||||||
|
|
||||||
-- 64 objects
|
-- 64 objects
|
||||||
|
|
3
third_party/lua/luaencodejsondata.c
vendored
3
third_party/lua/luaencodejsondata.c
vendored
|
@ -18,6 +18,7 @@
|
||||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||||
#include "libc/assert.h"
|
#include "libc/assert.h"
|
||||||
#include "libc/bits/bits.h"
|
#include "libc/bits/bits.h"
|
||||||
|
#include "libc/bits/likely.h"
|
||||||
#include "libc/fmt/itoa.h"
|
#include "libc/fmt/itoa.h"
|
||||||
#include "libc/intrin/kprintf.h"
|
#include "libc/intrin/kprintf.h"
|
||||||
#include "libc/log/log.h"
|
#include "libc/log/log.h"
|
||||||
|
@ -165,7 +166,7 @@ static int SerializeTable(lua_State *L, char **buf, int idx,
|
||||||
int rc;
|
int rc;
|
||||||
bool isarray;
|
bool isarray;
|
||||||
lua_Unsigned n;
|
lua_Unsigned n;
|
||||||
if ((intptr_t)__builtin_frame_address(0) < GetStackAddr() + PAGESIZE * 2) {
|
if (UNLIKELY(!HaveStackMemory(PAGESIZE))) {
|
||||||
z->reason = "out of stack";
|
z->reason = "out of stack";
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
2
third_party/lua/luaencodeluadata.c
vendored
2
third_party/lua/luaencodeluadata.c
vendored
|
@ -336,7 +336,7 @@ static int SerializeTable(lua_State *L, char **buf, int idx,
|
||||||
struct Serializer *z, int depth) {
|
struct Serializer *z, int depth) {
|
||||||
int rc;
|
int rc;
|
||||||
intptr_t rsp, bot;
|
intptr_t rsp, bot;
|
||||||
if ((intptr_t)__builtin_frame_address(0) < GetStackAddr() + PAGESIZE * 2) {
|
if (UNLIKELY(!HaveStackMemory(PAGESIZE))) {
|
||||||
z->reason = "out of stack";
|
z->reason = "out of stack";
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,8 +50,7 @@ static struct DecodeJson Parse(struct lua_State *L, const char *p,
|
||||||
if (UNLIKELY(!depth)) {
|
if (UNLIKELY(!depth)) {
|
||||||
return (struct DecodeJson){-1, "maximum depth exceeded"};
|
return (struct DecodeJson){-1, "maximum depth exceeded"};
|
||||||
}
|
}
|
||||||
if (UNLIKELY((intptr_t)__builtin_frame_address(0) <
|
if (UNLIKELY(!HaveStackMemory(PAGESIZE))) {
|
||||||
GetStackAddr() + PAGESIZE * 2)) {
|
|
||||||
return (struct DecodeJson){-1, "out of stack"};
|
return (struct DecodeJson){-1, "out of stack"};
|
||||||
}
|
}
|
||||||
for (a = p, d = +1; p < e;) {
|
for (a = p, d = +1; p < e;) {
|
||||||
|
|
Loading…
Reference in a new issue