aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIan Wienand <ianw@gelato.unsw.edu.au>2005-07-20 01:32:00 -0400
committerTony Luck <tony.luck@intel.com>2005-08-18 17:10:41 -0400
commit4aec0fb12267718c750475f3404337ad13caa8f5 (patch)
tree8d98ed612d6fb7648991529dd1c8700299047bce
parent75e8727fbb3749075b6df36be636a3045ed9d515 (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>
-rw-r--r--arch/ia64/hp/sim/boot/bootloader.c6
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 */
33struct disk_stat { 37struct disk_stat {
34 int fd; 38 int fd;
35 unsigned count; 39 unsigned count;
36}; 40} __attribute__ ((aligned (16)));
37 41
38extern void jmp_to_kernel (unsigned long bp, unsigned long e_entry); 42extern void jmp_to_kernel (unsigned long bp, unsigned long e_entry);
39extern struct ia64_boot_param *sys_fw_init (const char *args, int arglen); 43extern struct ia64_boot_param *sys_fw_init (const char *args, int arglen);