To protect your data, the CISO officer has suggested users to enable GitLab 2FA as soon as possible.

Commit 25d46864 authored by Isaac Oscar Gariano's avatar Isaac Oscar Gariano
Browse files

Fixed bug when calling a function before it's declaration caused it not to be...

Fixed bug when calling a function before it's declaration caused it not to be passed to the bootimage whitelist
parent b5d23c10
...@@ -66,7 +66,7 @@ namespace C ...@@ -66,7 +66,7 @@ namespace C
int inline_decl = 0; // if this is greater than 0 we are inside an inline decl int inline_decl = 0; // if this is greater than 0 we are inside an inline decl
std::string gen_local(std::string name = ""s) { std::string gen_local(std::string name = ""s) {
std::string id_name = "L("s + std::to_string(last_local_id++) + (name.empty() ? ""s : ", "s + name) + ")"s; std::string id_name = "L("s + std::to_string(last_global_id++) + (name.empty() ? ""s : ", "s + name) + ")"s;
write_line("MuID "s + id_name + " = " + irbuilder + "->gen_sym(" + irbuilder + ", " + (name.empty() ? "NULL" : "\"@" + name + "\"")+ ");"); write_line("MuID "s + id_name + " = " + irbuilder + "->gen_sym(" + irbuilder + ", " + (name.empty() ? "NULL" : "\"@" + name + "\"")+ ");");
return id_name; return id_name;
} }
...@@ -86,15 +86,21 @@ namespace C ...@@ -86,15 +86,21 @@ namespace C
id = symbols[name] = globals[name]; id = symbols[name] = globals[name];
} else { } else {
if (global) { if (global) {
id = symbols[name] = globals[name] = gen_global(name); id = symbols[name] = globals[name] = gen_global(name);
if (name[0] != '_') if (name[0] != '_')
whitelist.push_back(id); whitelist.push_back(id);
} else { } else {
id = symbols[name] = gen_local(name); id = symbols[name] = gen_local(name);
} }
} }
} else id = symbols[name]; } else {
id = symbols[name];
if (global && globals.count(name) == 0) {
globals[name] = id;
if (name[0] != '_')
whitelist.push_back(id);
}
}
if (name == primordial_name) // We found the primordial function! if (name == primordial_name) // We found the primordial function!
primordial_id = id; primordial_id = id;
...@@ -1204,6 +1210,9 @@ namespace C ...@@ -1204,6 +1210,9 @@ namespace C
} }
virtual Any<MuCommInst> visitCommInst(UIRParser::CommInstContext *context) override { virtual Any<MuCommInst> visitCommInst(UIRParser::CommInstContext *context) override {
std::string op = context->GLOBAL_NAME()->getText().substr(1, std::string::npos); std::string op = context->GLOBAL_NAME()->getText().substr(1, std::string::npos);
// Use the following regex on the MU_CI... definition section in muapi.h to generate this code:
// search #[^ ]* ([A-Z_0-9]*)[^@]*@([a-z0-9.-_]*)
// replace : op == "$2" ? "$1"s
return op == "uvm.new_stack" ? "MU_CI_UVM_NEW_STACK"s return op == "uvm.new_stack" ? "MU_CI_UVM_NEW_STACK"s
: op == "uvm.kill_stack" ? "MU_CI_UVM_KILL_STACK"s : op == "uvm.kill_stack" ? "MU_CI_UVM_KILL_STACK"s
: op == "uvm.thread_exit" ? "MU_CI_UVM_THREAD_EXIT"s : op == "uvm.thread_exit" ? "MU_CI_UVM_THREAD_EXIT"s
...@@ -1248,6 +1257,10 @@ namespace C ...@@ -1248,6 +1257,10 @@ namespace C
: op == "uvm.meta.enable_watchpoint" ? "MU_CI_UVM_META_ENABLE_WATCHPOINT"s : op == "uvm.meta.enable_watchpoint" ? "MU_CI_UVM_META_ENABLE_WATCHPOINT"s
: op == "uvm.meta.disable_watchpoint" ? "MU_CI_UVM_META_DISABLE_WATCHPOINT"s : op == "uvm.meta.disable_watchpoint" ? "MU_CI_UVM_META_DISABLE_WATCHPOINT"s
: op == "uvm.meta.set_trap_handler" ? "MU_CI_UVM_META_SET_TRAP_HANDLER"s : op == "uvm.meta.set_trap_handler" ? "MU_CI_UVM_META_SET_TRAP_HANDLER"s
: op == "uvm.meta.constant_by_id" ? "MU_CI_UVM_META_CONSTANT_BY_ID"s
: op == "uvm.meta.global_by_id" ? "MU_CI_UVM_META_GLOBAL_BY_ID"s
: op == "uvm.meta.func_by_id" ? "MU_CI_UVM_META_FUNC_BY_ID"s
: op == "uvm.meta.expfunc_by_id" ? "MU_CI_UVM_META_EXPFUNC_BY_ID"s
: op == "uvm.irbuilder.new_ir_builder" ? "MU_CI_UVM_IRBUILDER_NEW_IR_BUILDER"s : op == "uvm.irbuilder.new_ir_builder" ? "MU_CI_UVM_IRBUILDER_NEW_IR_BUILDER"s
: op == "uvm.irbuilder.load" ? "MU_CI_UVM_IRBUILDER_LOAD"s : op == "uvm.irbuilder.load" ? "MU_CI_UVM_IRBUILDER_LOAD"s
: op == "uvm.irbuilder.abort" ? "MU_CI_UVM_IRBUILDER_ABORT"s : op == "uvm.irbuilder.abort" ? "MU_CI_UVM_IRBUILDER_ABORT"s
......
...@@ -54,7 +54,14 @@ namespace Runtime ...@@ -54,7 +54,14 @@ namespace Runtime
whitelist.push_back(id); whitelist.push_back(id);
} }
} }
} else id = symbols[name]; } else {
id = symbols[name];
if (global && globals.count(name) == 0) {
globals[name] = id;
if (name[0] != '_')
whitelist.push_back(id);
}
}
if (name == primordial_name) if (name == primordial_name)
primordial_id = id; primordial_id = id;
...@@ -1219,6 +1226,9 @@ namespace Runtime ...@@ -1219,6 +1226,9 @@ namespace Runtime
} }
virtual Any<MuCommInst> visitCommInst(UIRParser::CommInstContext *context) override { virtual Any<MuCommInst> visitCommInst(UIRParser::CommInstContext *context) override {
std::string op = context->GLOBAL_NAME()->getText().substr(1, std::string::npos); std::string op = context->GLOBAL_NAME()->getText().substr(1, std::string::npos);
// Use the following regex on the MU_CI... definition section in muapi.h to generate this code:
// search #[^ ]* ([A-Z_0-9]*)[^@]*@([a-z0-9.-_]*)
// replace : op == "$2" ? $1
return op == "uvm.new_stack" ? MU_CI_UVM_NEW_STACK return op == "uvm.new_stack" ? MU_CI_UVM_NEW_STACK
: op == "uvm.kill_stack" ? MU_CI_UVM_KILL_STACK : op == "uvm.kill_stack" ? MU_CI_UVM_KILL_STACK
: op == "uvm.thread_exit" ? MU_CI_UVM_THREAD_EXIT : op == "uvm.thread_exit" ? MU_CI_UVM_THREAD_EXIT
...@@ -1263,6 +1273,10 @@ namespace Runtime ...@@ -1263,6 +1273,10 @@ namespace Runtime
: op == "uvm.meta.enable_watchpoint" ? MU_CI_UVM_META_ENABLE_WATCHPOINT : op == "uvm.meta.enable_watchpoint" ? MU_CI_UVM_META_ENABLE_WATCHPOINT
: op == "uvm.meta.disable_watchpoint" ? MU_CI_UVM_META_DISABLE_WATCHPOINT : op == "uvm.meta.disable_watchpoint" ? MU_CI_UVM_META_DISABLE_WATCHPOINT
: op == "uvm.meta.set_trap_handler" ? MU_CI_UVM_META_SET_TRAP_HANDLER : op == "uvm.meta.set_trap_handler" ? MU_CI_UVM_META_SET_TRAP_HANDLER
: op == "uvm.meta.constant_by_id" ? MU_CI_UVM_META_CONSTANT_BY_ID
: op == "uvm.meta.global_by_id" ? MU_CI_UVM_META_GLOBAL_BY_ID
: op == "uvm.meta.func_by_id" ? MU_CI_UVM_META_FUNC_BY_ID
: op == "uvm.meta.expfunc_by_id" ? MU_CI_UVM_META_EXPFUNC_BY_ID
: op == "uvm.irbuilder.new_ir_builder" ? MU_CI_UVM_IRBUILDER_NEW_IR_BUILDER : op == "uvm.irbuilder.new_ir_builder" ? MU_CI_UVM_IRBUILDER_NEW_IR_BUILDER
: op == "uvm.irbuilder.load" ? MU_CI_UVM_IRBUILDER_LOAD : op == "uvm.irbuilder.load" ? MU_CI_UVM_IRBUILDER_LOAD
: op == "uvm.irbuilder.abort" ? MU_CI_UVM_IRBUILDER_ABORT : op == "uvm.irbuilder.abort" ? MU_CI_UVM_IRBUILDER_ABORT
......
...@@ -125,8 +125,8 @@ int main(int argc, char* argv[]) { ...@@ -125,8 +125,8 @@ int main(int argc, char* argv[]) {
<< "#include \"muapi.h\"" << std::endl << "#include \"muapi.h\"" << std::endl
<< "#include \"mu-fastimpl.h\"" << std::endl << "#include \"mu-fastimpl.h\"" << std::endl
<< std::endl << std::endl
<< "#define G(id, ...) global_ ## id" << std::endl << "#define G(id, ...) muid_ ## id" << std::endl
<< "#define L(id, ...) local_ ## id" << std::endl << "#define L(id, ...) muid_ ## id" << std::endl
<< std::endl; << std::endl;
// Function header // Function header
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment