multiboot2: Add description of support for relocatable images

Signed-off-by: Daniel Kiper <daniel.kiper@oracle.com>
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
This commit is contained in:
Daniel Kiper committed 2016-12-14 14:03:45 +01:00
1 parent 4f0405eeb3
commit 7b35cf63f8
2 files changed
+80

No files matched your search

+56
View File
@@ -353,6 +353,7 @@ executable header.
* Console header tags::
* Module alignment tag::
* EFI boot services tag::
* Relocatable header tag::
@end menu
@@ -679,6 +680,47 @@ u32 | size = 8 |
This tag indicates that payload supports starting without
terminating boot services.
@node Relocatable header tag
@subsection Relocatable header tag
@example
@group
+-------------------+
u16 | type = 10 |
u16 | flags |
u32 | size = 24 |
u32 | min_addr |
u32 | max_addr |
u32 | align |
u32 | preference |
+-------------------+
@end group
@end example
This tag indicates that image is relocatable.
The meaning of each field is as follows:
@table @code
@item min_addr
Lowest possible physical address at which image should be loaded.
The bootloader cannot load any part of image below this address.
@item max_addr
Highest possible physical address at which loaded image should end.
The bootloader cannot load any part of image above this address.
@item align
Image alignment in memory, e.g. 4096.
@item preference
It contains load address placement suggestion for boot loader.
Boot loader should follow it. @samp{0} means none, @samp{1} means
load image at lowest possible address but not lower than min_addr
and @samp{2} means load image at highest possible address but not
higher than max_addr.
@end table
@node Machine state
@section MIPS machine state
@@ -1323,6 +1365,20 @@ u64 | pointer |
This tag contains pointer to EFI amd64 image handle.
Usually it is boot loader image handle.
@subsection Image load base physical address
@example
@group
+-------------------+
u32 | type = 21 |
u32 | size = 12 |
u32 | load_base_addr |
+-------------------+
@end group
@end example
This tag contains image load base physical address. It is
provided only if image has relocatable header tag.
@node Examples
@chapter Examples
+24
View File
@@ -62,6 +62,7 @@
#define MULTIBOOT_TAG_TYPE_EFI_BS 18
#define MULTIBOOT_TAG_TYPE_EFI32_IH 19
#define MULTIBOOT_TAG_TYPE_EFI64_IH 20
#define MULTIBOOT_TAG_TYPE_LOAD_BASE_ADDR 21
#define MULTIBOOT_HEADER_TAG_END 0
#define MULTIBOOT_HEADER_TAG_INFORMATION_REQUEST 1
@@ -73,11 +74,16 @@
#define MULTIBOOT_HEADER_TAG_EFI_BS 7
#define MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS_EFI32 8
#define MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS_EFI64 9
#define MULTIBOOT_HEADER_TAG_RELOCATABLE 10
#define MULTIBOOT_ARCHITECTURE_I386 0
#define MULTIBOOT_ARCHITECTURE_MIPS32 4
#define MULTIBOOT_HEADER_TAG_OPTIONAL 1
#define MULTIBOOT_LOAD_PREFERENCE_NONE 0
#define MULTIBOOT_LOAD_PREFERENCE_LOW 1
#define MULTIBOOT_LOAD_PREFERENCE_HIGH 2
#define MULTIBOOT_CONSOLE_FLAGS_CONSOLE_REQUIRED 1
#define MULTIBOOT_CONSOLE_FLAGS_EGA_TEXT_SUPPORTED 2
@@ -162,6 +168,17 @@ struct multiboot_header_tag_module_align
multiboot_uint32_t size;
};
struct multiboot_header_tag_relocatable
{
multiboot_uint16_t type;
multiboot_uint16_t flags;
multiboot_uint32_t size;
multiboot_uint32_t min_addr;
multiboot_uint32_t max_addr;
multiboot_uint32_t align;
multiboot_uint32_t preference;
};
struct multiboot_color
{
multiboot_uint8_t red;
@@ -388,6 +405,13 @@ struct multiboot_tag_efi64_ih
multiboot_uint64_t pointer;
};
struct multiboot_tag_load_base_addr
{
multiboot_uint32_t type;
multiboot_uint32_t size;
multiboot_uint32_t load_base_addr;
};
#endif /* ! ASM_FILE */
#endif /* ! MULTIBOOT_HEADER */