From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=209.132.183.28; helo=mx1.redhat.com; envelope-from=lersek@redhat.com; receiver=edk2-devel@lists.01.org Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 8CE392119C881 for ; Wed, 12 Dec 2018 03:48:09 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id ED9832D2BFE; Wed, 12 Dec 2018 11:48:08 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-120-211.rdu2.redhat.com [10.10.120.211]) by smtp.corp.redhat.com (Postfix) with ESMTP id F0034600C9; Wed, 12 Dec 2018 11:48:06 +0000 (UTC) To: Ard Biesheuvel , edk2-devel@lists.01.org Cc: Michael D Kinney , Liming Gao , Bob Feng , Leif Lindholm References: <20181212103308.8099-1-ard.biesheuvel@linaro.org> <20181212103308.8099-2-ard.biesheuvel@linaro.org> From: Laszlo Ersek Message-ID: <8d8eee06-6e81-781c-ae27-edbd0c9dff7e@redhat.com> Date: Wed, 12 Dec 2018 12:48:05 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: <20181212103308.8099-2-ard.biesheuvel@linaro.org> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Wed, 12 Dec 2018 11:48:09 +0000 (UTC) Subject: Re: [PATCH 1/3] MdePkg/BaseMemoryLibOptDxe ARM: add missing function annotations X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Dec 2018 11:48:10 -0000 Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit On 12/12/18 11:33, Ard Biesheuvel wrote: > ARM uses the low order bit of a branch target address to decide in > which execution mode (ARM or Thumb) a function needs to be called. > In order for this to work across object files, ELF function symbols > will have the low bit set if they were emitted in Thumb mode and > cleared otherwise. This annotation is only emitted if the ELF symbols > are annotated as function, since taking the address of some data > symbol (e.g., a literal) should not produce a value with the low bit > set, even if it appears in an object file containing Thumb code. > > This means that all functions coded in assembler must have this > function annotation, or they may end up getting called in the > wrong mode, crashing the program. > > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Ard Biesheuvel > --- > MdePkg/Library/BaseMemoryLibOptDxe/Arm/CompareGuid.S | 1 + > MdePkg/Library/BaseMemoryLibOptDxe/Arm/CompareMem.S | 1 + > MdePkg/Library/BaseMemoryLibOptDxe/Arm/CopyMem.S | 1 + > MdePkg/Library/BaseMemoryLibOptDxe/Arm/SetMem.S | 5 +++++ > 4 files changed, 8 insertions(+) > > diff --git a/MdePkg/Library/BaseMemoryLibOptDxe/Arm/CompareGuid.S b/MdePkg/Library/BaseMemoryLibOptDxe/Arm/CompareGuid.S > index 6d0089049d48..b74056fa1f5f 100644 > --- a/MdePkg/Library/BaseMemoryLibOptDxe/Arm/CompareGuid.S > +++ b/MdePkg/Library/BaseMemoryLibOptDxe/Arm/CompareGuid.S > @@ -30,6 +30,7 @@ > .thumb > .syntax unified > .align 5 > + .type ASM_PFX(InternalMemCompareGuid), %function > ASM_GLOBAL ASM_PFX(InternalMemCompareGuid) > ASM_PFX(InternalMemCompareGuid): > push {r4, lr} > diff --git a/MdePkg/Library/BaseMemoryLibOptDxe/Arm/CompareMem.S b/MdePkg/Library/BaseMemoryLibOptDxe/Arm/CompareMem.S > index 9483aab61a0c..25a9a0994524 100644 > --- a/MdePkg/Library/BaseMemoryLibOptDxe/Arm/CompareMem.S > +++ b/MdePkg/Library/BaseMemoryLibOptDxe/Arm/CompareMem.S > @@ -46,6 +46,7 @@ > .thumb > .syntax unified > .align 5 > + .type ASM_PFX(InternalMemCompareMem), %function > ASM_GLOBAL ASM_PFX(InternalMemCompareMem) > ASM_PFX(InternalMemCompareMem): > push {r4-r8, lr} > diff --git a/MdePkg/Library/BaseMemoryLibOptDxe/Arm/CopyMem.S b/MdePkg/Library/BaseMemoryLibOptDxe/Arm/CopyMem.S > index 195a0b23f770..e1543f3c2a43 100644 > --- a/MdePkg/Library/BaseMemoryLibOptDxe/Arm/CopyMem.S > +++ b/MdePkg/Library/BaseMemoryLibOptDxe/Arm/CopyMem.S > @@ -42,6 +42,7 @@ InternalMemCopyMem ( > IN UINTN Length > ) > **/ > + .type ASM_PFX(InternalMemCopyMem), %function > ASM_GLOBAL ASM_PFX(InternalMemCopyMem) > ASM_PFX(InternalMemCopyMem): > push {r4-r11, lr} > diff --git a/MdePkg/Library/BaseMemoryLibOptDxe/Arm/SetMem.S b/MdePkg/Library/BaseMemoryLibOptDxe/Arm/SetMem.S > index 2d8f4d5b8621..928c1a12d558 100644 > --- a/MdePkg/Library/BaseMemoryLibOptDxe/Arm/SetMem.S > +++ b/MdePkg/Library/BaseMemoryLibOptDxe/Arm/SetMem.S > @@ -16,6 +16,7 @@ > .thumb > .syntax unified > .align 5 > + .type ASM_PFX(InternalMemSetMem16), %function > ASM_GLOBAL ASM_PFX(InternalMemSetMem16) > ASM_PFX(InternalMemSetMem16): > uxth r2, r2 > @@ -23,17 +24,20 @@ ASM_PFX(InternalMemSetMem16): > orr r2, r2, r2, lsl #16 > b 0f > > + .type ASM_PFX(InternalMemSetMem32), %function > ASM_GLOBAL ASM_PFX(InternalMemSetMem32) > ASM_PFX(InternalMemSetMem32): > lsl r1, r1, #2 > b 0f > > + .type ASM_PFX(InternalMemSetMem64), %function > ASM_GLOBAL ASM_PFX(InternalMemSetMem64) > ASM_PFX(InternalMemSetMem64): > lsl r1, r1, #3 > b 1f > > .align 5 > + .type ASM_PFX(InternalMemSetMem), %function > ASM_GLOBAL ASM_PFX(InternalMemSetMem) > ASM_PFX(InternalMemSetMem): > uxtb r2, r2 > @@ -41,6 +45,7 @@ ASM_PFX(InternalMemSetMem): > orr r2, r2, r2, lsl #16 > b 0f > > + .type ASM_PFX(InternalMemZeroMem), %function > ASM_GLOBAL ASM_PFX(InternalMemZeroMem) > ASM_PFX(InternalMemZeroMem): > movs r2, #0 > Acked-by: Laszlo Ersek