perf tools: Misc small fixes
- util/header.c "len" is aligned to 64. So, it tries to write the out of long_name buffer. So, this use "zero_buf" to write aligned area. - util/trace-event-read.c "size" is not including nul byte. So, this allocates it, and set '\0'. - util/trace-event-parse.c It needs parens to calc correct size. Signed-off-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Paul Mackerras <paulus@samba.org> Cc: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> LKML-Reference: <87d42s8iiu.fsf_-_@devron.myhome.or.jp> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
Родитель
180f95e29a
Коммит
7691b1ec2e
|
@ -187,7 +187,9 @@ static int do_write(int fd, const void *buf, size_t size)
|
|||
|
||||
static int __dsos__write_buildid_table(struct list_head *head, int fd)
|
||||
{
|
||||
#define NAME_ALIGN 64
|
||||
struct dso *pos;
|
||||
static const char zero_buf[NAME_ALIGN];
|
||||
|
||||
list_for_each_entry(pos, head, node) {
|
||||
int err;
|
||||
|
@ -197,14 +199,17 @@ static int __dsos__write_buildid_table(struct list_head *head, int fd)
|
|||
if (!pos->has_build_id)
|
||||
continue;
|
||||
len = pos->long_name_len + 1;
|
||||
len = ALIGN(len, 64);
|
||||
len = ALIGN(len, NAME_ALIGN);
|
||||
memset(&b, 0, sizeof(b));
|
||||
memcpy(&b.build_id, pos->build_id, sizeof(pos->build_id));
|
||||
b.header.size = sizeof(b) + len;
|
||||
err = do_write(fd, &b, sizeof(b));
|
||||
if (err < 0)
|
||||
return err;
|
||||
err = do_write(fd, pos->long_name, len);
|
||||
err = do_write(fd, pos->long_name, pos->long_name_len + 1);
|
||||
if (err < 0)
|
||||
return err;
|
||||
err = do_write(fd, zero_buf, len - pos->long_name_len + 1);
|
||||
if (err < 0)
|
||||
return err;
|
||||
}
|
||||
|
|
|
@ -177,7 +177,7 @@ void parse_proc_kallsyms(char *file, unsigned int size __unused)
|
|||
func_count++;
|
||||
}
|
||||
|
||||
func_list = malloc_or_die(sizeof(*func_list) * func_count + 1);
|
||||
func_list = malloc_or_die(sizeof(*func_list) * (func_count + 1));
|
||||
|
||||
i = 0;
|
||||
while (list) {
|
||||
|
|
|
@ -145,8 +145,9 @@ static void read_proc_kallsyms(void)
|
|||
if (!size)
|
||||
return;
|
||||
|
||||
buf = malloc_or_die(size);
|
||||
buf = malloc_or_die(size + 1);
|
||||
read_or_die(buf, size);
|
||||
buf[size] = '\0';
|
||||
|
||||
parse_proc_kallsyms(buf, size);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче