rmodules: use rmodtool to create rmodules

Start using the rmodtool for generating rmodules.
rmodule_link() has been changed to create 2 rules:
one for the passed in <name>, the other for creating
<name>.rmod which is an ELF file in the format of
an rmodule.

Since the header is not compiled and linked together
with an rmodule there needs to be a way of marking
which symbol is the entry point. __rmodule_entry is
the symbol used for knowing the entry point. There
was a little churn in SMM modules to ensure an
rmodule entry point symbol takes a single argument.

Change-Id: Ie452ed866f6596bf13f137f5b832faa39f48d26e
Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-on: http://review.coreboot.org/5379
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
Tested-by: build bot (Jenkins)
diff --git a/src/lib/rmodule.ld b/src/lib/rmodule.ld
index 0cdbb2f..9222f3b 100644
--- a/src/lib/rmodule.ld
+++ b/src/lib/rmodule.ld
@@ -1,19 +1,15 @@
-OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
-OUTPUT_ARCH(i386)
-
 /*
  * This linker script is used to link rmodules (relocatable modules).  It
  * links at zero so that relocation fixups are easy when placing the binaries
  * anywhere in the address space.
  *
  * NOTE:  The program's loadable sections (text, module_params, and data) are
- * packed into the flat blob using the AT directive. The rmodule loader assumes
- * the entire program resides in one contiguous address space. Therefore,
- * alignment for a given section (if required) needs to be done at the end of
- * the preceeding section. e.g. if the data section should be aligned to an 8
- * byte address the text section should have ALIGN(8) at the end of its section.
- * Otherwise there won't be a consistent mapping between the flat blob and the
- * loaded program.
+ * packed into the flat blob. The rmodule loader assumes the entire program
+ * resides in one contiguous address space. Therefore, alignment for a given
+ * section (if required) needs to be done at the end of the preceeding section.
+ * e.g. if the data section should be aligned to an 8 byte address the text
+ * section should have ALIGN(8) at the end of its section.  Otherwise there
+ * won't be a consistent mapping between the flat blob and the loaded program.
  */
 
 BASE_ADDRESS = 0x00000;
@@ -22,21 +18,9 @@
 {
 	. = BASE_ADDRESS;
 
-	.header : AT (0) {
-		*(.module_header);
-		. = ALIGN(8);
-	}
-
-	/* Align the start of the module program to a large enough alignment
-	 * so that any data in the program with an alignement property is met.
-	 * Essentially, this alignment is the maximum possible data alignment
-	 * property a program can have. */
-	. = ALIGN(4096);
-	_module_link_start_addr = .;
-	_payload_begin_offset  = LOADADDR(.header) + SIZEOF(.header);
-
-	.payload : AT (_payload_begin_offset) {
+	.payload :  {
 		/* C code of the module. */
+		_ram_seg = .;
 		*(.textfirst);
 		*(.text);
 		*(.text.*);
@@ -88,9 +72,6 @@
 		. = ALIGN(8);
 	}
 
-	/* _payload_end marks the end of the module's code and data. */
-	_payload_end_offset = LOADADDR(.payload) + SIZEOF(.payload);
-
 	.bss (NOLOAD) : {
 		/* C uninitialized data of the module. */
 		_bss = .;
@@ -107,38 +88,11 @@
 		_heap = .;
 		. = . + __heap_size;
 		_eheap = .;
+		_eram_seg = .;
 	}
 
-	/* _module_program_size is the total memory used by the program. */
-	_module_program_size = _eheap - _module_link_start_addr;
-
-	/* coreboot's ramstage uses the _ram_seg and _eram_seg symbols
-	 * for determining its load location. Provide those to help it out.
-	 * It's a nop for any non-ramstage rmodule. */
-	_ram_seg = _module_link_start_addr;
-	_eram_seg = _module_link_start_addr + _module_program_size;
-
-	/* The relocation information is linked on top of the BSS section
-	 * because the BSS section takes no space on disk. The relocation data
-	 * resides directly after the data section in the flat binary. */
-	.relocations ADDR(.bss) : AT (_payload_end_offset) {
-		*(.rel.*);
-	}
-	_relocations_begin_offset = LOADADDR(.relocations);
-	_relocations_end_offset  = _relocations_begin_offset +
-	                           SIZEOF(.relocations);
-
 	/DISCARD/ : {
-		/* Drop unnecessary sections. Since these modules are linked
-		 * as shared objects there are dynamic sections. These sections
-		 * aren't needed so drop them. */
-		*(.comment);
-		*(.note);
-		*(.note.*);
-		*(.dynamic);
-		*(.dynsym);
-		*(.dynstr);
-		*(.gnu.hash);
+		/* Drop unnecessary sections. */
 		*(.eh_frame);
 	}
 }