14.02.2016 14:24, Wink Saville пишет: > I'm using multiboot2 and I see a zero field in grub/include/multiboot2.h: > > struct multiboot_mmap_entry > { > multiboot_uint64_t addr; > multiboot_uint64_t len; > #define MULTIBOOT_MEMORY_AVAILABLE 1 > #define MULTIBOOT_MEMORY_RESERVED 2 > #define MULTIBOOT_MEMORY_ACPI_RECLAIMABLE 3 > #define MULTIBOOT_MEMORY_NVS 4 > #define MULTIBOOT_MEMORY_BADRAM 5 > multiboot_uint32_t type; > multiboot_uint32_t zero; > } GRUB_PACKED; > typedef struct multiboot_mmap_entry multiboot_memory_map_t; >
OK, I pushed fix (although documentation also says OS should ignore this field :) ) > > Although in grub/include/multiboot.h it does not exist: > > struct multiboot_mmap_entry > { > multiboot_uint32_t size; > multiboot_uint64_t addr; > multiboot_uint64_t len; > #define MULTIBOOT_MEMORY_AVAILABLE 1 > #define MULTIBOOT_MEMORY_RESERVED 2 > #define MULTIBOOT_MEMORY_ACPI_RECLAIMABLE 3 > #define MULTIBOOT_MEMORY_NVS 4 > #define MULTIBOOT_MEMORY_BADRAM 5 > multiboot_uint32_t type; > } GRUB_PACKED; > typedef struct multiboot_mmap_entry multiboot_memory_map_t; > > > On Sat, Feb 13, 2016 at 11:12 PM, Andrei Borzenkov <arvidj...@gmail.com> > wrote: >> 14.02.2016 00:20, Wink Saville пишет: >>> I'm processing multiboot_tag_mmap and the multiboot_mmap_entry.zero >>> isn't zero. As best as I can tell grub isn't initializing it. Here is >>> the code from grub-core/loader/i386/multiboot_mbi.c: >>> >>> /* Helper for grub_fill_multiboot_mmap. */ >>> static int >>> grub_fill_multiboot_mmap_iter (grub_uint64_t addr, grub_uint64_t size, >>> grub_memory_type_t type, void *data) >>> { >>> struct multiboot_mmap_entry **mmap_entry = data; >>> >>> (*mmap_entry)->addr = addr; >>> (*mmap_entry)->len = size; >>> (*mmap_entry)->type = type; >>> (*mmap_entry)->size = sizeof (struct multiboot_mmap_entry) - sizeof >>> ((*mmap_entry)->size); >>> (*mmap_entry)++; >>> >>> return 0; >>> } >>> >>> And similar code in grub-core/loader/multiboot_mbi2.c: >>> >>> /* Helper for grub_fill_multiboot_mmap. */ >>> static int >>> grub_fill_multiboot_mmap_iter (grub_uint64_t addr, grub_uint64_t size, >>> grub_memory_type_t type, void *data) >>> { >>> struct multiboot_mmap_entry **mmap_entry = data; >>> >>> (*mmap_entry)->addr = addr; >>> (*mmap_entry)->len = size; >>> (*mmap_entry)->type = type; >>> (*mmap_entry)++; >>> >>> return 0; >>> } >>> >>> And I'd expect to see: >>> >>> (*mmap_entry)->zero = 0; >>> >>> Is there a reason its not being zeroed? >>> >> >> Because it does not exist? >> >> >> _______________________________________________ >> Grub-devel mailing list >> Grub-devel@gnu.org >> https://lists.gnu.org/mailman/listinfo/grub-devel _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel