#include "srcline.h"
#include "symbol.h"
#include "dwarf-aux.h"
+#include "callchain.h"
#include <fcntl.h>
#include <unistd.h>
#include <elfutils/libdwfl.h>
struct symbol *inline_sym = new_inline_sym(args->dso, args->sym, dwarf_diename(die));
const char *call_fname = die_get_call_file(die);
char *call_srcline = srcline__unknown;
- struct inline_list *ilist;
if (!inline_sym)
return -ENOMEM;
if (call_fname)
call_srcline = srcline_from_fileline(call_fname, die_get_call_lineno(die));
- list_for_each_entry(ilist, &args->node->val, list) {
- if (args->leaf_srcline == ilist->srcline)
+ if (!list_empty(&args->node->val)) {
+ struct inline_list *parent;
+
+ if (callchain_param.order == ORDER_CALLEE)
+ parent = list_first_entry(&args->node->val, struct inline_list, list);
+ else
+ parent = list_last_entry(&args->node->val, struct inline_list, list);
+
+ if (args->leaf_srcline == parent->srcline)
args->leaf_srcline_used = false;
- else if (ilist->srcline != srcline__unknown)
- free(ilist->srcline);
- ilist->srcline = call_srcline;
+ else if (parent->srcline != srcline__unknown)
+ free(parent->srcline);
+ parent->srcline = call_srcline;
call_srcline = NULL;
- break;
}
if (call_srcline && call_srcline != srcline__unknown)
free(call_srcline);