Lines Matching refs:dso

4 #include "dso.h"
31 * dso that did not have a build ID whereas the original dso did have a
51 static void dso__inject_id(struct dso *dso, struct dso_id *id)
53 dso->id.maj = id->maj;
54 dso->id.min = id->min;
55 dso->id.ino = id->ino;
56 dso->id.ino_generation = id->ino_generation;
62 * The second is always dso->id, so zeroes if not set, assume passing
71 int dso__cmp_id(struct dso *a, struct dso *b)
79 struct dso *pos;
109 static int __dso__cmp_long_name(const char *long_name, struct dso_id *id, struct dso *b)
115 static int __dso__cmp_short_name(const char *short_name, struct dso_id *id, struct dso *b)
121 static int dso__cmp_short_name(struct dso *a, struct dso *b)
128 * Either one of the dso or name parameter must be non-NULL or the
131 struct dso *__dsos__findnew_link_by_longname_id(struct rb_root *root, struct dso *dso,
138 name = dso->long_name;
143 struct dso *this = rb_entry(*p, struct dso, rb_node);
153 if (!dso || (dso == this))
154 return this; /* Find matching dso */
160 rc = dso__cmp_short_name(dso, this);
162 pr_err("Duplicated dso name: %s\n", name);
171 if (dso) {
173 rb_link_node(&dso->rb_node, parent, p);
174 rb_insert_color(&dso->rb_node, root);
175 dso->root = root;
180 void __dsos__add(struct dsos *dsos, struct dso *dso)
182 list_add_tail(&dso->node, &dsos->head);
183 __dsos__findnew_link_by_longname_id(&dsos->root, dso, NULL, &dso->id);
186 * this when needing memory, by looking at LRU dso instances in the
187 * list with atomic_read(&dso->refcnt) == 1, i.e. no references
193 * 'struct dso' instances will be removed from the list, in
199 * references to the 'thread', 'map', 'dso' structs all from 'struct
204 dso__get(dso);
207 void dsos__add(struct dsos *dsos, struct dso *dso)
210 __dsos__add(dsos, dso);
214 static struct dso *__dsos__findnew_by_longname_id(struct rb_root *root, const char *name, struct dso_id *id)
219 static struct dso *__dsos__find_id(struct dsos *dsos, const char *name, struct dso_id *id, bool cmp_short)
221 struct dso *pos;
232 struct dso *__dsos__find(struct dsos *dsos, const char *name, bool cmp_short)
237 static void dso__set_basename(struct dso *dso)
242 if (sscanf(dso->long_name, "/tmp/perf-%d.map", &tid) == 1) {
250 lname = strdup(dso->long_name);
266 dso__set_short_name(dso, base, true);
269 static struct dso *__dsos__addnew_id(struct dsos *dsos, const char *name, struct dso_id *id)
271 struct dso *dso = dso__new_id(name, id);
273 if (dso != NULL) {
274 __dsos__add(dsos, dso);
275 dso__set_basename(dso);
276 /* Put dso here because __dsos_add already got it */
277 dso__put(dso);
279 return dso;
282 struct dso *__dsos__addnew(struct dsos *dsos, const char *name)
287 static struct dso *__dsos__findnew_id(struct dsos *dsos, const char *name, struct dso_id *id)
289 struct dso *dso = __dsos__find_id(dsos, name, id, false);
291 if (dso && dso_id__empty(&dso->id) && !dso_id__empty(id))
292 dso__inject_id(dso, id);
294 return dso ? dso : __dsos__addnew_id(dsos, name, id);
297 struct dso *dsos__findnew_id(struct dsos *dsos, const char *name, struct dso_id *id)
299 struct dso *dso;
301 dso = dso__get(__dsos__findnew_id(dsos, name, id));
303 return dso;
307 bool (skip)(struct dso *dso, int parm), int parm)
309 struct dso *pos;
325 struct dso *pos;