This file is indexed.

/usr/lib/xen-4.9/bin/xencov_split is in xen-utils-4.9 4.9.2-0ubuntu1.

This file is owned by root:root, with mode 0o755.

The actual contents of the file can be viewed below.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#! /usr/bin/python2

import sys, os, os.path as path, struct, errno
from optparse import OptionParser

def xencov_split(opts):
    """Split input into multiple gcda files"""

    # Check native byte order and explicitly specify it.  The "native"
    # byte order in struct module takes into account padding while the
    # data is always packed.
    if sys.byteorder == 'little':
        bo_prefix = '<'
    else:
        bo_prefix = '>'

    input_file = opts.args[0]

    f = open(input_file)

    # Magic number
    s = f.read(4)
    magic, = struct.unpack(bo_prefix + "I", s)
    # See public/sysctl.h for magic number -- "XCOV"
    if magic != 0x58434f56:
        raise Exception("Invalid magic number")

    # The rest is zero or more records
    content = f.read()

    f.close()

    while content:
        off = content.find('\x00')
        fmt = bo_prefix + str(off) + 's'
        fn, = struct.unpack_from(fmt, content)
        content = content[off+1:]

        fmt = bo_prefix + 'I'
        sz, = struct.unpack_from(fmt, content)
        content = content[struct.calcsize(fmt):]

        fmt = bo_prefix + str(sz) + 's'
        payload, = struct.unpack_from(fmt, content)
        content = content[sz:]

        # Create and store files
        if opts.output_dir == '.':
            opts.output_dir = os.getcwd()

        dir = opts.output_dir + path.dirname(fn)
        try:
            os.makedirs(dir)
        except OSError, e:
            if e.errno == errno.EEXIST and os.path.isdir(dir):
                pass
            else:
                raise

        full_path = dir + '/' + path.basename(fn)
        f = open(full_path, "w")
        f.write(payload)
        f.close()

def main():
    """ Main entrypoint """

    # Change stdout to be line-buffered.
    sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 1)

    parser = OptionParser(
        usage = "%prog [OPTIONS] <INPUT>",
        description = "Utility to split xencov data file",
        )

    parser.add_option("--output-dir", action = "store",
                      dest = "output_dir", default = ".",
                      type = "string",
                      help = ('Specify the directory to place output files, '
                              'defaults to current directory'),
                      )

    opts, args = parser.parse_args()
    opts.args = args

    xencov_split(opts)


if __name__ == "__main__":
    try:
        sys.exit(main())
    except Exception, e:
        print >>sys.stderr, "Error:", e
        sys.exit(1)
    except KeyboardInterrupt:
        sys.exit(1)