diff options
Diffstat (limited to '0027-x86-deal-with-gcc12-release-build-issues.patch')
-rw-r--r-- | 0027-x86-deal-with-gcc12-release-build-issues.patch | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/0027-x86-deal-with-gcc12-release-build-issues.patch b/0027-x86-deal-with-gcc12-release-build-issues.patch new file mode 100644 index 0000000..d26f6d3 --- /dev/null +++ b/0027-x86-deal-with-gcc12-release-build-issues.patch @@ -0,0 +1,65 @@ +From a095c6cde8a717325cc31bb393c547cad5e16e35 Mon Sep 17 00:00:00 2001 +From: Jan Beulich <jbeulich@suse.com> +Date: Wed, 27 Jul 2022 09:30:24 +0200 +Subject: [PATCH 27/67] x86: deal with gcc12 release build issues + +While a number of issues we previously had with pre-release gcc12 were +fixed in the final release, we continue to have one issue (with multiple +instances) when doing release builds (i.e. at higher optimization +levels): The compiler takes issue with subtracting (always 1 in our +case) from artifical labels (expressed as array) marking the end of +certain regions. This isn't an unreasonable position to take. Simply +hide the "array-ness" by casting to an integer type. To keep things +looking consistently, apply the same cast also on the respective +expressions dealing with the starting addresses. (Note how +efi_arch_memory_setup()'s l2_table_offset() invocations avoid a similar +issue by already having the necessary casts.) In is_xen_fixed_mfn() +further switch from __pa() to virt_to_maddr() to better match the left +sides of the <= operators. + +Reported-by: Charles Arnold <carnold@suse.com> +Signed-off-by: Jan Beulich <jbeulich@suse.com> +Acked-by: Andrew Cooper <andrew.cooper3@citrix.com> +master commit: 9723507daf2120131410c91980d4e4d9b0d0aa90 +master date: 2022-07-19 08:37:29 +0200 +--- + xen/arch/x86/efi/efi-boot.h | 6 +++--- + xen/include/asm-x86/mm.h | 4 ++-- + 2 files changed, 5 insertions(+), 5 deletions(-) + +diff --git a/xen/arch/x86/efi/efi-boot.h b/xen/arch/x86/efi/efi-boot.h +index 2541ba1f320a..84fd77931456 100644 +--- a/xen/arch/x86/efi/efi-boot.h ++++ b/xen/arch/x86/efi/efi-boot.h +@@ -624,10 +624,10 @@ static void __init efi_arch_memory_setup(void) + * appropriate l2 slots to map. + */ + #define l2_4G_offset(a) \ +- (((UINTN)(a) >> L2_PAGETABLE_SHIFT) & (4 * L2_PAGETABLE_ENTRIES - 1)) ++ (((a) >> L2_PAGETABLE_SHIFT) & (4 * L2_PAGETABLE_ENTRIES - 1)) + +- for ( i = l2_4G_offset(_start); +- i <= l2_4G_offset(_end - 1); ++i ) ++ for ( i = l2_4G_offset((UINTN)_start); ++ i <= l2_4G_offset((UINTN)_end - 1); ++i ) + { + l2_pgentry_t pte = l2e_from_paddr(i << L2_PAGETABLE_SHIFT, + __PAGE_HYPERVISOR | _PAGE_PSE); +diff --git a/xen/include/asm-x86/mm.h b/xen/include/asm-x86/mm.h +index 5c19b71eca70..71dd28f126c3 100644 +--- a/xen/include/asm-x86/mm.h ++++ b/xen/include/asm-x86/mm.h +@@ -309,8 +309,8 @@ struct page_info + #define is_xen_heap_mfn(mfn) \ + (mfn_valid(mfn) && is_xen_heap_page(mfn_to_page(mfn))) + #define is_xen_fixed_mfn(mfn) \ +- (((mfn_to_maddr(mfn)) >= __pa(_stext)) && \ +- ((mfn_to_maddr(mfn)) <= __pa(__2M_rwdata_end - 1))) ++ (((mfn_to_maddr(mfn)) >= virt_to_maddr((unsigned long)_stext)) && \ ++ ((mfn_to_maddr(mfn)) <= virt_to_maddr((unsigned long)__2M_rwdata_end - 1))) + + #define PRtype_info "016lx"/* should only be used for printk's */ + +-- +2.37.3 + |