1.1 --- a/libexec/include/exec/elf.h Thu Jun 02 01:09:30 2022 +0200
1.2 +++ b/libexec/include/exec/elf.h Fri Jun 03 00:21:10 2022 +0200
1.3 @@ -19,27 +19,16 @@
1.4 * Boston, MA 02110-1301, USA
1.5 */
1.6
1.7 +#pragma once
1.8 +
1.9 #include <exec/segment.h>
1.10
1.11
1.12
1.13 /* Generic program segment interface. */
1.14
1.15 -class ProgramSegment
1.16 -{
1.17 -public:
1.18 - virtual bool loadable() = 0;
1.19 - virtual offset_t file_contents() = 0;
1.20 - virtual offset_t file_offset() = 0;
1.21 - virtual l4_addr_t region_address() = 0;
1.22 - virtual offset_t region_size() = 0;
1.23 - virtual l4re_rm_flags_t region_flags() = 0;
1.24 -
1.25 - Segment *segment();
1.26 -};
1.27 -
1.28 template <typename PROGRAM_HEADER>
1.29 -class ProgramSegmentVariant : public ProgramSegment
1.30 +class ProgramSegmentVariant : public Segment
1.31 {
1.32 protected:
1.33 PROGRAM_HEADER *_header;
1.34 @@ -55,18 +44,23 @@
1.35 l4re_rm_flags_t region_flags();
1.36 };
1.37
1.38 -
1.39 +
1.40
1.41 /* Generic interface for an ELF payload. */
1.42
1.43 class Payload
1.44 {
1.45 +protected:
1.46 + Segment **_segments = NULL;
1.47 +
1.48 public:
1.49 + virtual ~Payload();
1.50 +
1.51 virtual l4_addr_t entry_point() = 0;
1.52 virtual offset_t header_extent() = 0;
1.53 virtual offset_t program_header_extent() = 0;
1.54 - virtual unsigned int segments() = 0;
1.55 - virtual ProgramSegment *segment(unsigned int i) = 0;
1.56 + virtual unsigned int segments();
1.57 + virtual Segment *segment(unsigned int i) = 0;
1.58 };
1.59
1.60 template <typename HEADER, typename PROGRAM_HEADER>
1.61 @@ -82,7 +76,7 @@
1.62 offset_t header_extent();
1.63 offset_t program_header_extent();
1.64 unsigned int segments();
1.65 - ProgramSegment *segment(unsigned int i);
1.66 + Segment *segment(unsigned int i);
1.67 };
1.68
1.69