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)
This commit is contained in:
Aaron Durbin
2014-03-10 16:13:58 -05:00
committed by Stefan Reinauer
parent 4fde5a66b4
commit 3eb8eb7eba
25 changed files with 121 additions and 261 deletions

View File

@@ -25,30 +25,6 @@
#define RMODULE_MAGIC 0xf8fe
#define RMODULE_VERSION_1 1
#define FIELD_ENTRY(x_) ((uint32_t)&x_)
#define RMODULE_HEADER(entry_, type_) \
{ \
.magic = RMODULE_MAGIC, \
.version = RMODULE_VERSION_1, \
.type = type_, \
.payload_begin_offset = FIELD_ENTRY(_payload_begin_offset), \
.payload_end_offset = FIELD_ENTRY(_payload_end_offset), \
.relocations_begin_offset = \
FIELD_ENTRY(_relocations_begin_offset), \
.relocations_end_offset = \
FIELD_ENTRY(_relocations_end_offset), \
.module_link_start_address = \
FIELD_ENTRY(_module_link_start_addr), \
.module_program_size = FIELD_ENTRY(_module_program_size), \
.module_entry_point = FIELD_ENTRY(entry_), \
.parameters_begin = FIELD_ENTRY(_module_params_begin), \
.parameters_end = FIELD_ENTRY(_module_params_end), \
.bss_begin = FIELD_ENTRY(_bss), \
.bss_end = FIELD_ENTRY(_ebss), \
}
/* Private data structures below should not be used directly. */
/* All fields with '_offset' in the name are byte offsets into the flat blob.
* The linker and the linker script takes are of assigning the values. */
struct rmodule_header {