Handle overlaying without node __symbols__

In new version of dtc, it does not always generate __symbols__ node:

https://github.com/dgibson/dtc/commit/e3c769aa9c16e7b94051c5eaae6635e79ac19385

Revises libufdt to handle main DT without node __symbols__.

Bug: 35230516
Test: tests/run_tests.sh
Change-Id: Ie086abc93ed4d45e4fe28c1d8c48fd37873256c1
diff --git a/ufdt_overlay.c b/ufdt_overlay.c
index d581ca7..b595c4f 100644
--- a/ufdt_overlay.c
+++ b/ufdt_overlay.c
@@ -226,23 +226,29 @@
 static int ufdt_overlay_do_fixups(struct ufdt *main_tree,
                                   struct ufdt *overlay_tree) {
   int len = 0;
-  struct ufdt_node *main_symbols_node, *overlay_fixups_node;
-
-  main_symbols_node = ufdt_get_node_by_path(main_tree, "/__symbols__");
-  overlay_fixups_node = ufdt_get_node_by_path(overlay_tree, "/__fixups__");
-
-  if (!main_symbols_node) {
-    dto_error("Bad main_symbols in ufdt_overlay_do_fixups\n");
-    return -1;
-  }
-
+  struct ufdt_node *overlay_fixups_node =
+      ufdt_get_node_by_path(overlay_tree, "/__fixups__");
   if (!overlay_fixups_node) {
-    dto_error("Bad overlay_fixups in ufdt_overlay_do_fixups\n");
-    return -1;
+    /* There is no __fixups__. Do nothing. */
+    return 0;
   }
 
+  struct ufdt_node *main_symbols_node =
+      ufdt_get_node_by_path(main_tree, "/__symbols__");
+
   struct ufdt_node **it;
   for_each_prop(it, overlay_fixups_node) {
+    /* Find the first property */
+
+    /* Check __symbols__ is exist when we have any property in __fixups__ */
+    if (!main_symbols_node) {
+      dto_error("No node __symbols__ in main dtb.\n");
+      return -1;
+    }
+    break;
+  }
+
+  for_each_prop(it, overlay_fixups_node) {
     /*
      * A property in __fixups__ looks like:
      * symbol_name =