~ubuntu-branches/debian/experimental/linux-tools/experimental

« back to all changes in this revision

Viewing changes to tools/perf/util/header.c

  • Committer: Package Import Robot
  • Author(s): Ben Hutchings
  • Date: 2014-02-02 16:57:49 UTC
  • mfrom: (1.1.10) (0.1.21 sid)
  • Revision ID: package-import@ubuntu.com-20140202165749-tw94o9t1t0a8txk6
Tags: 3.13-1~exp2
Merge changes from sid up to 3.12.6-3

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
#include "vdso.h"
23
23
#include "strbuf.h"
24
24
#include "build-id.h"
 
25
#include "data.h"
25
26
 
26
27
static bool no_buildid_cache = false;
27
28
 
2077
2078
                if (evsel->idx == (int) desc[i].leader_idx) {
2078
2079
                        evsel->leader = evsel;
2079
2080
                        /* {anon_group} is a dummy name */
2080
 
                        if (strcmp(desc[i].name, "{anon_group}"))
 
2081
                        if (strcmp(desc[i].name, "{anon_group}")) {
2081
2082
                                evsel->group_name = desc[i].name;
 
2083
                                desc[i].name = NULL;
 
2084
                        }
2082
2085
                        evsel->nr_members = desc[i].nr_members;
2083
2086
 
2084
2087
                        if (i >= nr_groups || nr > 0) {
2104
2107
 
2105
2108
        ret = 0;
2106
2109
out_free:
2107
 
        while ((int) --i >= 0)
 
2110
        for (i = 0; i < nr_groups; i++)
2108
2111
                free(desc[i].name);
2109
2112
        free(desc);
2110
2113
 
2189
2192
{
2190
2193
        struct header_print_data hd;
2191
2194
        struct perf_header *header = &session->header;
2192
 
        int fd = session->fd;
 
2195
        int fd = perf_data_file__fd(session->file);
2193
2196
        hd.fp = fp;
2194
2197
        hd.full = full;
2195
2198
 
2650
2653
        struct perf_header *header = &session->header;
2651
2654
        struct perf_pipe_file_header f_header;
2652
2655
 
2653
 
        if (perf_file_header__read_pipe(&f_header, header, session->fd,
 
2656
        if (perf_file_header__read_pipe(&f_header, header,
 
2657
                                        perf_data_file__fd(session->file),
2654
2658
                                        session->repipe) < 0) {
2655
2659
                pr_debug("incompatible file format\n");
2656
2660
                return -EINVAL;
2751
2755
 
2752
2756
int perf_session__read_header(struct perf_session *session)
2753
2757
{
 
2758
        struct perf_data_file *file = session->file;
2754
2759
        struct perf_header *header = &session->header;
2755
2760
        struct perf_file_header f_header;
2756
2761
        struct perf_file_attr   f_attr;
2757
2762
        u64                     f_id;
2758
2763
        int nr_attrs, nr_ids, i, j;
2759
 
        int fd = session->fd;
 
2764
        int fd = perf_data_file__fd(file);
2760
2765
 
2761
2766
        session->evlist = perf_evlist__new();
2762
2767
        if (session->evlist == NULL)
2763
2768
                return -ENOMEM;
2764
2769
 
2765
 
        if (session->fd_pipe)
 
2770
        if (perf_data_file__is_pipe(file))
2766
2771
                return perf_header__read_pipe(session);
2767
2772
 
2768
2773
        if (perf_file_header__read(&f_header, header, fd) < 0)
2777
2782
        if (f_header.data.size == 0) {
2778
2783
                pr_warning("WARNING: The %s file's data size field is 0 which is unexpected.\n"
2779
2784
                           "Was the 'perf record' command properly terminated?\n",
2780
 
                           session->filename);
 
2785
                           file->path);
2781
2786
        }
2782
2787
 
2783
2788
        nr_attrs = f_header.attrs.size / f_header.attr_size;
2794
2799
                        perf_event__attr_swap(&f_attr.attr);
2795
2800
 
2796
2801
                tmp = lseek(fd, 0, SEEK_CUR);
2797
 
                evsel = perf_evsel__new(&f_attr.attr, i);
 
2802
                evsel = perf_evsel__new(&f_attr.attr);
2798
2803
 
2799
2804
                if (evsel == NULL)
2800
2805
                        goto out_delete_evlist;
2913
2918
                        return -ENOMEM;
2914
2919
        }
2915
2920
 
2916
 
        evsel = perf_evsel__new(&event->attr.attr, evlist->nr_entries);
 
2921
        evsel = perf_evsel__new(&event->attr.attr);
2917
2922
        if (evsel == NULL)
2918
2923
                return -ENOMEM;
2919
2924
 
2990
2995
                                     struct perf_session *session)
2991
2996
{
2992
2997
        ssize_t size_read, padding, size = event->tracing_data.size;
2993
 
        off_t offset = lseek(session->fd, 0, SEEK_CUR);
 
2998
        int fd = perf_data_file__fd(session->file);
 
2999
        off_t offset = lseek(fd, 0, SEEK_CUR);
2994
3000
        char buf[BUFSIZ];
2995
3001
 
2996
3002
        /* setup for reading amidst mmap */
2997
 
        lseek(session->fd, offset + sizeof(struct tracing_data_event),
 
3003
        lseek(fd, offset + sizeof(struct tracing_data_event),
2998
3004
              SEEK_SET);
2999
3005
 
3000
 
        size_read = trace_report(session->fd, &session->pevent,
 
3006
        size_read = trace_report(fd, &session->pevent,
3001
3007
                                 session->repipe);
3002
3008
        padding = PERF_ALIGN(size_read, sizeof(u64)) - size_read;
3003
3009
 
3004
 
        if (readn(session->fd, buf, padding) < 0) {
 
3010
        if (readn(fd, buf, padding) < 0) {
3005
3011
                pr_err("%s: reading input file", __func__);
3006
3012
                return -1;
3007
3013
        }