Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 4 Nov 2010 18:57:52 +0000 (UTC)
From:      Dimitry Andric <dim@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r214799 - projects/binutils-2.17/sys/conf
Message-ID:  <201011041857.oA4IvqUr069759@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: dim
Date: Thu Nov  4 18:57:51 2010
New Revision: 214799
URL: http://svn.freebsd.org/changeset/base/214799

Log:
  Binutils commit 0c845abb5a0083c6deebc75975608237015badba increased
  ELF_MAXPAGESIZE for amd64 from 0x00100000 to 0x00200000.  This caused
  the kernel to be incorrectly linked, using the existing linker script,
  resulting in a virtual address of 0xffffffff80000000 for the LOAD
  program header.
  
  The boot loader will load such a kernel at a real address of 0x00000000,
  which either causes protection faults in btx, crashes the machine, or
  (in case of a VMware guest) even makes it power down. :)
  
  Fix this by partially synchronizing the amd64 linker script with
  binutils own updated version, in particular replacing a hardcoded
  value of 0x00100000 by CONSTANT(MAXPAGESIZE).

Modified:
  projects/binutils-2.17/sys/conf/ldscript.amd64

Modified: projects/binutils-2.17/sys/conf/ldscript.amd64
==============================================================================
--- projects/binutils-2.17/sys/conf/ldscript.amd64	Thu Nov  4 18:43:57 2010	(r214798)
+++ projects/binutils-2.17/sys/conf/ldscript.amd64	Thu Nov  4 18:57:51 2010	(r214799)
@@ -6,7 +6,7 @@ SEARCH_DIR("/usr/lib");
 SECTIONS
 {
   /* Read-only sections, merged into text segment: */
-  . = kernbase + 0x00100000 + SIZEOF_HEADERS;
+  . = kernbase + CONSTANT (MAXPAGESIZE) + SIZEOF_HEADERS;
   .interp         : { *(.interp) }
   .hash           : { *(.hash) }
   .dynsym         : { *(.dynsym) }
@@ -61,7 +61,8 @@ SECTIONS
   .eh_frame_hdr : { *(.eh_frame_hdr) }
   /* Adjust the address for the data segment.  We want to adjust up to
      the same address within the page on the next page up.  */
-  . = DATA_SEGMENT_ALIGN(0x100000, 0x1000);
+  . = ALIGN (CONSTANT (MAXPAGESIZE)) - ((CONSTANT (MAXPAGESIZE) - .) & (CONSTANT (MAXPAGESIZE) - 1));
+  . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));
   /* Ensure the __preinit_array_start label is properly aligned.  We
      could instead move the label definition inside the section, but
      the linker would then create the section even if it turns out to



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201011041857.oA4IvqUr069759>