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:: * Console header tags::
* Module alignment tag:: * Module alignment tag::
* EFI boot services tag:: * EFI boot services tag::
* Relocatable header tag::
@end menu @end menu
@@ -679,6 +680,47 @@ u32 | size = 8 |
This tag indicates that payload supports starting without This tag indicates that payload supports starting without
terminating boot services. 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 @node Machine state
@section MIPS machine state @section MIPS machine state
@@ -1323,6 +1365,20 @@ u64 | pointer |
This tag contains pointer to EFI amd64 image handle. This tag contains pointer to EFI amd64 image handle.
Usually it is boot loader 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 @node Examples
@chapter Examples @chapter Examples
+24
View File
@@ -62,6 +62,7 @@
#define MULTIBOOT_TAG_TYPE_EFI_BS 18 #define MULTIBOOT_TAG_TYPE_EFI_BS 18
#define MULTIBOOT_TAG_TYPE_EFI32_IH 19 #define MULTIBOOT_TAG_TYPE_EFI32_IH 19
#define MULTIBOOT_TAG_TYPE_EFI64_IH 20 #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_END 0
#define MULTIBOOT_HEADER_TAG_INFORMATION_REQUEST 1 #define MULTIBOOT_HEADER_TAG_INFORMATION_REQUEST 1
@@ -73,11 +74,16 @@
#define MULTIBOOT_HEADER_TAG_EFI_BS 7 #define MULTIBOOT_HEADER_TAG_EFI_BS 7
#define MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS_EFI32 8 #define MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS_EFI32 8
#define MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS_EFI64 9 #define MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS_EFI64 9
#define MULTIBOOT_HEADER_TAG_RELOCATABLE 10
#define MULTIBOOT_ARCHITECTURE_I386 0 #define MULTIBOOT_ARCHITECTURE_I386 0
#define MULTIBOOT_ARCHITECTURE_MIPS32 4 #define MULTIBOOT_ARCHITECTURE_MIPS32 4
#define MULTIBOOT_HEADER_TAG_OPTIONAL 1 #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_CONSOLE_REQUIRED 1
#define MULTIBOOT_CONSOLE_FLAGS_EGA_TEXT_SUPPORTED 2 #define MULTIBOOT_CONSOLE_FLAGS_EGA_TEXT_SUPPORTED 2
@@ -162,6 +168,17 @@ struct multiboot_header_tag_module_align
multiboot_uint32_t size; 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 struct multiboot_color
{ {
multiboot_uint8_t red; multiboot_uint8_t red;
@@ -388,6 +405,13 @@ struct multiboot_tag_efi64_ih
multiboot_uint64_t pointer; 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 /* ! ASM_FILE */
#endif /* ! MULTIBOOT_HEADER */ #endif /* ! MULTIBOOT_HEADER */