diff options
author | Andreas Kling <kling@serenityos.org> | 2021-09-06 18:42:15 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2021-09-06 18:56:51 +0200 |
commit | 69b9b2888cea47393461799746e80a04bdcae4d1 (patch) | |
tree | b0acdc55359cb9ef7adf2201d76346a11b1c93b3 /Kernel/Coredump.h | |
parent | 9db8a142648e43ad56f234c4e9eeeeae92a348ae (diff) | |
download | serenity-69b9b2888cea47393461799746e80a04bdcae4d1.zip |
Kernel: Don't allocate so much when generating coredumps
Instead of creating a bunch of ByteBuffers and concatenating them to
generate the "notes" segment, we now simply create a KBufferBuilder
and tell each of the notes generator helpers to write into the builder.
This allows the code to flow more naturally, with some bonus additional
error propagation. :^)
Diffstat (limited to 'Kernel/Coredump.h')
-rw-r--r-- | Kernel/Coredump.h | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/Kernel/Coredump.h b/Kernel/Coredump.h index 197b9feb83..9a653219e9 100644 --- a/Kernel/Coredump.h +++ b/Kernel/Coredump.h @@ -24,16 +24,16 @@ private: Coredump(NonnullRefPtr<Process>, NonnullRefPtr<FileDescription>); static KResultOr<NonnullRefPtr<FileDescription>> try_create_target_file(Process const&, StringView output_path); - [[nodiscard]] KResult write_elf_header(); - [[nodiscard]] KResult write_program_headers(size_t notes_size); - [[nodiscard]] KResult write_regions(); - [[nodiscard]] KResult write_notes_segment(ByteBuffer&); - - KResultOr<ByteBuffer> create_notes_segment_data() const; - KResultOr<ByteBuffer> create_notes_process_data() const; - KResultOr<ByteBuffer> create_notes_threads_data() const; - KResultOr<ByteBuffer> create_notes_regions_data() const; - KResultOr<ByteBuffer> create_notes_metadata_data() const; + KResult write_elf_header(); + KResult write_program_headers(size_t notes_size); + KResult write_regions(); + KResult write_notes_segment(ReadonlyBytes); + + KResult create_notes_segment_data(auto&) const; + KResult create_notes_process_data(auto&) const; + KResult create_notes_threads_data(auto&) const; + KResult create_notes_regions_data(auto&) const; + KResult create_notes_metadata_data(auto&) const; NonnullRefPtr<Process> m_process; NonnullRefPtr<FileDescription> m_description; |