diff options
| author | SzuWei Lin <szuweilin@google.com> | 2017-03-27 09:45:29 +0000 |
|---|---|---|
| committer | android-build-merger <android-build-merger@google.com> | 2017-03-27 09:45:29 +0000 |
| commit | b1800e8d008a85220764bd369a9d8518ee3d4537 (patch) | |
| tree | 5470a902bb76dbb75fe07e0c22ad34acf4e55b04 | |
| parent | a3b5b09373698266c3c12120d6ecec56e53ae56e (diff) | |
| parent | ae73a373342545fd74cb5299d4c0da240a312de5 (diff) | |
| download | platform_system_libufdt-b1800e8d008a85220764bd369a9d8518ee3d4537.tar.gz platform_system_libufdt-b1800e8d008a85220764bd369a9d8518ee3d4537.tar.bz2 platform_system_libufdt-b1800e8d008a85220764bd369a9d8518ee3d4537.zip | |
Merge "Handle overlaying without node __symbols__" am: 523ab1c32a
am: ae73a37334
Change-Id: I0c36d1dfdf42c0f897001da14014141c647b934a
| -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: |
