summaryrefslogtreecommitdiff
path: root/src/shared/pe-header.h
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2019-02-06 17:49:37 +0100
committerLennart Poettering <lennart@poettering.net>2019-03-01 12:41:32 +0100
commit5e146a75b3a5f44f2315a1643cfd4491d57d12a2 (patch)
treeacaa47f05eba4e89a9f1baa303bd70385b43097f /src/shared/pe-header.h
parent0d73a81611c62419411b8e033d0f3b3a01472918 (diff)
downloadsystemd-5e146a75b3a5f44f2315a1643cfd4491d57d12a2.tar.gz
bootspec: also look for boot loader spec type 2 entries (i.e. unified kernel images)
sd-boot reads them, and hence we should from our userspace side too
Diffstat (limited to 'src/shared/pe-header.h')
-rw-r--r--src/shared/pe-header.h59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/shared/pe-header.h b/src/shared/pe-header.h
new file mode 100644
index 0000000000..a362917523
--- /dev/null
+++ b/src/shared/pe-header.h
@@ -0,0 +1,59 @@
+#pragma once
+
+#include <inttypes.h>
+
+#include "macro.h"
+#include "sparse-endian.h"
+
+struct DosFileHeader {
+ uint8_t Magic[2];
+ le16_t LastSize;
+ le16_t nBlocks;
+ le16_t nReloc;
+ le16_t HdrSize;
+ le16_t MinAlloc;
+ le16_t MaxAlloc;
+ le16_t ss;
+ le16_t sp;
+ le16_t Checksum;
+ le16_t ip;
+ le16_t cs;
+ le16_t RelocPos;
+ le16_t nOverlay;
+ le16_t reserved[4];
+ le16_t OEMId;
+ le16_t OEMInfo;
+ le16_t reserved2[10];
+ le32_t ExeHeader;
+} _packed_;
+
+#define PE_HEADER_MACHINE_I386 0x014cU
+#define PE_HEADER_MACHINE_X64 0x8664U
+
+struct PeFileHeader {
+ le16_t Machine;
+ le16_t NumberOfSections;
+ le32_t TimeDateStamp;
+ le32_t PointerToSymbolTable;
+ le32_t NumberOfSymbols;
+ le16_t SizeOfOptionalHeader;
+ le16_t Characteristics;
+} _packed_;
+
+struct PeHeader {
+ uint8_t Magic[4];
+ struct PeFileHeader FileHeader;
+} _packed_;
+
+struct PeSectionHeader {
+ uint8_t Name[8];
+ le32_t VirtualSize;
+ le32_t VirtualAddress;
+ le32_t SizeOfRawData;
+ le32_t PointerToRawData;
+ le32_t PointerToRelocations;
+ le32_t PointerToLinenumbers;
+ le16_t NumberOfRelocations;
+ le16_t NumberOfLinenumbers;
+ le32_t Characteristics;
+ } _packed_;