From 6a6f5aecd4915407ff39dc030987b39a7e09c957 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= Date: Sun, 20 Oct 2024 22:54:44 +0200 Subject: [PATCH] Restore labels from __symbols__ node MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If the input has a __symbols__ node, restore the named labels for the respective nodes. Signed-off-by: Uwe Kleine-König --- dtc.c | 2 ++ dtc.h | 1 + livetree.c | 21 +++++++++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/dtc.c b/dtc.c index b3445b7..63a6c85 100644 --- a/dtc.c +++ b/dtc.c @@ -338,6 +338,8 @@ int main(int argc, char *argv[]) if (auto_label_aliases) generate_label_tree(dti, "aliases", false); + generate_labels_from_tree(dti, "__symbols__"); + if (generate_symbols) generate_label_tree(dti, "__symbols__", true); diff --git a/dtc.h b/dtc.h index 3a220b9..f97f3c2 100644 --- a/dtc.h +++ b/dtc.h @@ -339,6 +339,7 @@ struct dt_info *build_dt_info(unsigned int dtsflags, struct reserve_info *reservelist, struct node *tree, uint32_t boot_cpuid_phys); void sort_tree(struct dt_info *dti); +void generate_labels_from_tree(struct dt_info *dti, const char *name); void generate_label_tree(struct dt_info *dti, const char *name, bool allocph); void generate_fixups_tree(struct dt_info *dti, const char *name); void generate_local_fixups_tree(struct dt_info *dti, const char *name); diff --git a/livetree.c b/livetree.c index d51d058..cc54f97 100644 --- a/livetree.c +++ b/livetree.c @@ -1046,6 +1046,27 @@ static void generate_local_fixups_tree_internal(struct dt_info *dti, generate_local_fixups_tree_internal(dti, lfn, c); } +void generate_labels_from_tree(struct dt_info *dti, const char *name) +{ + struct node *an; + struct property *p; + + an = get_subnode(dti->dt, name); + if (!an) + return; + + for_each_property(an, p) { + struct node *labeled_node; + + labeled_node = get_node_by_path(dti->dt, p->val.val); + if (labeled_node) + add_label(&labeled_node->labels, p->name); + else if (quiet < 1) + fprintf(stderr, "Warning: Path %s referenced in property %s/%s missing", + p->val.val, name, p->name); + } +} + void generate_label_tree(struct dt_info *dti, const char *name, bool allocph) { if (!any_label_tree(dti, dti->dt))