|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2] 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@xxxxxxxx>
---
v2: Don't special case EFI in xen.lds.S.
--- a/xen/arch/x86/efi/mkreloc.c
+++ b/xen/arch/x86/efi/mkreloc.c
@@ -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
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
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
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;
--- a/xen/arch/x86/xen.lds.S
+++ b/xen/arch/x86/xen.lds.S
@@ -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*)
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |