#define SECTION_ALIGN L1_CACHE_BYTES
 #endif /* CONFIG_STRICT_KERNEL_RWX */
 
+#define PECOFF_SECTION_ALIGNMENT        0x1000
+#define PECOFF_FILE_ALIGNMENT           0x200
+
 #endif /* _ASM_RISCV_SET_MEMORY_H */
 
 
 #include <linux/pe.h>
 #include <linux/sizes.h>
+#include <asm/set_memory.h>
 
        .macro  __EFI_PE_HEADER
        .long   PE_MAGIC
        .byte   0x02                                    // MajorLinkerVersion
        .byte   0x14                                    // MinorLinkerVersion
        .long   __pecoff_text_end - efi_header_end      // SizeOfCode
-       .long   __pecoff_data_virt_size                 // SizeOfInitializedData
+#ifdef __clang__
+       .long   __pecoff_data_virt_size                 // SizeOfInitializedData
+#else
+       .long   __pecoff_data_virt_end - __pecoff_text_end      // SizeOfInitializedData
+#endif
        .long   0                                       // SizeOfUninitializedData
        .long   __efistub_efi_pe_entry - _start         // AddressOfEntryPoint
        .long   efi_header_end - _start                 // BaseOfCode
                IMAGE_SCN_MEM_EXECUTE                   // Characteristics
 
        .ascii  ".data\0\0\0"
-       .long   __pecoff_data_virt_size                 // VirtualSize
+#ifdef __clang__
+       .long   __pecoff_data_virt_size                 // VirtualSize
+#else
+       .long   __pecoff_data_virt_end - __pecoff_text_end      // VirtualSize
+#endif
        .long   __pecoff_text_end - _start              // VirtualAddress
-       .long   __pecoff_data_raw_size                  // SizeOfRawData
+#ifdef __clang__
+       .long   __pecoff_data_raw_size                  // SizeOfRawData
+#else
+       .long   __pecoff_data_raw_end - __pecoff_text_end       // SizeOfRawData
+#endif
        .long   __pecoff_text_end - _start              // PointerToRawData
 
        .long   0                                       // PointerToRelocations
 
 
 jiffies = jiffies_64;
 
-PECOFF_SECTION_ALIGNMENT = 0x1000;
-PECOFF_FILE_ALIGNMENT = 0x200;
-
 SECTIONS
 {
        /* Beginning of code and text segment */
 #ifdef CONFIG_EFI
        .pecoff_edata_padding : { BYTE(0); . = ALIGN(PECOFF_FILE_ALIGNMENT); }
        __pecoff_data_raw_size = ABSOLUTE(. - __pecoff_text_end);
+       __pecoff_data_raw_end = ABSOLUTE(.);
 #endif
 
        /* End of data section */
 #ifdef CONFIG_EFI
        . = ALIGN(PECOFF_SECTION_ALIGNMENT);
        __pecoff_data_virt_size = ABSOLUTE(. - __pecoff_text_end);
+       __pecoff_data_virt_end = ABSOLUTE(.);
 #endif
        _end = .;