[coreboot-gerrit] New patch to review for coreboot: aa8457a rmodule: put all code/data bits in one section

Aaron Durbin (adurbin@google.com) gerrit at coreboot.org
Mon Apr 29 21:12:01 CEST 2013


Aaron Durbin (adurbin at google.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/3149

-gerrit

commit aa8457ab7d13df56ad326fb01f9a9799c8facce5
Author: Aaron Durbin <adurbin at chromium.org>
Date:   Mon Apr 29 13:53:41 2013 -0500

    rmodule: put all code/data bits in one section
    
    While debugging a crash it was discovered that ld was inserting
    address space for sections that were empty depending on section
    address boundaries. This led to the assumption breaking down that
    on-disk payload (code/data bits) was contiguous with the address
    space. When that assumption breaks down relocation updates change
    the wrong memory. Fix this by making the rmodule.ld linker script
    put all code/data bits into a payload section.
    
    Change-Id: Ib5df7941bbd64662090136e49d15a570a1c3e041
    Signed-off-by: Aaron Durbin <adurbin at chromium.org>
---
 src/lib/rmodule.ld | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/src/lib/rmodule.ld b/src/lib/rmodule.ld
index 41d6357..96401a1 100644
--- a/src/lib/rmodule.ld
+++ b/src/lib/rmodule.ld
@@ -35,7 +35,7 @@ SECTIONS
 	_module_link_start_addr = .;
 	_payload_begin_offset  = LOADADDR(.header) + SIZEOF(.header);
 
-	.text : AT (_payload_begin_offset) {
+	.payload : AT (_payload_begin_offset) {
 		/* C code of the module. */
 		*(.textfirst);
 		*(.text);
@@ -66,27 +66,26 @@ SECTIONS
 		*(.rodata);
 		*(.rodata.*);
 		. = ALIGN(4);
-	}
 
-	.module_params : AT (LOADADDR(.text) + SIZEOF(.text)) {
 		/* The parameters section can be used to pass parameters
 		 * to a module, however there has to be an prior agreement
 		 * on how to interpret the parameters. */
 		_module_params_begin = .;
 		*(.module_parameters);
 		_module_params_end = .;
-		. = ALIGN(4);
-	}
+		. = ALIGN(8);
 
-	.data : AT (LOADADDR(.module_params) + SIZEOF(.module_params)) {
+		/* Data section. */
 		_sdata = .;
 		*(.data);
 		. = ALIGN(4);
 		_edata = .;
+
+		. = ALIGN(8);
 	}
 
 	/* _payload_end marks the end of the module's code and data. */
-	_payload_end_offset = LOADADDR(.data) + SIZEOF(.data);
+	_payload_end_offset = LOADADDR(.payload) + SIZEOF(.payload);
 
 	.bss (NOLOAD) : {
 		/* C uninitialized data of the module. */



More information about the coreboot-gerrit mailing list