mirror of
https://github.com/dgibson/dtc.git
synced 2025-10-13 16:27:39 -04:00
Revert "annotations: add positions"
This reverts commit baa1d2cf78
.
Turns out this introduced memory badness. valgrind picks it up on
x86, but it straight out SEGVs on x86.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
403cc79f06
commit
a3143fafbf
7 changed files with 23 additions and 67 deletions
13
dtc-parser.y
13
dtc-parser.y
|
@ -180,10 +180,7 @@ devicetree:
|
||||||
*/
|
*/
|
||||||
if (!($<flags>-1 & DTSF_PLUGIN))
|
if (!($<flags>-1 & DTSF_PLUGIN))
|
||||||
ERROR(&@2, "Label or path %s not found", $1);
|
ERROR(&@2, "Label or path %s not found", $1);
|
||||||
$$ = add_orphan_node(
|
$$ = add_orphan_node(name_node(build_node(NULL, NULL), ""), $2, $1);
|
||||||
name_node(build_node(NULL, NULL, NULL),
|
|
||||||
""),
|
|
||||||
$2, $1);
|
|
||||||
}
|
}
|
||||||
| devicetree DT_LABEL dt_ref nodedef
|
| devicetree DT_LABEL dt_ref nodedef
|
||||||
{
|
{
|
||||||
|
@ -263,7 +260,7 @@ devicetree:
|
||||||
nodedef:
|
nodedef:
|
||||||
'{' proplist subnodes '}' ';'
|
'{' proplist subnodes '}' ';'
|
||||||
{
|
{
|
||||||
$$ = build_node($2, $3, &@$);
|
$$ = build_node($2, $3);
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
@ -281,11 +278,11 @@ proplist:
|
||||||
propdef:
|
propdef:
|
||||||
DT_PROPNODENAME '=' propdata ';'
|
DT_PROPNODENAME '=' propdata ';'
|
||||||
{
|
{
|
||||||
$$ = build_property($1, $3, &@$);
|
$$ = build_property($1, $3);
|
||||||
}
|
}
|
||||||
| DT_PROPNODENAME ';'
|
| DT_PROPNODENAME ';'
|
||||||
{
|
{
|
||||||
$$ = build_property($1, empty_data, &@$);
|
$$ = build_property($1, empty_data);
|
||||||
}
|
}
|
||||||
| DT_DEL_PROP DT_PROPNODENAME ';'
|
| DT_DEL_PROP DT_PROPNODENAME ';'
|
||||||
{
|
{
|
||||||
|
@ -566,7 +563,7 @@ subnode:
|
||||||
}
|
}
|
||||||
| DT_DEL_NODE DT_PROPNODENAME ';'
|
| DT_DEL_NODE DT_PROPNODENAME ';'
|
||||||
{
|
{
|
||||||
$$ = name_node(build_node_delete(&@$), $2);
|
$$ = name_node(build_node_delete(), $2);
|
||||||
}
|
}
|
||||||
| DT_OMIT_NO_REF subnode
|
| DT_OMIT_NO_REF subnode
|
||||||
{
|
{
|
||||||
|
|
10
dtc.h
10
dtc.h
|
@ -158,7 +158,6 @@ struct property {
|
||||||
struct property *next;
|
struct property *next;
|
||||||
|
|
||||||
struct label *labels;
|
struct label *labels;
|
||||||
struct srcpos *srcpos;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct node {
|
struct node {
|
||||||
|
@ -178,7 +177,6 @@ struct node {
|
||||||
|
|
||||||
struct label *labels;
|
struct label *labels;
|
||||||
const struct bus_type *bus;
|
const struct bus_type *bus;
|
||||||
struct srcpos *srcpos;
|
|
||||||
|
|
||||||
bool omit_if_unused, is_referenced;
|
bool omit_if_unused, is_referenced;
|
||||||
};
|
};
|
||||||
|
@ -207,15 +205,13 @@ struct node {
|
||||||
void add_label(struct label **labels, char *label);
|
void add_label(struct label **labels, char *label);
|
||||||
void delete_labels(struct label **labels);
|
void delete_labels(struct label **labels);
|
||||||
|
|
||||||
struct property *build_property(char *name, struct data val,
|
struct property *build_property(char *name, struct data val);
|
||||||
struct srcpos *srcpos);
|
|
||||||
struct property *build_property_delete(char *name);
|
struct property *build_property_delete(char *name);
|
||||||
struct property *chain_property(struct property *first, struct property *list);
|
struct property *chain_property(struct property *first, struct property *list);
|
||||||
struct property *reverse_properties(struct property *first);
|
struct property *reverse_properties(struct property *first);
|
||||||
|
|
||||||
struct node *build_node(struct property *proplist, struct node *children,
|
struct node *build_node(struct property *proplist, struct node *children);
|
||||||
struct srcpos *srcpos);
|
struct node *build_node_delete(void);
|
||||||
struct node *build_node_delete(struct srcpos *srcpos);
|
|
||||||
struct node *name_node(struct node *node, char *name);
|
struct node *name_node(struct node *node, char *name);
|
||||||
struct node *omit_node_if_unused(struct node *node);
|
struct node *omit_node_if_unused(struct node *node);
|
||||||
struct node *reference_node(struct node *node);
|
struct node *reference_node(struct node *node);
|
||||||
|
|
|
@ -692,7 +692,7 @@ static struct property *flat_read_property(struct inbuf *dtbuf,
|
||||||
|
|
||||||
val = flat_read_data(dtbuf, proplen);
|
val = flat_read_data(dtbuf, proplen);
|
||||||
|
|
||||||
return build_property(name, val, NULL);
|
return build_property(name, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -750,7 +750,7 @@ static struct node *unflatten_tree(struct inbuf *dtbuf,
|
||||||
char *flatname;
|
char *flatname;
|
||||||
uint32_t val;
|
uint32_t val;
|
||||||
|
|
||||||
node = build_node(NULL, NULL, NULL);
|
node = build_node(NULL, NULL);
|
||||||
|
|
||||||
flatname = flat_read_string(dtbuf);
|
flatname = flat_read_string(dtbuf);
|
||||||
|
|
||||||
|
|
5
fstree.c
5
fstree.c
|
@ -34,7 +34,7 @@ static struct node *read_fstree(const char *dirname)
|
||||||
if (!d)
|
if (!d)
|
||||||
die("Couldn't opendir() \"%s\": %s\n", dirname, strerror(errno));
|
die("Couldn't opendir() \"%s\": %s\n", dirname, strerror(errno));
|
||||||
|
|
||||||
tree = build_node(NULL, NULL, NULL);
|
tree = build_node(NULL, NULL);
|
||||||
|
|
||||||
while ((de = readdir(d)) != NULL) {
|
while ((de = readdir(d)) != NULL) {
|
||||||
char *tmpname;
|
char *tmpname;
|
||||||
|
@ -60,8 +60,7 @@ static struct node *read_fstree(const char *dirname)
|
||||||
} else {
|
} else {
|
||||||
prop = build_property(xstrdup(de->d_name),
|
prop = build_property(xstrdup(de->d_name),
|
||||||
data_copy_file(pfile,
|
data_copy_file(pfile,
|
||||||
st.st_size),
|
st.st_size));
|
||||||
NULL);
|
|
||||||
add_property(tree, prop);
|
add_property(tree, prop);
|
||||||
fclose(pfile);
|
fclose(pfile);
|
||||||
}
|
}
|
||||||
|
|
33
livetree.c
33
livetree.c
|
@ -19,7 +19,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "dtc.h"
|
#include "dtc.h"
|
||||||
#include "srcpos.h"
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Tree building functions
|
* Tree building functions
|
||||||
|
@ -51,8 +50,7 @@ void delete_labels(struct label **labels)
|
||||||
label->deleted = 1;
|
label->deleted = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct property *build_property(char *name, struct data val,
|
struct property *build_property(char *name, struct data val)
|
||||||
struct srcpos *srcpos)
|
|
||||||
{
|
{
|
||||||
struct property *new = xmalloc(sizeof(*new));
|
struct property *new = xmalloc(sizeof(*new));
|
||||||
|
|
||||||
|
@ -60,7 +58,6 @@ struct property *build_property(char *name, struct data val,
|
||||||
|
|
||||||
new->name = name;
|
new->name = name;
|
||||||
new->val = val;
|
new->val = val;
|
||||||
new->srcpos = srcpos_copy(srcpos);
|
|
||||||
|
|
||||||
return new;
|
return new;
|
||||||
}
|
}
|
||||||
|
@ -100,8 +97,7 @@ struct property *reverse_properties(struct property *first)
|
||||||
return head;
|
return head;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct node *build_node(struct property *proplist, struct node *children,
|
struct node *build_node(struct property *proplist, struct node *children)
|
||||||
struct srcpos *srcpos)
|
|
||||||
{
|
{
|
||||||
struct node *new = xmalloc(sizeof(*new));
|
struct node *new = xmalloc(sizeof(*new));
|
||||||
struct node *child;
|
struct node *child;
|
||||||
|
@ -110,7 +106,6 @@ struct node *build_node(struct property *proplist, struct node *children,
|
||||||
|
|
||||||
new->proplist = reverse_properties(proplist);
|
new->proplist = reverse_properties(proplist);
|
||||||
new->children = children;
|
new->children = children;
|
||||||
new->srcpos = srcpos_copy(srcpos);
|
|
||||||
|
|
||||||
for_each_child(new, child) {
|
for_each_child(new, child) {
|
||||||
child->parent = new;
|
child->parent = new;
|
||||||
|
@ -119,14 +114,13 @@ struct node *build_node(struct property *proplist, struct node *children,
|
||||||
return new;
|
return new;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct node *build_node_delete(struct srcpos *srcpos)
|
struct node *build_node_delete(void)
|
||||||
{
|
{
|
||||||
struct node *new = xmalloc(sizeof(*new));
|
struct node *new = xmalloc(sizeof(*new));
|
||||||
|
|
||||||
memset(new, 0, sizeof(*new));
|
memset(new, 0, sizeof(*new));
|
||||||
|
|
||||||
new->deleted = 1;
|
new->deleted = 1;
|
||||||
new->srcpos = srcpos_copy(srcpos);
|
|
||||||
|
|
||||||
return new;
|
return new;
|
||||||
}
|
}
|
||||||
|
@ -189,8 +183,6 @@ struct node *merge_nodes(struct node *old_node, struct node *new_node)
|
||||||
|
|
||||||
old_prop->val = new_prop->val;
|
old_prop->val = new_prop->val;
|
||||||
old_prop->deleted = 0;
|
old_prop->deleted = 0;
|
||||||
free(old_prop->srcpos);
|
|
||||||
old_prop->srcpos = new_prop->srcpos;
|
|
||||||
free(new_prop);
|
free(new_prop);
|
||||||
new_prop = NULL;
|
new_prop = NULL;
|
||||||
break;
|
break;
|
||||||
|
@ -231,8 +223,6 @@ struct node *merge_nodes(struct node *old_node, struct node *new_node)
|
||||||
add_child(old_node, new_child);
|
add_child(old_node, new_child);
|
||||||
}
|
}
|
||||||
|
|
||||||
old_node->srcpos = srcpos_extend(old_node->srcpos, new_node->srcpos);
|
|
||||||
|
|
||||||
/* The new node contents are now merged into the old node. Free
|
/* The new node contents are now merged into the old node. Free
|
||||||
* the new node. */
|
* the new node. */
|
||||||
free(new_node);
|
free(new_node);
|
||||||
|
@ -251,18 +241,18 @@ struct node * add_orphan_node(struct node *dt, struct node *new_node, char *ref)
|
||||||
if (ref[0] == '/') {
|
if (ref[0] == '/') {
|
||||||
d = data_append_data(d, ref, strlen(ref) + 1);
|
d = data_append_data(d, ref, strlen(ref) + 1);
|
||||||
|
|
||||||
p = build_property("target-path", d, NULL);
|
p = build_property("target-path", d);
|
||||||
} else {
|
} else {
|
||||||
d = data_add_marker(d, REF_PHANDLE, ref);
|
d = data_add_marker(d, REF_PHANDLE, ref);
|
||||||
d = data_append_integer(d, 0xffffffff, 32);
|
d = data_append_integer(d, 0xffffffff, 32);
|
||||||
|
|
||||||
p = build_property("target", d, NULL);
|
p = build_property("target", d);
|
||||||
}
|
}
|
||||||
|
|
||||||
xasprintf(&name, "fragment@%u",
|
xasprintf(&name, "fragment@%u",
|
||||||
next_orphan_fragment++);
|
next_orphan_fragment++);
|
||||||
name_node(new_node, "__overlay__");
|
name_node(new_node, "__overlay__");
|
||||||
node = build_node(p, new_node, NULL);
|
node = build_node(p, new_node);
|
||||||
name_node(node, name);
|
name_node(node, name);
|
||||||
|
|
||||||
add_child(dt, node);
|
add_child(dt, node);
|
||||||
|
@ -361,7 +351,7 @@ void append_to_property(struct node *node,
|
||||||
p->val = d;
|
p->val = d;
|
||||||
} else {
|
} else {
|
||||||
d = data_append_data(empty_data, data, len);
|
d = data_append_data(empty_data, data, len);
|
||||||
p = build_property(name, d, NULL);
|
p = build_property(name, d);
|
||||||
add_property(node, p);
|
add_property(node, p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -619,11 +609,11 @@ cell_t get_node_phandle(struct node *root, struct node *node)
|
||||||
|
|
||||||
if (!get_property(node, "linux,phandle")
|
if (!get_property(node, "linux,phandle")
|
||||||
&& (phandle_format & PHANDLE_LEGACY))
|
&& (phandle_format & PHANDLE_LEGACY))
|
||||||
add_property(node, build_property("linux,phandle", d, NULL));
|
add_property(node, build_property("linux,phandle", d));
|
||||||
|
|
||||||
if (!get_property(node, "phandle")
|
if (!get_property(node, "phandle")
|
||||||
&& (phandle_format & PHANDLE_EPAPR))
|
&& (phandle_format & PHANDLE_EPAPR))
|
||||||
add_property(node, build_property("phandle", d, NULL));
|
add_property(node, build_property("phandle", d));
|
||||||
|
|
||||||
/* If the node *does* have a phandle property, we must
|
/* If the node *does* have a phandle property, we must
|
||||||
* be dealing with a self-referencing phandle, which will be
|
* be dealing with a self-referencing phandle, which will be
|
||||||
|
@ -797,7 +787,7 @@ static struct node *build_and_name_child_node(struct node *parent, char *name)
|
||||||
{
|
{
|
||||||
struct node *node;
|
struct node *node;
|
||||||
|
|
||||||
node = build_node(NULL, NULL, NULL);
|
node = build_node(NULL, NULL);
|
||||||
name_node(node, xstrdup(name));
|
name_node(node, xstrdup(name));
|
||||||
add_child(parent, node);
|
add_child(parent, node);
|
||||||
|
|
||||||
|
@ -859,8 +849,7 @@ static void generate_label_tree_internal(struct dt_info *dti,
|
||||||
/* insert it */
|
/* insert it */
|
||||||
p = build_property(l->label,
|
p = build_property(l->label,
|
||||||
data_copy_mem(node->fullpath,
|
data_copy_mem(node->fullpath,
|
||||||
strlen(node->fullpath) + 1),
|
strlen(node->fullpath) + 1));
|
||||||
NULL);
|
|
||||||
add_property(an, p);
|
add_property(an, p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
22
srcpos.c
22
srcpos.c
|
@ -207,7 +207,6 @@ struct srcpos srcpos_empty = {
|
||||||
.last_line = 0,
|
.last_line = 0,
|
||||||
.last_column = 0,
|
.last_column = 0,
|
||||||
.file = NULL,
|
.file = NULL,
|
||||||
.next = NULL,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void srcpos_update(struct srcpos *pos, const char *text, int len)
|
void srcpos_update(struct srcpos *pos, const char *text, int len)
|
||||||
|
@ -235,34 +234,13 @@ struct srcpos *
|
||||||
srcpos_copy(struct srcpos *pos)
|
srcpos_copy(struct srcpos *pos)
|
||||||
{
|
{
|
||||||
struct srcpos *pos_new;
|
struct srcpos *pos_new;
|
||||||
struct srcfile_state *srcfile_state;
|
|
||||||
|
|
||||||
if (!pos)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
pos_new = xmalloc(sizeof(struct srcpos));
|
pos_new = xmalloc(sizeof(struct srcpos));
|
||||||
memcpy(pos_new, pos, sizeof(struct srcpos));
|
memcpy(pos_new, pos, sizeof(struct srcpos));
|
||||||
|
|
||||||
/* allocate without free */
|
|
||||||
srcfile_state = xmalloc(sizeof(struct srcfile_state));
|
|
||||||
memcpy(srcfile_state, pos->file, sizeof(struct srcfile_state));
|
|
||||||
pos_new->file = srcfile_state;
|
|
||||||
|
|
||||||
return pos_new;
|
return pos_new;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct srcpos *srcpos_extend(struct srcpos *pos, struct srcpos *newtail)
|
|
||||||
{
|
|
||||||
struct srcpos *p;
|
|
||||||
|
|
||||||
if (!pos)
|
|
||||||
return newtail;
|
|
||||||
|
|
||||||
for (p = pos; p->next != NULL; p = p->next);
|
|
||||||
p->next = newtail;
|
|
||||||
return pos;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *
|
char *
|
||||||
srcpos_string(struct srcpos *pos)
|
srcpos_string(struct srcpos *pos)
|
||||||
{
|
{
|
||||||
|
|
3
srcpos.h
3
srcpos.h
|
@ -74,7 +74,6 @@ struct srcpos {
|
||||||
int last_line;
|
int last_line;
|
||||||
int last_column;
|
int last_column;
|
||||||
struct srcfile_state *file;
|
struct srcfile_state *file;
|
||||||
struct srcpos *next;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#define YYLTYPE struct srcpos
|
#define YYLTYPE struct srcpos
|
||||||
|
@ -106,8 +105,6 @@ extern struct srcpos srcpos_empty;
|
||||||
|
|
||||||
extern void srcpos_update(struct srcpos *pos, const char *text, int len);
|
extern void srcpos_update(struct srcpos *pos, const char *text, int len);
|
||||||
extern struct srcpos *srcpos_copy(struct srcpos *pos);
|
extern struct srcpos *srcpos_copy(struct srcpos *pos);
|
||||||
extern struct srcpos *srcpos_extend(struct srcpos *new_srcpos,
|
|
||||||
struct srcpos *old_srcpos);
|
|
||||||
extern char *srcpos_string(struct srcpos *pos);
|
extern char *srcpos_string(struct srcpos *pos);
|
||||||
|
|
||||||
extern void PRINTF(3, 0) srcpos_verror(struct srcpos *pos, const char *prefix,
|
extern void PRINTF(3, 0) srcpos_verror(struct srcpos *pos, const char *prefix,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue