From be7b691756ff334705eb6faf51a196540e02e96c Mon Sep 17 00:00:00 2001 Message-Id: From: Arnaldo Carvalho de Melo Date: Thu, 16 Aug 2012 14:55:14 -0300 Subject: [PATCH] dwarf_loader: Don't stop processing after finding unsupported tag After emitting a warning that a tag is not supported __die__process_tag was returning NULL, making die__process_unit think that the problem was insufficient memory. Introduce a global variable 'unsupported_tag' and return it instead, that way die__process_unit can distinguish ENOMEM from unsupported tags. Reported-by: Thiago Macieira Tested-by: Thiago Macieira Signed-off-by: Arnaldo Carvalho de Melo --- dwarf_loader.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/dwarf_loader.c b/dwarf_loader.c index e034237..e9e1671 100644 --- a/dwarf_loader.c +++ b/dwarf_loader.c @@ -1539,6 +1539,8 @@ static struct tag *die__create_new_function(Dwarf_Die *die, struct cu *cu) return function ? &function->proto.tag : NULL; } +static struct tag unsupported_tag; + static struct tag *__die__process_tag(Dwarf_Die *die, struct cu *cu, int top_level, const char *fn) { @@ -1578,7 +1580,7 @@ static struct tag *__die__process_tag(Dwarf_Die *die, struct cu *cu, tag = die__create_new_variable(die, cu); break; default: __cu__tag_not_handled(die, fn); - tag = NULL; + tag = &unsupported_tag; break; } @@ -1595,6 +1597,9 @@ static int die__process_unit(Dwarf_Die *die, struct cu *cu) if (tag == NULL) return -ENOMEM; + if (tag == &unsupported_tag) + continue; + long id = -1; cu__add_tag(cu, tag, &id); cu__hash(cu, tag); -- 2.7.4