-static int MC_dwarf_get_variable_index(
- std::vector<simgrid::mc::Variable> variables, const char *var, void *address)
-{
-
- if (variables.empty())
- return 0;
-
- unsigned int cursor = 0;
- int start = 0;
- int end = variables.size() - 1;
- mc_variable_t var_test = nullptr;
-
- while (start <= end) {
- cursor = (start + end) / 2;
- var_test = &variables[cursor];
- if (strcmp(var_test->name.c_str(), var) < 0) {
- start = cursor + 1;
- } else if (strcmp(var_test->name.c_str(), var) > 0) {
- end = cursor - 1;
- } else {
- if (address) { /* global variable */
- if (var_test->address == address)
- return -1;
- if (var_test->address > address)
- end = cursor - 1;
- else
- start = cursor + 1;
- } else { /* local variable */
- return -1;
- }
- }
- }
-
- if (strcmp(var_test->name.c_str(), var) == 0) {
- if (address && var_test->address < address)
- return cursor + 1;
- else
- return cursor;
- } else if (strcmp(var_test->name.c_str(), var) < 0)
- return cursor + 1;
- else
- return cursor;
-
-}
-
-void MC_dwarf_register_global_variable(
- mc_object_info_t info,
- std::unique_ptr<simgrid::mc::Variable> variable)
-{
- int index =
- MC_dwarf_get_variable_index(info->global_variables,
- variable->name.c_str(),
- variable->address);
- if (index != -1)
- info->global_variables.insert(
- info->global_variables.begin() + index, std::move(*variable));
- // TODO, else ?
-}
-
-void MC_dwarf_register_non_global_variable(
- mc_object_info_t info,
- mc_frame_t frame,
- std::unique_ptr<simgrid::mc::Variable> variable)
-{
- xbt_assert(frame, "Frame is NULL");
- int index =
- MC_dwarf_get_variable_index(
- frame->variables, variable->name.c_str(), NULL);
- if (index != -1)
- frame->variables.insert(
- frame->variables.begin() + index, std::move(*variable));
- // TODO, else ?
-}
-
-void MC_dwarf_register_variable(
- mc_object_info_t info, mc_frame_t frame,
- std::unique_ptr<simgrid::mc::Variable> variable)
-{
- if (!variable)
- return;
- if (variable->global)
- MC_dwarf_register_global_variable(info, std::move(variable));
- else if (frame != nullptr)
- MC_dwarf_register_non_global_variable(info, frame, std::move(variable));
- else
- xbt_die("No frame for this local variable");
-}
-
-void MC_post_process_object_info(mc_process_t process, mc_object_info_t info)