mirror of
https://github.com/xen-project/xen.git
synced 2026-10-30 03:00:05 +01:00
x86/EFI: warn about r/o sections requiring relocations
EFI implementations may write-protect r/o sections, but we need to apply relocations. Eliminate the one present case of a r/o section with relocations (.init.text, which is now being combined with .init.data into just .init). Also correct a few other format strings (to account for the possibly missing NUL in section names) in mkreloc.c. Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
This commit is contained in:
1 parent
4f88c48708
commit
1308f0170c
2 files changed
+15
-8
No files matched your search
@@ -66,8 +66,9 @@ struct coff_section {
|
||||
uint16_t relocation_count;
|
||||
uint16_t line_number_count;
|
||||
uint32_t flags;
|
||||
#define COFF_SECTION_BSS 0x00000080
|
||||
#define COFF_SECTION_DISCARDABLE 0x02000000
|
||||
#define COFF_SECTION_BSS 0x00000080U
|
||||
#define COFF_SECTION_DISCARDABLE 0x02000000U
|
||||
#define COFF_SECTION_WRITEABLE 0x80000000U
|
||||
};
|
||||
|
||||
static void usage(const char *cmd, int rc)
|
||||
@@ -224,7 +225,7 @@ static void diff_sections(const unsigned char *ptr1, const unsigned char *ptr2,
|
||||
if ( i < disp || i + width - disp > sec->file_size )
|
||||
{
|
||||
fprintf(stderr,
|
||||
"Bogus difference at %s:%08" PRIxFAST32 "\n",
|
||||
"Bogus difference at %.8s:%08" PRIxFAST32 "\n",
|
||||
sec->name, i);
|
||||
exit(3);
|
||||
}
|
||||
@@ -235,7 +236,7 @@ static void diff_sections(const unsigned char *ptr1, const unsigned char *ptr2,
|
||||
if ( delta != diff )
|
||||
{
|
||||
fprintf(stderr,
|
||||
"Difference at %s:%08" PRIxFAST32 " is %#" PRIxFAST64
|
||||
"Difference at %.8s:%08" PRIxFAST32 " is %#" PRIxFAST64
|
||||
" (expected %#" PRIxFAST64 ")\n",
|
||||
sec->name, i, delta, diff);
|
||||
continue;
|
||||
@@ -261,11 +262,16 @@ static void diff_sections(const unsigned char *ptr1, const unsigned char *ptr2,
|
||||
else if ( rva != cur_rva )
|
||||
{
|
||||
fprintf(stderr,
|
||||
"Cannot handle decreasing RVA (at %s:%08" PRIxFAST32 ")\n",
|
||||
"Cannot handle decreasing RVA (at %.8s:%08" PRIxFAST32 ")\n",
|
||||
sec->name, i);
|
||||
exit(3);
|
||||
}
|
||||
|
||||
if ( !(sec->flags & COFF_SECTION_WRITEABLE) )
|
||||
fprintf(stderr,
|
||||
"Warning: relocation to r/o section %.8s:%08" PRIxFAST32 "\n",
|
||||
sec->name, i);
|
||||
|
||||
printf("\t.word (%u << 12) | 0x%03" PRIxFAST32 "\n",
|
||||
reloc, sec->rva + i - disp - rva);
|
||||
reloc_size += 2;
|
||||
|
||||
@@ -155,7 +155,7 @@ SECTIONS
|
||||
__2M_init_start = .; /* Start of 2M superpages, mapped RWX (boot only). */
|
||||
. = ALIGN(PAGE_SIZE); /* Init code and data */
|
||||
__init_begin = .;
|
||||
.init.text : {
|
||||
.init : {
|
||||
_sinittext = .;
|
||||
*(.init.text)
|
||||
/*
|
||||
@@ -165,8 +165,9 @@ SECTIONS
|
||||
*/
|
||||
*(.altinstr_replacement)
|
||||
_einittext = .;
|
||||
} :text
|
||||
.init.data : {
|
||||
|
||||
. = ALIGN(SMP_CACHE_BYTES);
|
||||
|
||||
*(.init.rodata)
|
||||
*(.init.rodata.rel)
|
||||
*(.init.rodata.str*)
|
||||
|
||||