cosmopolitan/libc/nt/struct/imagesectionheader.internal.h
Justine Tunney fa20edc44d
Reduce header complexity
- Remove most __ASSEMBLER__ __LINKER__ ifdefs
- Rename libc/intrin/bits.h to libc/serialize.h
- Block pthread cancelation in fchmodat() polyfill
- Remove `clang-format off` statements in third_party
2023-11-28 14:39:42 -08:00

66 lines
2.3 KiB
C

#ifndef COSMOPOLITAN_LIBC_NT_STRUCT_IMAGESECTIONHEADER_H_
#define COSMOPOLITAN_LIBC_NT_STRUCT_IMAGESECTIONHEADER_H_
struct NtImageSectionHeader {
char Name[8];
union {
uint32_t PhysicalAddress;
/*
* The total size of the section when loaded into memory. If this
* value is greater than SizeOfRawData, the section is zero-padded.
* This field is valid only for executable images and should be set
* to zero for object files.
*/
uint32_t VirtualSize;
} Misc;
/*
* In an image file, the VAs for sections must be assigned by the
* linker so that they are in ascending order and adjacent, and they
* must be a multiple of the SectionAlignment value in the optional
* header.
*
* For executable images, the address of the first byte of the section
* relative to the image base when the section is loaded into memory.
* For object files, this field is the address of the first byte
* before relocation is applied; for simplicity, compilers should set
* this to zero. Otherwise, it is an arbitrary value that is
* subtracted from offsets during relocation.
*/
uint32_t VirtualAddress;
/*
* The size of the section (for object files) or the size of the
* initialized data on disk (for image files). For executable images,
* this must be a multiple of FileAlignment from the optional header.
* If this is less than VirtualSize, the remainder of the section is
* zero-filled. Because the SizeOfRawData field is rounded but the
* VirtualSize field is not, it is possible for SizeOfRawData to be
* greater than VirtualSize as well. When a section contains only
* uninitialized data, this field should be zero.
*/
uint32_t SizeOfRawData;
/*
* The file pointer to the first page of the section within the COFF
* file. For executable images, this must be a multiple of
* FileAlignment from the optional header. For object files, the value
* should be aligned on a 4-byte boundary for best performance. When a
* section contains only uninitialized data, this field should be
* zero.
*/
uint32_t PointerToRawData;
uint32_t PointerToRelocations;
uint32_t PointerToLinenumbers;
uint16_t NumberOfRelocations;
uint16_t NumberOfLinenumbers;
uint32_t Characteristics;
};
#endif /* COSMOPOLITAN_LIBC_NT_STRUCT_IMAGESECTIONHEADER_H_ */