dwarf_extractor.cpp: Fix buffer overruns ()

Probably it's better to skip the optimized out parameters.
(that is, parameters w/o locations)
However, I'm not sure how/if it can be done with the lldb api.
For now, just disable parameter processing to avoid crashes.
This commit is contained in:
YAMAMOTO Takashi 2024-06-19 17:19:57 +09:00 committed by GitHub
parent 3746534010
commit 7f94d183ac
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -418,7 +418,20 @@ lldb_function_to_function_dbi(const AOTCompContext *comp_ctx,
LLVMDIBuilderInsertDbgValueAtEnd(DIB, Param, ParamVar, ParamExpression, LLVMDIBuilderInsertDbgValueAtEnd(DIB, Param, ParamVar, ParamExpression,
ParamLocation, block_curr); ParamLocation, block_curr);
if (!cplusplus) { if (num_function_args != func_ctx->aot_func->func_type->param_count) {
// for C, this happens when the compiler optimized out some of
// function parameters.
//
// for C++, this mismatch is normal because of the "this" pointer.
if (!cplusplus) {
LOG_WARNING("function args number mismatch! num_function_args: %d, "
"wasm func params: %d, func: %s",
num_function_args,
func_ctx->aot_func->func_type->param_count,
function_name);
}
}
else if (!cplusplus) {
auto variable_list = function.GetBlock().GetVariables( auto variable_list = function.GetBlock().GetVariables(
extractor->target, true, false, false); extractor->target, true, false, false);
if (num_function_args != variable_list.GetSize()) { if (num_function_args != variable_list.GetSize()) {