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>

index | next in thread | raw e-mail

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


home | help

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