[2256] 2009-06-04 Vladimir Serbinenko <[email protected]>

Vladimir Serbinenko <[email protected]>
Newsgroups gmane.comp.boot-loaders.grub.cvs
Message-ID <[email protected]>
Revision: 2256
          http://svn.sv.gnu.org/viewvc/?view=rev&root=grub&revision=2256
Author:   phcoder
Date:     2009-06-04 20:25:11 +0000 (Thu, 04 Jun 2009)
Log Message:
-----------
2009-06-04  Vladimir Serbinenko  <[email protected]>

	Allow a compilation without -mcmodel=large

	* kern/efi/mm.c (grub_efi_allocate_pages): don't allocate >4GiB
	when compiled without -mcmodel=large
	(filter_memory_map): remove memory post 4 GiB when compiled 
	without -mcmodel=large
	* configure.ac: fail gracefully and add -DMCMODEL_SMALL=1 to 
	TARGET_CFLAGS when -mcmodel=large isn't supported
	

Modified Paths:
--------------
    trunk/grub2/ChangeLog
    trunk/grub2/configure.ac
    trunk/grub2/kern/efi/mm.c

Modified: trunk/grub2/ChangeLog
===================================================================
--- trunk/grub2/ChangeLog	2009-06-04 20:16:13 UTC (rev 2255)
+++ trunk/grub2/ChangeLog	2009-06-04 20:25:11 UTC (rev 2256)
@@ -1,5 +1,16 @@
 2009-06-04  Vladimir Serbinenko  <[email protected]>
 
+	Allow a compilation without -mcmodel=large
+
+	* kern/efi/mm.c (grub_efi_allocate_pages): don't allocate >4GiB
+	when compiled without -mcmodel=large
+	(filter_memory_map): remove memory post 4 GiB when compiled 
+	without -mcmodel=large
+	* configure.ac: fail gracefully and add -DMCMODEL_SMALL=1 to 
+	TARGET_CFLAGS when -mcmodel=large isn't supported
+	
+2009-06-04  Vladimir Serbinenko  <[email protected]>
+
 	Remove nested functions in efiemu core
 
 	* efiemu/runtime/efiemu.c (reflect): make static instead of nested

Modified: trunk/grub2/configure.ac
===================================================================
--- trunk/grub2/configure.ac	2009-06-04 20:16:13 UTC (rev 2255)
+++ trunk/grub2/configure.ac	2009-06-04 20:25:11 UTC (rev 2256)
@@ -339,18 +339,23 @@
 if test "$target_cpu"-"$platform" = x86_64-efi; then
   # Use large model to support 4G memory
   AC_CACHE_CHECK([whether option -mcmodel=large works], grub_cv_cc_mcmodel, [
-    CFLAGS="-m64 -mcmodel=large"
+    SAVED_CFLAGS=$CFLAGS
+    CFLAGS="$CFLAGS -m64 -mcmodel=large"
     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
 		      [grub_cv_cc_mcmodel=yes],
 		      [grub_cv_cc_mcmodel=no])
   ])
-  if test "x$grub_cv_cc_no_mcmodel" = xno; then
-    AC_MSG_ERROR([-mcmodel=large not supported, upgrade your gcc])
+  if test "x$grub_cv_cc_mcmodel" = xno; then
+    CFLAGS="$SAVED_CFLAGS -m64 -DMCMODEL_SMALL=1"
+    TARGET_CFLAGS="$TARGET_CFLAGS -DMCMODEL_SMALL=1"    
+    AC_MSG_WARN([-mcmodel=large not supported. You wan't be able to use the memory over 4GiB. Upgrade your gcc])
+  else
+    TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=large"
   fi
 
   # EFI writes to stack below %rsp, we must not use the red zone
   AC_CACHE_CHECK([whether option -mno-red-zone works], grub_cv_cc_no_red_zone, [
-    CFLAGS="-m64 -mno-red-zone"
+    CFLAGS="$CFLAGS -m64 -mno-red-zone"
     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
 		      [grub_cv_cc_no_red_zone=yes],
 		      [grub_cv_cc_no_red_zone=no])
@@ -359,7 +364,7 @@
     AC_MSG_ERROR([-mno-red-zone not supported, upgrade your gcc])
   fi
 
-  TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=large -mno-red-zone"
+  TARGET_CFLAGS="$TARGET_CFLAGS -mno-red-zone"
 fi
 
 #

Modified: trunk/grub2/kern/efi/mm.c
===================================================================
--- trunk/grub2/kern/efi/mm.c	2009-06-04 20:16:13 UTC (rev 2255)
+++ trunk/grub2/kern/efi/mm.c	2009-06-04 20:25:11 UTC (rev 2256)
@@ -63,7 +63,9 @@
   /* Limit the memory access to less than 4GB for 32-bit platforms.  */
   if (address > 0xffffffff)
     return 0;
+#endif
   
+#if GRUB_TARGET_SIZEOF_VOID_P < 8 || defined (MCMODEL_SMALL)
   if (address == 0)
     {
       type = GRUB_EFI_ALLOCATE_MAX_ADDRESS;
@@ -218,7 +220,7 @@
        desc = NEXT_MEMORY_DESCRIPTOR (desc, desc_size))
     {
       if (desc->type == GRUB_EFI_CONVENTIONAL_MEMORY
-#if GRUB_TARGET_SIZEOF_VOID_P < 8
+#if GRUB_TARGET_SIZEOF_VOID_P < 8 || defined (MCMODEL_SMALL)
 	  && desc->physical_start <= 0xffffffff
 #endif
 	  && desc->physical_start + PAGES_TO_BYTES (desc->num_pages) > 0x100000
@@ -234,7 +236,7 @@
 	      desc->physical_start = 0x100000;
 	    }
 	  
-#if GRUB_TARGET_SIZEOF_VOID_P < 8
+#if GRUB_TARGET_SIZEOF_VOID_P < 8 || defined (MCMODEL_SMALL)
 	  if (BYTES_TO_PAGES (filtered_desc->physical_start)
 	      + filtered_desc->num_pages
 	      > BYTES_TO_PAGES (0x100000000LL))
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.