Coredump.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. /*
  2. * Copyright (c) 2019-2020, Jesse Buhagiar <jooster669@gmail.com>
  3. * Copyright (c) 2020, Itamar S. <itamar8910@gmail.com>
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause
  6. */
  7. #pragma once
  8. #include <AK/NonnullRefPtr.h>
  9. #include <AK/OwnPtr.h>
  10. #include <Kernel/Forward.h>
  11. namespace Kernel {
  12. class Coredump {
  13. public:
  14. static OwnPtr<Coredump> create(NonnullRefPtr<Process>, const String& output_path);
  15. ~Coredump() = default;
  16. [[nodiscard]] KResult write();
  17. private:
  18. Coredump(NonnullRefPtr<Process>, NonnullRefPtr<FileDescription>&&);
  19. static RefPtr<FileDescription> create_target_file(const Process&, const String& output_path);
  20. [[nodiscard]] KResult write_elf_header();
  21. [[nodiscard]] KResult write_program_headers(size_t notes_size);
  22. [[nodiscard]] KResult write_regions();
  23. [[nodiscard]] KResult write_notes_segment(ByteBuffer&);
  24. ByteBuffer create_notes_segment_data() const;
  25. ByteBuffer create_notes_process_data() const;
  26. ByteBuffer create_notes_threads_data() const;
  27. ByteBuffer create_notes_regions_data() const;
  28. ByteBuffer create_notes_metadata_data() const;
  29. NonnullRefPtr<Process> m_process;
  30. NonnullRefPtr<FileDescription> m_fd;
  31. const size_t m_num_program_headers;
  32. };
  33. }