900edff605
tracker to CVS to make it easier to install.
2048 lines
70 KiB
Plaintext
2048 lines
70 KiB
Plaintext
----------------------------------------------------------------------
|
||
Patch name: patch.4meg-pages
|
||
Author: Farid Hajji <farid.hajji@ob.kamp.net>
|
||
Date: not sure
|
||
|
||
Detailed description:
|
||
see description below
|
||
|
||
Apply patch to:
|
||
bochs 3/25/2000 snapshot
|
||
Instructions:
|
||
To patch, go to main bochs directory.
|
||
Type "patch -p1 < THIS_PATCH_FILE".
|
||
----------------------------------------------------------------------
|
||
diff -Naur bochs-2000_0325a.orig/SUPERPAGES bochs-2000_0325a/SUPERPAGES
|
||
--- bochs-2000_0325a.orig/SUPERPAGES Thu Jan 1 01:00:00 1970
|
||
+++ bochs-2000_0325a/SUPERPAGES Wed Oct 18 21:25:41 2000
|
||
@@ -0,0 +1,87 @@
|
||
+ -------------------------------------------------
|
||
+ Experimental support for 4M superpages (pentium+)
|
||
+ (C) Farid Hajji <farid.hajji@ob.kamp.net>
|
||
+ -------------------------------------------------
|
||
+
|
||
+This distribution of Bochs has been enhanced to (partially) support
|
||
+bit 4 of CR4 (PSE-Bit) a.k.a. 4M superpages.
|
||
+
|
||
+Please be aware that this is currently _very_ experimental and not
|
||
+yet fully tested; not even fully implemented! It deserves the term
|
||
+'hack', not enhancement.
|
||
+
|
||
+To enable superpages, add --enable-superpages-hack to ./configure
|
||
+and be sure to specify --enable-cpu-level=5 or higher.
|
||
+
|
||
+CAVEATS:
|
||
+--------
|
||
+ * enable this option only if you absolutely need it. It slows
|
||
+ everthing down for reasons explained below.
|
||
+ * the bochs debugger (not the x86-debugger) doesn't support
|
||
+ superpages yet.
|
||
+ * if the pagesize is set to 4MB, no TLB is used. Actually,
|
||
+ TLBs are bypassed completely by this hack. If you rely on
|
||
+ TLBs in your code, things may break.
|
||
+
|
||
+What are superpages anyway?
|
||
+---------------------------
|
||
+
|
||
+Normally, x86 processors with paging enabled partition the physical
|
||
+memory in 4k pages that are accessed through a two-level hierarchy
|
||
+of paging directories and paging tables. 4 MB pages are an enhancement
|
||
+of pentium (and higher) processors, that are accessed directly through
|
||
+a one-level hiearchy of (combined) paging directory and page table
|
||
+entry. See http://developer.intel.com/design/pentiumii/manuals/24319202.pdf
|
||
+section 3.6 (paging) for a detailed overview.
|
||
+
|
||
+Superpages are needed by some newer kernels, like L4ka (http://www.l4ka.org/).
|
||
+Incidentally, L4ka and the template root_task was the only 4MB superpage
|
||
+software I tested right now.
|
||
+
|
||
+Technically, if CR4's bit 4 (PSE) is cleared, normal 4k page handling applies,
|
||
+as was already supported by bochs. If PSE is set, the PDE.PS flag determines
|
||
+wether the actual page is 4k (PDE.PS=0) or 4M (PDE.PS=1) in size. The 4k case
|
||
+is identical to the case with cleared PSE bit. The 4M case is different, in
|
||
+that the PDE entry specifies in Bits 31..22 the physical page base address
|
||
+(aligned on 4MB boundary). In that case, the linear address is interpreted
|
||
+differently: Bits 31..22 are as before an index in the page directory, as
|
||
+addresse by CR3 (the usual case), but all bits 21..0 of the linear address
|
||
+are now on offset to the physical page base address contained in PDE.
|
||
+
|
||
+Modifications to bochs' sources:
|
||
+--------------------------------
|
||
+
|
||
+Every change or addition to bochs' original sources related to superpages,
|
||
+is enclosed in a
|
||
+
|
||
+ #if SUPERPAGES_HACK
|
||
+ #endif // SUPERPAGES_HACK
|
||
+
|
||
+pair. SUPERPAGES_HACK is defined in configure.in which is transformed to
|
||
+configure with autoconf in the usual way (already done here).
|
||
+
|
||
+Tested with:
|
||
+------------
|
||
+ * L4ka compiled for 586 with kernel debugger, rmgr, sigma0 and the
|
||
+ template hello-world root_task. Screen shots and instructions under:
|
||
+ http://home.kamp.net/home/farid.hajji/l4ka/index.html
|
||
+ * <Please add your tests here...>
|
||
+
|
||
+TODO:
|
||
+-----
|
||
+ * test extensively with software that uses 4 MB superpages.
|
||
+ * integrate TLB handling in the 4MB case. Currently bypassed.
|
||
+ * no flags of CR4 except CR4.PSE (bit 4) are supported yet.
|
||
+
|
||
+Acknowledgements:
|
||
+-----------------
|
||
+ Many thanks to the people at contact@l4ka.org for helping me understand
|
||
+ the L4 initial bootstrap sequence. A big thanks go to Kevin Lawton
|
||
+ (kevin@mandrakesoft.com), bochs author, for his extremely clear sources
|
||
+ and his hints about the prefetch-queue.
|
||
+
|
||
+--
|
||
+Farid Hajji -- Unix Systems and Network Admin | Phone: +49-2131-67-555
|
||
+Broicherdorfstr. 83, D-41564 Kaarst, Germany | farid.hajji@ob.kamp.net
|
||
+- - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - -
|
||
+Murphy's Law fails only when you try to demonstrate it, and thus succeeds.
|
||
diff -Naur bochs-2000_0325a.orig/config.h.in bochs-2000_0325a/config.h.in
|
||
--- bochs-2000_0325a.orig/config.h.in Tue Jan 4 21:35:34 2000
|
||
+++ bochs-2000_0325a/config.h.in Wed Oct 18 13:49:17 2000
|
||
@@ -25,6 +25,16 @@
|
||
// USER CONFIGURABLE OPTIONS : EDIT ONLY OPTIONS IN THIS SECTION //
|
||
///////////////////////////////////////////////////////////////////
|
||
|
||
+// Setting this to 1 will enable support for 4 MB superpages (pentium+).
|
||
+// Superpages are active, when CR4.PSE (bit 4) is set. The pagesize
|
||
+// is either 4k iff pde.ps (bit 7 of pde) is 0 or 4M iff pde.ps is 1.
|
||
+// If 4k pages, the traditional (386+) 2-level hiearchy of page directory
|
||
+// and page tables apply. If 4M pages, the new 1-level hierarchy of a
|
||
+// combined page directory/page table entry applies. In this case, we
|
||
+// currently don't use TLB (we bypass it).
|
||
+#define SUPERPAGES_HACK 1
|
||
+
|
||
+
|
||
// I rebuilt the code which provides timers to IO devices.
|
||
// Setting this to 1 will introduce a little code which
|
||
// will panic out if cases which shouldn't happen occur.
|
||
diff -Naur bochs-2000_0325a.orig/configure bochs-2000_0325a/configure
|
||
--- bochs-2000_0325a.orig/configure Tue Jan 4 20:15:30 2000
|
||
+++ bochs-2000_0325a/configure Wed Oct 18 13:16:10 2000
|
||
@@ -1,7 +1,7 @@
|
||
#! /bin/sh
|
||
|
||
# Guess values for system-dependent variables and create Makefiles.
|
||
-# Generated automatically using autoconf version 2.12
|
||
+# Generated automatically using autoconf version 2.13
|
||
# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
|
||
#
|
||
# This configure script is free software; the Free Software Foundation
|
||
@@ -16,6 +16,8 @@
|
||
ac_help="$ac_help
|
||
--enable-cpu-level select cpu level (3,4,5)"
|
||
ac_help="$ac_help
|
||
+ --enable-superpages-hack enables 4mb superpages hack"
|
||
+ac_help="$ac_help
|
||
--enable-dynamic enable dynamic translation support"
|
||
ac_help="$ac_help
|
||
--enable-ne2000 enable limited ne2000 support"
|
||
@@ -105,6 +107,7 @@
|
||
# Initialize some other variables.
|
||
subdirs=
|
||
MFLAGS= MAKEFLAGS=
|
||
+SHELL=${CONFIG_SHELL-/bin/sh}
|
||
# Maximum number of lines to put in a shell here document.
|
||
ac_max_here_lines=12
|
||
|
||
@@ -388,7 +391,7 @@
|
||
verbose=yes ;;
|
||
|
||
-version | --version | --versio | --versi | --vers)
|
||
- echo "configure generated by autoconf version 2.12"
|
||
+ echo "configure generated by autoconf version 2.13"
|
||
exit 0 ;;
|
||
|
||
-with-* | --with-*)
|
||
@@ -558,9 +561,11 @@
|
||
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
|
||
ac_cpp='$CPP $CPPFLAGS'
|
||
ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
|
||
-ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
|
||
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
|
||
cross_compiling=$ac_cv_prog_cc_cross
|
||
|
||
+ac_exeext=
|
||
+ac_objext=o
|
||
if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
|
||
# Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
|
||
if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
|
||
@@ -582,15 +587,16 @@
|
||
# Extract the first word of "gcc", so it can be a program name with args.
|
||
set dummy gcc; ac_word=$2
|
||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||
-echo "configure:586: checking for $ac_word" >&5
|
||
+echo "configure:591: checking for $ac_word" >&5
|
||
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
|
||
echo $ac_n "(cached) $ac_c" 1>&6
|
||
else
|
||
if test -n "$CC"; then
|
||
ac_cv_prog_CC="$CC" # Let the user override the test.
|
||
else
|
||
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
|
||
- for ac_dir in $PATH; do
|
||
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
|
||
+ ac_dummy="$PATH"
|
||
+ for ac_dir in $ac_dummy; do
|
||
test -z "$ac_dir" && ac_dir=.
|
||
if test -f $ac_dir/$ac_word; then
|
||
ac_cv_prog_CC="gcc"
|
||
@@ -611,16 +617,17 @@
|
||
# Extract the first word of "cc", so it can be a program name with args.
|
||
set dummy cc; ac_word=$2
|
||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||
-echo "configure:615: checking for $ac_word" >&5
|
||
+echo "configure:621: checking for $ac_word" >&5
|
||
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
|
||
echo $ac_n "(cached) $ac_c" 1>&6
|
||
else
|
||
if test -n "$CC"; then
|
||
ac_cv_prog_CC="$CC" # Let the user override the test.
|
||
else
|
||
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
|
||
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
|
||
ac_prog_rejected=no
|
||
- for ac_dir in $PATH; do
|
||
+ ac_dummy="$PATH"
|
||
+ for ac_dir in $ac_dummy; do
|
||
test -z "$ac_dir" && ac_dir=.
|
||
if test -f $ac_dir/$ac_word; then
|
||
if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
|
||
@@ -655,25 +662,61 @@
|
||
echo "$ac_t""no" 1>&6
|
||
fi
|
||
|
||
+ if test -z "$CC"; then
|
||
+ case "`uname -s`" in
|
||
+ *win32* | *WIN32*)
|
||
+ # Extract the first word of "cl", so it can be a program name with args.
|
||
+set dummy cl; ac_word=$2
|
||
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||
+echo "configure:672: checking for $ac_word" >&5
|
||
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
|
||
+ echo $ac_n "(cached) $ac_c" 1>&6
|
||
+else
|
||
+ if test -n "$CC"; then
|
||
+ ac_cv_prog_CC="$CC" # Let the user override the test.
|
||
+else
|
||
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
|
||
+ ac_dummy="$PATH"
|
||
+ for ac_dir in $ac_dummy; do
|
||
+ test -z "$ac_dir" && ac_dir=.
|
||
+ if test -f $ac_dir/$ac_word; then
|
||
+ ac_cv_prog_CC="cl"
|
||
+ break
|
||
+ fi
|
||
+ done
|
||
+ IFS="$ac_save_ifs"
|
||
+fi
|
||
+fi
|
||
+CC="$ac_cv_prog_CC"
|
||
+if test -n "$CC"; then
|
||
+ echo "$ac_t""$CC" 1>&6
|
||
+else
|
||
+ echo "$ac_t""no" 1>&6
|
||
+fi
|
||
+ ;;
|
||
+ esac
|
||
+ fi
|
||
test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
|
||
fi
|
||
|
||
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
|
||
-echo "configure:663: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
|
||
+echo "configure:704: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
|
||
|
||
ac_ext=c
|
||
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
|
||
ac_cpp='$CPP $CPPFLAGS'
|
||
ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
|
||
-ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
|
||
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
|
||
cross_compiling=$ac_cv_prog_cc_cross
|
||
|
||
-cat > conftest.$ac_ext <<EOF
|
||
-#line 673 "configure"
|
||
+cat > conftest.$ac_ext << EOF
|
||
+
|
||
+#line 715 "configure"
|
||
#include "confdefs.h"
|
||
+
|
||
main(){return(0);}
|
||
EOF
|
||
-if { (eval echo configure:677: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||
+if { (eval echo configure:720: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||
ac_cv_prog_cc_works=yes
|
||
# If we can't run a trivial program, we are probably using a cross compiler.
|
||
if (./conftest; exit) 2>/dev/null; then
|
||
@@ -687,18 +730,24 @@
|
||
ac_cv_prog_cc_works=no
|
||
fi
|
||
rm -fr conftest*
|
||
+ac_ext=c
|
||
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
|
||
+ac_cpp='$CPP $CPPFLAGS'
|
||
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
|
||
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
|
||
+cross_compiling=$ac_cv_prog_cc_cross
|
||
|
||
echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
|
||
if test $ac_cv_prog_cc_works = no; then
|
||
{ echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
|
||
fi
|
||
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
|
||
-echo "configure:697: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
|
||
+echo "configure:746: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
|
||
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
|
||
cross_compiling=$ac_cv_prog_cc_cross
|
||
|
||
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
|
||
-echo "configure:702: checking whether we are using GNU C" >&5
|
||
+echo "configure:751: checking whether we are using GNU C" >&5
|
||
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
|
||
echo $ac_n "(cached) $ac_c" 1>&6
|
||
else
|
||
@@ -707,7 +756,7 @@
|
||
yes;
|
||
#endif
|
||
EOF
|
||
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:711: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
|
||
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:760: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
|
||
ac_cv_prog_gcc=yes
|
||
else
|
||
ac_cv_prog_gcc=no
|
||
@@ -718,11 +767,15 @@
|
||
|
||
if test $ac_cv_prog_gcc = yes; then
|
||
GCC=yes
|
||
- ac_test_CFLAGS="${CFLAGS+set}"
|
||
- ac_save_CFLAGS="$CFLAGS"
|
||
- CFLAGS=
|
||
- echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
|
||
-echo "configure:726: checking whether ${CC-cc} accepts -g" >&5
|
||
+else
|
||
+ GCC=
|
||
+fi
|
||
+
|
||
+ac_test_CFLAGS="${CFLAGS+set}"
|
||
+ac_save_CFLAGS="$CFLAGS"
|
||
+CFLAGS=
|
||
+echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
|
||
+echo "configure:779: checking whether ${CC-cc} accepts -g" >&5
|
||
if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
|
||
echo $ac_n "(cached) $ac_c" 1>&6
|
||
else
|
||
@@ -737,32 +790,37 @@
|
||
fi
|
||
|
||
echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
|
||
- if test "$ac_test_CFLAGS" = set; then
|
||
- CFLAGS="$ac_save_CFLAGS"
|
||
- elif test $ac_cv_prog_cc_g = yes; then
|
||
+if test "$ac_test_CFLAGS" = set; then
|
||
+ CFLAGS="$ac_save_CFLAGS"
|
||
+elif test $ac_cv_prog_cc_g = yes; then
|
||
+ if test "$GCC" = yes; then
|
||
CFLAGS="-g -O2"
|
||
else
|
||
- CFLAGS="-O2"
|
||
+ CFLAGS="-g"
|
||
fi
|
||
else
|
||
- GCC=
|
||
- test "${CFLAGS+set}" = set || CFLAGS="-g"
|
||
+ if test "$GCC" = yes; then
|
||
+ CFLAGS="-O2"
|
||
+ else
|
||
+ CFLAGS=
|
||
+ fi
|
||
fi
|
||
|
||
-for ac_prog in $CCC c++ g++ gcc CC cxx cc++
|
||
+for ac_prog in $CCC c++ g++ gcc CC cxx cc++ cl
|
||
do
|
||
# Extract the first word of "$ac_prog", so it can be a program name with args.
|
||
set dummy $ac_prog; ac_word=$2
|
||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||
-echo "configure:758: checking for $ac_word" >&5
|
||
+echo "configure:815: checking for $ac_word" >&5
|
||
if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then
|
||
echo $ac_n "(cached) $ac_c" 1>&6
|
||
else
|
||
if test -n "$CXX"; then
|
||
ac_cv_prog_CXX="$CXX" # Let the user override the test.
|
||
else
|
||
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
|
||
- for ac_dir in $PATH; do
|
||
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
|
||
+ ac_dummy="$PATH"
|
||
+ for ac_dir in $ac_dummy; do
|
||
test -z "$ac_dir" && ac_dir=.
|
||
if test -f $ac_dir/$ac_word; then
|
||
ac_cv_prog_CXX="$ac_prog"
|
||
@@ -785,21 +843,23 @@
|
||
|
||
|
||
echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6
|
||
-echo "configure:789: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
|
||
+echo "configure:847: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
|
||
|
||
ac_ext=C
|
||
# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
|
||
ac_cpp='$CXXCPP $CPPFLAGS'
|
||
ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
|
||
-ac_link='${CXX-g++} -o conftest $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
|
||
+ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
|
||
cross_compiling=$ac_cv_prog_cxx_cross
|
||
|
||
-cat > conftest.$ac_ext <<EOF
|
||
-#line 799 "configure"
|
||
+cat > conftest.$ac_ext << EOF
|
||
+
|
||
+#line 858 "configure"
|
||
#include "confdefs.h"
|
||
-main(){return(0);}
|
||
+
|
||
+int main(){return(0);}
|
||
EOF
|
||
-if { (eval echo configure:803: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||
+if { (eval echo configure:863: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||
ac_cv_prog_cxx_works=yes
|
||
# If we can't run a trivial program, we are probably using a cross compiler.
|
||
if (./conftest; exit) 2>/dev/null; then
|
||
@@ -817,7 +877,7 @@
|
||
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
|
||
ac_cpp='$CPP $CPPFLAGS'
|
||
ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
|
||
-ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
|
||
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
|
||
cross_compiling=$ac_cv_prog_cc_cross
|
||
|
||
echo "$ac_t""$ac_cv_prog_cxx_works" 1>&6
|
||
@@ -825,12 +885,12 @@
|
||
{ echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; }
|
||
fi
|
||
echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
|
||
-echo "configure:829: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
|
||
+echo "configure:889: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
|
||
echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6
|
||
cross_compiling=$ac_cv_prog_cxx_cross
|
||
|
||
echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6
|
||
-echo "configure:834: checking whether we are using GNU C++" >&5
|
||
+echo "configure:894: checking whether we are using GNU C++" >&5
|
||
if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then
|
||
echo $ac_n "(cached) $ac_c" 1>&6
|
||
else
|
||
@@ -839,7 +899,7 @@
|
||
yes;
|
||
#endif
|
||
EOF
|
||
-if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:843: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
|
||
+if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:903: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
|
||
ac_cv_prog_gxx=yes
|
||
else
|
||
ac_cv_prog_gxx=no
|
||
@@ -850,11 +910,15 @@
|
||
|
||
if test $ac_cv_prog_gxx = yes; then
|
||
GXX=yes
|
||
- ac_test_CXXFLAGS="${CXXFLAGS+set}"
|
||
- ac_save_CXXFLAGS="$CXXFLAGS"
|
||
- CXXFLAGS=
|
||
- echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6
|
||
-echo "configure:858: checking whether ${CXX-g++} accepts -g" >&5
|
||
+else
|
||
+ GXX=
|
||
+fi
|
||
+
|
||
+ac_test_CXXFLAGS="${CXXFLAGS+set}"
|
||
+ac_save_CXXFLAGS="$CXXFLAGS"
|
||
+CXXFLAGS=
|
||
+echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6
|
||
+echo "configure:922: checking whether ${CXX-g++} accepts -g" >&5
|
||
if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then
|
||
echo $ac_n "(cached) $ac_c" 1>&6
|
||
else
|
||
@@ -869,20 +933,24 @@
|
||
fi
|
||
|
||
echo "$ac_t""$ac_cv_prog_cxx_g" 1>&6
|
||
- if test "$ac_test_CXXFLAGS" = set; then
|
||
- CXXFLAGS="$ac_save_CXXFLAGS"
|
||
- elif test $ac_cv_prog_cxx_g = yes; then
|
||
+if test "$ac_test_CXXFLAGS" = set; then
|
||
+ CXXFLAGS="$ac_save_CXXFLAGS"
|
||
+elif test $ac_cv_prog_cxx_g = yes; then
|
||
+ if test "$GXX" = yes; then
|
||
CXXFLAGS="-g -O2"
|
||
else
|
||
- CXXFLAGS="-O2"
|
||
+ CXXFLAGS="-g"
|
||
fi
|
||
else
|
||
- GXX=
|
||
- test "${CXXFLAGS+set}" = set || CXXFLAGS="-g"
|
||
+ if test "$GXX" = yes; then
|
||
+ CXXFLAGS="-O2"
|
||
+ else
|
||
+ CXXFLAGS=
|
||
+ fi
|
||
fi
|
||
|
||
echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
|
||
-echo "configure:886: checking whether ${MAKE-make} sets \${MAKE}" >&5
|
||
+echo "configure:954: checking whether ${MAKE-make} sets \${MAKE}" >&5
|
||
set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
|
||
if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
|
||
echo $ac_n "(cached) $ac_c" 1>&6
|
||
@@ -911,15 +979,16 @@
|
||
# Extract the first word of "ranlib", so it can be a program name with args.
|
||
set dummy ranlib; ac_word=$2
|
||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||
-echo "configure:915: checking for $ac_word" >&5
|
||
+echo "configure:983: checking for $ac_word" >&5
|
||
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
|
||
echo $ac_n "(cached) $ac_c" 1>&6
|
||
else
|
||
if test -n "$RANLIB"; then
|
||
ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
|
||
else
|
||
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
|
||
- for ac_dir in $PATH; do
|
||
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
|
||
+ ac_dummy="$PATH"
|
||
+ for ac_dir in $ac_dummy; do
|
||
test -z "$ac_dir" && ac_dir=.
|
||
if test -f $ac_dir/$ac_word; then
|
||
ac_cv_prog_RANLIB="ranlib"
|
||
@@ -939,7 +1008,7 @@
|
||
|
||
|
||
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
|
||
-echo "configure:943: checking how to run the C preprocessor" >&5
|
||
+echo "configure:1012: checking how to run the C preprocessor" >&5
|
||
# On Suns, sometimes $CPP names a directory.
|
||
if test -n "$CPP" && test -d "$CPP"; then
|
||
CPP=
|
||
@@ -954,14 +1023,14 @@
|
||
# On the NeXT, cc -E runs the code through the compiler's parser,
|
||
# not just through cpp.
|
||
cat > conftest.$ac_ext <<EOF
|
||
-#line 958 "configure"
|
||
+#line 1027 "configure"
|
||
#include "confdefs.h"
|
||
#include <assert.h>
|
||
Syntax Error
|
||
EOF
|
||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
||
-{ (eval echo configure:964: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||
-ac_err=`grep -v '^ *+' conftest.out`
|
||
+{ (eval echo configure:1033: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
|
||
if test -z "$ac_err"; then
|
||
:
|
||
else
|
||
@@ -971,14 +1040,31 @@
|
||
rm -rf conftest*
|
||
CPP="${CC-cc} -E -traditional-cpp"
|
||
cat > conftest.$ac_ext <<EOF
|
||
-#line 975 "configure"
|
||
+#line 1044 "configure"
|
||
#include "confdefs.h"
|
||
#include <assert.h>
|
||
Syntax Error
|
||
EOF
|
||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
||
-{ (eval echo configure:981: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||
-ac_err=`grep -v '^ *+' conftest.out`
|
||
+{ (eval echo configure:1050: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
|
||
+if test -z "$ac_err"; then
|
||
+ :
|
||
+else
|
||
+ echo "$ac_err" >&5
|
||
+ echo "configure: failed program was:" >&5
|
||
+ cat conftest.$ac_ext >&5
|
||
+ rm -rf conftest*
|
||
+ CPP="${CC-cc} -nologo -E"
|
||
+ cat > conftest.$ac_ext <<EOF
|
||
+#line 1061 "configure"
|
||
+#include "confdefs.h"
|
||
+#include <assert.h>
|
||
+Syntax Error
|
||
+EOF
|
||
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
||
+{ (eval echo configure:1067: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
|
||
if test -z "$ac_err"; then
|
||
:
|
||
else
|
||
@@ -991,6 +1077,8 @@
|
||
rm -f conftest*
|
||
fi
|
||
rm -f conftest*
|
||
+fi
|
||
+rm -f conftest*
|
||
ac_cv_prog_CPP="$CPP"
|
||
fi
|
||
CPP="$ac_cv_prog_CPP"
|
||
@@ -1004,7 +1092,7 @@
|
||
# Uses ac_ vars as temps to allow command line to override cache and checks.
|
||
# --without-x overrides everything else, but does not touch the cache.
|
||
echo $ac_n "checking for X""... $ac_c" 1>&6
|
||
-echo "configure:1008: checking for X" >&5
|
||
+echo "configure:1096: checking for X" >&5
|
||
|
||
# Check whether --with-x or --without-x was given.
|
||
if test "${with_x+set}" = set; then
|
||
@@ -1066,13 +1154,13 @@
|
||
|
||
# First, try using that file with no special directory specified.
|
||
cat > conftest.$ac_ext <<EOF
|
||
-#line 1070 "configure"
|
||
+#line 1158 "configure"
|
||
#include "confdefs.h"
|
||
#include <$x_direct_test_include>
|
||
EOF
|
||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
||
-{ (eval echo configure:1075: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||
-ac_err=`grep -v '^ *+' conftest.out`
|
||
+{ (eval echo configure:1163: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
|
||
if test -z "$ac_err"; then
|
||
rm -rf conftest*
|
||
# We can compile using X headers with no special include directory.
|
||
@@ -1140,14 +1228,14 @@
|
||
ac_save_LIBS="$LIBS"
|
||
LIBS="-l$x_direct_test_library $LIBS"
|
||
cat > conftest.$ac_ext <<EOF
|
||
-#line 1144 "configure"
|
||
+#line 1232 "configure"
|
||
#include "confdefs.h"
|
||
|
||
int main() {
|
||
${x_direct_test_function}()
|
||
; return 0; }
|
||
EOF
|
||
-if { (eval echo configure:1151: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||
+if { (eval echo configure:1239: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||
rm -rf conftest*
|
||
LIBS="$ac_save_LIBS"
|
||
# We can link X programs with no special library path.
|
||
@@ -1253,17 +1341,17 @@
|
||
case "`(uname -sr) 2>/dev/null`" in
|
||
"SunOS 5"*)
|
||
echo $ac_n "checking whether -R must be followed by a space""... $ac_c" 1>&6
|
||
-echo "configure:1257: checking whether -R must be followed by a space" >&5
|
||
+echo "configure:1345: checking whether -R must be followed by a space" >&5
|
||
ac_xsave_LIBS="$LIBS"; LIBS="$LIBS -R$x_libraries"
|
||
cat > conftest.$ac_ext <<EOF
|
||
-#line 1260 "configure"
|
||
+#line 1348 "configure"
|
||
#include "confdefs.h"
|
||
|
||
int main() {
|
||
|
||
; return 0; }
|
||
EOF
|
||
-if { (eval echo configure:1267: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||
+if { (eval echo configure:1355: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||
rm -rf conftest*
|
||
ac_R_nospace=yes
|
||
else
|
||
@@ -1279,14 +1367,14 @@
|
||
else
|
||
LIBS="$ac_xsave_LIBS -R $x_libraries"
|
||
cat > conftest.$ac_ext <<EOF
|
||
-#line 1283 "configure"
|
||
+#line 1371 "configure"
|
||
#include "confdefs.h"
|
||
|
||
int main() {
|
||
|
||
; return 0; }
|
||
EOF
|
||
-if { (eval echo configure:1290: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||
+if { (eval echo configure:1378: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||
rm -rf conftest*
|
||
ac_R_space=yes
|
||
else
|
||
@@ -1318,7 +1406,7 @@
|
||
# libraries were built with DECnet support. And karl@cs.umb.edu says
|
||
# the Alpha needs dnet_stub (dnet does not exist).
|
||
echo $ac_n "checking for dnet_ntoa in -ldnet""... $ac_c" 1>&6
|
||
-echo "configure:1322: checking for dnet_ntoa in -ldnet" >&5
|
||
+echo "configure:1410: checking for dnet_ntoa in -ldnet" >&5
|
||
ac_lib_var=`echo dnet'_'dnet_ntoa | sed 'y%./+-%__p_%'`
|
||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
||
echo $ac_n "(cached) $ac_c" 1>&6
|
||
@@ -1326,7 +1414,7 @@
|
||
ac_save_LIBS="$LIBS"
|
||
LIBS="-ldnet $LIBS"
|
||
cat > conftest.$ac_ext <<EOF
|
||
-#line 1330 "configure"
|
||
+#line 1418 "configure"
|
||
#include "confdefs.h"
|
||
/* Override any gcc2 internal prototype to avoid an error. */
|
||
/* We use char because int might match the return type of a gcc2
|
||
@@ -1337,7 +1425,7 @@
|
||
dnet_ntoa()
|
||
; return 0; }
|
||
EOF
|
||
-if { (eval echo configure:1341: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||
+if { (eval echo configure:1429: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||
rm -rf conftest*
|
||
eval "ac_cv_lib_$ac_lib_var=yes"
|
||
else
|
||
@@ -1359,7 +1447,7 @@
|
||
|
||
if test $ac_cv_lib_dnet_dnet_ntoa = no; then
|
||
echo $ac_n "checking for dnet_ntoa in -ldnet_stub""... $ac_c" 1>&6
|
||
-echo "configure:1363: checking for dnet_ntoa in -ldnet_stub" >&5
|
||
+echo "configure:1451: checking for dnet_ntoa in -ldnet_stub" >&5
|
||
ac_lib_var=`echo dnet_stub'_'dnet_ntoa | sed 'y%./+-%__p_%'`
|
||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
||
echo $ac_n "(cached) $ac_c" 1>&6
|
||
@@ -1367,7 +1455,7 @@
|
||
ac_save_LIBS="$LIBS"
|
||
LIBS="-ldnet_stub $LIBS"
|
||
cat > conftest.$ac_ext <<EOF
|
||
-#line 1371 "configure"
|
||
+#line 1459 "configure"
|
||
#include "confdefs.h"
|
||
/* Override any gcc2 internal prototype to avoid an error. */
|
||
/* We use char because int might match the return type of a gcc2
|
||
@@ -1378,7 +1466,7 @@
|
||
dnet_ntoa()
|
||
; return 0; }
|
||
EOF
|
||
-if { (eval echo configure:1382: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||
+if { (eval echo configure:1470: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||
rm -rf conftest*
|
||
eval "ac_cv_lib_$ac_lib_var=yes"
|
||
else
|
||
@@ -1407,12 +1495,12 @@
|
||
# The nsl library prevents programs from opening the X display
|
||
# on Irix 5.2, according to dickey@clark.net.
|
||
echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6
|
||
-echo "configure:1411: checking for gethostbyname" >&5
|
||
+echo "configure:1499: checking for gethostbyname" >&5
|
||
if eval "test \"`echo '$''{'ac_cv_func_gethostbyname'+set}'`\" = set"; then
|
||
echo $ac_n "(cached) $ac_c" 1>&6
|
||
else
|
||
cat > conftest.$ac_ext <<EOF
|
||
-#line 1416 "configure"
|
||
+#line 1504 "configure"
|
||
#include "confdefs.h"
|
||
/* System header to define __stub macros and hopefully few prototypes,
|
||
which can conflict with char gethostbyname(); below. */
|
||
@@ -1435,7 +1523,7 @@
|
||
|
||
; return 0; }
|
||
EOF
|
||
-if { (eval echo configure:1439: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||
+if { (eval echo configure:1527: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||
rm -rf conftest*
|
||
eval "ac_cv_func_gethostbyname=yes"
|
||
else
|
||
@@ -1456,7 +1544,7 @@
|
||
|
||
if test $ac_cv_func_gethostbyname = no; then
|
||
echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
|
||
-echo "configure:1460: checking for gethostbyname in -lnsl" >&5
|
||
+echo "configure:1548: checking for gethostbyname in -lnsl" >&5
|
||
ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'`
|
||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
||
echo $ac_n "(cached) $ac_c" 1>&6
|
||
@@ -1464,7 +1552,7 @@
|
||
ac_save_LIBS="$LIBS"
|
||
LIBS="-lnsl $LIBS"
|
||
cat > conftest.$ac_ext <<EOF
|
||
-#line 1468 "configure"
|
||
+#line 1556 "configure"
|
||
#include "confdefs.h"
|
||
/* Override any gcc2 internal prototype to avoid an error. */
|
||
/* We use char because int might match the return type of a gcc2
|
||
@@ -1475,7 +1563,7 @@
|
||
gethostbyname()
|
||
; return 0; }
|
||
EOF
|
||
-if { (eval echo configure:1479: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||
+if { (eval echo configure:1567: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||
rm -rf conftest*
|
||
eval "ac_cv_lib_$ac_lib_var=yes"
|
||
else
|
||
@@ -1505,12 +1593,12 @@
|
||
# -lsocket must be given before -lnsl if both are needed.
|
||
# We assume that if connect needs -lnsl, so does gethostbyname.
|
||
echo $ac_n "checking for connect""... $ac_c" 1>&6
|
||
-echo "configure:1509: checking for connect" >&5
|
||
+echo "configure:1597: checking for connect" >&5
|
||
if eval "test \"`echo '$''{'ac_cv_func_connect'+set}'`\" = set"; then
|
||
echo $ac_n "(cached) $ac_c" 1>&6
|
||
else
|
||
cat > conftest.$ac_ext <<EOF
|
||
-#line 1514 "configure"
|
||
+#line 1602 "configure"
|
||
#include "confdefs.h"
|
||
/* System header to define __stub macros and hopefully few prototypes,
|
||
which can conflict with char connect(); below. */
|
||
@@ -1533,7 +1621,7 @@
|
||
|
||
; return 0; }
|
||
EOF
|
||
-if { (eval echo configure:1537: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||
+if { (eval echo configure:1625: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||
rm -rf conftest*
|
||
eval "ac_cv_func_connect=yes"
|
||
else
|
||
@@ -1554,7 +1642,7 @@
|
||
|
||
if test $ac_cv_func_connect = no; then
|
||
echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6
|
||
-echo "configure:1558: checking for connect in -lsocket" >&5
|
||
+echo "configure:1646: checking for connect in -lsocket" >&5
|
||
ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'`
|
||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
||
echo $ac_n "(cached) $ac_c" 1>&6
|
||
@@ -1562,7 +1650,7 @@
|
||
ac_save_LIBS="$LIBS"
|
||
LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
|
||
cat > conftest.$ac_ext <<EOF
|
||
-#line 1566 "configure"
|
||
+#line 1654 "configure"
|
||
#include "confdefs.h"
|
||
/* Override any gcc2 internal prototype to avoid an error. */
|
||
/* We use char because int might match the return type of a gcc2
|
||
@@ -1573,7 +1661,7 @@
|
||
connect()
|
||
; return 0; }
|
||
EOF
|
||
-if { (eval echo configure:1577: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||
+if { (eval echo configure:1665: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||
rm -rf conftest*
|
||
eval "ac_cv_lib_$ac_lib_var=yes"
|
||
else
|
||
@@ -1597,12 +1685,12 @@
|
||
|
||
# gomez@mi.uni-erlangen.de says -lposix is necessary on A/UX.
|
||
echo $ac_n "checking for remove""... $ac_c" 1>&6
|
||
-echo "configure:1601: checking for remove" >&5
|
||
+echo "configure:1689: checking for remove" >&5
|
||
if eval "test \"`echo '$''{'ac_cv_func_remove'+set}'`\" = set"; then
|
||
echo $ac_n "(cached) $ac_c" 1>&6
|
||
else
|
||
cat > conftest.$ac_ext <<EOF
|
||
-#line 1606 "configure"
|
||
+#line 1694 "configure"
|
||
#include "confdefs.h"
|
||
/* System header to define __stub macros and hopefully few prototypes,
|
||
which can conflict with char remove(); below. */
|
||
@@ -1625,7 +1713,7 @@
|
||
|
||
; return 0; }
|
||
EOF
|
||
-if { (eval echo configure:1629: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||
+if { (eval echo configure:1717: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||
rm -rf conftest*
|
||
eval "ac_cv_func_remove=yes"
|
||
else
|
||
@@ -1646,7 +1734,7 @@
|
||
|
||
if test $ac_cv_func_remove = no; then
|
||
echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6
|
||
-echo "configure:1650: checking for remove in -lposix" >&5
|
||
+echo "configure:1738: checking for remove in -lposix" >&5
|
||
ac_lib_var=`echo posix'_'remove | sed 'y%./+-%__p_%'`
|
||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
||
echo $ac_n "(cached) $ac_c" 1>&6
|
||
@@ -1654,7 +1742,7 @@
|
||
ac_save_LIBS="$LIBS"
|
||
LIBS="-lposix $LIBS"
|
||
cat > conftest.$ac_ext <<EOF
|
||
-#line 1658 "configure"
|
||
+#line 1746 "configure"
|
||
#include "confdefs.h"
|
||
/* Override any gcc2 internal prototype to avoid an error. */
|
||
/* We use char because int might match the return type of a gcc2
|
||
@@ -1665,7 +1753,7 @@
|
||
remove()
|
||
; return 0; }
|
||
EOF
|
||
-if { (eval echo configure:1669: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||
+if { (eval echo configure:1757: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||
rm -rf conftest*
|
||
eval "ac_cv_lib_$ac_lib_var=yes"
|
||
else
|
||
@@ -1689,12 +1777,12 @@
|
||
|
||
# BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
|
||
echo $ac_n "checking for shmat""... $ac_c" 1>&6
|
||
-echo "configure:1693: checking for shmat" >&5
|
||
+echo "configure:1781: checking for shmat" >&5
|
||
if eval "test \"`echo '$''{'ac_cv_func_shmat'+set}'`\" = set"; then
|
||
echo $ac_n "(cached) $ac_c" 1>&6
|
||
else
|
||
cat > conftest.$ac_ext <<EOF
|
||
-#line 1698 "configure"
|
||
+#line 1786 "configure"
|
||
#include "confdefs.h"
|
||
/* System header to define __stub macros and hopefully few prototypes,
|
||
which can conflict with char shmat(); below. */
|
||
@@ -1717,7 +1805,7 @@
|
||
|
||
; return 0; }
|
||
EOF
|
||
-if { (eval echo configure:1721: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||
+if { (eval echo configure:1809: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||
rm -rf conftest*
|
||
eval "ac_cv_func_shmat=yes"
|
||
else
|
||
@@ -1738,7 +1826,7 @@
|
||
|
||
if test $ac_cv_func_shmat = no; then
|
||
echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6
|
||
-echo "configure:1742: checking for shmat in -lipc" >&5
|
||
+echo "configure:1830: checking for shmat in -lipc" >&5
|
||
ac_lib_var=`echo ipc'_'shmat | sed 'y%./+-%__p_%'`
|
||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
||
echo $ac_n "(cached) $ac_c" 1>&6
|
||
@@ -1746,7 +1834,7 @@
|
||
ac_save_LIBS="$LIBS"
|
||
LIBS="-lipc $LIBS"
|
||
cat > conftest.$ac_ext <<EOF
|
||
-#line 1750 "configure"
|
||
+#line 1838 "configure"
|
||
#include "confdefs.h"
|
||
/* Override any gcc2 internal prototype to avoid an error. */
|
||
/* We use char because int might match the return type of a gcc2
|
||
@@ -1757,7 +1845,7 @@
|
||
shmat()
|
||
; return 0; }
|
||
EOF
|
||
-if { (eval echo configure:1761: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||
+if { (eval echo configure:1849: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||
rm -rf conftest*
|
||
eval "ac_cv_lib_$ac_lib_var=yes"
|
||
else
|
||
@@ -1790,15 +1878,15 @@
|
||
# libraries we check for below, so use a different variable.
|
||
# --interran@uluru.Stanford.EDU, kb@cs.umb.edu.
|
||
echo $ac_n "checking for IceConnectionNumber in -lICE""... $ac_c" 1>&6
|
||
-echo "configure:1794: checking for IceConnectionNumber in -lICE" >&5
|
||
+echo "configure:1882: checking for IceConnectionNumber in -lICE" >&5
|
||
ac_lib_var=`echo ICE'_'IceConnectionNumber | sed 'y%./+-%__p_%'`
|
||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
||
echo $ac_n "(cached) $ac_c" 1>&6
|
||
else
|
||
ac_save_LIBS="$LIBS"
|
||
-LIBS="-lICE $LIBS"
|
||
+LIBS="-lICE $X_EXTRA_LIBS $LIBS"
|
||
cat > conftest.$ac_ext <<EOF
|
||
-#line 1802 "configure"
|
||
+#line 1890 "configure"
|
||
#include "confdefs.h"
|
||
/* Override any gcc2 internal prototype to avoid an error. */
|
||
/* We use char because int might match the return type of a gcc2
|
||
@@ -1809,7 +1897,7 @@
|
||
IceConnectionNumber()
|
||
; return 0; }
|
||
EOF
|
||
-if { (eval echo configure:1813: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||
+if { (eval echo configure:1901: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||
rm -rf conftest*
|
||
eval "ac_cv_lib_$ac_lib_var=yes"
|
||
else
|
||
@@ -1835,14 +1923,14 @@
|
||
|
||
|
||
echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6
|
||
-echo "configure:1839: checking whether byte ordering is bigendian" >&5
|
||
+echo "configure:1927: checking whether byte ordering is bigendian" >&5
|
||
if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then
|
||
echo $ac_n "(cached) $ac_c" 1>&6
|
||
else
|
||
ac_cv_c_bigendian=unknown
|
||
# See if sys/param.h defines the BYTE_ORDER macro.
|
||
cat > conftest.$ac_ext <<EOF
|
||
-#line 1846 "configure"
|
||
+#line 1934 "configure"
|
||
#include "confdefs.h"
|
||
#include <sys/types.h>
|
||
#include <sys/param.h>
|
||
@@ -1853,11 +1941,11 @@
|
||
#endif
|
||
; return 0; }
|
||
EOF
|
||
-if { (eval echo configure:1857: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||
+if { (eval echo configure:1945: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||
rm -rf conftest*
|
||
# It does; now see whether it defined to BIG_ENDIAN or not.
|
||
cat > conftest.$ac_ext <<EOF
|
||
-#line 1861 "configure"
|
||
+#line 1949 "configure"
|
||
#include "confdefs.h"
|
||
#include <sys/types.h>
|
||
#include <sys/param.h>
|
||
@@ -1868,7 +1956,7 @@
|
||
#endif
|
||
; return 0; }
|
||
EOF
|
||
-if { (eval echo configure:1872: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||
+if { (eval echo configure:1960: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||
rm -rf conftest*
|
||
ac_cv_c_bigendian=yes
|
||
else
|
||
@@ -1888,7 +1976,7 @@
|
||
{ echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
|
||
else
|
||
cat > conftest.$ac_ext <<EOF
|
||
-#line 1892 "configure"
|
||
+#line 1980 "configure"
|
||
#include "confdefs.h"
|
||
main () {
|
||
/* Are we little or big endian? From Harbison&Steele. */
|
||
@@ -1901,7 +1989,7 @@
|
||
exit (u.c[sizeof (long) - 1] == 1);
|
||
}
|
||
EOF
|
||
-if { (eval echo configure:1905: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
|
||
+if { (eval echo configure:1993: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
|
||
then
|
||
ac_cv_c_bigendian=no
|
||
else
|
||
@@ -1925,21 +2013,21 @@
|
||
fi
|
||
|
||
echo $ac_n "checking for inline""... $ac_c" 1>&6
|
||
-echo "configure:1929: checking for inline" >&5
|
||
+echo "configure:2017: checking for inline" >&5
|
||
if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
|
||
echo $ac_n "(cached) $ac_c" 1>&6
|
||
else
|
||
ac_cv_c_inline=no
|
||
for ac_kw in inline __inline__ __inline; do
|
||
cat > conftest.$ac_ext <<EOF
|
||
-#line 1936 "configure"
|
||
+#line 2024 "configure"
|
||
#include "confdefs.h"
|
||
|
||
int main() {
|
||
} $ac_kw foo() {
|
||
; return 0; }
|
||
EOF
|
||
-if { (eval echo configure:1943: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||
+if { (eval echo configure:2031: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||
rm -rf conftest*
|
||
ac_cv_c_inline=$ac_kw; break
|
||
else
|
||
@@ -1965,7 +2053,7 @@
|
||
esac
|
||
|
||
echo $ac_n "checking size of unsigned char""... $ac_c" 1>&6
|
||
-echo "configure:1969: checking size of unsigned char" >&5
|
||
+echo "configure:2057: checking size of unsigned char" >&5
|
||
if eval "test \"`echo '$''{'ac_cv_sizeof_unsigned_char'+set}'`\" = set"; then
|
||
echo $ac_n "(cached) $ac_c" 1>&6
|
||
else
|
||
@@ -1973,7 +2061,7 @@
|
||
{ echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
|
||
else
|
||
cat > conftest.$ac_ext <<EOF
|
||
-#line 1977 "configure"
|
||
+#line 2065 "configure"
|
||
#include "confdefs.h"
|
||
#include <stdio.h>
|
||
main()
|
||
@@ -1984,7 +2072,7 @@
|
||
exit(0);
|
||
}
|
||
EOF
|
||
-if { (eval echo configure:1988: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
|
||
+if { (eval echo configure:2076: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
|
||
then
|
||
ac_cv_sizeof_unsigned_char=`cat conftestval`
|
||
else
|
||
@@ -2004,7 +2092,7 @@
|
||
|
||
|
||
echo $ac_n "checking size of unsigned short""... $ac_c" 1>&6
|
||
-echo "configure:2008: checking size of unsigned short" >&5
|
||
+echo "configure:2096: checking size of unsigned short" >&5
|
||
if eval "test \"`echo '$''{'ac_cv_sizeof_unsigned_short'+set}'`\" = set"; then
|
||
echo $ac_n "(cached) $ac_c" 1>&6
|
||
else
|
||
@@ -2012,7 +2100,7 @@
|
||
{ echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
|
||
else
|
||
cat > conftest.$ac_ext <<EOF
|
||
-#line 2016 "configure"
|
||
+#line 2104 "configure"
|
||
#include "confdefs.h"
|
||
#include <stdio.h>
|
||
main()
|
||
@@ -2023,7 +2111,7 @@
|
||
exit(0);
|
||
}
|
||
EOF
|
||
-if { (eval echo configure:2027: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
|
||
+if { (eval echo configure:2115: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
|
||
then
|
||
ac_cv_sizeof_unsigned_short=`cat conftestval`
|
||
else
|
||
@@ -2043,7 +2131,7 @@
|
||
|
||
|
||
echo $ac_n "checking size of unsigned int""... $ac_c" 1>&6
|
||
-echo "configure:2047: checking size of unsigned int" >&5
|
||
+echo "configure:2135: checking size of unsigned int" >&5
|
||
if eval "test \"`echo '$''{'ac_cv_sizeof_unsigned_int'+set}'`\" = set"; then
|
||
echo $ac_n "(cached) $ac_c" 1>&6
|
||
else
|
||
@@ -2051,7 +2139,7 @@
|
||
{ echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
|
||
else
|
||
cat > conftest.$ac_ext <<EOF
|
||
-#line 2055 "configure"
|
||
+#line 2143 "configure"
|
||
#include "confdefs.h"
|
||
#include <stdio.h>
|
||
main()
|
||
@@ -2062,7 +2150,7 @@
|
||
exit(0);
|
||
}
|
||
EOF
|
||
-if { (eval echo configure:2066: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
|
||
+if { (eval echo configure:2154: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
|
||
then
|
||
ac_cv_sizeof_unsigned_int=`cat conftestval`
|
||
else
|
||
@@ -2082,7 +2170,7 @@
|
||
|
||
|
||
echo $ac_n "checking size of unsigned long""... $ac_c" 1>&6
|
||
-echo "configure:2086: checking size of unsigned long" >&5
|
||
+echo "configure:2174: checking size of unsigned long" >&5
|
||
if eval "test \"`echo '$''{'ac_cv_sizeof_unsigned_long'+set}'`\" = set"; then
|
||
echo $ac_n "(cached) $ac_c" 1>&6
|
||
else
|
||
@@ -2090,7 +2178,7 @@
|
||
{ echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
|
||
else
|
||
cat > conftest.$ac_ext <<EOF
|
||
-#line 2094 "configure"
|
||
+#line 2182 "configure"
|
||
#include "confdefs.h"
|
||
#include <stdio.h>
|
||
main()
|
||
@@ -2101,7 +2189,7 @@
|
||
exit(0);
|
||
}
|
||
EOF
|
||
-if { (eval echo configure:2105: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
|
||
+if { (eval echo configure:2193: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
|
||
then
|
||
ac_cv_sizeof_unsigned_long=`cat conftestval`
|
||
else
|
||
@@ -2121,7 +2209,7 @@
|
||
|
||
|
||
echo $ac_n "checking size of unsigned long long""... $ac_c" 1>&6
|
||
-echo "configure:2125: checking size of unsigned long long" >&5
|
||
+echo "configure:2213: checking size of unsigned long long" >&5
|
||
if eval "test \"`echo '$''{'ac_cv_sizeof_unsigned_long_long'+set}'`\" = set"; then
|
||
echo $ac_n "(cached) $ac_c" 1>&6
|
||
else
|
||
@@ -2129,7 +2217,7 @@
|
||
{ echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
|
||
else
|
||
cat > conftest.$ac_ext <<EOF
|
||
-#line 2133 "configure"
|
||
+#line 2221 "configure"
|
||
#include "confdefs.h"
|
||
#include <stdio.h>
|
||
main()
|
||
@@ -2140,7 +2228,7 @@
|
||
exit(0);
|
||
}
|
||
EOF
|
||
-if { (eval echo configure:2144: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
|
||
+if { (eval echo configure:2232: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
|
||
then
|
||
ac_cv_sizeof_unsigned_long_long=`cat conftestval`
|
||
else
|
||
@@ -2162,12 +2250,12 @@
|
||
for ac_func in select
|
||
do
|
||
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
|
||
-echo "configure:2166: checking for $ac_func" >&5
|
||
+echo "configure:2254: checking for $ac_func" >&5
|
||
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
|
||
echo $ac_n "(cached) $ac_c" 1>&6
|
||
else
|
||
cat > conftest.$ac_ext <<EOF
|
||
-#line 2171 "configure"
|
||
+#line 2259 "configure"
|
||
#include "confdefs.h"
|
||
/* System header to define __stub macros and hopefully few prototypes,
|
||
which can conflict with char $ac_func(); below. */
|
||
@@ -2190,7 +2278,7 @@
|
||
|
||
; return 0; }
|
||
EOF
|
||
-if { (eval echo configure:2194: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||
+if { (eval echo configure:2282: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||
rm -rf conftest*
|
||
eval "ac_cv_func_$ac_func=yes"
|
||
else
|
||
@@ -2220,7 +2308,7 @@
|
||
|
||
|
||
echo $ac_n "checking for cpu level""... $ac_c" 1>&6
|
||
-echo "configure:2224: checking for cpu level" >&5
|
||
+echo "configure:2312: checking for cpu level" >&5
|
||
# Check whether --enable-cpu-level or --disable-cpu-level was given.
|
||
if test "${enable_cpu_level+set}" = set; then
|
||
enableval="$enable_cpu_level"
|
||
@@ -2281,9 +2369,30 @@
|
||
fi
|
||
|
||
|
||
+echo $ac_n "checking for 4mb superpages hack""... $ac_c" 1>&6
|
||
+echo "configure:2374: checking for 4mb superpages hack" >&5
|
||
+# Check whether --enable-superpages-hack or --disable-superpages-hack was given.
|
||
+if test "${enable_superpages_hack+set}" = set; then
|
||
+ enableval="$enable_superpages_hack"
|
||
+ if test "$enableval" = yes; then
|
||
+ echo "$ac_t""yes" 1>&6
|
||
+ cat >> confdefs.h <<\EOF
|
||
+#define SUPERPAGES_HACK 1
|
||
+EOF
|
||
+
|
||
+ else
|
||
+ echo "$ac_t""no" 1>&6
|
||
+ fi
|
||
+else
|
||
+
|
||
+ echo "$ac_t""no" 1>&6
|
||
+
|
||
+
|
||
+fi
|
||
+
|
||
|
||
echo $ac_n "checking for dynamic translation support""... $ac_c" 1>&6
|
||
-echo "configure:2287: checking for dynamic translation support" >&5
|
||
+echo "configure:2396: checking for dynamic translation support" >&5
|
||
# Check whether --enable-dynamic or --disable-dynamic was given.
|
||
if test "${enable_dynamic+set}" = set; then
|
||
enableval="$enable_dynamic"
|
||
@@ -2356,7 +2465,7 @@
|
||
|
||
|
||
echo $ac_n "checking for NE2000 support""... $ac_c" 1>&6
|
||
-echo "configure:2360: checking for NE2000 support" >&5
|
||
+echo "configure:2469: checking for NE2000 support" >&5
|
||
# Check whether --enable-ne2000 or --disable-ne2000 was given.
|
||
if test "${enable_ne2000+set}" = set; then
|
||
enableval="$enable_ne2000"
|
||
@@ -2391,7 +2500,7 @@
|
||
|
||
|
||
echo $ac_n "checking for i440FX PCI support""... $ac_c" 1>&6
|
||
-echo "configure:2395: checking for i440FX PCI support" >&5
|
||
+echo "configure:2504: checking for i440FX PCI support" >&5
|
||
# Check whether --enable-pci or --disable-pci was given.
|
||
if test "${enable_pci+set}" = set; then
|
||
enableval="$enable_pci"
|
||
@@ -2426,7 +2535,7 @@
|
||
|
||
|
||
echo $ac_n "checking for port e9 hack""... $ac_c" 1>&6
|
||
-echo "configure:2430: checking for port e9 hack" >&5
|
||
+echo "configure:2539: checking for port e9 hack" >&5
|
||
# Check whether --enable-port-e9-hack or --disable-port-e9-hack was given.
|
||
if test "${enable_port_e9_hack+set}" = set; then
|
||
enableval="$enable_port_e9_hack"
|
||
@@ -2457,7 +2566,7 @@
|
||
|
||
|
||
echo $ac_n "checking for use of .cpp as suffix""... $ac_c" 1>&6
|
||
-echo "configure:2461: checking for use of .cpp as suffix" >&5
|
||
+echo "configure:2570: checking for use of .cpp as suffix" >&5
|
||
# Check whether --enable-cpp or --disable-cpp was given.
|
||
if test "${enable_cpp+set}" = set; then
|
||
enableval="$enable_cpp"
|
||
@@ -2499,7 +2608,7 @@
|
||
|
||
|
||
echo $ac_n "checking for Bochs internal debugger support""... $ac_c" 1>&6
|
||
-echo "configure:2503: checking for Bochs internal debugger support" >&5
|
||
+echo "configure:2612: checking for Bochs internal debugger support" >&5
|
||
# Check whether --enable-debugger or --disable-debugger was given.
|
||
if test "${enable_debugger+set}" = set; then
|
||
enableval="$enable_debugger"
|
||
@@ -2533,7 +2642,7 @@
|
||
|
||
|
||
echo $ac_n "checking for disassembler support""... $ac_c" 1>&6
|
||
-echo "configure:2537: checking for disassembler support" >&5
|
||
+echo "configure:2646: checking for disassembler support" >&5
|
||
# Check whether --enable-disasm or --disable-disasm was given.
|
||
if test "${enable_disasm+set}" = set; then
|
||
enableval="$enable_disasm"
|
||
@@ -2567,7 +2676,7 @@
|
||
|
||
|
||
echo $ac_n "checking for loader support""... $ac_c" 1>&6
|
||
-echo "configure:2571: checking for loader support" >&5
|
||
+echo "configure:2680: checking for loader support" >&5
|
||
# Check whether --enable-loader or --disable-loader was given.
|
||
if test "${enable_loader+set}" = set; then
|
||
enableval="$enable_loader"
|
||
@@ -2605,7 +2714,7 @@
|
||
INSTRUMENT_DIR='instrument/stubs'
|
||
|
||
echo $ac_n "checking for instrumentation support""... $ac_c" 1>&6
|
||
-echo "configure:2609: checking for instrumentation support" >&5
|
||
+echo "configure:2718: checking for instrumentation support" >&5
|
||
# Check whether --enable-instrumentation or --disable-instrumentation was given.
|
||
if test "${enable_instrumentation+set}" = set; then
|
||
enableval="$enable_instrumentation"
|
||
@@ -2740,7 +2849,7 @@
|
||
|
||
|
||
echo $ac_n "checking for VGA emulation""... $ac_c" 1>&6
|
||
-echo "configure:2744: checking for VGA emulation" >&5
|
||
+echo "configure:2853: checking for VGA emulation" >&5
|
||
# Check whether --enable-vga or --disable-vga was given.
|
||
if test "${enable_vga+set}" = set; then
|
||
enableval="$enable_vga"
|
||
@@ -2774,7 +2883,7 @@
|
||
|
||
|
||
echo $ac_n "checking for FPU emulation""... $ac_c" 1>&6
|
||
-echo "configure:2778: checking for FPU emulation" >&5
|
||
+echo "configure:2887: checking for FPU emulation" >&5
|
||
FPU_VAR=''
|
||
FPU_GLUE_OBJ=''
|
||
# Check whether --enable-fpu or --disable-fpu was given.
|
||
@@ -2816,7 +2925,7 @@
|
||
|
||
|
||
echo $ac_n "checking for x86 debugger support""... $ac_c" 1>&6
|
||
-echo "configure:2820: checking for x86 debugger support" >&5
|
||
+echo "configure:2929: checking for x86 debugger support" >&5
|
||
# Check whether --enable-x86-debugger or --disable-x86-debugger was given.
|
||
if test "${enable_x86_debugger+set}" = set; then
|
||
enableval="$enable_x86_debugger"
|
||
@@ -2852,7 +2961,7 @@
|
||
|
||
|
||
echo $ac_n "checking for CDROM support""... $ac_c" 1>&6
|
||
-echo "configure:2856: checking for CDROM support" >&5
|
||
+echo "configure:2965: checking for CDROM support" >&5
|
||
# Check whether --enable-cdrom or --disable-cdrom was given.
|
||
if test "${enable_cdrom+set}" = set; then
|
||
enableval="$enable_cdrom"
|
||
@@ -2894,7 +3003,7 @@
|
||
|
||
|
||
echo $ac_n "checking for Sound Blaster 16 support""... $ac_c" 1>&6
|
||
-echo "configure:2898: checking for Sound Blaster 16 support" >&5
|
||
+echo "configure:3007: checking for Sound Blaster 16 support" >&5
|
||
# Check whether --enable-sb16 or --disable-sb16 was given.
|
||
if test "${enable_sb16+set}" = set; then
|
||
enableval="$enable_sb16"
|
||
@@ -3188,7 +3297,7 @@
|
||
# Ultrix sh set writes to stderr and can't be redirected directly,
|
||
# and sets the high bit in the cache file unless we assign to the vars.
|
||
(set) 2>&1 |
|
||
- case `(ac_space=' '; set) 2>&1` in
|
||
+ case `(ac_space=' '; set | grep ac_space) 2>&1` in
|
||
*ac_space=\ *)
|
||
# `set' does not quote correctly, so add quotes (double-quote substitution
|
||
# turns \\\\ into \\, and sed turns \\ into \).
|
||
@@ -3255,7 +3364,7 @@
|
||
echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
|
||
exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
|
||
-version | --version | --versio | --versi | --vers | --ver | --ve | --v)
|
||
- echo "$CONFIG_STATUS generated by autoconf version 2.12"
|
||
+ echo "$CONFIG_STATUS generated by autoconf version 2.13"
|
||
exit 0 ;;
|
||
-help | --help | --hel | --he | --h)
|
||
echo "\$ac_cs_usage"; exit 0 ;;
|
||
@@ -3277,9 +3386,11 @@
|
||
s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
|
||
$ac_vpsub
|
||
$extrasub
|
||
+s%@SHELL@%$SHELL%g
|
||
s%@CFLAGS@%$CFLAGS%g
|
||
s%@CPPFLAGS@%$CPPFLAGS%g
|
||
s%@CXXFLAGS@%$CXXFLAGS%g
|
||
+s%@FFLAGS@%$FFLAGS%g
|
||
s%@DEFS@%$DEFS%g
|
||
s%@LDFLAGS@%$LDFLAGS%g
|
||
s%@LIBS@%$LIBS%g
|
||
diff -Naur bochs-2000_0325a.orig/configure.in bochs-2000_0325a/configure.in
|
||
--- bochs-2000_0325a.orig/configure.in Tue Jan 4 20:15:25 2000
|
||
+++ bochs-2000_0325a/configure.in Wed Oct 18 13:22:37 2000
|
||
@@ -57,6 +57,19 @@
|
||
]
|
||
)
|
||
|
||
+AC_MSG_CHECKING(for 4mb superpages hack)
|
||
+AC_ARG_ENABLE(superpages-hack,
|
||
+ [ --enable-superpages-hack enable 4mb superpages hack],
|
||
+ [if test "$enableval" = yes; then
|
||
+ AC_MSG_RESULT(yes)
|
||
+ AC_DEFINE(SUPERPAGES_HACK, 1)
|
||
+ else
|
||
+ AC_MSG_RESULT(no)
|
||
+ fi],
|
||
+ [
|
||
+ AC_MSG_RESULT(no)
|
||
+ ]
|
||
+ )
|
||
|
||
AC_MSG_CHECKING(for dynamic translation support)
|
||
AC_ARG_ENABLE(dynamic,
|
||
diff -Naur bochs-2000_0325a.orig/cpu/cpu.cc bochs-2000_0325a/cpu/cpu.cc
|
||
--- bochs-2000_0325a.orig/cpu/cpu.cc Sun Mar 26 05:39:07 2000
|
||
+++ bochs-2000_0325a/cpu/cpu.cc Wed Oct 18 15:34:14 2000
|
||
@@ -25,6 +25,8 @@
|
||
|
||
#include "bochs.h"
|
||
|
||
+// To add support for superpages:
|
||
+// #define SUPERPAGES_HACK 1
|
||
|
||
//unsigned counter[2] = { 0, 0 };
|
||
|
||
@@ -479,7 +481,11 @@
|
||
//
|
||
// * physical memory boundary: 1024k (1Megabyte) (increments of...)
|
||
// * A20 boundary: 1024k (1Megabyte)
|
||
+#if SUPERPAGES_HACK
|
||
+// * page boundary: 4k or 4M
|
||
+#else
|
||
// * page boundary: 4k
|
||
+#endif // SUPERPAGES_HACK
|
||
// * ROM boundary: 2k (dont care since we are only reading)
|
||
// * segment boundary: any
|
||
|
||
@@ -493,12 +499,41 @@
|
||
Bit32u new_linear_addr;
|
||
Bit32u new_phy_addr;
|
||
Bit32u temp_eip, temp_limit;
|
||
+#if SUPERPAGES_HACK
|
||
+ Bit32u pde;
|
||
+ int maxsize;
|
||
+ Bit32u offsetmask, framemask;
|
||
+#endif // SUPERPAGES_HACK
|
||
|
||
temp_eip = BX_CPU_THIS_PTR eip;
|
||
temp_limit = BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].cache.u.segment.limit_scaled;
|
||
|
||
new_linear_addr = BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].cache.u.segment.base + temp_eip;
|
||
+
|
||
+#if SUPERPAGES_HACK
|
||
+ // a page can be 4k or 4M, depending on the contents of PSE (bit 4 CR4)
|
||
+ // and PDE.PS flag.
|
||
+ // Especially the PDE.PS check will slow everything down, be we don't
|
||
+ // have a chance anyway...
|
||
+ if (BX_CPU_THIS_PTR cr4 & 0x00000010) {
|
||
+ BX_MEM.read_physical((BX_CPU_THIS_PTR cr3 & 0xfffff000) |
|
||
+ (new_linear_addr & 0xffc00000) >> 20,
|
||
+ 4,
|
||
+ &pde);
|
||
+ if (pde & 0x81) {
|
||
+ // pde is present and PS bit is 1: 4 MB pages
|
||
+ offsetmask = 0x003fffff;
|
||
+ framemask = 0xfff00000;
|
||
+ } else {
|
||
+ offsetmask = 0x00000fff;
|
||
+ framemask = 0xfffff000;
|
||
+ }
|
||
+ }
|
||
+ BX_CPU_THIS_PTR prev_linear_page = new_linear_addr & framemask;
|
||
+#else
|
||
BX_CPU_THIS_PTR prev_linear_page = new_linear_addr & 0xfffff000;
|
||
+#endif // SUPERPAGES_HACK
|
||
+
|
||
if (temp_eip > temp_limit) {
|
||
bx_panic("prefetch: EIP > CS.limit\n");
|
||
}
|
||
@@ -512,6 +547,9 @@
|
||
new_phy_addr = A20ADDR(new_linear_addr);
|
||
}
|
||
|
||
+#if SUPERPAGES_HACK
|
||
+#warning reviewme: is BX_MEM.len affected by superpages?
|
||
+#endif
|
||
if ( new_phy_addr >= BX_MEM.len ) {
|
||
// don't take this out if dynamic translation enabled,
|
||
// otherwise you must make a check to see if bytesleft is 0 after
|
||
@@ -519,9 +557,15 @@
|
||
bx_panic("prefetch: running in bogus memory\n");
|
||
}
|
||
|
||
+#if SUPERPAGES_HACK
|
||
+ // max physical address as confined by page boundary
|
||
+ BX_CPU_THIS_PTR prev_phy_page = new_phy_addr & framemask;
|
||
+ BX_CPU_THIS_PTR max_phy_addr = BX_CPU_THIS_PTR prev_phy_page | offsetmask;
|
||
+#else
|
||
// max physical address as confined by page boundary
|
||
BX_CPU_THIS_PTR prev_phy_page = new_phy_addr & 0xfffff000;
|
||
BX_CPU_THIS_PTR max_phy_addr = BX_CPU_THIS_PTR prev_phy_page | 0x00000fff;
|
||
+#endif // SUPERPAGES_HACK
|
||
|
||
// check if segment boundary comes into play
|
||
//if ((temp_limit - temp_eip) < 4096) {
|
||
@@ -540,13 +584,48 @@
|
||
{
|
||
Bit32u new_linear_addr, new_linear_page, new_linear_offset;
|
||
Bit32u new_phy_addr;
|
||
+#if SUPERPAGES_HACK
|
||
+ Bit32u pde;
|
||
+ int maxsize;
|
||
+ Bit32u offsetmask, framemask;
|
||
+#endif // SUPERPAGES_HACK
|
||
+
|
||
+#if SUPERPAGES_HACK
|
||
+ // a page can be 4k or 4M, depending on the contents of PSE (bit 4 CR4)
|
||
+ // and PDE.PS flag.
|
||
+ // Especially the PDE.PS check will slow everything down, be we don't
|
||
+ // have a chance anyway...
|
||
+ if (BX_CPU_THIS_PTR cr4 & 0x00000010) {
|
||
+ BX_MEM.read_physical((BX_CPU_THIS_PTR cr3 & 0xfffff000) |
|
||
+ (new_linear_addr & 0xffc00000) >> 20,
|
||
+ 4,
|
||
+ &pde);
|
||
+ if (pde & 0x81) {
|
||
+ // pde is present and PS bit is 1: 4 MB pages
|
||
+ offsetmask = 0x003fffff;
|
||
+ framemask = 0xfff00000;
|
||
+ } else {
|
||
+ offsetmask = 0x00000fff;
|
||
+ framemask = 0xfffff000;
|
||
+ }
|
||
+ }
|
||
+#endif // SUPERPAGES_HACK
|
||
|
||
new_linear_addr = BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].cache.u.segment.base + BX_CPU_THIS_PTR eip;
|
||
|
||
+#if SUPERPAGES_HACK
|
||
+ new_linear_page = new_linear_addr & framemask;
|
||
+#else
|
||
new_linear_page = new_linear_addr & 0xfffff000;
|
||
+#endif // SUPERPAGES_HACK
|
||
+
|
||
if (new_linear_page == BX_CPU_THIS_PTR prev_linear_page) {
|
||
// same linear address, old linear->physical translation valid
|
||
+#if SUPERPAGES_HACK
|
||
+ new_linear_offset = new_linear_addr & offsetmask;
|
||
+#else
|
||
new_linear_offset = new_linear_addr & 0x00000fff;
|
||
+#endif // SUPERPAGES_HACK
|
||
new_phy_addr = BX_CPU_THIS_PTR prev_phy_page | new_linear_offset;
|
||
BX_CPU_THIS_PTR bytesleft = (BX_CPU_THIS_PTR max_phy_addr - new_phy_addr) + 1;
|
||
BX_CPU_THIS_PTR fetch_ptr = &BX_MEM.vector[new_phy_addr];
|
||
diff -Naur bochs-2000_0325a.orig/cpu/paging.cc bochs-2000_0325a/cpu/paging.cc
|
||
--- bochs-2000_0325a.orig/cpu/paging.cc Sun Mar 26 05:39:26 2000
|
||
+++ bochs-2000_0325a/cpu/paging.cc Wed Oct 18 20:03:14 2000
|
||
@@ -34,8 +34,8 @@
|
||
|
||
#include "bochs.h"
|
||
|
||
-
|
||
-
|
||
+// To enable superpages (in config.h):
|
||
+// #define SUPERPAGES_HACK 1
|
||
|
||
#if 0
|
||
// X86 Registers Which Affect Paging:
|
||
@@ -104,7 +104,7 @@
|
||
// 31..12: page table base address
|
||
// 11.. 9: available
|
||
// 8: G (Pentium Pro+), 0=reserved otherwise
|
||
-// 7: PS (Pentium+), 0=reserved otherwise
|
||
+// 7: PS (Pentium+, 0=4k), 0=reserved otherwise
|
||
// 6: 0=reserved
|
||
// 5: A (386+)
|
||
// 4: PCD (486+), 0=reserved otherwise
|
||
@@ -128,6 +128,22 @@
|
||
// 1: R/W (386+)
|
||
// 0: P=1 (386+)
|
||
|
||
+// Page Table Entry format when P=1 (4-MByte Page) (Pentium+):
|
||
+// ===========================================================
|
||
+//
|
||
+// 31..22: page base address
|
||
+// 21..12: 0=reserved
|
||
+// 11.. 9: available
|
||
+// 8: G (Pentium Pro+), 0=reserved otherwise
|
||
+// 7: PS (0=4k, 1=4M)
|
||
+// 6: D
|
||
+// 5: A
|
||
+// 4: PCD
|
||
+// 3: PWT
|
||
+// 2: U/S
|
||
+// 1: R/W
|
||
+// 0: P=1
|
||
+
|
||
|
||
// Page Directory/Table Entry Fields Defined:
|
||
// ==========================================
|
||
@@ -259,8 +275,6 @@
|
||
#endif
|
||
|
||
|
||
-
|
||
-
|
||
#if BX_SUPPORT_PAGING
|
||
|
||
#define BX_INVALID_TLB_ENTRY 0xffffffff
|
||
@@ -459,6 +473,70 @@
|
||
unsigned priv_index;
|
||
Boolean is_rw;
|
||
Bit32u combined_access, new_combined_access;
|
||
+#if SUPERPAGES_HACK
|
||
+ Boolean did_oldcode;
|
||
+#endif // SUPERPAGES_HACK
|
||
+
|
||
+#if SUPERPAGES_HACK
|
||
+ did_oldcode = 0;
|
||
+#endif // SUPERPAGES_HACK
|
||
+
|
||
+#if SUPERPAGES_HACK
|
||
+#if BX_CPU_LEVEL < 5
|
||
+#warning Superpages hack only for cpu level >= 5
|
||
+ goto oldcode;
|
||
+#endif // BX_CPU_LEVEL < 5
|
||
+
|
||
+ if (BX_CPU_THIS_PTR cr4 & 0x00000010) {
|
||
+ // PSE bit set (bit 4 of CR4)
|
||
+ // PS flag 7 in page directory entry specifies 4k or 4M.
|
||
+ // BW: We don't use any TLB here for now!
|
||
+
|
||
+ // Get page dir entry
|
||
+ pde_addr = (BX_CPU_THIS_PTR cr3 & 0xfffff000) |
|
||
+ ((laddress & 0xffc00000) >> 20);
|
||
+ BX_MEM.read_physical(pde_addr, 4, &pde);
|
||
+ if ( (!pde & 0x01) ) {
|
||
+ // Page Directory Entry NOT present
|
||
+ error_code = 0xfffffff8; // RSVD=1, P=0
|
||
+ goto page_fault_not_present;
|
||
+ }
|
||
+
|
||
+ // Check the PS flag of pde: PS=0 => 4k pages, PS=1 => 4M pages
|
||
+ if (pde & 0x80) {
|
||
+ // PS flag is set, 4M pages handling.
|
||
+
|
||
+ // we check privileges against priv_index[] matrix.
|
||
+ // even if we don't use TLB here, we can use priv_index[]
|
||
+ // (always initialized in TLB_init().
|
||
+ // The only difference is that bits 2,1 (u/r, r/w of page dir/table)
|
||
+ // are now taken directly from pde.
|
||
+
|
||
+ is_rw = (rw>=BX_WRITE); // write or r-m-w
|
||
+ priv_index =
|
||
+ (BX_CPU_THIS_PTR cr0.wp<<4) | // bit 4
|
||
+ (pl<<3) | // bit 3
|
||
+ (0x06 & pde) | // bits 2,1 (u/s,r/w of pde only!)
|
||
+ is_rw; // bit 0
|
||
+ if (priv_check[priv_index]){
|
||
+ // Operation has proper privilege.
|
||
+ // Update A and D bits unconditionally.
|
||
+ pde |= 0x20 | (is_rw << 6);
|
||
+ BX_MEM.write_physical(pde_addr, 4, &pde);
|
||
+
|
||
+ // Now do the translation
|
||
+ return ((pde & 0xffc00000) | (laddress & 0x003fffff));
|
||
+ }
|
||
+
|
||
+ // protection violation
|
||
+ error_code = 0xfffffff9; // RSVD=1, P=1
|
||
+ goto page_fault_check;
|
||
+ }
|
||
+ // else PS=0, 4k pages old code
|
||
+ }
|
||
+ oldcode:
|
||
+ did_oldcode = 1;
|
||
+#endif // SUPERPAGES_HACK
|
||
|
||
lpf = laddress & 0xfffff000; // linear page frame
|
||
poffset = laddress & 0x00000fff; // physical offset
|
||
@@ -587,9 +665,18 @@
|
||
page_fault_proper:
|
||
error_code |= (pl << 2) | (is_rw << 1);
|
||
BX_CPU_THIS_PTR cr2 = laddress;
|
||
+
|
||
+#if SUPERPAGES_HACK
|
||
+ // clear TLB only if oldcode was run! (no TLB in 4 MB case!!).
|
||
+ if (did_oldcode) {
|
||
+#endif // SUPERPAGES_HACK
|
||
// invalidate entry - we can get away without maintaining A bit in PTE
|
||
// if we don't maintain TLB entries without it set.
|
||
BX_CPU_THIS_PTR TLB.entry[TLB_index].lpf = BX_INVALID_TLB_ENTRY;
|
||
+#if SUPERPAGES_HACK
|
||
+ }
|
||
+#endif // SUPERPAGES_HACK
|
||
+
|
||
exception(BX_PF_EXCEPTION, error_code, 0);
|
||
return(0); // keep compiler happy
|
||
}
|
||
@@ -606,6 +693,71 @@
|
||
Bit32u pte, pte_addr;
|
||
unsigned priv_index;
|
||
Bit32u combined_access;
|
||
+#if SUPERPAGES_HACK
|
||
+ Boolean did_oldcode;
|
||
+#endif // SUPERPAGES_HACK
|
||
+
|
||
+#if SUPERPAGES_HACK
|
||
+ did_oldcode = 0;
|
||
+#endif // SUPERPAGES_HACK
|
||
+
|
||
+#if SUPERPAGES_HACK
|
||
+#if BX_CPU_LEVEL < 5
|
||
+#warning Superpages hack only for cpu level >= 5
|
||
+ goto oldcode;
|
||
+#endif // BX_CPU_LEVEL < 5
|
||
+
|
||
+ if (BX_CPU_THIS_PTR cr4 & 0x00000010) {
|
||
+ // PSE bit set (bit 4 of CR4)
|
||
+ // PS flag 7 in page directory entry specifies 4k or 4M.
|
||
+ // BW: We don't use any TLB here for now!
|
||
+
|
||
+ // Get page dir entry
|
||
+ pde_addr = (BX_CPU_THIS_PTR cr3 & 0xfffff000) |
|
||
+ ((laddress & 0xffc00000) >> 20);
|
||
+ BX_MEM.read_physical(pde_addr, 4, &pde);
|
||
+ if ( (!pde & 0x01) ) {
|
||
+ // Page Directory Entry NOT present
|
||
+ error_code = 0xfffffff8; // RSVD=1, P=0
|
||
+ goto page_fault;
|
||
+ }
|
||
+
|
||
+ // Check the PS flag of pde: PS=0 => 4k pages, PS=1 => 4M pages
|
||
+ if (pde & 0x80) {
|
||
+ // PS flag is set, 4M pages handling.
|
||
+
|
||
+ // we check privileges against priv_index[] matrix.
|
||
+ // even if we don't use TLB here, we can use priv_index[]
|
||
+ // (always initialized in TLB_init().
|
||
+ // The only difference is that bits 2,1 (u/r, r/w of page dir/table)
|
||
+ // are now taken directly from pde.
|
||
+
|
||
+ priv_index =
|
||
+ (BX_CPU_THIS_PTR cr0.wp<<4) | // bit 4
|
||
+ (pl<<3) | // bit 3
|
||
+ (0x06 & pde); // bits 2,1 (u/s,r/w of pde only!)
|
||
+ // bit 0 always 0 in instructions.
|
||
+
|
||
+ if (priv_check[priv_index]){
|
||
+ // Operation has proper privilege.
|
||
+ // Update A bits unconditionally.
|
||
+ pde |= 0x20;
|
||
+ BX_MEM.write_physical(pde_addr, 4, &pde);
|
||
+
|
||
+ // Now do the translation
|
||
+ return ((pde & 0xffc00000) | (laddress & 0x003fffff));
|
||
+ }
|
||
+
|
||
+ // protection violation
|
||
+ error_code = 0xfffffff9; // RSVD=1, P=1
|
||
+ goto page_fault;
|
||
+ }
|
||
+ // else PS=0, 4k pages old code
|
||
+ }
|
||
+ oldcode:
|
||
+ did_oldcode = 1;
|
||
+#endif // SUPERPAGES_HACK
|
||
+
|
||
|
||
lpf = laddress & 0xfffff000; // linear page frame
|
||
poffset = laddress & 0x00000fff; // physical offset
|
||
@@ -689,9 +841,18 @@
|
||
page_fault:
|
||
error_code |= (pl << 2);
|
||
BX_CPU_THIS_PTR cr2 = laddress;
|
||
+
|
||
+#if SUPERPAGES_HACK
|
||
+ // clear TLB only if oldcode was run! (no TLB in 4 MB case!!).
|
||
+ if (did_oldcode) {
|
||
+#endif // SUPERPAGES_HACK
|
||
// invalidate entry - we can get away without maintaining A bit in PTE
|
||
// if we don't maintain TLB entries without it set.
|
||
BX_CPU_THIS_PTR TLB.entry[TLB_index].lpf = BX_INVALID_TLB_ENTRY;
|
||
+#if SUPERPAGES_HACK
|
||
+ }
|
||
+#endif // SUPERPAGES_HACK
|
||
+
|
||
exception(BX_PF_EXCEPTION, error_code, 0);
|
||
return(0); // keep compiler happy
|
||
}
|
||
@@ -705,6 +866,7 @@
|
||
Bit32u lpf, ppf, poffset, TLB_index, paddress;
|
||
Bit32u pde, pde_addr;
|
||
Bit32u pte, pte_addr;
|
||
+ Boolean is_4MB;
|
||
|
||
if (BX_CPU_THIS_PTR cr0.pg == 0) {
|
||
*phy = laddress;
|
||
@@ -712,6 +874,36 @@
|
||
return;
|
||
}
|
||
|
||
+#if SUPERPAGES_HACK
|
||
+ is_4MB = 0;
|
||
+ if (BX_CPU_THIS_PTR cr4 & 0x00000010) {
|
||
+ // PSE bit set (bit 4 of CR4)
|
||
+ // Get page dir entry
|
||
+ pde_addr = (BX_CPU_THIS_PTR cr3 & 0xfffff000) |
|
||
+ ((laddress & 0xffc00000) >> 20);
|
||
+ BX_MEM.read_physical(pde_addr, 4, &pde);
|
||
+ if ( !(pde & 0x01) ) {
|
||
+ // Page Directory Entry NOT present
|
||
+ goto page_fault;
|
||
+ }
|
||
+ is_4MB = (pde & 0x80);
|
||
+ }
|
||
+#endif // SUPERPAGES_HACK
|
||
+
|
||
+#ifdef SUPERPAGES_HACK
|
||
+ lpf = laddress & (is_4MB ? 0xfff00000 : 0xfffff000); // lpf, dir entry
|
||
+ poffset = laddress & (is_4MB ? 0x003fffff : 0x00000fff); // physical offset
|
||
+
|
||
+ // pde is already there and present... use it unconditionally
|
||
+ // depending on is_4MB, either run old code or return address now.
|
||
+ if (is_4MB) {
|
||
+ *valid = 1;
|
||
+ *phy = (pde & 0xffc00000) | poffset;
|
||
+ return;
|
||
+ } // else 4k, run old TLB based code...
|
||
+ oldcode:
|
||
+#endif
|
||
+
|
||
lpf = laddress & 0xfffff000; // linear page frame
|
||
poffset = laddress & 0x00000fff; // physical offset
|
||
TLB_index = BX_TLB_INDEX_OF(lpf);
|
||
@@ -764,6 +956,10 @@
|
||
{
|
||
Bit32u mod4096;
|
||
unsigned xlate_rw;
|
||
+#if SUPERPAGES_HACK
|
||
+ int maxsize;
|
||
+ Bit32u pde;
|
||
+#endif // SUPERPAGES_HACK
|
||
|
||
|
||
#if BX_X86_DEBUGGER
|
||
@@ -798,8 +994,39 @@
|
||
|
||
if (BX_CPU_THIS_PTR cr0.pg) {
|
||
/* check for reference across multiple pages */
|
||
+
|
||
+#if SUPERPAGES_HACK
|
||
+ // a page can be 4k or 4M, depending on the contents of PSE (bit 4 CR4)
|
||
+ // and PDE.PS flag.
|
||
+ // Especially the PDE.PS check will slow everything down, but we don't
|
||
+ // have a chance anyway...
|
||
+ if (BX_CPU_THIS_PTR cr4 & 0x00000010) {
|
||
+ BX_MEM.read_physical((BX_CPU_THIS_PTR cr3 & 0xfffff000) |
|
||
+ ((laddress & 0xffc00000) >> 20),
|
||
+ 4,
|
||
+ &pde);
|
||
+ if (pde & 0x81) {
|
||
+ // pde is present and PS bit is 1: 4 MB pages
|
||
+ maxsize = 4194303;
|
||
+ mod4096 = laddress & 0x003fffff;
|
||
+ } else {
|
||
+ // pde not present or PS bit not set: assume 4k pages
|
||
+ // (don't generate pagefault yet, if pde not present...)
|
||
+ maxsize = 4096;
|
||
+ mod4096 = laddress & 0x00000fff;
|
||
+ }
|
||
+ } else {
|
||
+ // PDE bit not set, assume 4k pages
|
||
+ maxsize = 4096;
|
||
+ mod4096 = laddress & 0x00000fff;
|
||
+ }
|
||
+
|
||
+ if ( (mod4096 + length) <= maxsize ) {
|
||
+#else
|
||
mod4096 = laddress & 0x00000fff;
|
||
if ( (mod4096 + length) <= 4096 ) {
|
||
+#endif // SUPERPAGES_HACK
|
||
+
|
||
// Bit32u paddress1;
|
||
|
||
/* access within single page */
|
||
@@ -819,7 +1046,13 @@
|
||
else {
|
||
// access across 2 pages
|
||
BX_CPU_THIS_PTR address_xlation.paddress1 = dtranslate_linear(laddress, pl, xlate_rw);
|
||
+
|
||
+#if SUPERPAGES_HACK
|
||
+ BX_CPU_THIS_PTR address_xlation.len1 = maxsize - mod4096;
|
||
+#else
|
||
BX_CPU_THIS_PTR address_xlation.len1 = 4096 - mod4096;
|
||
+#endif // SUPERPAGES_HACK
|
||
+
|
||
BX_CPU_THIS_PTR address_xlation.len2 = length - BX_CPU_THIS_PTR address_xlation.len1;
|
||
BX_CPU_THIS_PTR address_xlation.pages = 2;
|
||
|
||
@@ -898,13 +1131,6 @@
|
||
return;
|
||
}
|
||
}
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
|
||
#else // BX_SUPPORT_PAGING
|
||
|
||
diff -Naur bochs-2000_0325a.orig/cpu/proc_ctrl.cc bochs-2000_0325a/cpu/proc_ctrl.cc
|
||
--- bochs-2000_0325a.orig/cpu/proc_ctrl.cc Sun Mar 26 05:39:09 2000
|
||
+++ bochs-2000_0325a/cpu/proc_ctrl.cc Wed Oct 18 15:02:58 2000
|
||
@@ -28,6 +28,8 @@
|
||
|
||
#include "bochs.h"
|
||
|
||
+// To add support for SUPERPAGES
|
||
+// #define SUPERPAGES_HACK 1
|
||
|
||
void
|
||
BX_CPU_C::UndefinedOpcode(BxInstruction_t *i)
|
||
@@ -519,6 +521,21 @@
|
||
val_32);
|
||
UndefinedOpcode(i);
|
||
#else
|
||
+#if SUPERPAGES_HACK
|
||
+#if BX_CPU_LEVEL < 5
|
||
+#error "BX_CPU_LEVEL must be >= 5 for SUPERPAGES_HACK"
|
||
+#else
|
||
+ // Protected mode: #GP(0) if attempt to write a 1 to
|
||
+ // ay reserved bit of CR4 except PSE
|
||
+
|
||
+ bx_printf("MOV_CdRd: write attempt of %0x08x to CR4\n");
|
||
+ if (~val_32 | 0xffffffef) {
|
||
+ bx_printf("MOV_CdRd: (CR4) write of 0x%08x masked with 0x00000010\n",
|
||
+ val_32);
|
||
+ }
|
||
+ BX_CPU_THIS_PTR cr4 = val_32 & 0x00000010; // mask only with 4MB pages
|
||
+#endif // else of BX_CPU_LEVEL <= 5
|
||
+#else // no SUPERPAGES_HACK
|
||
// Protected mode: #GP(0) if attempt to write a 1 to
|
||
// any reserved bit of CR4
|
||
|
||
@@ -532,6 +549,8 @@
|
||
// Writes to bits in CR4 should not be 1s as CPUID
|
||
// returns not-supported for all of these features.
|
||
BX_CPU_THIS_PTR cr4 = 0;
|
||
+#endif // SUPERPAGES_HACK
|
||
+
|
||
#endif
|
||
break;
|
||
default:
|
||
@@ -601,7 +620,14 @@
|
||
UndefinedOpcode(i);
|
||
#else
|
||
bx_printf("MOV_RdCd: read of CR4\n");
|
||
+
|
||
+#if SUPERPAGES_HACK
|
||
+ // for now, only PTE bit is relevant.
|
||
+ val_32 = BX_CPU_THIS_PTR cr4 & 0x00000010;
|
||
+#else
|
||
val_32 = BX_CPU_THIS_PTR cr4;
|
||
+#endif // SUPERPAGES_HACK
|
||
+
|
||
#endif
|
||
break;
|
||
default:
|
||
diff -Naur bochs-2000_0325a.orig/debug/dbg_main.cc bochs-2000_0325a/debug/dbg_main.cc
|
||
--- bochs-2000_0325a.orig/debug/dbg_main.cc Sun Mar 26 05:40:40 2000
|
||
+++ bochs-2000_0325a/debug/dbg_main.cc Wed Oct 18 15:07:38 2000
|
||
@@ -27,6 +27,9 @@
|
||
|
||
#include "bochs.h"
|
||
|
||
+// to enable support for superpages
|
||
+// #define SUPERPAGES_HACK 1
|
||
+
|
||
static unsigned doit = 0;
|
||
|
||
#define SIM_NAME0 "bochs"
|
||
@@ -3952,6 +3955,12 @@
|
||
Bit32u lpf, ppf, poffset, TLB_index, paddress;
|
||
Bit32u pde, pde_addr;
|
||
Bit32u pte, pte_addr;
|
||
+
|
||
+#if SUPERPAGES_HACK
|
||
+ // Don't bx_panic() here to avoid endless recursion
|
||
+ bx_printf("dbg_lin2phys: SUPERPAGES_HACK defined\n");
|
||
+ exit(1);
|
||
+#endif // SUPERPAGES_HACK
|
||
|
||
*tlb_valid = 0;
|
||
|
||
diff -Naur bochs-2000_0325a.orig/debug/lexer.c bochs-2000_0325a/debug/lexer.c
|
||
--- bochs-2000_0325a.orig/debug/lexer.c Tue Nov 2 02:17:09 1999
|
||
+++ bochs-2000_0325a/debug/lexer.c Wed Oct 18 13:41:47 2000
|
||
@@ -20,6 +20,7 @@
|
||
|
||
/* Scanner skeleton version:
|
||
* $Header: /home/volker/Archiv/bochs-cvs-rsync-20110222/bochs/patches/patch.4meg-pages,v 1.1 2001-05-03 16:21:30 bdenney Exp $
|
||
+ * $FreeBSD: src/usr.bin/lex/flex.skl,v 1.4 1999/10/27 07:56:44 obrien Exp $
|
||
*/
|
||
|
||
#define FLEX_SCANNER
|
||
@@ -1272,7 +1273,7 @@
|
||
case 92:
|
||
YY_RULE_SETUP
|
||
#line 108 "lexer.l"
|
||
-{ bxlval.ulval = strtoull(bxtext, NULL, 10); return(BX_TOKEN_LONG_NUMERIC); }
|
||
+{ bxlval.ulval = strtoul(bxtext, NULL, 10); return(BX_TOKEN_LONG_NUMERIC); }
|
||
YY_BREAK
|
||
case 93:
|
||
YY_RULE_SETUP
|
||
diff -Naur bochs-2000_0325a.orig/debug/lexer.l bochs-2000_0325a/debug/lexer.l
|
||
--- bochs-2000_0325a.orig/debug/lexer.l Tue Nov 2 02:17:09 1999
|
||
+++ bochs-2000_0325a/debug/lexer.l Wed Oct 18 13:41:01 2000
|
||
@@ -105,7 +105,7 @@
|
||
\/[0-9]+ { bxlval.sval = strdup(bxtext); return(BX_TOKEN_XFORMAT); }
|
||
0x[0-9a-fA-F]+ { bxlval.uval = strtoul(bxtext+2, NULL, 16); return(BX_TOKEN_NUMERIC); }
|
||
0[0-7]+ { bxlval.uval = strtoul(bxtext+1, NULL, 8); return(BX_TOKEN_NUMERIC); }
|
||
-[0-9]+L { bxlval.ulval = strtoull(bxtext, NULL, 10); return(BX_TOKEN_LONG_NUMERIC); }
|
||
+[0-9]+L { bxlval.ulval = strtoul(bxtext, NULL, 10); return(BX_TOKEN_LONG_NUMERIC); }
|
||
[0-9]+ { bxlval.uval = strtoul(bxtext, NULL, 10); return(BX_TOKEN_NUMERIC); }
|
||
$[a-zA-Z_][a-zA-Z0-9_]* { bxlval.sval = strdup(bxtext); return(BX_TOKEN_SYMBOLNAME); }
|
||
\n { return('\n'); }
|
||
diff -Naur bochs-2000_0325a.orig/main.cc bochs-2000_0325a/main.cc
|
||
--- bochs-2000_0325a.orig/main.cc Sun Mar 26 05:23:20 2000
|
||
+++ bochs-2000_0325a/main.cc Wed Oct 18 13:52:49 2000
|
||
@@ -113,6 +113,10 @@
|
||
int
|
||
main(int argc, char *argv[])
|
||
{
|
||
+#if SUPERPAGES_HACK
|
||
+ printf("main: Superpages hack turned on\n");
|
||
+#endif // SUPERPAGES_HACK
|
||
+
|
||
#if BX_DEBUGGER
|
||
// If using the debugger, it will take control and call
|
||
// bx_bochs_init() and cpu_loop()
|