pvmfw: Keep __symbols__ in VM DTBO after filter

There's no good usecase for this when booting microdroid,
but it's useful for CTS test.

Bug: 326539895
Test: atest libpvmfw.device_assignment.test
Change-Id: I4ed5bff265d4c8ae1c4a8e0240d9ec1cde7024d5
diff --git a/pvmfw/src/device_assignment.rs b/pvmfw/src/device_assignment.rs
index 2c47f9e..b8912ce 100644
--- a/pvmfw/src/device_assignment.rs
+++ b/pvmfw/src/device_assignment.rs
@@ -705,7 +705,6 @@
 
         // Clean up any nodes that wouldn't be overlaid but may contain reference to filtered nodes.
         // Otherwise, `fdt_apply_overlay()` would fail because of missing phandle reference.
-        filtered_dtbo_paths.push(CString::new("/__symbols__").unwrap());
         // TODO(b/277993056): Also filter other unused nodes/props in __local_fixups__
         filtered_dtbo_paths.push(CString::new("/__local_fixups__/host").unwrap());
 
@@ -718,7 +717,6 @@
     /// Filters VM DTBO to only contain necessary information for booting pVM
     /// In detail, this will remove followings by setting nop node / nop property.
     ///   - Removes unassigned devices
-    ///   - Removes /__symbols__ node
     // TODO(b/277993056): remove unused dependencies in VM DTBO.
     // TODO(b/277993056): remove supernodes' properties.
     // TODO(b/277993056): remove unused alises.
@@ -731,7 +729,7 @@
             node.nop()?;
         }
 
-        Ok(())
+        filter_dangling_symbols(vm_dtbo)
     }
 
     fn patch_pviommus(&self, fdt: &mut Fdt) -> Result<BTreeMap<PvIommu, Phandle>> {
@@ -972,21 +970,28 @@
 
         let vm_dtbo = vm_dtbo.as_mut();
 
+        let symbols = vm_dtbo.symbols().unwrap().unwrap();
+
         let rng = vm_dtbo.node(cstr!("/fragment@rng/__overlay__/rng")).unwrap();
         assert_ne!(rng, None);
+        let rng_symbol = symbols.getprop_str(cstr!("rng")).unwrap();
+        assert_eq!(Some(cstr!("/fragment@rng/__overlay__/rng")), rng_symbol);
 
         let light = vm_dtbo.node(cstr!("/fragment@rng/__overlay__/light")).unwrap();
         assert_eq!(light, None);
+        let light_symbol = symbols.getprop_str(cstr!("light")).unwrap();
+        assert_eq!(None, light_symbol);
 
         let led = vm_dtbo.node(cstr!("/fragment@led/__overlay__/led")).unwrap();
         assert_eq!(led, None);
+        let led_symbol = symbols.getprop_str(cstr!("led")).unwrap();
+        assert_eq!(None, led_symbol);
 
         let backlight =
             vm_dtbo.node(cstr!("/fragment@backlight/__overlay__/bus0/backlight")).unwrap();
         assert_eq!(backlight, None);
-
-        let symbols_node = vm_dtbo.symbols().unwrap();
-        assert_eq!(symbols_node, None);
+        let backlight_symbol = symbols.getprop_str(cstr!("backlight")).unwrap();
+        assert_eq!(None, backlight_symbol);
     }
 
     #[test]