Lines Matching refs:dso
4 #include "dso.h"
28 * dso that did not have a build ID whereas the original dso did have a
48 static void dso__inject_id(struct dso *dso, struct dso_id *id)
50 dso->id.maj = id->maj;
51 dso->id.min = id->min;
52 dso->id.ino = id->ino;
53 dso->id.ino_generation = id->ino_generation;
59 * The second is always dso->id, so zeroes if not set, assume passing
68 int dso__cmp_id(struct dso *a, struct dso *b)
76 struct dso *pos;
97 static int __dso__cmp_long_name(const char *long_name, struct dso_id *id, struct dso *b)
103 static int __dso__cmp_short_name(const char *short_name, struct dso_id *id, struct dso *b)
109 static int dso__cmp_short_name(struct dso *a, struct dso *b)
116 * Either one of the dso or name parameter must be non-NULL or the
119 struct dso *__dsos__findnew_link_by_longname_id(struct rb_root *root, struct dso *dso,
126 name = dso->long_name;
131 struct dso *this = rb_entry(*p, struct dso, rb_node);
141 if (!dso || (dso == this))
142 return this; /* Find matching dso */
148 rc = dso__cmp_short_name(dso, this);
150 pr_err("Duplicated dso name: %s\n", name);
159 if (dso) {
161 rb_link_node(&dso->rb_node, parent, p);
162 rb_insert_color(&dso->rb_node, root);
163 dso->root = root;
168 void __dsos__add(struct dsos *dsos, struct dso *dso)
170 list_add_tail(&dso->node, &dsos->head);
171 __dsos__findnew_link_by_longname_id(&dsos->root, dso, NULL, &dso->id);
174 * this when needing memory, by looking at LRU dso instances in the
175 * list with atomic_read(&dso->refcnt) == 1, i.e. no references
181 * 'struct dso' instances will be removed from the list, in
187 * references to the 'thread', 'map', 'dso' structs all from 'struct
192 dso__get(dso);
195 void dsos__add(struct dsos *dsos, struct dso *dso)
198 __dsos__add(dsos, dso);
202 static struct dso *__dsos__findnew_by_longname_id(struct rb_root *root, const char *name, struct dso_id *id)
207 static struct dso *__dsos__find_id(struct dsos *dsos, const char *name, struct dso_id *id, bool cmp_short)
209 struct dso *pos;
220 struct dso *__dsos__find(struct dsos *dsos, const char *name, bool cmp_short)
225 static void dso__set_basename(struct dso *dso)
230 if (sscanf(dso->long_name, "/tmp/perf-%d.map", &tid) == 1) {
238 lname = strdup(dso->long_name);
254 dso__set_short_name(dso, base, true);
257 static struct dso *__dsos__addnew_id(struct dsos *dsos, const char *name, struct dso_id *id)
259 struct dso *dso = dso__new_id(name, id);
261 if (dso != NULL) {
262 __dsos__add(dsos, dso);
263 dso__set_basename(dso);
264 /* Put dso here because __dsos_add already got it */
265 dso__put(dso);
267 return dso;
270 struct dso *__dsos__addnew(struct dsos *dsos, const char *name)
275 static struct dso *__dsos__findnew_id(struct dsos *dsos, const char *name, struct dso_id *id)
277 struct dso *dso = __dsos__find_id(dsos, name, id, false);
279 if (dso && dso_id__empty(&dso->id) && !dso_id__empty(id))
280 dso__inject_id(dso, id);
282 return dso ? dso : __dsos__addnew_id(dsos, name, id);
285 struct dso *dsos__findnew_id(struct dsos *dsos, const char *name, struct dso_id *id)
287 struct dso *dso;
289 dso = dso__get(__dsos__findnew_id(dsos, name, id));
291 return dso;
295 bool (skip)(struct dso *dso, int parm), int parm)
297 struct dso *pos;
313 struct dso *pos;