From d1698370803ab502ca3a23bdf4a6298246fec81b Mon Sep 17 00:00:00 2001 From: Dong-Heon Jung Date: Mon, 25 Mar 2024 18:17:06 +0900 Subject: [PATCH 1/2] Add RISCV64 TargetArchitecture It is for supporting RISCV64 in cecil Add RISCV64 to TargetArchitecture and update to check for pe64 --- Mono.Cecil.PE/ImageWriter.cs | 3 ++- Mono.Cecil/AssemblyWriter.cs | 3 ++- Mono.Cecil/ModuleKind.cs | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Mono.Cecil.PE/ImageWriter.cs b/Mono.Cecil.PE/ImageWriter.cs index 3d8d8898a..d5c11bce8 100644 --- a/Mono.Cecil.PE/ImageWriter.cs +++ b/Mono.Cecil.PE/ImageWriter.cs @@ -61,7 +61,8 @@ sealed class ImageWriter : BinaryStreamWriter { if (metadataOnly) return; - this.pe64 = module.Architecture == TargetArchitecture.AMD64 || module.Architecture == TargetArchitecture.IA64 || module.Architecture == TargetArchitecture.ARM64; + this.pe64 = module.Architecture == TargetArchitecture.AMD64 || module.Architecture == TargetArchitecture.IA64 || module.Architecture == TargetArchitecture.ARM64 || + module.Architecture == TargetArchitecture.RiscV64; this.has_reloc = module.Architecture == TargetArchitecture.I386; this.GetDebugHeader (); this.GetWin32Resources (); diff --git a/Mono.Cecil/AssemblyWriter.cs b/Mono.Cecil/AssemblyWriter.cs index be44729cf..71a7a5dc4 100644 --- a/Mono.Cecil/AssemblyWriter.cs +++ b/Mono.Cecil/AssemblyWriter.cs @@ -987,7 +987,8 @@ TextMap CreateTextMap () var map = new TextMap (); map.AddMap (TextSegment.ImportAddressTable, module.Architecture == TargetArchitecture.I386 ? 8 : 0); map.AddMap (TextSegment.CLIHeader, 0x48, 8); - var pe64 = module.Architecture == TargetArchitecture.AMD64 || module.Architecture == TargetArchitecture.IA64 || module.Architecture == TargetArchitecture.ARM64; + var pe64 = module.Architecture == TargetArchitecture.AMD64 || module.Architecture == TargetArchitecture.IA64 || module.Architecture == TargetArchitecture.ARM64 || + module.Architecture == TargetArchitecture.RiscV64; // Alignment of the code segment must be set before the code is written // These alignment values are probably not necessary, but are being left in // for now in case something requires them. diff --git a/Mono.Cecil/ModuleKind.cs b/Mono.Cecil/ModuleKind.cs index 2cd084db5..1322b9d7c 100644 --- a/Mono.Cecil/ModuleKind.cs +++ b/Mono.Cecil/ModuleKind.cs @@ -32,6 +32,7 @@ public enum TargetArchitecture { ARM = 0x01c0, ARMv7 = 0x01c4, ARM64 = 0xaa64, + RiscV64 = 0x5064, } [Flags] From ac7c07f80e0f35dc6bcda39b8181a8576b5901e7 Mon Sep 17 00:00:00 2001 From: Dong-Heon Jung Date: Fri, 12 Apr 2024 11:30:47 +0900 Subject: [PATCH 2/2] Revert pe64 check --- Mono.Cecil.PE/ImageWriter.cs | 3 +-- Mono.Cecil/AssemblyWriter.cs | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/Mono.Cecil.PE/ImageWriter.cs b/Mono.Cecil.PE/ImageWriter.cs index d5c11bce8..3d8d8898a 100644 --- a/Mono.Cecil.PE/ImageWriter.cs +++ b/Mono.Cecil.PE/ImageWriter.cs @@ -61,8 +61,7 @@ sealed class ImageWriter : BinaryStreamWriter { if (metadataOnly) return; - this.pe64 = module.Architecture == TargetArchitecture.AMD64 || module.Architecture == TargetArchitecture.IA64 || module.Architecture == TargetArchitecture.ARM64 || - module.Architecture == TargetArchitecture.RiscV64; + this.pe64 = module.Architecture == TargetArchitecture.AMD64 || module.Architecture == TargetArchitecture.IA64 || module.Architecture == TargetArchitecture.ARM64; this.has_reloc = module.Architecture == TargetArchitecture.I386; this.GetDebugHeader (); this.GetWin32Resources (); diff --git a/Mono.Cecil/AssemblyWriter.cs b/Mono.Cecil/AssemblyWriter.cs index 71a7a5dc4..be44729cf 100644 --- a/Mono.Cecil/AssemblyWriter.cs +++ b/Mono.Cecil/AssemblyWriter.cs @@ -987,8 +987,7 @@ TextMap CreateTextMap () var map = new TextMap (); map.AddMap (TextSegment.ImportAddressTable, module.Architecture == TargetArchitecture.I386 ? 8 : 0); map.AddMap (TextSegment.CLIHeader, 0x48, 8); - var pe64 = module.Architecture == TargetArchitecture.AMD64 || module.Architecture == TargetArchitecture.IA64 || module.Architecture == TargetArchitecture.ARM64 || - module.Architecture == TargetArchitecture.RiscV64; + var pe64 = module.Architecture == TargetArchitecture.AMD64 || module.Architecture == TargetArchitecture.IA64 || module.Architecture == TargetArchitecture.ARM64; // Alignment of the code segment must be set before the code is written // These alignment values are probably not necessary, but are being left in // for now in case something requires them.