support both of binutils 2.9.1.0.x and 2.9.5.0.x
This commit is contained in:
parent
0623b3f394
commit
ce03b57275
6 changed files with 156 additions and 55 deletions
|
@ -1,3 +1,11 @@
|
||||||
|
1999-08-05 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
|
* acinclude.m4 (grub_ASM_PREFIX_REQUIREMENT): New function.
|
||||||
|
* configure.in: Call grub_ASM_PREFIX_REQUIREMENT, and define
|
||||||
|
ADDR32 and DATA32 based on the result.
|
||||||
|
* stage2/asm.S: Replace addr32 and data32 prefixes with ADDR32
|
||||||
|
and DATA32 respectively.
|
||||||
|
|
||||||
1999-08-05 Pavel Roskin <pavel_roskin@geocities.com>
|
1999-08-05 Pavel Roskin <pavel_roskin@geocities.com>
|
||||||
|
|
||||||
* stage2/boot.c (load_image): Use RAW_ADDR macro when loading
|
* stage2/boot.c (load_image): Use RAW_ADDR macro when loading
|
||||||
|
|
22
acinclude.m4
22
acinclude.m4
|
@ -106,3 +106,25 @@ else
|
||||||
fi
|
fi
|
||||||
rm -f conftest*])
|
rm -f conftest*])
|
||||||
AC_MSG_RESULT([$grub_cv_asm_addr32])])
|
AC_MSG_RESULT([$grub_cv_asm_addr32])])
|
||||||
|
|
||||||
|
dnl
|
||||||
|
dnl Later versions of GAS requires that addr32 and data32 prefixes
|
||||||
|
dnl appear in the same lines as the instructions they modify, while
|
||||||
|
dnl earlier versions requires that they appear in separate lines.
|
||||||
|
AC_DEFUN(grub_ASM_PREFIX_REQUIREMENT,
|
||||||
|
[AC_REQUIRE([AC_PROG_CC])
|
||||||
|
AC_MSG_CHECKING(dnl
|
||||||
|
[whether addr32 must be in the same line as the instruction])
|
||||||
|
AC_CACHE_VAL(grub_cv_asm_prefix_requirement,
|
||||||
|
[cat > conftest.s <<\EOF
|
||||||
|
.code16
|
||||||
|
l1: addr32 movb %al, l1
|
||||||
|
EOF
|
||||||
|
|
||||||
|
if AC_TRY_COMMAND([${CC-cc} -c conftest.s]) && test -s conftest.o; then
|
||||||
|
grub_cv_asm_prefix_requirement=yes
|
||||||
|
else
|
||||||
|
grub_cv_asm_prefix_requirement=no
|
||||||
|
fi
|
||||||
|
rm -f conftest*])
|
||||||
|
AC_MSG_RESULT([$grub_cv_asm_prefix_requirement])])
|
||||||
|
|
22
aclocal.m4
vendored
22
aclocal.m4
vendored
|
@ -119,6 +119,28 @@ fi
|
||||||
rm -f conftest*])
|
rm -f conftest*])
|
||||||
AC_MSG_RESULT([$grub_cv_asm_addr32])])
|
AC_MSG_RESULT([$grub_cv_asm_addr32])])
|
||||||
|
|
||||||
|
dnl
|
||||||
|
dnl Later versions of GAS requires that addr32 and data32 prefixes
|
||||||
|
dnl appear in the same lines as the instructions they modify, while
|
||||||
|
dnl earlier versions requires that they appear in separate lines.
|
||||||
|
AC_DEFUN(grub_ASM_PREFIX_REQUIREMENT,
|
||||||
|
[AC_REQUIRE([AC_PROG_CC])
|
||||||
|
AC_MSG_CHECKING(dnl
|
||||||
|
[whether addr32 must be in the same line as the instruction])
|
||||||
|
AC_CACHE_VAL(grub_cv_asm_prefix_requirement,
|
||||||
|
[cat > conftest.s <<\EOF
|
||||||
|
.code16
|
||||||
|
l1: addr32 movb %al, l1
|
||||||
|
EOF
|
||||||
|
|
||||||
|
if AC_TRY_COMMAND([${CC-cc} -c conftest.s]) && test -s conftest.o; then
|
||||||
|
grub_cv_asm_prefix_requirement=yes
|
||||||
|
else
|
||||||
|
grub_cv_asm_prefix_requirement=no
|
||||||
|
fi
|
||||||
|
rm -f conftest*])
|
||||||
|
AC_MSG_RESULT([$grub_cv_asm_prefix_requirement])])
|
||||||
|
|
||||||
# Do all the work for Automake. This macro actually does too much --
|
# Do all the work for Automake. This macro actually does too much --
|
||||||
# some checks are only needed if your package does certain things.
|
# some checks are only needed if your package does certain things.
|
||||||
# But this isn't really a big deal.
|
# But this isn't really a big deal.
|
||||||
|
|
72
configure
vendored
72
configure
vendored
|
@ -1507,9 +1507,49 @@ if test "x$grub_cv_asm_addr32" != xyes; then
|
||||||
{ echo "configure: error: GRUB requires GAS .code16 addr32 support; upgrade your binutils" 1>&2; exit 1; }
|
{ echo "configure: error: GRUB requires GAS .code16 addr32 support; upgrade your binutils" 1>&2; exit 1; }
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
echo $ac_n "checking whether addr32 must be in the same line as the instruction""... $ac_c" 1>&6
|
||||||
|
echo "configure:1513: checking whether addr32 must be in the same line as the instruction" >&5
|
||||||
|
if eval "test \"\${grub_cv_asm_prefix_requirement+set}\" = set"; then
|
||||||
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
|
else
|
||||||
|
cat > conftest.s <<\EOF
|
||||||
|
.code16
|
||||||
|
l1: addr32 movb %al, l1
|
||||||
|
EOF
|
||||||
|
|
||||||
|
if { ac_try='${CC-cc} -c conftest.s'; { (eval echo configure:1522: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } && test -s conftest.o; then
|
||||||
|
grub_cv_asm_prefix_requirement=yes
|
||||||
|
else
|
||||||
|
grub_cv_asm_prefix_requirement=no
|
||||||
|
fi
|
||||||
|
rm -f conftest*
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$ac_t""$grub_cv_asm_prefix_requirement" 1>&6
|
||||||
|
if test "x$grub_cv_asm_prefix_requirement" != xyes; then
|
||||||
|
cat >> confdefs.h <<EOF
|
||||||
|
#define ADDR32 addr32;
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat >> confdefs.h <<EOF
|
||||||
|
#define DATA32 data32;
|
||||||
|
EOF
|
||||||
|
|
||||||
|
else
|
||||||
|
cat >> confdefs.h <<EOF
|
||||||
|
#define ADDR32 addr32
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat >> confdefs.h <<EOF
|
||||||
|
#define DATA32 data32
|
||||||
|
EOF
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
# Check for curses libraries.
|
# Check for curses libraries.
|
||||||
echo $ac_n "checking for getch in -lncurses""... $ac_c" 1>&6
|
echo $ac_n "checking for getch in -lncurses""... $ac_c" 1>&6
|
||||||
echo "configure:1513: checking for getch in -lncurses" >&5
|
echo "configure:1553: checking for getch in -lncurses" >&5
|
||||||
ac_lib_var=`echo ncurses'_'getch | sed 'y%./+-:%__p__%'`
|
ac_lib_var=`echo ncurses'_'getch | sed 'y%./+-:%__p__%'`
|
||||||
if eval "test \"\${ac_cv_lib_$ac_lib_var+set}\" = set"; then
|
if eval "test \"\${ac_cv_lib_$ac_lib_var+set}\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
|
@ -1517,7 +1557,7 @@ else
|
||||||
ac_save_LIBS="$LIBS"
|
ac_save_LIBS="$LIBS"
|
||||||
LIBS="-lncurses $LIBS"
|
LIBS="-lncurses $LIBS"
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1521 "configure"
|
#line 1561 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
/* Override any gcc2 internal prototype to avoid an error. */
|
/* Override any gcc2 internal prototype to avoid an error. */
|
||||||
/* We use char because int might match the return type of a gcc2
|
/* We use char because int might match the return type of a gcc2
|
||||||
|
@ -1528,7 +1568,7 @@ int main() {
|
||||||
getch()
|
getch()
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:1532: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
if { (eval echo configure:1572: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
eval "ac_cv_lib_$ac_lib_var=yes"
|
eval "ac_cv_lib_$ac_lib_var=yes"
|
||||||
else
|
else
|
||||||
|
@ -1551,7 +1591,7 @@ EOF
|
||||||
else
|
else
|
||||||
echo "$ac_t""no" 1>&6
|
echo "$ac_t""no" 1>&6
|
||||||
echo $ac_n "checking for getch in -lcurses""... $ac_c" 1>&6
|
echo $ac_n "checking for getch in -lcurses""... $ac_c" 1>&6
|
||||||
echo "configure:1555: checking for getch in -lcurses" >&5
|
echo "configure:1595: checking for getch in -lcurses" >&5
|
||||||
ac_lib_var=`echo curses'_'getch | sed 'y%./+-:%__p__%'`
|
ac_lib_var=`echo curses'_'getch | sed 'y%./+-:%__p__%'`
|
||||||
if eval "test \"\${ac_cv_lib_$ac_lib_var+set}\" = set"; then
|
if eval "test \"\${ac_cv_lib_$ac_lib_var+set}\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
|
@ -1559,7 +1599,7 @@ else
|
||||||
ac_save_LIBS="$LIBS"
|
ac_save_LIBS="$LIBS"
|
||||||
LIBS="-lcurses $LIBS"
|
LIBS="-lcurses $LIBS"
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1563 "configure"
|
#line 1603 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
/* Override any gcc2 internal prototype to avoid an error. */
|
/* Override any gcc2 internal prototype to avoid an error. */
|
||||||
/* We use char because int might match the return type of a gcc2
|
/* We use char because int might match the return type of a gcc2
|
||||||
|
@ -1570,7 +1610,7 @@ int main() {
|
||||||
getch()
|
getch()
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:1574: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
if { (eval echo configure:1614: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
eval "ac_cv_lib_$ac_lib_var=yes"
|
eval "ac_cv_lib_$ac_lib_var=yes"
|
||||||
else
|
else
|
||||||
|
@ -1600,7 +1640,7 @@ fi
|
||||||
|
|
||||||
# Check for headers.
|
# Check for headers.
|
||||||
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
|
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
|
||||||
echo "configure:1604: checking how to run the C preprocessor" >&5
|
echo "configure:1644: checking how to run the C preprocessor" >&5
|
||||||
# On Suns, sometimes $CPP names a directory.
|
# On Suns, sometimes $CPP names a directory.
|
||||||
if test -n "$CPP" && test -d "$CPP"; then
|
if test -n "$CPP" && test -d "$CPP"; then
|
||||||
CPP=
|
CPP=
|
||||||
|
@ -1615,13 +1655,13 @@ else
|
||||||
# On the NeXT, cc -E runs the code through the compiler's parser,
|
# On the NeXT, cc -E runs the code through the compiler's parser,
|
||||||
# not just through cpp.
|
# not just through cpp.
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1619 "configure"
|
#line 1659 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
Syntax Error
|
Syntax Error
|
||||||
EOF
|
EOF
|
||||||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
||||||
{ (eval echo configure:1625: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
{ (eval echo configure:1665: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||||
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
|
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
|
||||||
if test -z "$ac_err"; then
|
if test -z "$ac_err"; then
|
||||||
:
|
:
|
||||||
|
@ -1632,13 +1672,13 @@ else
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
CPP="${CC-cc} -E -traditional-cpp"
|
CPP="${CC-cc} -E -traditional-cpp"
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1636 "configure"
|
#line 1676 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
Syntax Error
|
Syntax Error
|
||||||
EOF
|
EOF
|
||||||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
||||||
{ (eval echo configure:1642: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
{ (eval echo configure:1682: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||||
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
|
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
|
||||||
if test -z "$ac_err"; then
|
if test -z "$ac_err"; then
|
||||||
:
|
:
|
||||||
|
@ -1649,13 +1689,13 @@ else
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
CPP="${CC-cc} -nologo -E"
|
CPP="${CC-cc} -nologo -E"
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1653 "configure"
|
#line 1693 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
Syntax Error
|
Syntax Error
|
||||||
EOF
|
EOF
|
||||||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
||||||
{ (eval echo configure:1659: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
{ (eval echo configure:1699: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||||
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
|
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
|
||||||
if test -z "$ac_err"; then
|
if test -z "$ac_err"; then
|
||||||
:
|
:
|
||||||
|
@ -1683,17 +1723,17 @@ for ac_hdr in string.h strings.h
|
||||||
do
|
do
|
||||||
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
|
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
|
||||||
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
|
||||||
echo "configure:1687: checking for $ac_hdr" >&5
|
echo "configure:1727: checking for $ac_hdr" >&5
|
||||||
if eval "test \"\${ac_cv_header_$ac_safe+set}\" = set"; then
|
if eval "test \"\${ac_cv_header_$ac_safe+set}\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1692 "configure"
|
#line 1732 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
#include <$ac_hdr>
|
#include <$ac_hdr>
|
||||||
EOF
|
EOF
|
||||||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
||||||
{ (eval echo configure:1697: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
{ (eval echo configure:1737: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||||
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
|
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
|
||||||
if test -z "$ac_err"; then
|
if test -z "$ac_err"; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
|
|
|
@ -98,6 +98,15 @@ if test "x$grub_cv_asm_addr32" != xyes; then
|
||||||
AC_MSG_ERROR([GRUB requires GAS .code16 addr32 support; upgrade your binutils])
|
AC_MSG_ERROR([GRUB requires GAS .code16 addr32 support; upgrade your binutils])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
grub_ASM_PREFIX_REQUIREMENT
|
||||||
|
if test "x$grub_cv_asm_prefix_requirement" != xyes; then
|
||||||
|
AC_DEFINE_UNQUOTED([ADDR32], [addr32; ])
|
||||||
|
AC_DEFINE_UNQUOTED([DATA32], [data32; ])
|
||||||
|
else
|
||||||
|
AC_DEFINE_UNQUOTED([ADDR32], [addr32])
|
||||||
|
AC_DEFINE_UNQUOTED([DATA32], [data32])
|
||||||
|
fi
|
||||||
|
|
||||||
# Check for curses libraries.
|
# Check for curses libraries.
|
||||||
AC_CHECK_LIB(ncurses, getch, [GRUB_LIBS="$GRUB_LIBS -lncurses"
|
AC_CHECK_LIB(ncurses, getch, [GRUB_LIBS="$GRUB_LIBS -lncurses"
|
||||||
AC_DEFINE(HAVE_LIBCURSES)],
|
AC_DEFINE(HAVE_LIBCURSES)],
|
||||||
|
|
78
stage2/asm.S
78
stage2/asm.S
|
@ -95,13 +95,13 @@ codestart:
|
||||||
sti /* we're safe again */
|
sti /* we're safe again */
|
||||||
|
|
||||||
/* save boot drive reference */
|
/* save boot drive reference */
|
||||||
addr32 movb %dl, EXT_C(boot_drive)
|
ADDR32 movb %dl, EXT_C(boot_drive)
|
||||||
|
|
||||||
/* reset disk system (%ah = 0) */
|
/* reset disk system (%ah = 0) */
|
||||||
int $0x13
|
int $0x13
|
||||||
|
|
||||||
/* transition to protected mode */
|
/* transition to protected mode */
|
||||||
data32 call EXT_C(real_to_prot)
|
DATA32 call EXT_C(real_to_prot)
|
||||||
|
|
||||||
/* The ".code32" directive takes GAS out of 16-bit mode. */
|
/* The ".code32" directive takes GAS out of 16-bit mode. */
|
||||||
.code32
|
.code32
|
||||||
|
@ -170,7 +170,7 @@ ENTRY(chain_stage1)
|
||||||
call EXT_C(prot_to_real)
|
call EXT_C(prot_to_real)
|
||||||
.code16
|
.code16
|
||||||
|
|
||||||
data32 addr32 ljmp (offset)
|
DATA32 ADDR32 ljmp (offset)
|
||||||
.code32
|
.code32
|
||||||
#endif /* STAGE1_5 */
|
#endif /* STAGE1_5 */
|
||||||
|
|
||||||
|
@ -209,7 +209,7 @@ ENTRY(chain_stage2)
|
||||||
call EXT_C(prot_to_real)
|
call EXT_C(prot_to_real)
|
||||||
.code16
|
.code16
|
||||||
|
|
||||||
data32 addr32 ljmp (offset)
|
DATA32 ADDR32 ljmp (offset)
|
||||||
|
|
||||||
.code32
|
.code32
|
||||||
|
|
||||||
|
@ -225,7 +225,7 @@ ENTRY(real_to_prot)
|
||||||
cli
|
cli
|
||||||
|
|
||||||
/* load the GDT register */
|
/* load the GDT register */
|
||||||
data32 addr32 lgdt gdtdesc
|
DATA32 ADDR32 lgdt gdtdesc
|
||||||
|
|
||||||
/* turn on protected mode */
|
/* turn on protected mode */
|
||||||
movl %cr0, %eax
|
movl %cr0, %eax
|
||||||
|
@ -233,7 +233,7 @@ ENTRY(real_to_prot)
|
||||||
movl %eax, %cr0
|
movl %eax, %cr0
|
||||||
|
|
||||||
/* jump to relocation, flush prefetch queue, and reload %cs */
|
/* jump to relocation, flush prefetch queue, and reload %cs */
|
||||||
data32 ljmp $PROT_MODE_CSEG, $protcseg
|
DATA32 ljmp $PROT_MODE_CSEG, $protcseg
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The ".code32" directive only works in GAS, the GNU assembler!
|
* The ".code32" directive only works in GAS, the GNU assembler!
|
||||||
|
@ -307,7 +307,7 @@ tmpcseg:
|
||||||
movl %eax, %cr0
|
movl %eax, %cr0
|
||||||
|
|
||||||
/* flush prefetch queue, reload %cs */
|
/* flush prefetch queue, reload %cs */
|
||||||
data32 ljmp $0, $realcseg
|
DATA32 ljmp $0, $realcseg
|
||||||
|
|
||||||
realcseg:
|
realcseg:
|
||||||
/* we are in real mode now
|
/* we are in real mode now
|
||||||
|
@ -326,7 +326,7 @@ realcseg:
|
||||||
sti
|
sti
|
||||||
|
|
||||||
/* return on new stack! */
|
/* return on new stack! */
|
||||||
data32 ret
|
DATA32 ret
|
||||||
|
|
||||||
.code32
|
.code32
|
||||||
|
|
||||||
|
@ -370,7 +370,7 @@ ENTRY(biosdisk_int13_extensions)
|
||||||
xorw %ax, %ax
|
xorw %ax, %ax
|
||||||
movw %ax, %ds
|
movw %ax, %ds
|
||||||
/* back to protected mode */
|
/* back to protected mode */
|
||||||
data32 call EXT_C(real_to_prot)
|
DATA32 call EXT_C(real_to_prot)
|
||||||
.code32
|
.code32
|
||||||
|
|
||||||
movb %dl, %al /* return value in %eax */
|
movb %dl, %al /* return value in %eax */
|
||||||
|
@ -442,7 +442,7 @@ ENTRY(biosdisk_standard)
|
||||||
jmp 1b /* retry */
|
jmp 1b /* retry */
|
||||||
2:
|
2:
|
||||||
/* back to protected mode */
|
/* back to protected mode */
|
||||||
data32 call EXT_C(real_to_prot)
|
DATA32 call EXT_C(real_to_prot)
|
||||||
.code32
|
.code32
|
||||||
|
|
||||||
movb %bl, %al /* return value in %eax */
|
movb %bl, %al /* return value in %eax */
|
||||||
|
@ -495,7 +495,7 @@ ENTRY(check_int13_extensions)
|
||||||
xorb %bl, %bl
|
xorb %bl, %bl
|
||||||
2:
|
2:
|
||||||
/* back to protected mode */
|
/* back to protected mode */
|
||||||
data32 call EXT_C(real_to_prot)
|
DATA32 call EXT_C(real_to_prot)
|
||||||
.code32
|
.code32
|
||||||
|
|
||||||
movb %bl, %al /* return value in %eax */
|
movb %bl, %al /* return value in %eax */
|
||||||
|
@ -543,7 +543,7 @@ ENTRY(get_diskinfo_int13_extensions)
|
||||||
xorw %ax, %ax
|
xorw %ax, %ax
|
||||||
movw %ax, %ds
|
movw %ax, %ds
|
||||||
/* back to protected mode */
|
/* back to protected mode */
|
||||||
data32 call EXT_C(real_to_prot)
|
DATA32 call EXT_C(real_to_prot)
|
||||||
.code32
|
.code32
|
||||||
|
|
||||||
movb %bl, %al /* return value in %eax */
|
movb %bl, %al /* return value in %eax */
|
||||||
|
@ -592,7 +592,7 @@ ENTRY(get_diskinfo_standard)
|
||||||
1:
|
1:
|
||||||
movb %ah, %bl /* save return value in %bl */
|
movb %ah, %bl /* save return value in %bl */
|
||||||
/* back to protected mode */
|
/* back to protected mode */
|
||||||
data32 call EXT_C(real_to_prot)
|
DATA32 call EXT_C(real_to_prot)
|
||||||
.code32
|
.code32
|
||||||
|
|
||||||
/* restore %ebp */
|
/* restore %ebp */
|
||||||
|
@ -687,7 +687,7 @@ probe_values:
|
||||||
|
|
||||||
2:
|
2:
|
||||||
/* back to protected mode */
|
/* back to protected mode */
|
||||||
data32 call EXT_C(real_to_prot)
|
DATA32 call EXT_C(real_to_prot)
|
||||||
.code32
|
.code32
|
||||||
|
|
||||||
/* restore %ebp */
|
/* restore %ebp */
|
||||||
|
@ -758,7 +758,7 @@ pc_notnewline:
|
||||||
movw $1, %bx
|
movw $1, %bx
|
||||||
int $0x10
|
int $0x10
|
||||||
|
|
||||||
data32 call EXT_C(real_to_prot)
|
DATA32 call EXT_C(real_to_prot)
|
||||||
.code32
|
.code32
|
||||||
|
|
||||||
pop %ebx
|
pop %ebx
|
||||||
|
@ -796,10 +796,10 @@ ENTRY(get_memsize)
|
||||||
.code16
|
.code16
|
||||||
|
|
||||||
cmpb $0x1, %bl
|
cmpb $0x1, %bl
|
||||||
data32 je xext
|
DATA32 je xext
|
||||||
|
|
||||||
int $0x12
|
int $0x12
|
||||||
data32 jmp xdone
|
DATA32 jmp xdone
|
||||||
|
|
||||||
xext:
|
xext:
|
||||||
movb $0x88, %ah
|
movb $0x88, %ah
|
||||||
|
@ -808,7 +808,7 @@ xext:
|
||||||
xdone:
|
xdone:
|
||||||
movw %ax, %bx
|
movw %ax, %bx
|
||||||
|
|
||||||
data32 call EXT_C(real_to_prot)
|
DATA32 call EXT_C(real_to_prot)
|
||||||
.code32
|
.code32
|
||||||
|
|
||||||
movw %bx, %ax
|
movw %bx, %ax
|
||||||
|
@ -845,7 +845,7 @@ ENTRY(get_eisamemsize)
|
||||||
shll $16, %ebx
|
shll $16, %ebx
|
||||||
movw %ax, %bx
|
movw %ax, %bx
|
||||||
|
|
||||||
data32 call EXT_C(real_to_prot)
|
DATA32 call EXT_C(real_to_prot)
|
||||||
.code32
|
.code32
|
||||||
|
|
||||||
movl $0xFFFFFFFF, %eax
|
movl $0xFFFFFFFF, %eax
|
||||||
|
@ -906,24 +906,24 @@ ENTRY(get_mmap_entry)
|
||||||
movl $0xe820, %eax
|
movl $0xe820, %eax
|
||||||
int $0x15
|
int $0x15
|
||||||
|
|
||||||
data32 jc xnosmap
|
DATA32 jc xnosmap
|
||||||
|
|
||||||
cmpl $0x534d4150, %eax
|
cmpl $0x534d4150, %eax
|
||||||
data32 jne xnosmap
|
DATA32 jne xnosmap
|
||||||
|
|
||||||
cmpl $0x14, %ecx
|
cmpl $0x14, %ecx
|
||||||
data32 jl xnosmap
|
DATA32 jl xnosmap
|
||||||
|
|
||||||
cmpl $0x400, %ecx
|
cmpl $0x400, %ecx
|
||||||
data32 jg xnosmap
|
DATA32 jg xnosmap
|
||||||
|
|
||||||
data32 jmp xsmap
|
DATA32 jmp xsmap
|
||||||
|
|
||||||
xnosmap:
|
xnosmap:
|
||||||
movl $0, %ecx
|
movl $0, %ecx
|
||||||
|
|
||||||
xsmap:
|
xsmap:
|
||||||
data32 call EXT_C(real_to_prot)
|
DATA32 call EXT_C(real_to_prot)
|
||||||
.code32
|
.code32
|
||||||
|
|
||||||
/* write length of buffer (zero if error) into "addr" */
|
/* write length of buffer (zero if error) into "addr" */
|
||||||
|
@ -1001,10 +1001,10 @@ ENTRY(patch_code) /* labels start with "pc_" */
|
||||||
mov %ax, %es
|
mov %ax, %es
|
||||||
mov %ax, %fs
|
mov %ax, %fs
|
||||||
mov %ax, %gs
|
mov %ax, %gs
|
||||||
addr32 movl $0, 0
|
ADDR32 movl $0, 0
|
||||||
pc_stop:
|
pc_stop:
|
||||||
hlt
|
hlt
|
||||||
data32 jmp pc_stop
|
DATA32 jmp pc_stop
|
||||||
ENTRY(patch_code_end)
|
ENTRY(patch_code_end)
|
||||||
|
|
||||||
.code32
|
.code32
|
||||||
|
@ -1054,7 +1054,7 @@ ENTRY(big_linux_boot)
|
||||||
movw %ax, %ss
|
movw %ax, %ss
|
||||||
|
|
||||||
/* jump to start */
|
/* jump to start */
|
||||||
data32 addr32 ljmp (offset)
|
DATA32 ADDR32 ljmp (offset)
|
||||||
.code32
|
.code32
|
||||||
|
|
||||||
|
|
||||||
|
@ -1103,7 +1103,7 @@ ENTRY(cls)
|
||||||
xorb %ah, %ah
|
xorb %ah, %ah
|
||||||
int $0x10 /* Set Video mode (clears screen) */
|
int $0x10 /* Set Video mode (clears screen) */
|
||||||
|
|
||||||
data32 call EXT_C(real_to_prot)
|
DATA32 call EXT_C(real_to_prot)
|
||||||
.code32
|
.code32
|
||||||
|
|
||||||
pop %ebx
|
pop %ebx
|
||||||
|
@ -1133,7 +1133,7 @@ ENTRY(nocursor)
|
||||||
movb $0x1, %ah
|
movb $0x1, %ah
|
||||||
int $0x10
|
int $0x10
|
||||||
|
|
||||||
data32 call EXT_C(real_to_prot)
|
DATA32 call EXT_C(real_to_prot)
|
||||||
.code32
|
.code32
|
||||||
|
|
||||||
pop %edx
|
pop %edx
|
||||||
|
@ -1168,7 +1168,7 @@ ENTRY(getxy)
|
||||||
movb $0x3, %ah
|
movb $0x3, %ah
|
||||||
int $0x10 /* get cursor position */
|
int $0x10 /* get cursor position */
|
||||||
|
|
||||||
data32 call EXT_C(real_to_prot)
|
DATA32 call EXT_C(real_to_prot)
|
||||||
.code32
|
.code32
|
||||||
|
|
||||||
movb %dl, %ah
|
movb %dl, %ah
|
||||||
|
@ -1207,7 +1207,7 @@ ENTRY(gotoxy)
|
||||||
movb $0x2, %ah
|
movb $0x2, %ah
|
||||||
int $0x10 /* set cursor position */
|
int $0x10 /* set cursor position */
|
||||||
|
|
||||||
data32 call EXT_C(real_to_prot)
|
DATA32 call EXT_C(real_to_prot)
|
||||||
.code32
|
.code32
|
||||||
|
|
||||||
pop %edx
|
pop %edx
|
||||||
|
@ -1271,7 +1271,7 @@ ENTRY(set_attrib)
|
||||||
movw $1, %cx
|
movw $1, %cx
|
||||||
int $0x10
|
int $0x10
|
||||||
|
|
||||||
data32 call EXT_C(real_to_prot)
|
DATA32 call EXT_C(real_to_prot)
|
||||||
.code32
|
.code32
|
||||||
|
|
||||||
pop %ecx
|
pop %ecx
|
||||||
|
@ -1310,11 +1310,11 @@ ENTRY(getrtsecs)
|
||||||
movb $0x2, %ah
|
movb $0x2, %ah
|
||||||
int $0x1a
|
int $0x1a
|
||||||
|
|
||||||
data32 jnc gottime
|
DATA32 jnc gottime
|
||||||
movb $0xff, %dh
|
movb $0xff, %dh
|
||||||
|
|
||||||
gottime:
|
gottime:
|
||||||
data32 call EXT_C(real_to_prot)
|
DATA32 call EXT_C(real_to_prot)
|
||||||
.code32
|
.code32
|
||||||
|
|
||||||
movb %dh, %al
|
movb %dh, %al
|
||||||
|
@ -1344,7 +1344,7 @@ ENTRY(getkey)
|
||||||
|
|
||||||
movw %ax, %bx /* real_to_prot uses %eax */
|
movw %ax, %bx /* real_to_prot uses %eax */
|
||||||
|
|
||||||
data32 call EXT_C(real_to_prot)
|
DATA32 call EXT_C(real_to_prot)
|
||||||
.code32
|
.code32
|
||||||
|
|
||||||
movw %bx, %ax
|
movw %bx, %ax
|
||||||
|
@ -1379,15 +1379,15 @@ ENTRY(checkkey)
|
||||||
movb $0x1, %ah
|
movb $0x1, %ah
|
||||||
int $0x16
|
int $0x16
|
||||||
|
|
||||||
data32 jz notpending
|
DATA32 jz notpending
|
||||||
movw %ax, %bx
|
movw %ax, %bx
|
||||||
data32 jmp pending
|
DATA32 jmp pending
|
||||||
|
|
||||||
notpending:
|
notpending:
|
||||||
movl $0xFFFFFFFF, %ebx
|
movl $0xFFFFFFFF, %ebx
|
||||||
|
|
||||||
pending:
|
pending:
|
||||||
data32 call EXT_C(real_to_prot)
|
DATA32 call EXT_C(real_to_prot)
|
||||||
.code32
|
.code32
|
||||||
|
|
||||||
mov %ebx, %eax
|
mov %ebx, %eax
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue