blob: 65bebcf3dc8ccece4e1c4713eb136624ecdaa6cc [file] [log] [blame]
// Copyright 2020 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.
// ArcvmKernelCollector handles crashes of the Linux kernel for ARCVM. When the
// ARCVM kernel crashes, it generates the crash log at
// /sys/fs/pstore/dmesg-ramoops-0 in ARCVM. The content of this file can be
// obtained from a ring buffer in /home/root/<hash>/crosvm/*.pstore file in
// Chrome OS. ArcvmKernelCollector receives the content of
// /sys/fs/pstore/dmesg-ramoops-0 and convert it for crash_sender.
#ifndef CRASH_REPORTER_ARCVM_KERNEL_COLLECTOR_H_
#define CRASH_REPORTER_ARCVM_KERNEL_COLLECTOR_H_
#include <string>
#include <base/files/scoped_file.h>
#include <gtest/gtest_prod.h> // for FRIEND_TEST
#include "crash-reporter/arc_util.h"
#include "crash-reporter/crash_collector.h"
// Collector for kernel crashes of ARCVM.
class ArcvmKernelCollector : public CrashCollector {
public:
ArcvmKernelCollector();
~ArcvmKernelCollector() override;
// Handles a kernel crash of ARCVM.
bool HandleCrash(const arc_util::BuildProperty& build_property);
private:
friend class ArcvmKernelCollectorTest;
FRIEND_TEST(ArcvmKernelCollectorTest,
HandleCrashWithRamoopsStreamAndTimestamp);
FRIEND_TEST(ArcvmKernelCollectorTest, AddArcMetadata);
// Handles a kernel crash of ARCVM using the given stream for ramoops.
// |timestamp| is used for a filename of the crash report.
bool HandleCrashWithRamoopsStreamAndTimestamp(
const arc_util::BuildProperty& build_property,
FILE* ramoops_stream,
time_t timestamp);
// Adds ARC-related metadata to the crash report.
void AddArcMetadata(const arc_util::BuildProperty& build_property);
};
#endif // CRASH_REPORTER_ARCVM_KERNEL_COLLECTOR_H_