diff --git a/btf_encoder.c b/btf_encoder.c index 2ed7217..bfdc304 100644 --- a/btf_encoder.c +++ b/btf_encoder.c @@ -541,7 +541,7 @@ static int32_t btf_encoder__add_func_proto(struct btf_encoder *encoder, struct c /* add parameters */ param_idx = 0; ftype__for_each_parameter(ftype, param) { - const char *name = dwarves__active_loader->strings__ptr(cu, param->name); + const char *name = parameter__name(param); type_id = param->tag.type == 0 ? 0 : type_id_off + param->tag.type; ++param_idx; @@ -1135,7 +1135,7 @@ static bool has_arg_names(struct cu *cu, struct ftype *ftype) const char *name; ftype__for_each_parameter(ftype, param) { - name = dwarves__active_loader->strings__ptr(cu, param->name); + name = parameter__name(param); if (name == NULL) return false; } diff --git a/btf_loader.c b/btf_loader.c index 660125e..8eb9206 100644 --- a/btf_loader.c +++ b/btf_loader.c @@ -69,7 +69,7 @@ static int cu__load_ftype(struct cu *cu, struct ftype *proto, uint32_t tag, cons goto out_free_parameters; p->tag.tag = DW_TAG_formal_parameter; p->tag.type = param->type; - p->name = param->name_off; + p->name = cu__btf_str(cu, param->name_off); ftype__add_parameter(proto, p); } } diff --git a/ctracer.c b/ctracer.c index e244fe6..350e74c 100644 --- a/ctracer.c +++ b/ctracer.c @@ -698,14 +698,13 @@ static int function__emit_probes(struct function *func, uint32_t function_id, continue; if (member != NULL) - fprintf(fp_methods, "\tif ($%s)\n\t", - parameter__name(pos, cu)); + fprintf(fp_methods, "\tif ($%s)\n\t", parameter__name(pos)); fprintf(fp_methods, "\tctracer__method_hook(%d, %d, $%s%s%s, %d);\n", probe_type, function_id, - parameter__name(pos, cu), + parameter__name(pos), member ? "->" : "", member ?: "", class__size(mini_class)); break; diff --git a/dwarf_loader.c b/dwarf_loader.c index 5a149cb..5c60a12 100644 --- a/dwarf_loader.c +++ b/dwarf_loader.c @@ -913,7 +913,7 @@ static struct parameter *parameter__new(Dwarf_Die *die, struct cu *cu) if (parm != NULL) { tag__init(&parm->tag, cu, die); - parm->name = strings__add(strings, attr_string(die, DW_AT_name)); + parm->name = strdup_attr_string(die, DW_AT_name); } return parm; diff --git a/dwarves.h b/dwarves.h index b66bf7c..94a6f18 100644 --- a/dwarves.h +++ b/dwarves.h @@ -720,8 +720,8 @@ size_t lexblock__fprintf(const struct lexblock *lexblock, const struct cu *cu, const struct conf_fprintf *conf, FILE *fp); struct parameter { - struct tag tag; - strings_t name; + struct tag tag; + const char *name; }; static inline struct parameter *tag__parameter(const struct tag *tag) @@ -729,10 +729,9 @@ static inline struct parameter *tag__parameter(const struct tag *tag) return (struct parameter *)tag; } -static inline const char *parameter__name(const struct parameter *parm, - const struct cu *cu) +static inline const char *parameter__name(const struct parameter *parm) { - return cu__string(cu, parm->name); + return parm->name; } /* diff --git a/dwarves_fprintf.c b/dwarves_fprintf.c index 37537ca..b635685 100644 --- a/dwarves_fprintf.c +++ b/dwarves_fprintf.c @@ -1084,7 +1084,7 @@ size_t ftype__fprintf_parms(const struct ftype *ftype, indent, tabs); } else first_parm = 0; - name = conf->no_parm_names ? NULL : parameter__name(pos, cu); + name = conf->no_parm_names ? NULL : parameter__name(pos); type = cu__type(cu, pos->tag.type); if (type == NULL) { snprintf(sbf, sizeof(sbf), diff --git a/syscse.c b/syscse.c index 33fe65e..5d2c6fd 100644 --- a/syscse.c +++ b/syscse.c @@ -77,8 +77,7 @@ static void emit_wrapper(struct function *f, struct cu *cu) printf("wrap_%s:\n", name); needs_wrapper = 1; } - zero_extend(regparm, bt, cu, - parameter__name(parm, cu)); + zero_extend(regparm, bt, cu, parameter__name(parm)); } } ++regparm;