diff --git a/repos/gems/src/app/sculpt_manager/graph.h b/repos/gems/src/app/sculpt_manager/graph.h index 11a5d9a41b..302001ec02 100644 --- a/repos/gems/src/app/sculpt_manager/graph.h +++ b/repos/gems/src/app/sculpt_manager/graph.h @@ -181,14 +181,7 @@ struct Sculpt::Graph if (show_details) { component.for_each_secondary_dep([&] (Start_name const &dep) { - /* - * Connections to depot_rom do not reveal any - * interesting information but create a lot of - * noise. - */ - bool const blacklisted = (dep == "depot_rom") - || (dep == "dynamic_depot_rom"); - if (blacklisted) + if (Runtime_state::blacklisted_from_graph(dep)) return; xml.node("dep", [&] () { diff --git a/repos/gems/src/app/sculpt_manager/model/runtime_config.h b/repos/gems/src/app/sculpt_manager/model/runtime_config.h index 99619115f6..e4dcaae1cd 100644 --- a/repos/gems/src/app/sculpt_manager/model/runtime_config.h +++ b/repos/gems/src/app/sculpt_manager/model/runtime_config.h @@ -83,7 +83,20 @@ class Sculpt::Runtime_config } if (service == "ROM") { - bool const interesting_rom = !dst_label.valid(); + + /* + * ROM sessions for plain binaries (e.g, as requested by + * the sculpt-managed inspect or part_block instances) are + * not interesting for the graph. Non-sculpt-managed + * subsystems can only be connected to the few ROMs + * whitelisted in the 'Parent_services' definition below. + */ + bool const interesting_rom = + dst_label.valid() && + (strcmp("config", dst_label.string(), 5) == 0 || + dst_label == "platform_info" || + dst_label == "capslock"); + if (interesting_rom) { result = "info"; return; diff --git a/repos/gems/src/app/sculpt_manager/model/runtime_state.h b/repos/gems/src/app/sculpt_manager/model/runtime_state.h index c49843d2b6..4a01989da8 100644 --- a/repos/gems/src/app/sculpt_manager/model/runtime_state.h +++ b/repos/gems/src/app/sculpt_manager/model/runtime_state.h @@ -261,6 +261,15 @@ class Sculpt::Runtime_state : public Runtime_info return result; } + static bool blacklisted_from_graph(Start_name const &name) + { + /* + * Connections to depot_rom do not reveal any interesting + * information but create a lot of noise. + */ + return name == "depot_rom" || name == "dynamic_depot_rom"; + } + void toggle_selection(Start_name const &name, Runtime_config const &config) { _children.for_each([&] (Child &child) { @@ -293,9 +302,10 @@ class Sculpt::Runtime_state : public Runtime_info /* tag all dependencies as part of the TCB */ config.for_each_dependency(name_of_updated, [&] (Start_name const &dep) { - _children.for_each([&] (Child &child) { - if (child.name == dep) - child.info.tcb = true; }); }); + if (!blacklisted_from_graph(dep)) + _children.for_each([&] (Child &child) { + if (child.name == dep) + child.info.tcb = true; }); }); } } diff --git a/repos/gems/src/app/sculpt_manager/runtime/file_browser.cc b/repos/gems/src/app/sculpt_manager/runtime/file_browser.cc index 68831f97f4..d720b661e3 100644 --- a/repos/gems/src/app/sculpt_manager/runtime/file_browser.cc +++ b/repos/gems/src/app/sculpt_manager/runtime/file_browser.cc @@ -46,15 +46,16 @@ void Sculpt::gen_nit_fb_start(Xml_generator &xml, Rom_name const &name) xml.node("config", [&] () { }); xml.node("route", [&] () { + + gen_service_node(xml, [&] () { + xml.node("parent", [&] () { + xml.attribute("label", String<64>("leitzentrale -> ", name)); }); }); + gen_parent_rom_route(xml, "nit_fb"); gen_parent_rom_route(xml, "ld.lib.so"); gen_parent_route (xml); gen_parent_route (xml); gen_parent_route (xml); - - gen_service_node(xml, [&] () { - xml.node("parent", [&] () { - xml.attribute("label", String<64>("leitzentrale -> ", name)); }); }); }); } @@ -159,6 +160,11 @@ void Sculpt::gen_noux_start(Xml_generator &xml, Rom_name const &name, xml.node("route", [&] () { + gen_service_node<::File_system::Session>(xml, [&] () { + xml.attribute("label", "config"); + xml.node("parent", [&] () { xml.attribute("label", "config"); }); + }); + gen_service_node(xml, [&] () { gen_named_node(xml, "child", terminal_name); }); @@ -181,11 +187,6 @@ void Sculpt::gen_noux_start(Xml_generator &xml, Rom_name const &name, gen_parent_route (xml); gen_parent_route (xml); - gen_service_node<::File_system::Session>(xml, [&] () { - xml.attribute("label", "config"); - xml.node("parent", [&] () { xml.attribute("label", "config"); }); - }); - gen_service_node<::File_system::Session>(xml, [&] () { xml.attribute("label", "report"); xml.node("parent", [&] () { xml.attribute("label", "report"); });