1// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef BASE_DEBUG_PROC_MAPS_LINUX_H_
6#define BASE_DEBUG_PROC_MAPS_LINUX_H_
7
8#include <string>
9#include <vector>
10
11#include "common/using_std_string.h"
12#include "google_breakpad/common/breakpad_types.h"
13
14namespace google_breakpad {
15
16// Describes a region of mapped memory and the path of the file mapped.
17struct MappedMemoryRegion {
18 enum Permission {
19 READ = 1 << 0,
20 WRITE = 1 << 1,
21 EXECUTE = 1 << 2,
22 PRIVATE = 1 << 3, // If set, region is private, otherwise it is shared.
23 };
24
25 // The address range [start,end) of mapped memory.
26 uint64_t start;
27 uint64_t end;
28
29 // Byte offset into |path| of the range mapped into memory.
30 uint64_t offset;
31
32 // Bitmask of read/write/execute/private/shared permissions.
33 uint8_t permissions;
34
35 // Major and minor devices.
36 uint8_t major_device;
37 uint8_t minor_device;
38
39 // Value of the inode.
40 uint64_t inode;
41
42 // Name of the file mapped into memory.
43 //
44 // NOTE: path names aren't guaranteed to point at valid files. For example,
45 // "[heap]" and "[stack]" are used to represent the location of the process'
46 // heap and stack, respectively.
47 string path;
48
49 // The line from /proc/<pid>/maps that this struct represents.
50 string line;
51};
52
53// Parses /proc/<pid>/maps input data and stores in |regions|. Returns true
54// and updates |regions| if and only if all of |input| was successfully parsed.
55bool ParseProcMaps(const string& input,
56 std::vector<MappedMemoryRegion>* regions);
57
58} // namespace google_breakpad
59
60#endif // BASE_DEBUG_PROC_MAPS_LINUX_H_
61