summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xtests/run_tests.sh9
-rw-r--r--tests/testdata/base_no_symbols-base.dts7
-rw-r--r--tests/testdata/base_no_symbols-overlay.dts10
-rw-r--r--tests/testdata/empty_overlay-base.dts4
-rw-r--r--tests/testdata/empty_overlay-overlay.dts4
-rw-r--r--tests/testdata/overlay_no_symbols-base.dts7
-rw-r--r--tests/testdata/overlay_no_symbols-overlay.dts4
-rw-r--r--ufdt_overlay.c28
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: