* [PATCH v2] x86/EFI: warn about r/o sections requiring relocations
@ 2017-08-25 14:34 Jan Beulich
2017-08-25 14:40 ` Andrew Cooper
0 siblings, 1 reply; 2+ messages in thread
From: Jan Beulich @ 2017-08-25 14:34 UTC (permalink / raw)
To: xen-devel; +Cc: Andrew Cooper
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>
---
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@lists.xen.org
https://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH v2] x86/EFI: warn about r/o sections requiring relocations
2017-08-25 14:34 [PATCH v2] x86/EFI: warn about r/o sections requiring relocations Jan Beulich
@ 2017-08-25 14:40 ` Andrew Cooper
0 siblings, 0 replies; 2+ messages in thread
From: Andrew Cooper @ 2017-08-25 14:40 UTC (permalink / raw)
To: Jan Beulich, xen-devel
On 25/08/17 15:34, Jan Beulich wrote:
> 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>
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2017-08-25 14:40 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-08-25 14:34 [PATCH v2] x86/EFI: warn about r/o sections requiring relocations Jan Beulich
2017-08-25 14:40 ` Andrew Cooper
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.