diff options
-rwxr-xr-x | tests/run_tests.sh | 9 | ||||
-rw-r--r-- | tests/testdata/base_no_symbols-base.dts | 7 | ||||
-rw-r--r-- | tests/testdata/base_no_symbols-overlay.dts | 10 | ||||
-rw-r--r-- | tests/testdata/empty_overlay-base.dts | 4 | ||||
-rw-r--r-- | tests/testdata/empty_overlay-overlay.dts | 4 | ||||
-rw-r--r-- | tests/testdata/overlay_no_symbols-base.dts | 7 | ||||
-rw-r--r-- | tests/testdata/overlay_no_symbols-overlay.dts | 4 | ||||
-rw-r--r-- | ufdt_overlay.c | 28 |
8 files changed, 62 insertions, 11 deletions
diff --git a/tests/run_tests.sh b/tests/run_tests.sh index eda6d5c..4513950 100755 --- a/tests/run_tests.sh +++ b/tests/run_tests.sh @@ -60,6 +60,15 @@ main() { run_test_case \ "node_ordering" \ "Run test about node ordering" + run_test_case \ + "base_no_symbols" \ + "Run test about base dtb without __symbols__" + run_test_case \ + "overlay_no_symbols" \ + "Run test about overlay dtb without __symbols__" + run_test_case \ + "empty_overlay" \ + "Run test about overlaying with empty base and overlay dt" ) if [ $? -ne 0 ]; then diff --git a/tests/testdata/base_no_symbols-base.dts b/tests/testdata/base_no_symbols-base.dts new file mode 100644 index 0000000..b9d77f8 --- /dev/null +++ b/tests/testdata/base_no_symbols-base.dts @@ -0,0 +1,7 @@ +/dts-v1/; + +/ { + x {}; +}; + + diff --git a/tests/testdata/base_no_symbols-overlay.dts b/tests/testdata/base_no_symbols-overlay.dts new file mode 100644 index 0000000..509dae7 --- /dev/null +++ b/tests/testdata/base_no_symbols-overlay.dts @@ -0,0 +1,10 @@ +/dts-v1/; +/plugin/; + +/{ + a: a {}; +}; + +&a { + b {}; +}; diff --git a/tests/testdata/empty_overlay-base.dts b/tests/testdata/empty_overlay-base.dts new file mode 100644 index 0000000..e160dad --- /dev/null +++ b/tests/testdata/empty_overlay-base.dts @@ -0,0 +1,4 @@ +/dts-v1/; + +/ { +}; diff --git a/tests/testdata/empty_overlay-overlay.dts b/tests/testdata/empty_overlay-overlay.dts new file mode 100644 index 0000000..00c2422 --- /dev/null +++ b/tests/testdata/empty_overlay-overlay.dts @@ -0,0 +1,4 @@ +/dts-v1/; +/plugin/; + +/{}; diff --git a/tests/testdata/overlay_no_symbols-base.dts b/tests/testdata/overlay_no_symbols-base.dts new file mode 100644 index 0000000..025dae4 --- /dev/null +++ b/tests/testdata/overlay_no_symbols-base.dts @@ -0,0 +1,7 @@ +/dts-v1/; + +/ { + x: x {}; +}; + + diff --git a/tests/testdata/overlay_no_symbols-overlay.dts b/tests/testdata/overlay_no_symbols-overlay.dts new file mode 100644 index 0000000..2030c45 --- /dev/null +++ b/tests/testdata/overlay_no_symbols-overlay.dts @@ -0,0 +1,4 @@ +/dts-v1/; +/plugin/; + +/ {}; diff --git a/ufdt_overlay.c b/ufdt_overlay.c index d581ca7..b595c4f 100644 --- a/ufdt_overlay.c +++ b/ufdt_overlay.c @@ -226,22 +226,28 @@ static int ufdt_do_one_fixup(struct ufdt *tree, const char *fixups, 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; + struct ufdt_node *overlay_fixups_node = + ufdt_get_node_by_path(overlay_tree, "/__fixups__"); + if (!overlay_fixups_node) { + /* There is no __fixups__. Do nothing. */ + return 0; + } - main_symbols_node = ufdt_get_node_by_path(main_tree, "/__symbols__"); - overlay_fixups_node = ufdt_get_node_by_path(overlay_tree, "/__fixups__"); + struct ufdt_node *main_symbols_node = + ufdt_get_node_by_path(main_tree, "/__symbols__"); - if (!main_symbols_node) { - dto_error("Bad main_symbols in ufdt_overlay_do_fixups\n"); - return -1; - } + struct ufdt_node **it; + for_each_prop(it, overlay_fixups_node) { + /* Find the first property */ - if (!overlay_fixups_node) { - dto_error("Bad overlay_fixups in ufdt_overlay_do_fixups\n"); - return -1; + /* 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; } - struct ufdt_node **it; for_each_prop(it, overlay_fixups_node) { /* * A property in __fixups__ looks like: |