aboutsummaryrefslogtreecommitdiffstats
path: root/arch/ia64
diff options
context:
space:
mode:
authorIan Wienand <ianw@gelato.unsw.edu.au>2005-07-19 22:32:00 -0700
committerTony Luck <tony.luck@intel.com>2005-08-18 14:10:41 -0700
commit4aec0fb12267718c750475f3404337ad13caa8f5 (patch)
tree8d98ed612d6fb7648991529dd1c8700299047bce /arch/ia64
parent75e8727fbb3749075b6df36be636a3045ed9d515 (diff)
downloadkernel_samsung_smdk4412-4aec0fb12267718c750475f3404337ad13caa8f5.zip
kernel_samsung_smdk4412-4aec0fb12267718c750475f3404337ad13caa8f5.tar.gz
kernel_samsung_smdk4412-4aec0fb12267718c750475f3404337ad13caa8f5.tar.bz2
[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')
-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 51a7b7b..a7bed60 100644
--- a/arch/ia64/hp/sim/boot/bootloader.c
+++ b/arch/ia64/hp/sim/boot/bootloader.c
@@ -30,10 +30,14 @@ struct disk_req {
unsigned len;
};
+/* SSC_WAIT_COMPLETION appears to want this large alignment. gcc < 4
+ * seems to give it by default, however gcc > 4 is smarter and may
+ * not.
+ */
struct disk_stat {
int fd;
unsigned count;
-};
+} __attribute__ ((aligned (16)));
extern void jmp_to_kernel (unsigned long bp, unsigned long e_entry);
extern struct ia64_boot_param *sys_fw_init (const char *args, int arglen);