1
0
Fork 0
mirror of https://github.com/tailix/libkernaux.git synced 2025-02-24 15:55:41 -05:00

Packed structs

This commit is contained in:
Alex Kotov 2020-11-28 01:10:21 +05:00
parent c40e69b73e
commit 29066eda8d
Signed by: kotovalexarian
GPG key ID: 553C0EBBEB5D5F08

View file

@ -10,14 +10,16 @@ extern "C" {
*********************/ *********************/
struct KernAux_Multiboot2 { struct KernAux_Multiboot2 {
unsigned int total_size; unsigned int total_size : 32;
unsigned int reserved1; unsigned int reserved1 : 32;
}; }
__attribute__((packed));
struct KernAux_Multiboot2_TagBase { struct KernAux_Multiboot2_TagBase {
unsigned int type; unsigned int type : 32;
unsigned int size; unsigned int size : 32;
}; }
__attribute__((packed));
/****************** /******************
* Tag structures * * Tag structures *
@ -29,7 +31,8 @@ struct KernAux_Multiboot2_Tag_BootCmdLine {
struct KernAux_Multiboot2_TagBase base; struct KernAux_Multiboot2_TagBase base;
char cmdline[]; char cmdline[];
}; }
__attribute__((packed));
struct KernAux_Multiboot2_Tag_BootLoaderName { struct KernAux_Multiboot2_Tag_BootLoaderName {
// type = 2 // type = 2
@ -37,135 +40,147 @@ struct KernAux_Multiboot2_Tag_BootLoaderName {
struct KernAux_Multiboot2_TagBase base; struct KernAux_Multiboot2_TagBase base;
char name[]; char name[];
}; }
__attribute__((packed));
struct KernAux_Multiboot2_Tag_Module { struct KernAux_Multiboot2_Tag_Module {
// type = 3 // type = 3
// size = ? // size = ?
struct KernAux_Multiboot2_TagBase base; struct KernAux_Multiboot2_TagBase base;
unsigned int mod_start; unsigned int mod_start : 32;
unsigned int mod_end; unsigned int mod_end : 32;
char cmdline[]; char cmdline[];
}; }
__attribute__((packed));
struct KernAux_Multiboot2_Tag_BasicMemoryInfo { struct KernAux_Multiboot2_Tag_BasicMemoryInfo {
// type = 4 // type = 4
// size = 16 // size = 16
struct KernAux_Multiboot2_TagBase base; struct KernAux_Multiboot2_TagBase base;
unsigned int mem_lower; unsigned int mem_lower : 32;
unsigned int mem_upper; unsigned int mem_upper : 32;
}; }
__attribute__((packed));
struct KernAux_Multiboot2_Tag_BIOSBootDevice { struct KernAux_Multiboot2_Tag_BIOSBootDevice {
// type = 5 // type = 5
// size = 20 // size = 20
struct KernAux_Multiboot2_TagBase base; struct KernAux_Multiboot2_TagBase base;
unsigned int bios_dev; unsigned int bios_dev : 32;
unsigned int partition; unsigned int partition : 32;
unsigned int sub_partition; unsigned int sub_partition : 32;
}; }
__attribute__((packed));
struct KernAux_Multiboot2_Tag_MemoryMap { struct KernAux_Multiboot2_Tag_MemoryMap {
// type = 5 // type = 5
// size = ? // size = ?
struct KernAux_Multiboot2_TagBase base; struct KernAux_Multiboot2_TagBase base;
unsigned int size; unsigned int size : 32;
unsigned int entry_size; unsigned int entry_size : 32;
unsigned int entry_version; unsigned int entry_version : 32;
unsigned char data[]; unsigned char data[];
}; }
__attribute__((packed));
struct KernAux_Multiboot2_Tag_VBEInfo { struct KernAux_Multiboot2_Tag_VBEInfo {
// type = 7 // type = 7
// size = 784 // size = 784
struct KernAux_Multiboot2_TagBase base; struct KernAux_Multiboot2_TagBase base;
unsigned short vbe_mode; unsigned short vbe_mode : 16;
unsigned short vbe_interface_seg; unsigned short vbe_interface_seg : 16;
unsigned short vbe_interface_off; unsigned short vbe_interface_off : 16;
unsigned short vbe_interface_len; unsigned short vbe_interface_len : 16;
unsigned char vbe_control_info[512]; unsigned char vbe_control_info[512];
unsigned char vbe_mode_info[256]; unsigned char vbe_mode_info[256];
}; }
__attribute__((packed));
struct KernAux_Multiboot2_Tag_FramebufferInfo { struct KernAux_Multiboot2_Tag_FramebufferInfo {
// type = 8 // type = 8
// size = ? // size = ?
struct KernAux_Multiboot2_TagBase base; struct KernAux_Multiboot2_TagBase base;
unsigned long long framebuffer_addr; unsigned long long framebuffer_addr : 64;
unsigned int framebuffer_pitch; unsigned int framebuffer_pitch : 32;
unsigned int framebuffer_width; unsigned int framebuffer_width : 32;
unsigned int framebuffer_height; unsigned int framebuffer_height : 32;
unsigned char framebuffer_bpp; unsigned char framebuffer_bpp : 8;
unsigned char framebuffer_type; unsigned char framebuffer_type : 8;
unsigned char reserved1; unsigned char reserved1 : 8;
unsigned char data[]; unsigned char data[];
}; }
__attribute__((packed));
struct KernAux_Multiboot2_Tag_ELFSymbols { struct KernAux_Multiboot2_Tag_ELFSymbols {
// type = 9 // type = 9
// size = ? // size = ?
struct KernAux_Multiboot2_TagBase base; struct KernAux_Multiboot2_TagBase base;
unsigned short num; unsigned short num : 16;
unsigned short ent_size; unsigned short ent_size : 16;
unsigned short shndx; unsigned short shndx : 16;
unsigned short reserved1; unsigned short reserved1 : 16;
unsigned char section_headers[]; unsigned char section_headers[];
}; }
__attribute__((packed));
struct KernAux_Multiboot2_Tag_APMTable { struct KernAux_Multiboot2_Tag_APMTable {
// type = 10 // type = 10
// size = 20 // size = 20
struct KernAux_Multiboot2_TagBase base; struct KernAux_Multiboot2_TagBase base;
unsigned short version; unsigned short version : 16;
unsigned short cseg; unsigned short cseg : 16;
unsigned int offset; unsigned int offset : 32;
unsigned short cseg_16; unsigned short cseg_16 : 16;
unsigned short dseg; unsigned short dseg : 16;
unsigned short flags; unsigned short flags : 16;
unsigned short cseg_len; unsigned short cseg_len : 16;
unsigned short cseg_16_len; unsigned short cseg_16_len : 16;
unsigned short dseg_len; unsigned short dseg_len : 16;
}; }
__attribute__((packed));
struct KernAux_Multiboot2_Tag_EFI32bitSystemTablePointer { struct KernAux_Multiboot2_Tag_EFI32bitSystemTablePointer {
// type = 11 // type = 11
// size = 12 // size = 12
struct KernAux_Multiboot2_TagBase base; struct KernAux_Multiboot2_TagBase base;
unsigned int pointer; unsigned int pointer : 32;
}; }
__attribute__((packed));
struct KernAux_Multiboot2_Tag_EFI64bitSystemTablePointer { struct KernAux_Multiboot2_Tag_EFI64bitSystemTablePointer {
// type = 12 // type = 12
// size = 16 // size = 16
struct KernAux_Multiboot2_TagBase base; struct KernAux_Multiboot2_TagBase base;
unsigned long long pointer; unsigned long long pointer : 64;
}; }
__attribute__((packed));
struct KernAux_Multiboot2_Tag_SMBIOSTables { struct KernAux_Multiboot2_Tag_SMBIOSTables {
// type = 13 // type = 13
// size = ? // size = ?
struct KernAux_Multiboot2_TagBase base; struct KernAux_Multiboot2_TagBase base;
unsigned char major; unsigned char major : 8;
unsigned char minor; unsigned char minor : 8;
unsigned char reserved1[6]; unsigned char reserved1[6];
unsigned char data[]; unsigned char data[];
}; }
__attribute__((packed));
struct KernAux_Multiboot2_Tag_ACPIOldRSDP { struct KernAux_Multiboot2_Tag_ACPIOldRSDP {
// type = 14 // type = 14
@ -173,7 +188,8 @@ struct KernAux_Multiboot2_Tag_ACPIOldRSDP {
struct KernAux_Multiboot2_TagBase base; struct KernAux_Multiboot2_TagBase base;
unsigned char data[]; unsigned char data[];
}; }
__attribute__((packed));
struct KernAux_Multiboot2_Tag_ACPINewRSDP { struct KernAux_Multiboot2_Tag_ACPINewRSDP {
// type = 15 // type = 15
@ -181,7 +197,8 @@ struct KernAux_Multiboot2_Tag_ACPINewRSDP {
struct KernAux_Multiboot2_TagBase base; struct KernAux_Multiboot2_TagBase base;
unsigned char data[]; unsigned char data[];
}; }
__attribute__((packed));
struct KernAux_Multiboot2_Tag_NetworkingInfo { struct KernAux_Multiboot2_Tag_NetworkingInfo {
// type = 16 // type = 16
@ -189,59 +206,66 @@ struct KernAux_Multiboot2_Tag_NetworkingInfo {
struct KernAux_Multiboot2_TagBase base; struct KernAux_Multiboot2_TagBase base;
unsigned char data[]; unsigned char data[];
}; }
__attribute__((packed));
struct KernAux_Multiboot2_Tag_EFIMemoryMap { struct KernAux_Multiboot2_Tag_EFIMemoryMap {
// type = 17 // type = 17
// size = ? // size = ?
struct KernAux_Multiboot2_TagBase base; struct KernAux_Multiboot2_TagBase base;
unsigned int descriptor_size; unsigned int descriptor_size : 32;
unsigned int descriptor_version; unsigned int descriptor_version : 32;
unsigned char data[]; unsigned char data[];
}; }
__attribute__((packed));
struct KernAux_Multiboot2_Tag_EFIBootServicesNotTerminated { struct KernAux_Multiboot2_Tag_EFIBootServicesNotTerminated {
// type = 18 // type = 18
// size = 8 // size = 8
struct KernAux_Multiboot2_TagBase base; struct KernAux_Multiboot2_TagBase base;
}; }
__attribute__((packed));
struct KernAux_Multiboot2_Tag_EFI32bitImageHandlePointer { struct KernAux_Multiboot2_Tag_EFI32bitImageHandlePointer {
// type = 19 // type = 19
// size = 12 // size = 12
struct KernAux_Multiboot2_TagBase base; struct KernAux_Multiboot2_TagBase base;
unsigned int pointer; unsigned int pointer : 32;
}; }
__attribute__((packed));
struct KernAux_Multiboot2_Tag_EFI64bitImageHandlePointer { struct KernAux_Multiboot2_Tag_EFI64bitImageHandlePointer {
// type = 20 // type = 20
// size = 16 // size = 16
struct KernAux_Multiboot2_TagBase base; struct KernAux_Multiboot2_TagBase base;
unsigned long long pointer; unsigned long long pointer : 64;
}; }
__attribute__((packed));
struct KernAux_Multiboot2_Tag_ImageLoadBasePhysAddr { struct KernAux_Multiboot2_Tag_ImageLoadBasePhysAddr {
// type = 21 // type = 21
// size = 12 // size = 12
struct KernAux_Multiboot2_TagBase base; struct KernAux_Multiboot2_TagBase base;
unsigned int load_base_addr; unsigned int load_base_addr : 32;
}; }
__attribute__((packed));
/************************* /*************************
* Additional structures * * Additional structures *
*************************/ *************************/
struct KernAux_Multiboot2_Tag_MemoryMap_EntryBase { struct KernAux_Multiboot2_Tag_MemoryMap_EntryBase {
unsigned long long base_addr; unsigned long long base_addr : 64;
unsigned long long length; unsigned long long length : 64;
unsigned int type; unsigned int type : 32;
unsigned int reserved1; unsigned int reserved1 : 32;
}; }
__attribute__((packed));
#ifdef __cplusplus #ifdef __cplusplus
} }