From 60e0471175657de87767b9e14ce10e281d0faaeb Mon Sep 17 00:00:00 2001 From: Mikhail Krichanov Date: Fri, 17 Mar 2023 12:13:27 +0300 Subject: [PATCH] MdePkg/BasePeCoffLib2: Fix ARM Thumb apply relocation routine Thumb instructions are either 16-bit or 32-bit, and are aligned on a two-byte boundary Signed-off-by: Savva Mitrofanov --- MdePkg/Library/BasePeCoffLib2/PeCoffRelocate.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/MdePkg/Library/BasePeCoffLib2/PeCoffRelocate.c b/MdePkg/Library/BasePeCoffLib2/PeCoffRelocate.c index e46d70ea49..90e7a8ccb0 100644 --- a/MdePkg/Library/BasePeCoffLib2/PeCoffRelocate.c +++ b/MdePkg/Library/BasePeCoffLib2/PeCoffRelocate.c @@ -195,7 +195,7 @@ ThumbMovwMovtImmediatePatch ( STATIC VOID ThumbMovwMovtImmediateFixup ( - IN OUT VOID *Fixup, + IN OUT VOID *Instructions, IN UINT64 Adjust ) { @@ -203,8 +203,8 @@ ThumbMovwMovtImmediateFixup ( // // Relocate the instruction pair. // - Fixup32 = ThumbMovwMovtImmediateAddress (Fixup) + (UINT32) Adjust; - ThumbMovwMovtImmediatePatch (Fixup, Fixup32); + Fixup32 = ThumbMovwMovtImmediateAddress (Instructions) + (UINT32) Adjust; + ThumbMovwMovtImmediatePatch (Instructions, Fixup32); } /** @@ -379,9 +379,9 @@ InternalApplyRelocation ( } // // Verify the Base Relocation target is sufficiently aligned. - // The ARM THunb instruction pait must start on a 32-bit boundary. + // The ARM Thumb instruction pair must start on a 16-bit boundary. // - if (!IS_ALIGNED (RelocTargetRva, ALIGNOF (UINT32))) { + if (!IS_ALIGNED (RelocTargetRva, ALIGNOF (UINT16))) { DEBUG_RAISE (); return RETURN_VOLUME_CORRUPTED; }