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>