@@ -333,6 +333,76 @@ ATF_TC_BODY(load_elf, tc)
333333 ATF_CHECK_EQ_MSG (0 , error , "multiboot_load_elf failed" );
334334}
335335
336+ ATF_TC (sizeof_multiboot_info );
337+ ATF_TC_HEAD (sizeof_multiboot_info , tc )
338+ {
339+ atf_tc_set_md_var (tc , "descr" , "Check multiboot info size" );
340+ }
341+ ATF_TC_BODY (sizeof_multiboot_info , tc )
342+ {
343+ ATF_CHECK_EQ (0 , offsetof(struct multiboot_info , flags ));
344+ ATF_CHECK_EQ (4 , offsetof(struct multiboot_info , mem_lower ));
345+ ATF_CHECK_EQ (8 , offsetof(struct multiboot_info , mem_upper ));
346+ ATF_CHECK_EQ (12 , offsetof(struct multiboot_info , boot_device ));
347+ ATF_CHECK_EQ (16 , offsetof(struct multiboot_info , cmdline ));
348+ ATF_CHECK_EQ (20 , offsetof(struct multiboot_info , mods_count ));
349+ ATF_CHECK_EQ (24 , offsetof(struct multiboot_info , mods_addr ));
350+ ATF_CHECK_EQ (28 , offsetof(struct multiboot_info , syms ));
351+ ATF_CHECK_EQ (28 , offsetof(struct multiboot_info , syms .aout ));
352+ ATF_CHECK_EQ (28 , offsetof(struct multiboot_info , syms .aout .tabsize ));
353+ ATF_CHECK_EQ (32 , offsetof(struct multiboot_info , syms .aout .strsize ));
354+ ATF_CHECK_EQ (36 , offsetof(struct multiboot_info , syms .aout .addr ));
355+ ATF_CHECK_EQ (40 , offsetof(struct multiboot_info , syms .aout .reserved ));
356+ ATF_CHECK_EQ (28 , offsetof(struct multiboot_info , syms .elf ));
357+ ATF_CHECK_EQ (28 , offsetof(struct multiboot_info , syms .elf .num ));
358+ ATF_CHECK_EQ (32 , offsetof(struct multiboot_info , syms .elf .size ));
359+ ATF_CHECK_EQ (36 , offsetof(struct multiboot_info , syms .elf .addr ));
360+ ATF_CHECK_EQ (40 , offsetof(struct multiboot_info , syms .elf .shndx ));
361+ ATF_CHECK_EQ (44 , offsetof(struct multiboot_info , mmap_length ));
362+ ATF_CHECK_EQ (48 , offsetof(struct multiboot_info , mmap_addr ));
363+ ATF_CHECK_EQ (52 , offsetof(struct multiboot_info , drives_length ));
364+ ATF_CHECK_EQ (56 , offsetof(struct multiboot_info , drives_addr ));
365+ ATF_CHECK_EQ (60 , offsetof(struct multiboot_info , config_table ));
366+ ATF_CHECK_EQ (64 , offsetof(struct multiboot_info , boot_loader_name ));
367+ ATF_CHECK_EQ (68 , offsetof(struct multiboot_info , apm_table ));
368+ ATF_CHECK_EQ (72 , offsetof(struct multiboot_info , vbe ));
369+ ATF_CHECK_EQ (72 , offsetof(struct multiboot_info , vbe .control_info ));
370+ ATF_CHECK_EQ (76 , offsetof(struct multiboot_info , vbe .mode_info ));
371+ ATF_CHECK_EQ (80 , offsetof(struct multiboot_info , vbe .mode ));
372+ ATF_CHECK_EQ (82 , offsetof(struct multiboot_info , vbe .interface_seg ));
373+ ATF_CHECK_EQ (84 , offsetof(struct multiboot_info , vbe .interface_off ));
374+ ATF_CHECK_EQ (86 , offsetof(struct multiboot_info , vbe .interface_len ));
375+ ATF_CHECK_EQ (88 , offsetof(struct multiboot_info , framebuffer ));
376+ ATF_CHECK_EQ (88 , offsetof(struct multiboot_info , framebuffer .addr ));
377+ ATF_CHECK_EQ (96 , offsetof(struct multiboot_info , framebuffer .pitch ));
378+ ATF_CHECK_EQ (100 , offsetof(struct multiboot_info , framebuffer .width ));
379+ ATF_CHECK_EQ (104 , offsetof(struct multiboot_info , framebuffer .height ));
380+ ATF_CHECK_EQ (108 , offsetof(struct multiboot_info , framebuffer .bpp ));
381+ ATF_CHECK_EQ (109 , offsetof(struct multiboot_info , framebuffer .type ));
382+ ATF_CHECK_EQ (110 , offsetof(struct multiboot_info , framebuffer .color_info ));
383+ ATF_CHECK_EQ (110 , offsetof(struct multiboot_info ,
384+ framebuffer .color_info .palette .addr ));
385+ ATF_CHECK_EQ (114 , offsetof(struct multiboot_info ,
386+ framebuffer .color_info .palette .num_colors ));
387+ ATF_CHECK_EQ (110 , offsetof(struct multiboot_info ,
388+ framebuffer .color_info .rgb .red_field_position ));
389+ ATF_CHECK_EQ (111 , offsetof(struct multiboot_info ,
390+ framebuffer .color_info .rgb .red_mask_size ));
391+ ATF_CHECK_EQ (112 , offsetof(struct multiboot_info ,
392+ framebuffer .color_info .rgb .green_field_position ));
393+ ATF_CHECK_EQ (113 , offsetof(struct multiboot_info ,
394+ framebuffer .color_info .rgb .green_mask_size ));
395+ ATF_CHECK_EQ (114 , offsetof(struct multiboot_info ,
396+ framebuffer .color_info .rgb .blue_field_position ));
397+ ATF_CHECK_EQ (115 , offsetof(struct multiboot_info ,
398+ framebuffer .color_info .rgb .blue_mask_size ));
399+
400+ ATF_CHECK_EQ_MSG (116 , sizeof (struct multiboot_info ),
401+ "struct multiboot_info should be %d bytes long, but it is "
402+ "actually %d bytes long" ,
403+ 116 , sizeof (struct multiboot_info ));
404+
405+ }
336406
337407ATF_TP_ADD_TCS (tp )
338408{
@@ -343,6 +413,7 @@ ATF_TP_ADD_TCS(tp)
343413 ATF_TP_ADD_TC (tp , load_aout );
344414 ATF_TP_ADD_TC (tp , load_elf_direct );
345415 ATF_TP_ADD_TC (tp , load_elf );
416+ ATF_TP_ADD_TC (tp , sizeof_multiboot_info );
346417
347418 return atf_no_error ();
348419}
0 commit comments