// Copyright 2016 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROMIUMOS_WIDE_PROFILING_DSO_H_
#define CHROMIUMOS_WIDE_PROFILING_DSO_H_

#include <sys/stat.h>

#include <set>
#include <utility>

#include "chromiumos-wide-profiling/compat/string.h"
#include "chromiumos-wide-profiling/data_reader.h"

namespace quipper {

// Defines a type for a pid:tid pair.
using PidTid = std::pair<u32, u32>;

// A struct containing all relevant info for a mapped DSO, independent of any
// samples.
struct DSOInfo {
  string name;
  string build_id;
  u32 maj = 0;
  u32 min = 0;
  u64 ino = 0;
  bool hit = false;  // Have we seen any samples in this DSO?
  std::set<PidTid> threads;  // Set of pids this DSO had samples in.
};

// Do the |DSOInfo| and |struct stat| refer to the same inode?
bool SameInode(const DSOInfo& dso, const struct stat* s);

// Must be called at least once before using libelf.
void InitializeLibelf();
// Read buildid from an ELF file using libelf.
bool ReadElfBuildId(string filename, string* buildid);
bool ReadElfBuildId(int fd, string* buildid);

// Read buildid from /sys/module/<module_name>/notes/.note.gnu.build-id
// (Does not use libelf.)
bool ReadModuleBuildId(string module_name, string* buildid);
// Read builid from Elf note data section.
bool ReadBuildIdNote(DataReader* data, string* buildid);

// Is |name| match one of the things reported by the kernel that is known
// not to be a kernel module?
bool IsKernelNonModuleName(string name);

}  // namespace quipper

#endif  // CHROMIUMOS_WIDE_PROFILING_DSO_H_
