From 2589f6166f514c0fc73032278cd10d7d78077ca4 Mon Sep 17 00:00:00 2001 From: ProgramSnail Date: Sun, 15 Dec 2024 03:33:46 +0300 Subject: [PATCH] fixes, ifdefs for different byterun versions --- byterun/dune | 51 ++++++++++++- byterun/include/parser.hpp | 2 + byterun/include/stack.h | 23 +++++- byterun/include/types.h | 8 ++ byterun/old-byterun.exe | Bin 0 -> 182416 bytes byterun/old_byterun.exe | Bin 0 -> 182416 bytes byterun/performance_check.sh | 7 +- byterun/src/analyzer.cpp | 144 +++++++++++++++++++++++------------ byterun/src/cli.cpp | 13 +++- byterun/src/interpreter.c | 38 ++++++++- byterun/src/parser.cpp | 16 ++++ 11 files changed, 244 insertions(+), 58 deletions(-) create mode 100755 byterun/old-byterun.exe create mode 100755 byterun/old_byterun.exe diff --git a/byterun/dune b/byterun/dune index c3f6eae02..27fd457f0 100644 --- a/byterun/dune +++ b/byterun/dune @@ -9,6 +9,20 @@ (:runtime ../runtime/runtime.a)) (mode (promote (until-clean))) + (action + (run g++ -std=c++20 -DWITH_CHECK -Iinclude/ %{main} %{parser} %{analyzer} %{runtime} %{obj} -o %{target}))) + +(rule + (target old_byterun.exe) + (deps + (:include (source_tree include)) + (:main src/cli.cpp) + (:parser src/parser.cpp) + (:analyzer src/analyzer.cpp) + (:obj old_types.o old_parser.o old_interpreter.o) + (:runtime ../runtime/runtime.a)) + (mode + (promote (until-clean))) (action (run g++ -std=c++20 -Iinclude/ %{main} %{parser} %{analyzer} %{runtime} %{obj} -o %{target}))) @@ -21,7 +35,7 @@ (mode (promote (until-clean))) (action - (run gcc -Iinclude/ -c %{src} -o %{target}))) + (run gcc -Iinclude/ -DWITH_CHECK -c %{src} -o %{target}))) (rule (target parser.o) @@ -32,10 +46,43 @@ (mode (promote (until-clean))) (action - (run gcc -Iinclude/ -c %{src} -o %{target}))) + (run gcc -Iinclude/ -DWITH_CHECK -c %{src} -o %{target}))) (rule (target interpreter.o) + (deps + (:include (source_tree include)) + (:src src/interpreter.c) + (:runtime ../runtime/runtime.a)) + (mode + (promote (until-clean))) + (action + (run gcc -Iinclude/ -DWITH_CHECK -c %{src} -o %{target}))) + +(rule + (target old_types.o) + (deps + (:include (source_tree include)) + (:src src/types.c) + (:runtime ../runtime/runtime.a)) + (mode + (promote (until-clean))) + (action + (run gcc -Iinclude/ -c %{src} -o %{target}))) + +(rule + (target old_parser.o) + (deps + (:include (source_tree include)) + (:src src/parser.c) + (:runtime ../runtime/runtime.a)) + (mode + (promote (until-clean))) + (action + (run gcc -Iinclude/ -c %{src} -o %{target}))) + +(rule + (target old_interpreter.o) (deps (:include (source_tree include)) (:src src/interpreter.c) diff --git a/byterun/include/parser.hpp b/byterun/include/parser.hpp index f8288ef07..db1c7d7d2 100644 --- a/byterun/include/parser.hpp +++ b/byterun/include/parser.hpp @@ -70,3 +70,5 @@ static inline const char *ip_read_string(char **ip, const Bytefile &bf) { std::pair parse_command(char **ip, const Bytefile &bf); std::pair parse_command(char **ip, const Bytefile &bf, std::ostream &out); + +void print_file(const Bytefile &bf, std::ostream &out); diff --git a/byterun/include/stack.h b/byterun/include/stack.h index b7f616683..e865a6d16 100644 --- a/byterun/include/stack.h +++ b/byterun/include/stack.h @@ -24,23 +24,27 @@ static inline bool s_is_empty() { } static inline void **s_nth(size_t n) { +#ifndef WITH_CHECK if ((void **)__gc_stack_top + n >= s_top()) { s_failure(&s, "not enough elements in stack"); } if (s.fp != NULL && (void **)__gc_stack_top + n >= f_locals(s.fp)) { s_failure(&s, "not enough elements in function stack"); } +#endif return (void **)__gc_stack_top + n; } static inline void **s_peek() { +#ifndef WITH_CHECK if ((void **)__gc_stack_top == s_top()) { s_failure(&s, "empty stack"); } if (s.fp != NULL && (void **)__gc_stack_top == f_locals(s.fp)) { s_failure(&s, "empty function stack"); } +#endif return (void **)__gc_stack_top; } @@ -48,9 +52,11 @@ static inline void **s_peek() { static inline aint *s_peek_i() { return (aint *)s_peek(); } static inline void s_push(void *val) { +#ifndef WITH_CHECK if ((void **)__gc_stack_top == s.stack) { s_failure(&s, "stack overflow"); } +#endif #ifdef DEBUG_VERSION printf("--> push\n"); #endif @@ -63,9 +69,11 @@ static inline void s_push_i(aint val) { s_push((void *)val); } static inline void s_push_nil() { s_push(NULL); } static inline void s_pushn_nil(size_t n) { +#ifndef WITH_CHECK if ((void **)__gc_stack_top + (aint)n - 1 <= s.stack) { s_failure(&s, "stack overflow"); } +#endif for (size_t i = 0; i < n; ++i) { __gc_stack_top -= sizeof(void *); *(void **)__gc_stack_top = NULL; @@ -73,12 +81,14 @@ static inline void s_pushn_nil(size_t n) { } static inline void *s_pop() { +#ifndef WITH_CHECK if ((void **)__gc_stack_top == s_top()) { s_failure(&s, "empty stack"); } if (s.fp != NULL && (void **)__gc_stack_top == f_locals(s.fp)) { s_failure(&s, "empty function stack"); } +#endif #ifdef DEBUG_VERSION printf("--> pop\n"); #endif @@ -102,12 +112,14 @@ static inline void s_popn(size_t n) { // behaviour static inline void s_put_nth(size_t n, void *val) { s_push_nil(); +#ifndef WITH_CHECK if ((void **)__gc_stack_top + n >= s_top()) { s_failure(&s, "not enough elements in stack"); } if (s.fp != NULL && (void **)__gc_stack_top + n >= f_locals(s.fp)) { s_failure(&s, "not enough elements in function stack"); } +#endif for (size_t i = 0; i < n; ++i) { ((void **)__gc_stack_top)[i] = ((void **)__gc_stack_top)[i + 1]; @@ -117,12 +129,14 @@ static inline void s_put_nth(size_t n, void *val) { static inline void s_rotate_n(size_t n) { s_push_nil(); +#ifndef WITH_CHECK if ((void **)__gc_stack_top + (aint)n - 1 >= s_top()) { s_failure(&s, "not enough elements in stack"); } if (s.fp != NULL && (void **)__gc_stack_top + (aint)n - 1 >= f_locals(s.fp)) { s_failure(&s, "not enough elements in function stack"); } +#endif void *buf = NULL; for (size_t i = 0; 2 * i < n; ++i) { @@ -147,6 +161,7 @@ static inline void s_enter_f(char *rp, bool is_closure_call, auint args_sz, printf("-> %i locals sz\n", locals_sz); #endif + // TODO: move checks to BEGIN/CBEGIN // check that params count is valid if ((void **)__gc_stack_top + (aint)args_sz - (is_closure_call ? 0 : 1) >= s_top()) { @@ -223,14 +238,17 @@ static inline void **var_by_category(enum VarCategory category, size_t id) { void **var = NULL; switch (category) { case VAR_GLOBAL: +#ifndef WITH_CHECK if (s.bf->global_area_size <= id) { s_failure(&s, "can't read global: too big id"); //, %i >= %ul", id, // s.bf->global_area_size); } +#endif var = s.stack + STACK_SIZE - 1 - id; break; case VAR_LOCAL: +#ifndef WITH_CHECK if (s.fp == NULL) { s_failure(&s, "can't read local outside of function"); } @@ -238,12 +256,14 @@ static inline void **var_by_category(enum VarCategory category, size_t id) { s_failure(&s, "can't read local: too big id"); //, %i >= %ul", id, // f_locals_sz(s.fp)); } +#endif // printf("id is %i, local is %i, %i\n", id, // UNBOX((auint)*((void**)f_locals(s.fp) + id)), f_locals(s.fp) - (void // **)__gc_stack_top); var = f_locals(s.fp) + (f_locals_sz(s.fp) - id - 1); break; case VAR_ARGUMENT: +#ifndef WITH_CHECK if (s.fp == NULL) { s_failure(&s, "can't read argument outside of function"); } @@ -251,9 +271,10 @@ static inline void **var_by_category(enum VarCategory category, size_t id) { s_failure(&s, "can't read arguments: too big id"); //, %i >= %ul", id, // f_args_sz(s.fp)); } +#endif var = f_args(s.fp) + (f_args_sz(s.fp) - id - 1); break; - case VAR_CLOSURE: + case VAR_CLOSURE: // TODO: check that clojure vars are used only in clojures if (s.fp == NULL) { s_failure(&s, "can't read closure parameter outside of function"); } diff --git a/byterun/include/types.h b/byterun/include/types.h index cd8f8279d..0ff7c63e2 100644 --- a/byterun/include/types.h +++ b/byterun/include/types.h @@ -73,6 +73,14 @@ static inline void s_failure(struct State *s, const char *msg) { s->instr_ip - s->bf->code_ptr, msg); } +static inline void ip_failure(char *ip, Bytefile *bf, const char *msg) { + exec_failure(read_cmd(ip), 0, ip - bf->code_ptr, msg); +} + +static inline void ip_safe_failure(char *ip, Bytefile *bf, const char *msg) { + exec_failure("_UNDEF_", 0, ip - bf->code_ptr, msg); +} + // ------ VarCategory ------ enum VarCategory { diff --git a/byterun/old-byterun.exe b/byterun/old-byterun.exe new file mode 100755 index 0000000000000000000000000000000000000000..4ce4edcef60147eae0af23923bc31c3c9553f1ce GIT binary patch literal 182416 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 literal 0 HcmV?d00001 diff --git a/byterun/old_byterun.exe b/byterun/old_byterun.exe new file mode 100755 index 0000000000000000000000000000000000000000..4ce4edcef60147eae0af23923bc31c3c9553f1ce GIT binary patch literal 182416 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 literal 0 HcmV?d00001 diff --git a/byterun/performance_check.sh b/byterun/performance_check.sh index 7e8a0f0c9..7175360f4 100755 --- a/byterun/performance_check.sh +++ b/byterun/performance_check.sh @@ -11,7 +11,12 @@ time echo '0' | lamac -s ../performance/Sort.lama > /dev/null lamac -b ../performance/Sort.lama > /dev/null +# ./byterun.exe -p Sort.bc + +echo "Old Byterun:" +time ./old_byterun.exe -i Sort.bc > /dev/null + echo "Byterun:" -time ./byterun.exe Sort.bc > /dev/null +time ./byterun.exe -vi Sort.bc > /dev/null rm Sort.* diff --git a/byterun/src/analyzer.cpp b/byterun/src/analyzer.cpp index a4a5d5dd9..202eb7879 100644 --- a/byterun/src/analyzer.cpp +++ b/byterun/src/analyzer.cpp @@ -1,5 +1,6 @@ #include "analyzer.hpp" #include "parser.hpp" +#include extern "C" { #include "types.h" @@ -21,43 +22,65 @@ void analyze(Bytefile *bf) { uint current_args_count = 0; uint16_t *current_begin_counter = nullptr; - auto const to_visit_push = [&visited, ¤t_stack_depth](size_t offset, - auto &to_visit) { + char *ip = bf->code_ptr; + char *current_ip = ip; + char *saved_current_ip = current_ip; + + auto const jmp_to_visit_push = [&saved_current_ip, &bf, &visited, + ¤t_stack_depth, + &to_visit_jmp](size_t offset) { if (visited[offset] == NOT_VISITED) { - visited[offset] = true; - to_visit.push_back(offset); + visited[offset] = current_stack_depth; + to_visit_jmp.push_back(offset); } else if (visited[offset] != current_stack_depth) { // TODO: is this condition same for calls? - failure("different stack depth on same point is not allowed"); + ip_failure(saved_current_ip, bf, + "different stack depth on same point is not allowed"); } }; - auto const control_push = [&to_visit_push, &control_flow_in](size_t offset, - auto &to_visit) { - control_flow_in[offset] = true; - to_visit_push(offset, to_visit); + auto const func_to_visit_push = [&saved_current_ip, &bf, &visited, + ¤t_stack_depth, + &to_visit_func](size_t offset) { + if (visited[offset] == NOT_VISITED) { + to_visit_func.push_back(offset); + } + visited[offset] = 0; }; - auto const check_correct_var = [&globals_count, ¤t_locals_count, + auto const jmp_control_push = [&jmp_to_visit_push, + &control_flow_in](size_t offset) { + control_flow_in[offset] = true; + jmp_to_visit_push(offset); + }; + + auto const func_control_push = [&func_to_visit_push, + &control_flow_in](size_t offset) { + control_flow_in[offset] = true; + func_to_visit_push(offset); + }; + + auto const check_correct_var = [&saved_current_ip, &bf, &globals_count, + ¤t_locals_count, ¤t_args_count](uint8_t l, uint id) { if (l > 3) { - failure("unexpected variable category"); + ip_failure(saved_current_ip, bf, "unexpected variable category"); } VarCategory category = to_var_category(l); switch (category) { case VAR_GLOBAL: if (id >= globals_count) { - failure("global var index is out of range"); + ip_failure(saved_current_ip, bf, "global var index is out of range"); } break; case VAR_LOCAL: if (id >= current_locals_count) { - failure("local var index is out of range"); + ip_failure(saved_current_ip, bf, "local var index is out of range"); } break; case VAR_ARGUMENT: if (id >= current_args_count) { - failure("argument var index is out of range"); + ip_failure(saved_current_ip, bf, "argument var index is out of range"); } break; case VAR_CLOSURE: @@ -69,7 +92,7 @@ void analyze(Bytefile *bf) { // add publics to_visit_func.reserve(bf->public_symbols_number); for (size_t i = 0; i < bf->public_symbols_number; ++i) { - control_push(get_public_offset(bf, i), to_visit_func); + func_control_push(get_public_offset(bf, i)); } if (to_visit_func.size() == 0) { @@ -77,7 +100,7 @@ void analyze(Bytefile *bf) { } while (true) { - char *ip = bf->code_ptr; + ip = bf->code_ptr; if (current_begin_counter == nullptr) { if (to_visit_func.empty()) { break; @@ -95,36 +118,47 @@ void analyze(Bytefile *bf) { } if (ip >= bf->code_ptr + bf->code_size) { - failure("instruction pointer is out of range (>= size)"); + ip_safe_failure(ip, bf, "instruction pointer is out of range (>= size)"); } if (ip < bf->code_ptr) { - failure("instruction pointer is out of range (< 0)"); + ip_safe_failure(ip, bf, "instruction pointer is out of range (< 0)"); } - char *current_ip = ip; + current_ip = ip; + saved_current_ip = current_ip; #ifdef DEBUG_VERSION - printf("0x%.8lx \n", current_ip - bf->code_ptr - 1); -#endif - + const auto [cmd, l] = parse_command(&ip, *bf, std::cout); +#else const auto [cmd, l] = parse_command(&ip, *bf); +#endif if (current_begin_counter == nullptr && cmd != Cmd::BEGIN && cmd != Cmd::CBEGIN) { - failure("function does not start with begin"); + ip_failure(saved_current_ip, bf, "function does not start with begin"); } - visited[current_ip - bf->code_ptr] = current_stack_depth; + if (visited[current_ip - bf->code_ptr] == NOT_VISITED) { + ip_failure(saved_current_ip, bf, "not visited command"); + } + current_stack_depth = visited[current_ip - bf->code_ptr]; + +#ifdef DEBUG_VERSION + std::cout << " -- [" << current_stack_depth << ']' << '\n'; +#endif ++current_ip; // skip command byte - char *const saved_current_ip = current_ip; size_t extra_stack_during_opr = 0; // change stack depth switch (cmd) { case Cmd::BINOP: current_stack_depth -= 2; + if (current_stack_depth < 0) { + ip_failure(saved_current_ip, bf, "not enough elements in stack"); + } + ++current_stack_depth; break; case Cmd::CONST: ++current_stack_depth; @@ -135,18 +169,22 @@ void analyze(Bytefile *bf) { case Cmd::SEXP: ip_read_string(¤t_ip, *bf); current_stack_depth -= ip_read_int(¤t_ip, *bf); + if (current_stack_depth < 0) { + ip_failure(saved_current_ip, bf, "not enough elements in stack"); + } + ++current_stack_depth; break; case Cmd::STI: current_stack_depth -= 2; if (current_stack_depth < 0) { - failure("not enough elements in stack"); + ip_failure(saved_current_ip, bf, "not enough elements in stack"); } ++current_stack_depth; break; case Cmd::STA: current_stack_depth -= 3; if (current_stack_depth < 0) { - failure("not enough elements in stack"); + ip_failure(saved_current_ip, bf, "not enough elements in stack"); } ++current_stack_depth; break; @@ -166,13 +204,13 @@ void analyze(Bytefile *bf) { break; case Cmd::SWAP: if (current_stack_depth < 2) { - failure("not enough elements in stack"); + ip_failure(saved_current_ip, bf, "not enough elements in stack"); } break; case Cmd::ELEM: current_stack_depth -= 2; if (current_stack_depth < 0) { - failure("not enough elements in stack"); + ip_failure(saved_current_ip, bf, "not enough elements in stack"); } ++current_stack_depth; break; @@ -187,7 +225,7 @@ void analyze(Bytefile *bf) { case Cmd::ST: check_correct_var(l, ip_read_int(¤t_ip, *bf)); if (current_stack_depth < 1) { - failure("not enough elements in stack"); + ip_failure(saved_current_ip, bf, "not enough elements in stack"); } break; case Cmd::CJMPz: @@ -197,7 +235,7 @@ void analyze(Bytefile *bf) { case Cmd::BEGIN: case Cmd::CBEGIN: if (current_begin_counter != nullptr) { - failure("unexpected function beginning"); + ip_failure(saved_current_ip, bf, "unexpected function beginning"); } current_args_count = ip_read_int(¤t_ip, *bf); current_begin_counter = (uint16_t *)(current_ip + sizeof(uint16_t)); @@ -221,7 +259,7 @@ void analyze(Bytefile *bf) { uint args_count = ip_read_int(¤t_ip, *bf); current_stack_depth -= args_count + 1; // + closure itself if (current_stack_depth < 0) { - failure("not enough elements in stack"); + ip_failure(saved_current_ip, bf, "not enough elements in stack"); } ++current_stack_depth; // NOTE: can't check args == cbegin args (?) @@ -231,27 +269,27 @@ void analyze(Bytefile *bf) { uint args_count = ip_read_int(¤t_ip, *bf); current_stack_depth -= args_count; if (current_stack_depth < 0) { - failure("not enough elements in stack"); + ip_failure(saved_current_ip, bf, "not enough elements in stack"); } ++current_stack_depth; // TODO: unify with next loop if (call_offset >= bf->code_size) { - failure("jump/call out of file"); + ip_failure(saved_current_ip, bf, "jump/call out of file"); } if (args_count != *(uint *)(bf->code_ptr + call_offset + 1)) { - failure("wrong call argument count"); + ip_failure(saved_current_ip, bf, "wrong call argument count"); } } break; case Cmd::TAG: if (current_stack_depth < 1) { - failure("not enough elements in stack"); + ip_failure(saved_current_ip, bf, "not enough elements in stack"); } break; case Cmd::ARRAY: if (current_stack_depth < 1) { - failure("not enough elements in stack"); + ip_failure(saved_current_ip, bf, "not enough elements in stack"); } break; case Cmd::FAIL: @@ -265,7 +303,7 @@ void analyze(Bytefile *bf) { --current_stack_depth; } if (current_stack_depth < 0) { - failure("not enough elements in stack"); + ip_failure(saved_current_ip, bf, "not enough elements in stack"); } ++current_stack_depth; break; @@ -276,30 +314,31 @@ void analyze(Bytefile *bf) { case Cmd::Llength: case Cmd::Lstring: if (current_stack_depth < 1) { - failure("not enough elements in stack"); + ip_failure(saved_current_ip, bf, "not enough elements in stack"); } break; case Cmd::Barray: - current_stack_depth -= ip_read_int(¤t_ip, *bf); + current_stack_depth -= ip_read_int(¤t_ip, *bf); // elem count if (current_stack_depth < 0) { - failure("not enough elements in stack"); + ip_failure(saved_current_ip, bf, "not enough elements in stack"); } ++current_stack_depth; break; case Cmd::EXIT: - failure("exit should be unreachable"); // NOTE: not sure + ip_failure(saved_current_ip, bf, + "exit should be unreachable"); // NOTE: not sure break; case Cmd::_UNDEF_: - failure("undefined command"); + ip_failure(saved_current_ip, bf, "undefined command"); break; } if (current_begin_counter == nullptr) { - failure("function does not start with begin"); + ip_failure(saved_current_ip, bf, "function does not start with begin"); } if (current_stack_depth < 0) { - failure("not enough elements in stack"); + ip_failure(saved_current_ip, bf, "not enough elements in stack"); } *current_begin_counter = @@ -307,6 +346,7 @@ void analyze(Bytefile *bf) { (uint16_t)(current_stack_depth + extra_stack_during_opr)); current_ip = saved_current_ip; + ++current_ip; // skip command byte // do jumps switch (cmd) { case Cmd::EXIT: @@ -318,25 +358,29 @@ void analyze(Bytefile *bf) { case Cmd::CJMPnz: case Cmd::CLOSURE: case Cmd::CALL: - to_visit_push(ip - bf->code_ptr, to_visit_jmp); + jmp_to_visit_push(ip - bf->code_ptr); case Cmd::JMP: { bool is_call = (cmd == Cmd::CLOSURE || cmd == Cmd::CALL); uint jmp_p = ip_read_int(¤t_ip, *bf); if (jmp_p >= bf->code_size) { // NOTE: maybe also should check that > begin (?) - failure("jump/call out of file"); + ip_failure(saved_current_ip, bf, "jump/call out of file"); + } + if (is_call) { + func_control_push(jmp_p); + } else { + jmp_control_push(jmp_p); } - control_push(jmp_p, is_call ? to_visit_func : to_visit_jmp); break; } case Cmd::_UNDEF_: - failure("undefined command"); + ip_failure(saved_current_ip, bf, "undefined command"); break; default: - to_visit_push(ip - bf->code_ptr, to_visit_jmp); + jmp_to_visit_push(ip - bf->code_ptr); break; } } diff --git a/byterun/src/cli.cpp b/byterun/src/cli.cpp index 4160c609d..2f625becf 100644 --- a/byterun/src/cli.cpp +++ b/byterun/src/cli.cpp @@ -1,3 +1,8 @@ +#include + +#include "analyzer.hpp" +#include "parser.hpp" + extern "C" { #include "../../runtime/runtime.h" #include "interpreter.h" @@ -5,8 +10,6 @@ extern "C" { #include "utils.h" } -#include "analyzer.hpp" - int main(int argc, char **argv) { if (argc < 2) { failure("no execution option"); @@ -14,6 +17,7 @@ int main(int argc, char **argv) { bool do_verification = false; bool do_interpretation = false; + bool do_print = false; if (strcmp(argv[1], "-vi") == 0) { do_verification = true; do_interpretation = true; @@ -21,6 +25,8 @@ int main(int argc, char **argv) { do_interpretation = true; } else if (strcmp(argv[1], "-v") == 0) { do_verification = true; + } else if (strcmp(argv[1], "-p") == 0) { + do_print = true; } else { failure("wrong execution option (acceptable options - '-i', '-v', '-vi')"); } @@ -33,6 +39,9 @@ int main(int argc, char **argv) { // #ifdef DEBUG_VERSION // dump_file (stdout, f); // #endif + if (do_print) { + print_file(*f, std::cout); + } if (do_verification) { analyze(f); } diff --git a/byterun/src/interpreter.c b/byterun/src/interpreter.c index faf8a096a..57ed63f3b 100644 --- a/byterun/src/interpreter.c +++ b/byterun/src/interpreter.c @@ -17,25 +17,31 @@ struct State s; static inline uint16_t ip_read_half_int(char **ip) { +#ifndef WITH_CHECK if (*ip + sizeof(uint16_t) > s.bf->code_ptr + s.bf->code_size) { failure("last command is invalid, int parameter can not be read\n"); } +#endif *ip += sizeof(uint16_t); return *(uint16_t *)((*ip) - sizeof(uint16_t)); } static inline int ip_read_int(char **ip) { +#ifndef WITH_CHECK if (*ip + sizeof(int) > s.bf->code_ptr + s.bf->code_size) { failure("last command is invalid, int parameter can not be read\n"); } +#endif *ip += sizeof(int); return *(int *)((*ip) - sizeof(int)); } static inline uint8_t ip_read_byte(char **ip) { +#ifndef WITH_CHECK if (*ip + sizeof(char) > s.bf->code_ptr + s.bf->code_size) { failure("last command is invalid, byte parameter can not be read\n"); } +#endif return *(*ip)++; } @@ -73,6 +79,7 @@ void run(Bytefile *bf, int argc, char **argv) { do { bool call_happened = false; +#ifndef WITH_CHECK if (s.ip >= bf->code_ptr + bf->code_size) { s_failure(&s, "instruction pointer is out of range (>= size)"); } @@ -80,6 +87,7 @@ void run(Bytefile *bf, int argc, char **argv) { if (s.ip < bf->code_ptr) { s_failure(&s, "instruction pointer is out of range (< 0)"); } +#endif s.instr_ip = s.ip; uint8_t x = ip_read_byte(&s.ip), h = (x & 0xF0) >> 4, l = x & 0x0F; @@ -179,9 +187,11 @@ void run(Bytefile *bf, int argc, char **argv) { case CMD_BASIC_JMP: { // JMP 0x%.8x uint jmp_p = ip_read_int(&s.ip); +#ifndef WITH_CHECK if (jmp_p >= bf->code_size) { s_failure(&s, "jump out of file"); } +#endif s.ip = bf->code_ptr + jmp_p; break; } @@ -254,9 +264,11 @@ void run(Bytefile *bf, int argc, char **argv) { case CMD_CTRL_CJMPz: { // CJMPz 0x%.8x uint jmp_p = ip_read_int(&s.ip); +#ifndef WITH_CHECK if (jmp_p >= bf->code_size) { s_failure(&s, "jump out of file"); } +#endif if (UNBOX(s_pop_i()) == 0) { s.ip = bf->code_ptr + jmp_p; } @@ -266,9 +278,11 @@ void run(Bytefile *bf, int argc, char **argv) { case CMD_CTRL_CJMPnz: { // CJMPnz 0x%.8x uint jmp_p = ip_read_int(&s.ip); +#ifndef WITH_CHECK if (jmp_p >= bf->code_size) { s_failure(&s, "jump out of file"); } +#endif if (UNBOX(s_pop_i()) != 0) { s.ip = bf->code_ptr + jmp_p; } @@ -277,34 +291,50 @@ void run(Bytefile *bf, int argc, char **argv) { case CMD_CTRL_BEGIN: { // BEGIN %d %d // function begin uint args_sz = ip_read_int(&s.ip); +// #ifdef WITH_CHECK uint locals_sz = ip_read_half_int(&s.ip); uint max_additional_stack_sz = ip_read_half_int(&s.ip); +// #else +// uint locals_sz = ip_read_int(&s.ip); +// #endif +#ifdef WITH_CHECK if (s.fp != NULL && s.call_ip == NULL) { s_failure(&s, "begin should only be called after call"); } +#endif s_enter_f(s.call_ip /*ip from call*/, s.is_closure_call, args_sz, locals_sz); - // TODO: add ifdef +#ifndef WITH_CHECK + // TODO if ((void **)__gc_stack_top + (aint)max_additional_stack_sz - 1 <= s.stack) { s_failure(&s, "stack owerflow"); } +#endif break; } case CMD_CTRL_CBEGIN: { // CBEGIN %d %d // NOTE: example not found, no checks done uint args_sz = ip_read_int(&s.ip); - uint max_additional_stack_sz = ip_read_half_int(&s.ip); +// #ifdef WITH_CHECK uint locals_sz = ip_read_half_int(&s.ip); + uint max_additional_stack_sz = ip_read_half_int(&s.ip); +// #else + // uint locals_sz = ip_read_int(&s.ip); +// #endif +#ifndef WITH_CHECK if (s.fp != NULL && s.call_ip == NULL) { s_failure(&s, "begin should only be called after call"); } +#endif s_enter_f(s.call_ip /*ip from call*/, s.is_closure_call, args_sz, locals_sz); // TODO: add ifdef +#ifdef WITH_CHECK if ((void **)__gc_stack_top + (aint)max_additional_stack_sz - 1 <= s.stack) { s_failure(&s, "stack owerflow"); } +#endif break; } @@ -320,9 +350,11 @@ void run(Bytefile *bf, int argc, char **argv) { var_by_category(to_var_category(arg_type), arg_id); s_push(*var_ptr); } +#ifndef WITH_CHECK if (call_offset >= bf->code_size) { s_failure(&s, "jump out of file"); } +#endif s_push(bf->code_ptr + call_offset); void *closure = Bclosure((aint *)__gc_stack_top, args_count); @@ -351,9 +383,11 @@ void run(Bytefile *bf, int argc, char **argv) { s.is_closure_call = false; s.call_ip = s.ip; +#ifndef WITH_CHECK if (call_p >= bf->code_size) { s_failure(&s, "jump out of file"); } +#endif s.ip = bf->code_ptr + call_p; break; } diff --git a/byterun/src/parser.cpp b/byterun/src/parser.cpp index 3a449ce8b..949084ebf 100644 --- a/byterun/src/parser.cpp +++ b/byterun/src/parser.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include #include @@ -574,3 +575,18 @@ std::pair parse_command(char **ip, const Bytefile &bf, std::ostream &out) { return parse_command_impl(ip, bf, out); } + +void print_file(const Bytefile &bf, std::ostream &out) { + char *ip = bf.code_ptr; + + while (true) { + out << std::setfill('0') << std::setw(8) << std::hex << ip - bf.code_ptr + << ": "; + const auto [cmd, l] = parse_command(&ip, bf, out); + out << '\n'; + + if (cmd == Cmd::EXIT) { + break; + } + } +}