rmodule: use program.ld for linking

Bring rmodule linking into the common linking method.
The __rmodule_entry symbol was removed while using
a more common _start symbol. The rmodtool will honor
the entry point found within the ELF header. Add
ENV_RMODULE so that one can distinguish the environment
when generating linker scripts for rmodules. Lastly,
directly use program.ld for the rmodule.ld linker script.

BUG=chrome-os-partner:44827
BRANCH=None
TEST=Built rambi and analyzed the relocatable ramstage,
     sipi_vector, and smm rmodules.

Change-Id: Iaa499eb229d8171272add9ee6d27cff75e7534ac
Signed-off-by: Aaron Durbin <adubin@chromium.org>
Reviewed-on: http://review.coreboot.org/11517
Tested-by: build bot (Jenkins)
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
diff --git a/src/lib/rmodule.ld b/src/lib/rmodule.ld
index f5d5f06..340fe7a 100644
--- a/src/lib/rmodule.ld
+++ b/src/lib/rmodule.ld
@@ -12,103 +12,14 @@
  * won't be a consistent mapping between the flat blob and the loaded program.
  */
 
-BASE_ADDRESS = 0x00000;
-
-ENTRY(__rmodule_entry);
+#include <memlayout.h>
+#include <arch/header.ld>
 
 SECTIONS
 {
-	. = BASE_ADDRESS;
+	SET_COUNTER(rmodule, 0x00000000)
 
-	.payload :  {
-		/* C code of the module. */
-		_program = .;
-		*(.text._start);
-		*(.text.stage_entry);
-		*(.text);
-		*(.text.*);
-		/* C read-only data. */
-		. = ALIGN(16);
-
-#if IS_ENABLED(CONFIG_COVERAGE)
-		__CTOR_LIST__ = .;
-		*(.ctors);
-		LONG(0);
-		LONG(0);
-		__CTOR_END__ = .;
-#endif
-
-		/* The driver sections are to allow linking coreboot's
-		 * ramstage with the rmodule linker. Any changes made in
-		 * ramstage.ld should be made here as well. */
-		. = ALIGN(8);
-		_pci_drivers = . ;
-		KEEP(*(.rodata.pci_driver));
-		_epci_drivers = . ;
-		. = ALIGN(8);
-		_cpu_drivers = . ;
-		KEEP(*(.rodata.cpu_driver));
-		_ecpu_drivers = . ;
-		. = ALIGN(8);
-		_bs_init_begin = .;
-		KEEP(*(.bs_init));
-		LONG(0);
-		LONG(0);
-		_bs_init_end = .;
-		_cbmem_init_hooks = .;
-		KEEP(*(.rodata.cbmem_init_hooks));
-		_ecbmem_init_hooks = .;
-
-		. = ALIGN(8);
-
-		*(.rodata);
-		*(.rodata.*);
-		. = ALIGN(8);
-
-		/* 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 = .;
-		KEEP(*(.module_parameters));
-		_module_params_end = .;
-		. = ALIGN(8);
-
-		/* Data section. */
-		. = ALIGN(64);	/* Mirror cache line alignment from ramstage. */
-		_sdata = .;
-		*(.data);
-		*(.data.*);
-		. = ALIGN(8);
-		_edata = .;
-
-		. = ALIGN(8);
-	}
-
-	.bss (NOLOAD) : {
-		/* C uninitialized data of the module. */
-		_bss = .;
-		*(.bss);
-		*(.bss.*)
-		*(.sbss)
-		*(.sbss.*)
-		*(COMMON);
-		. = ALIGN(8);
-		_ebss = .;
-
-		/*
-		 * Place the heap after BSS. The heap size is passed in by
-		 * by way of ld --defsym=__heap_size=<>
-		 */
-		_heap = .;
-		. = . + __heap_size;
-		_eheap = .;
-		_eprogram = .;
-	}
-
-	/DISCARD/ : {
-		/* Drop unnecessary sections. */
-		*(.eh_frame);
-		*(.note);
-		*(.note.*);
-	}
+	/* program.ld is directly included because there's no one particular
+	 * class that rmodule is used on. */
+	#include <lib/program.ld>
 }