[PATCH 02/16] perf symbol: remove unused 'end' arg in kallsyms parse cb

2012-08-10 Thread Cody P Schafer
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

2012-08-10 Thread Cody P Schafer

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

2012-08-10 Thread Cody P Schafer

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

2012-08-10 Thread Cody P Schafer
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

2012-08-09 Thread Namhyung Kim
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

2012-08-09 Thread Cody P Schafer
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

2012-08-09 Thread Cody P Schafer
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

2012-08-09 Thread Namhyung Kim
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