aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2012-03-25 10:21:27 -0400
committerKevin O'Connor <kevin@koconnor.net>2012-03-25 10:21:27 -0400
commitecf9b7df5da40234d9b8796ffee97fb45ec225c9 (patch)
treeebe63873b3976274925db27ab247c22217ac51e9
parent57929d80a4036d2c33ef92522623937104cad3d0 (diff)
downloadseabios-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.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/disk.c b/src/disk.c
index 7a58af4..706b9f4 100644
--- a/src/disk.c
+++ b/src/disk.c
@@ -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) {