diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2012-03-25 10:21:27 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2012-03-25 10:21:27 -0400 |
commit | ecf9b7df5da40234d9b8796ffee97fb45ec225c9 (patch) | |
tree | ebe63873b3976274925db27ab247c22217ac51e9 | |
parent | 57929d80a4036d2c33ef92522623937104cad3d0 (diff) | |
download | seabios-hppa-ecf9b7df5da40234d9b8796ffee97fb45ec225c9.zip seabios-hppa-ecf9b7df5da40234d9b8796ffee97fb45ec225c9.tar.gz seabios-hppa-ecf9b7df5da40234d9b8796ffee97fb45ec225c9.tar.bz2 |
Mark disk.c functions that take an address of a stack variable as noinline.
Some versions of gcc have been found to inline these funcions and then
cause the calling functions to use very large stack usage. Since
these functions are called from 16bit mode, their stack space usage is
very sensitive.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
-rw-r--r-- | src/disk.c | 12 |
1 files changed, 6 insertions, 6 deletions
@@ -76,7 +76,7 @@ fillLCHS(struct drive_s *drive_g, u16 *nlc, u16 *nlh, u16 *nlspt) } // Perform read/write/verify using old-style chs accesses -static void +static void noinline basic_access(struct bregs *regs, struct drive_s *drive_g, u16 command) { struct disk_op_s dop; @@ -119,7 +119,7 @@ basic_access(struct bregs *regs, struct drive_s *drive_g, u16 command) } // Perform read/write/verify using new-style "int13ext" accesses. -static void +static void noinline extended_access(struct bregs *regs, struct drive_s *drive_g, u16 command) { struct disk_op_s dop; @@ -201,7 +201,7 @@ disk_1304(struct bregs *regs, struct drive_s *drive_g) } // format disk track -static void +static void noinline disk_1305(struct bregs *regs, struct drive_s *drive_g) { debug_stub(regs); @@ -228,7 +228,7 @@ disk_1305(struct bregs *regs, struct drive_s *drive_g) } // read disk drive parameters -static void +static void noinline disk_1308(struct bregs *regs, struct drive_s *drive_g) { u16 ebda_seg = get_ebda_seg(); @@ -329,7 +329,7 @@ disk_1314(struct bregs *regs, struct drive_s *drive_g) } // read disk drive size -static void +static void noinline disk_1315(struct bregs *regs, struct drive_s *drive_g) { disk_ret(regs, DISK_RET_SUCCESS); @@ -463,7 +463,7 @@ disk_1345(struct bregs *regs, struct drive_s *drive_g) } // IBM/MS eject media -static void +static void noinline disk_1346(struct bregs *regs, struct drive_s *drive_g) { if (regs->dl < EXTSTART_CD) { |