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