Hello, This stripped down extract of a real file (main.c of Gujin-1.1) gives: [EMAIL PROTECTED]:~/projet/gujin$ gcc -Os tst.c -c -o tst.o && size tst.o text data bss dec hex filename 261 0 0 261 105 tst.o [EMAIL PROTECTED]:~/projet/gujin$ ../toolchain/bin/gcc -Os tst.c -c -o tst.o && size tst.o text data bss dec hex filename 5339 0 0 5339 14db tst.o [EMAIL PROTECTED]:~/projet/gujin$
Here it is: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> typedef struct { struct gujin_param_attrib { unsigned verbose:1; unsigned lock_bpp:1; unsigned lock_text_graphic:1; unsigned menu_with_disk:1; unsigned menu_with_parttype:1; unsigned menu_with_partition:1; unsigned menu_with_initrd:1; unsigned force_textmode:1; unsigned force_probe_root:1; unsigned IDE_in_BIOS_order:1; unsigned ignore_kernel_option:1; unsigned disk_write_enable:1; unsigned VGA_interface:1; unsigned download_ansi_font:1; unsigned VESA_interface:1; unsigned enable_VESA_hardwin:1; unsigned VESA2_interface:1; unsigned enable_joystick:1; unsigned search_disk_mbr:1; unsigned search_part_mbr:1; unsigned hide_unhide_partitions:1; unsigned keep_all_part_mbr:1; unsigned search_topdir_kernel:1; unsigned search_subdir_kernel:1; unsigned probe_bios_floppy_disk:1; unsigned probe_bios_hard_disk:1; unsigned probe_ide_disk:1; unsigned probe_cdrom:1; unsigned probe_dos_disk:1; unsigned short write_disabled_written_once:1; } __attribute__ ((packed)) attrib; struct autoload_str { unsigned char last_loaded; unsigned char total_loadable; unsigned char init_page; unsigned char total_page; } __attribute__ ((packed)) autoload; unsigned char timeout_autoload; } __attribute__ ((packed)) gujin_param_t; static inline int diskconfig_changed (struct gujin_param_attrib first, struct gujin_param_attrib second) { union { struct gujin_param_attrib bits; unsigned all; } one, two, mask = { bits: { IDE_in_BIOS_order: 1, probe_dos_disk: 1, probe_cdrom: 1, probe_ide_disk: 1, probe_bios_hard_disk: 1, probe_bios_floppy_disk:1, }}; one.bits = first; two.bits = second; return (one.all & mask.all) != (two.all & mask.all); } static inline int searchconfig_changed (struct gujin_param_attrib first, struct gujin_param_attrib second) { union { struct gujin_param_attrib bits; unsigned all; } one, two, mask = { bits:{ search_disk_mbr: 1, search_part_mbr: 1, keep_all_part_mbr: 1, search_topdir_kernel: 1, search_subdir_kernel:1, }}; one.bits = first; two.bits = second; return (one.all & mask.all) != (two.all & mask.all); } struct gujin_param_attrib get_gujin_param_attrib (void); void set_last_boot_default (unsigned char last_loaded, unsigned char total_loadable, unsigned char init_page, unsigned char total_page); struct autoload_str get_last_boot_default (void); struct { unsigned short curpage, totalpage, nbperpage, nbtotal, interline; } Menu; struct todraw_str { unsigned firstlines:1; unsigned topmenu:1; unsigned bottommenu:1; unsigned advertisement:1; unsigned copyright:1; unsigned update_bootparam:1; unsigned refresh:1; unsigned presskey:1; }; unsigned is_valid_chgmode_keycode (unsigned short key); unsigned menu (struct gujin_param_attrib gujin_attr) { unsigned timeout = 0; unsigned last_boot_default_last_loaded_if_valid = 0xFFFF; struct todraw_str toredraw = { 1, 1, 1, 1, 1,.refresh = 1,.presskey = 0 }; if (gujin_attr.verbose || gujin_attr.disk_write_enable) { struct autoload_str data = get_last_boot_default (); if (data.last_loaded == 0 && data.total_loadable == 1 && data.init_page == 0 && data.total_page == 1) puts (""); } for (;;) { unsigned short key; toredraw = (struct todraw_str) { 0, 0, 0, 0, 0,.presskey = 0 }; if (timeout != 0) { key = UI_getkey (18); if (key != 0xFFFE) { timeout = 0; toredraw.advertisement = 1; last_boot_default_last_loaded_if_valid = 0xFFFF; continue; } else if (--timeout != 0) { toredraw.advertisement = 1; last_boot_default_last_loaded_if_valid = get_last_boot_default().last_loaded; continue; } } else key = UI_getkey (0xFFFFFFFFU); if (key == 0x260C) { UI_clearscreen (); toredraw = (struct todraw_str) { .firstlines = 1, .topmenu = 1, .bottommenu = 1, .advertisement = 1, .copyright = 1, .update_bootparam = 0, .refresh = 1, .presskey = 0 }; continue; } if (is_valid_chgmode_keycode (key)) { if (timeout == 0) { toredraw.topmenu = 1; toredraw.presskey = 1; } } else if ((key == 0x1312) || (key == (0x3900 | ' '))) { struct gujin_param_attrib params = get_gujin_param_attrib (); if (diskconfig_changed (gujin_attr, params)) { probedisk (0xFF); disk_analyse (params); } else if (searchconfig_changed (gujin_attr, params)) disk_analyse (params); gujin_attr = params; Menu.nbperpage = 0; toredraw = (struct todraw_str) { 1, 1, 1, 1, 1,.presskey = 0,.refresh = 1}; } else if (gujin_attr.verbose) toredraw = (struct todraw_str) { 1, 1, 1, 1, 1,.presskey = 1}; } } >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Shall I enter that on Bugzillia or is that a known problem? Thanks, Etienne. [EMAIL PROTECTED]:~/projet/gujin$ gcc -v Reading specs from /usr/lib/gcc-lib/i486-linux/3.3.6/specs Configured with: ../src/configure -v --enable-languages=c,c++,java,f77,pascal,objc,ada,treelang --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-gxx-include-dir=/usr/include/c++/3.3 --enable-shared --enable-__cxa_atexit --with-system-zlib --enable-nls --without-included-gettext --enable-clocale=gnu --enable-debug --enable-java-gc=boehm --enable-java-awt=xlib --enable-objc-gc i486-linux Thread model: posix gcc version 3.3.6 (Debian 1:3.3.6-5) [EMAIL PROTECTED]:~/projet/gujin$ ../toolchain/bin/gcc -v Using built-in specs. Target: i686-pc-linux-gnu Configured with: ../configure --prefix=/home/etienne/projet/toolchain --enable-languages=c Thread model: posix gcc version 4.0.0 _____________________________________________________________________________ Découvrez le nouveau Yahoo! Mail : 1 Go d'espace de stockage pour vos mails, photos et vidéos ! Créez votre Yahoo! Mail sur http://fr.mail.yahoo.com