diff options
author | Ian Wienand <ianw@gelato.unsw.edu.au> | 2005-07-20 01:32:00 -0400 |
---|---|---|
committer | Tony Luck <tony.luck@intel.com> | 2005-08-18 17:10:41 -0400 |
commit | 4aec0fb12267718c750475f3404337ad13caa8f5 (patch) | |
tree | 8d98ed612d6fb7648991529dd1c8700299047bce /arch/ia64/hp/sim | |
parent | 75e8727fbb3749075b6df36be636a3045ed9d515 (diff) |
[IA64] Simulator bootloader fails with gcc 4
After building a fresh tree with gcc 4 I can't boot the simulator as
the bootloader loader dies with
loading /home/ianw/kerntest/kerncomp//build/sim_defconfig/vmlinux...
failed to read phdr
After some investigation I believe this is do with differences between
the alignment of variables on the stack between gcc 3 and 4 and the
ski simulator. If you trace through with the simulator you can see
that the disk_stat structure value returned from the SSC_WAIT_COMPLETION
call seems to be only half loaded. I guess it doesn't like the alignment
of the input.
Signed-off-by: Ian Wienand <ianw@gelato.unsw.edu.au>
Signed-off-by: Tony Luck <tony.luck@intel.com>
Diffstat (limited to 'arch/ia64/hp/sim')
-rw-r--r-- | arch/ia64/hp/sim/boot/bootloader.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/arch/ia64/hp/sim/boot/bootloader.c b/arch/ia64/hp/sim/boot/bootloader.c index 51a7b7b4dd0e..a7bed60b69f9 100644 --- a/arch/ia64/hp/sim/boot/bootloader.c +++ b/arch/ia64/hp/sim/boot/bootloader.c | |||
@@ -30,10 +30,14 @@ struct disk_req { | |||
30 | unsigned len; | 30 | unsigned len; |
31 | }; | 31 | }; |
32 | 32 | ||
33 | /* SSC_WAIT_COMPLETION appears to want this large alignment. gcc < 4 | ||
34 | * seems to give it by default, however gcc > 4 is smarter and may | ||
35 | * not. | ||
36 | */ | ||
33 | struct disk_stat { | 37 | struct disk_stat { |
34 | int fd; | 38 | int fd; |
35 | unsigned count; | 39 | unsigned count; |
36 | }; | 40 | } __attribute__ ((aligned (16))); |
37 | 41 | ||
38 | extern void jmp_to_kernel (unsigned long bp, unsigned long e_entry); | 42 | extern void jmp_to_kernel (unsigned long bp, unsigned long e_entry); |
39 | extern struct ia64_boot_param *sys_fw_init (const char *args, int arglen); | 43 | extern struct ia64_boot_param *sys_fw_init (const char *args, int arglen); |