[PATCH 02/16] perf symbol: remove unused 'end' arg in kallsyms parse cb
kallsyms__parse() takes a callback that is called on every discovered symbol. As /proc/kallsyms does not supply symbol sizes, the callback was simply called with end=start, faking the symbol size to 1. All of the callbacks (there are 2) used in calls to kallsyms__parse() are _only_ used as callbacks for kallsyms__parse(). Given that kallsyms__parse() lacks real information about what end/length should be, don't make up a length in kallsyms__parse(). Instead have the callbacks handle guessing the length. Also relocate a comment regarding symbol creation to the callback which does symbol creation (kallsyms__parse() is not in general used to create symbols). Signed-off-by: Cody P Schafer --- tools/perf/util/event.c | 2 +- tools/perf/util/symbol.c | 21 ++--- tools/perf/util/symbol.h | 2 +- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c index 2a6f33c..3a0f1a5 100644 --- a/tools/perf/util/event.c +++ b/tools/perf/util/event.c @@ -412,7 +412,7 @@ struct process_symbol_args { }; static int find_symbol_cb(void *arg, const char *name, char type, - u64 start, u64 end __used) + u64 start) { struct process_symbol_args *args = arg; diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c index 891f83c..9afe6b1 100644 --- a/tools/perf/util/symbol.c +++ b/tools/perf/util/symbol.c @@ -563,7 +563,7 @@ size_t dso__fprintf(struct dso *dso, enum map_type type, FILE *fp) int kallsyms__parse(const char *filename, void *arg, int (*process_symbol)(void *arg, const char *name, - char type, u64 start, u64 end)) + char type, u64 start)) { char *line = NULL; size_t n; @@ -603,13 +603,8 @@ int kallsyms__parse(const char *filename, void *arg, break; } - /* -* module symbols are not sorted so we add all -* symbols, setting length to 1, and rely on -* symbols__fixup_end() to fix it up. -*/ err = process_symbol(arg, symbol_name, -symbol_type, start, start); +symbol_type, start); if (err) break; } @@ -636,7 +631,7 @@ static u8 kallsyms2elf_type(char type) } static int map__process_kallsym_symbol(void *arg, const char *name, - char type, u64 start, u64 end) + char type, u64 start) { struct symbol *sym; struct process_kallsyms_args *a = arg; @@ -645,8 +640,12 @@ static int map__process_kallsym_symbol(void *arg, const char *name, if (!symbol_type__is_a(type, a->map->type)) return 0; - sym = symbol__new(start, end - start + 1, - kallsyms2elf_type(type), name); + /* +* module symbols are not sorted so we add all +* symbols, setting length to 0, and rely on +* symbols__fixup_end() to fix it up. +*/ + sym = symbol__new(start, 0, kallsyms2elf_type(type), name); if (sym == NULL) return -ENOMEM; /* @@ -1731,7 +1730,7 @@ struct process_args { }; static int symbol__in_kernel(void *arg, const char *name, -char type __used, u64 start, u64 end __used) +char type __used, u64 start) { struct process_args *args = arg; diff --git a/tools/perf/util/symbol.h b/tools/perf/util/symbol.h index 38ccbbb..c9534fe 100644 --- a/tools/perf/util/symbol.h +++ b/tools/perf/util/symbol.h @@ -299,7 +299,7 @@ bool __dsos__read_build_ids(struct list_head *head, bool with_hits); int build_id__sprintf(const u8 *build_id, int len, char *bf); int kallsyms__parse(const char *filename, void *arg, int (*process_symbol)(void *arg, const char *name, - char type, u64 start, u64 end)); + char type, u64 start)); int filename__read_debuglink(const char *filename, char *debuglink, size_t size); -- 1.7.11.3 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 02/16] perf symbol: remove unused 'end' arg in kallsyms parse cb
I guess that length of 1 effectively same as zero length in this case since we end up calling symbols__fixup_end. The 'end - start + 1' part looks like a leftover from previous change and not needed anymore - KSYM_NAME_LEN check too, IMHO - so I suggest using 0 length to make it clear. Got it. And it seems you need to rebase the series onto Arnaldo's current perf/core branch which separates out ELF bits to symbol-elf.c. Will do. It apparently wasn't pushed out when I sent these patches, look for v2 shortly. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 02/16] perf symbol: remove unused 'end' arg in kallsyms parse cb
I guess that length of 1 effectively same as zero length in this case since we end up calling symbols__fixup_end. The 'end - start + 1' part looks like a leftover from previous change and not needed anymore - KSYM_NAME_LEN check too, IMHO - so I suggest using 0 length to make it clear. Got it. And it seems you need to rebase the series onto Arnaldo's current perf/core branch which separates out ELF bits to symbol-elf.c. Will do. It apparently wasn't pushed out when I sent these patches, look for v2 shortly. -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH 02/16] perf symbol: remove unused 'end' arg in kallsyms parse cb
kallsyms__parse() takes a callback that is called on every discovered symbol. As /proc/kallsyms does not supply symbol sizes, the callback was simply called with end=start, faking the symbol size to 1. All of the callbacks (there are 2) used in calls to kallsyms__parse() are _only_ used as callbacks for kallsyms__parse(). Given that kallsyms__parse() lacks real information about what end/length should be, don't make up a length in kallsyms__parse(). Instead have the callbacks handle guessing the length. Also relocate a comment regarding symbol creation to the callback which does symbol creation (kallsyms__parse() is not in general used to create symbols). Signed-off-by: Cody P Schafer c...@linux.vnet.ibm.com --- tools/perf/util/event.c | 2 +- tools/perf/util/symbol.c | 21 ++--- tools/perf/util/symbol.h | 2 +- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c index 2a6f33c..3a0f1a5 100644 --- a/tools/perf/util/event.c +++ b/tools/perf/util/event.c @@ -412,7 +412,7 @@ struct process_symbol_args { }; static int find_symbol_cb(void *arg, const char *name, char type, - u64 start, u64 end __used) + u64 start) { struct process_symbol_args *args = arg; diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c index 891f83c..9afe6b1 100644 --- a/tools/perf/util/symbol.c +++ b/tools/perf/util/symbol.c @@ -563,7 +563,7 @@ size_t dso__fprintf(struct dso *dso, enum map_type type, FILE *fp) int kallsyms__parse(const char *filename, void *arg, int (*process_symbol)(void *arg, const char *name, - char type, u64 start, u64 end)) + char type, u64 start)) { char *line = NULL; size_t n; @@ -603,13 +603,8 @@ int kallsyms__parse(const char *filename, void *arg, break; } - /* -* module symbols are not sorted so we add all -* symbols, setting length to 1, and rely on -* symbols__fixup_end() to fix it up. -*/ err = process_symbol(arg, symbol_name, -symbol_type, start, start); +symbol_type, start); if (err) break; } @@ -636,7 +631,7 @@ static u8 kallsyms2elf_type(char type) } static int map__process_kallsym_symbol(void *arg, const char *name, - char type, u64 start, u64 end) + char type, u64 start) { struct symbol *sym; struct process_kallsyms_args *a = arg; @@ -645,8 +640,12 @@ static int map__process_kallsym_symbol(void *arg, const char *name, if (!symbol_type__is_a(type, a-map-type)) return 0; - sym = symbol__new(start, end - start + 1, - kallsyms2elf_type(type), name); + /* +* module symbols are not sorted so we add all +* symbols, setting length to 0, and rely on +* symbols__fixup_end() to fix it up. +*/ + sym = symbol__new(start, 0, kallsyms2elf_type(type), name); if (sym == NULL) return -ENOMEM; /* @@ -1731,7 +1730,7 @@ struct process_args { }; static int symbol__in_kernel(void *arg, const char *name, -char type __used, u64 start, u64 end __used) +char type __used, u64 start) { struct process_args *args = arg; diff --git a/tools/perf/util/symbol.h b/tools/perf/util/symbol.h index 38ccbbb..c9534fe 100644 --- a/tools/perf/util/symbol.h +++ b/tools/perf/util/symbol.h @@ -299,7 +299,7 @@ bool __dsos__read_build_ids(struct list_head *head, bool with_hits); int build_id__sprintf(const u8 *build_id, int len, char *bf); int kallsyms__parse(const char *filename, void *arg, int (*process_symbol)(void *arg, const char *name, - char type, u64 start, u64 end)); + char type, u64 start)); int filename__read_debuglink(const char *filename, char *debuglink, size_t size); -- 1.7.11.3 -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 02/16] perf symbol: remove unused 'end' arg in kallsyms parse cb
Hi, Cody On Thu, 9 Aug 2012 15:18:27 -0700, Cody P. Schafer wrote: > kallsyms__parse() takes a callback that is called on every discovered > symbol. As /proc/kallsyms does not supply symbol sizes, the callback was > simply called with end=start, faking the symbol size to 1. > > All of the callbacks (there are 2) used in calls to kallsyms__parse() > are _only_ used as callbacks for kallsyms__parse(). > > Given that kallsyms__parse() lacks real information about what > end/length should be, don't make up a length in kallsyms__parse(). > Instead have the callbacks handle guessing the length. > > Also relocate a comment regarding symbol creation to the callback which > does symbol creation (kallsyms__parse() is not in general used to create > symbols). > > Signed-off-by: Cody P Schafer > --- > tools/perf/util/event.c | 2 +- > tools/perf/util/symbol.c | 21 ++--- > tools/perf/util/symbol.h | 2 +- > 3 files changed, 12 insertions(+), 13 deletions(-) > > diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c > index 2a6f33c..3a0f1a5 100644 > --- a/tools/perf/util/event.c > +++ b/tools/perf/util/event.c > @@ -412,7 +412,7 @@ struct process_symbol_args { > }; > > static int find_symbol_cb(void *arg, const char *name, char type, > - u64 start, u64 end __used) > + u64 start) > { > struct process_symbol_args *args = arg; > > diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c > index df4736d..b2f7597 100644 > --- a/tools/perf/util/symbol.c > +++ b/tools/perf/util/symbol.c > @@ -574,7 +574,7 @@ size_t dso__fprintf(struct dso *dso, enum map_type type, > FILE *fp) > > int kallsyms__parse(const char *filename, void *arg, > int (*process_symbol)(void *arg, const char *name, > - char type, u64 start, u64 end)) > + char type, u64 start)) > { > char *line = NULL; > size_t n; > @@ -614,13 +614,8 @@ int kallsyms__parse(const char *filename, void *arg, > break; > } > > - /* > - * module symbols are not sorted so we add all > - * symbols, setting length to 1, and rely on > - * symbols__fixup_end() to fix it up. > - */ > err = process_symbol(arg, symbol_name, > - symbol_type, start, start); > + symbol_type, start); > if (err) > break; > } > @@ -647,7 +642,7 @@ static u8 kallsyms2elf_type(char type) > } > > static int map__process_kallsym_symbol(void *arg, const char *name, > -char type, u64 start, u64 end) > +char type, u64 start) > { > struct symbol *sym; > struct process_kallsyms_args *a = arg; > @@ -656,8 +651,12 @@ static int map__process_kallsym_symbol(void *arg, const > char *name, > if (!symbol_type__is_a(type, a->map->type)) > return 0; > > - sym = symbol__new(start, end - start + 1, > - kallsyms2elf_type(type), name); > + /* > + * module symbols are not sorted so we add all > + * symbols, setting length to 1, and rely on > + * symbols__fixup_end() to fix it up. > + */ > + sym = symbol__new(start, 1, kallsyms2elf_type(type), name); I guess that length of 1 effectively same as zero length in this case since we end up calling symbols__fixup_end. The 'end - start + 1' part looks like a leftover from previous change and not needed anymore - KSYM_NAME_LEN check too, IMHO - so I suggest using 0 length to make it clear. And it seems you need to rebase the series onto Arnaldo's current perf/core branch which separates out ELF bits to symbol-elf.c. Thanks, Namhyung > if (sym == NULL) > return -ENOMEM; > /* > @@ -2528,7 +2527,7 @@ struct process_args { > }; > > static int symbol__in_kernel(void *arg, const char *name, > - char type __used, u64 start, u64 end __used) > + char type __used, u64 start) > { > struct process_args *args = arg; > > diff --git a/tools/perf/util/symbol.h b/tools/perf/util/symbol.h > index 1fe733a..c8ec1d7 100644 > --- a/tools/perf/util/symbol.h > +++ b/tools/perf/util/symbol.h > @@ -297,7 +297,7 @@ bool __dsos__read_build_ids(struct list_head *head, bool > with_hits); > int build_id__sprintf(const u8 *build_id, int len, char *bf); > int kallsyms__parse(const char *filename, void *arg, > int (*process_symbol)(void *arg, const char *name, > - char type, u64 start, u64 end)); > + char type, u64 start)); > > void machine__destroy_kernel_maps(struct machine *machine); > int __machine__create_kernel_maps(struct machine *machine,
[PATCH 02/16] perf symbol: remove unused 'end' arg in kallsyms parse cb
kallsyms__parse() takes a callback that is called on every discovered symbol. As /proc/kallsyms does not supply symbol sizes, the callback was simply called with end=start, faking the symbol size to 1. All of the callbacks (there are 2) used in calls to kallsyms__parse() are _only_ used as callbacks for kallsyms__parse(). Given that kallsyms__parse() lacks real information about what end/length should be, don't make up a length in kallsyms__parse(). Instead have the callbacks handle guessing the length. Also relocate a comment regarding symbol creation to the callback which does symbol creation (kallsyms__parse() is not in general used to create symbols). Signed-off-by: Cody P Schafer --- tools/perf/util/event.c | 2 +- tools/perf/util/symbol.c | 21 ++--- tools/perf/util/symbol.h | 2 +- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c index 2a6f33c..3a0f1a5 100644 --- a/tools/perf/util/event.c +++ b/tools/perf/util/event.c @@ -412,7 +412,7 @@ struct process_symbol_args { }; static int find_symbol_cb(void *arg, const char *name, char type, - u64 start, u64 end __used) + u64 start) { struct process_symbol_args *args = arg; diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c index df4736d..b2f7597 100644 --- a/tools/perf/util/symbol.c +++ b/tools/perf/util/symbol.c @@ -574,7 +574,7 @@ size_t dso__fprintf(struct dso *dso, enum map_type type, FILE *fp) int kallsyms__parse(const char *filename, void *arg, int (*process_symbol)(void *arg, const char *name, - char type, u64 start, u64 end)) + char type, u64 start)) { char *line = NULL; size_t n; @@ -614,13 +614,8 @@ int kallsyms__parse(const char *filename, void *arg, break; } - /* -* module symbols are not sorted so we add all -* symbols, setting length to 1, and rely on -* symbols__fixup_end() to fix it up. -*/ err = process_symbol(arg, symbol_name, -symbol_type, start, start); +symbol_type, start); if (err) break; } @@ -647,7 +642,7 @@ static u8 kallsyms2elf_type(char type) } static int map__process_kallsym_symbol(void *arg, const char *name, - char type, u64 start, u64 end) + char type, u64 start) { struct symbol *sym; struct process_kallsyms_args *a = arg; @@ -656,8 +651,12 @@ static int map__process_kallsym_symbol(void *arg, const char *name, if (!symbol_type__is_a(type, a->map->type)) return 0; - sym = symbol__new(start, end - start + 1, - kallsyms2elf_type(type), name); + /* +* module symbols are not sorted so we add all +* symbols, setting length to 1, and rely on +* symbols__fixup_end() to fix it up. +*/ + sym = symbol__new(start, 1, kallsyms2elf_type(type), name); if (sym == NULL) return -ENOMEM; /* @@ -2528,7 +2527,7 @@ struct process_args { }; static int symbol__in_kernel(void *arg, const char *name, -char type __used, u64 start, u64 end __used) +char type __used, u64 start) { struct process_args *args = arg; diff --git a/tools/perf/util/symbol.h b/tools/perf/util/symbol.h index 1fe733a..c8ec1d7 100644 --- a/tools/perf/util/symbol.h +++ b/tools/perf/util/symbol.h @@ -297,7 +297,7 @@ bool __dsos__read_build_ids(struct list_head *head, bool with_hits); int build_id__sprintf(const u8 *build_id, int len, char *bf); int kallsyms__parse(const char *filename, void *arg, int (*process_symbol)(void *arg, const char *name, - char type, u64 start, u64 end)); + char type, u64 start)); void machine__destroy_kernel_maps(struct machine *machine); int __machine__create_kernel_maps(struct machine *machine, struct dso *kernel); -- 1.7.11.3 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH 02/16] perf symbol: remove unused 'end' arg in kallsyms parse cb
kallsyms__parse() takes a callback that is called on every discovered symbol. As /proc/kallsyms does not supply symbol sizes, the callback was simply called with end=start, faking the symbol size to 1. All of the callbacks (there are 2) used in calls to kallsyms__parse() are _only_ used as callbacks for kallsyms__parse(). Given that kallsyms__parse() lacks real information about what end/length should be, don't make up a length in kallsyms__parse(). Instead have the callbacks handle guessing the length. Also relocate a comment regarding symbol creation to the callback which does symbol creation (kallsyms__parse() is not in general used to create symbols). Signed-off-by: Cody P Schafer c...@linux.vnet.ibm.com --- tools/perf/util/event.c | 2 +- tools/perf/util/symbol.c | 21 ++--- tools/perf/util/symbol.h | 2 +- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c index 2a6f33c..3a0f1a5 100644 --- a/tools/perf/util/event.c +++ b/tools/perf/util/event.c @@ -412,7 +412,7 @@ struct process_symbol_args { }; static int find_symbol_cb(void *arg, const char *name, char type, - u64 start, u64 end __used) + u64 start) { struct process_symbol_args *args = arg; diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c index df4736d..b2f7597 100644 --- a/tools/perf/util/symbol.c +++ b/tools/perf/util/symbol.c @@ -574,7 +574,7 @@ size_t dso__fprintf(struct dso *dso, enum map_type type, FILE *fp) int kallsyms__parse(const char *filename, void *arg, int (*process_symbol)(void *arg, const char *name, - char type, u64 start, u64 end)) + char type, u64 start)) { char *line = NULL; size_t n; @@ -614,13 +614,8 @@ int kallsyms__parse(const char *filename, void *arg, break; } - /* -* module symbols are not sorted so we add all -* symbols, setting length to 1, and rely on -* symbols__fixup_end() to fix it up. -*/ err = process_symbol(arg, symbol_name, -symbol_type, start, start); +symbol_type, start); if (err) break; } @@ -647,7 +642,7 @@ static u8 kallsyms2elf_type(char type) } static int map__process_kallsym_symbol(void *arg, const char *name, - char type, u64 start, u64 end) + char type, u64 start) { struct symbol *sym; struct process_kallsyms_args *a = arg; @@ -656,8 +651,12 @@ static int map__process_kallsym_symbol(void *arg, const char *name, if (!symbol_type__is_a(type, a-map-type)) return 0; - sym = symbol__new(start, end - start + 1, - kallsyms2elf_type(type), name); + /* +* module symbols are not sorted so we add all +* symbols, setting length to 1, and rely on +* symbols__fixup_end() to fix it up. +*/ + sym = symbol__new(start, 1, kallsyms2elf_type(type), name); if (sym == NULL) return -ENOMEM; /* @@ -2528,7 +2527,7 @@ struct process_args { }; static int symbol__in_kernel(void *arg, const char *name, -char type __used, u64 start, u64 end __used) +char type __used, u64 start) { struct process_args *args = arg; diff --git a/tools/perf/util/symbol.h b/tools/perf/util/symbol.h index 1fe733a..c8ec1d7 100644 --- a/tools/perf/util/symbol.h +++ b/tools/perf/util/symbol.h @@ -297,7 +297,7 @@ bool __dsos__read_build_ids(struct list_head *head, bool with_hits); int build_id__sprintf(const u8 *build_id, int len, char *bf); int kallsyms__parse(const char *filename, void *arg, int (*process_symbol)(void *arg, const char *name, - char type, u64 start, u64 end)); + char type, u64 start)); void machine__destroy_kernel_maps(struct machine *machine); int __machine__create_kernel_maps(struct machine *machine, struct dso *kernel); -- 1.7.11.3 -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 02/16] perf symbol: remove unused 'end' arg in kallsyms parse cb
Hi, Cody On Thu, 9 Aug 2012 15:18:27 -0700, Cody P. Schafer wrote: kallsyms__parse() takes a callback that is called on every discovered symbol. As /proc/kallsyms does not supply symbol sizes, the callback was simply called with end=start, faking the symbol size to 1. All of the callbacks (there are 2) used in calls to kallsyms__parse() are _only_ used as callbacks for kallsyms__parse(). Given that kallsyms__parse() lacks real information about what end/length should be, don't make up a length in kallsyms__parse(). Instead have the callbacks handle guessing the length. Also relocate a comment regarding symbol creation to the callback which does symbol creation (kallsyms__parse() is not in general used to create symbols). Signed-off-by: Cody P Schafer c...@linux.vnet.ibm.com --- tools/perf/util/event.c | 2 +- tools/perf/util/symbol.c | 21 ++--- tools/perf/util/symbol.h | 2 +- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c index 2a6f33c..3a0f1a5 100644 --- a/tools/perf/util/event.c +++ b/tools/perf/util/event.c @@ -412,7 +412,7 @@ struct process_symbol_args { }; static int find_symbol_cb(void *arg, const char *name, char type, - u64 start, u64 end __used) + u64 start) { struct process_symbol_args *args = arg; diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c index df4736d..b2f7597 100644 --- a/tools/perf/util/symbol.c +++ b/tools/perf/util/symbol.c @@ -574,7 +574,7 @@ size_t dso__fprintf(struct dso *dso, enum map_type type, FILE *fp) int kallsyms__parse(const char *filename, void *arg, int (*process_symbol)(void *arg, const char *name, - char type, u64 start, u64 end)) + char type, u64 start)) { char *line = NULL; size_t n; @@ -614,13 +614,8 @@ int kallsyms__parse(const char *filename, void *arg, break; } - /* - * module symbols are not sorted so we add all - * symbols, setting length to 1, and rely on - * symbols__fixup_end() to fix it up. - */ err = process_symbol(arg, symbol_name, - symbol_type, start, start); + symbol_type, start); if (err) break; } @@ -647,7 +642,7 @@ static u8 kallsyms2elf_type(char type) } static int map__process_kallsym_symbol(void *arg, const char *name, -char type, u64 start, u64 end) +char type, u64 start) { struct symbol *sym; struct process_kallsyms_args *a = arg; @@ -656,8 +651,12 @@ static int map__process_kallsym_symbol(void *arg, const char *name, if (!symbol_type__is_a(type, a-map-type)) return 0; - sym = symbol__new(start, end - start + 1, - kallsyms2elf_type(type), name); + /* + * module symbols are not sorted so we add all + * symbols, setting length to 1, and rely on + * symbols__fixup_end() to fix it up. + */ + sym = symbol__new(start, 1, kallsyms2elf_type(type), name); I guess that length of 1 effectively same as zero length in this case since we end up calling symbols__fixup_end. The 'end - start + 1' part looks like a leftover from previous change and not needed anymore - KSYM_NAME_LEN check too, IMHO - so I suggest using 0 length to make it clear. And it seems you need to rebase the series onto Arnaldo's current perf/core branch which separates out ELF bits to symbol-elf.c. Thanks, Namhyung if (sym == NULL) return -ENOMEM; /* @@ -2528,7 +2527,7 @@ struct process_args { }; static int symbol__in_kernel(void *arg, const char *name, - char type __used, u64 start, u64 end __used) + char type __used, u64 start) { struct process_args *args = arg; diff --git a/tools/perf/util/symbol.h b/tools/perf/util/symbol.h index 1fe733a..c8ec1d7 100644 --- a/tools/perf/util/symbol.h +++ b/tools/perf/util/symbol.h @@ -297,7 +297,7 @@ bool __dsos__read_build_ids(struct list_head *head, bool with_hits); int build_id__sprintf(const u8 *build_id, int len, char *bf); int kallsyms__parse(const char *filename, void *arg, int (*process_symbol)(void *arg, const char *name, - char type, u64 start, u64 end)); + char type, u64 start)); void machine__destroy_kernel_maps(struct machine *machine); int __machine__create_kernel_maps(struct machine *machine, struct dso *kernel); -- To unsubscribe from this list: send the line unsubscribe