[PATCH] Fixes -fsanitize=undefined warning about left-shifting a negative signed value.
Artem Belevich
tra at google.com
Thu Jan 8 13:38:42 PST 2015
Ping!
BTW, the issue the patch fixes is a ubsan warning in the following test
case:
test/ExecutionEngine/RuntimeDyld/AArch64/MachO_ARM64_relocations.s
/tmp/foo.o
third_party/llvm/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOAArch64.h:186:47:
runtime error: left shift of negative value -57344
--Artem
On Tue, Dec 23, 2014 at 1:02 PM, Artem Belevich <tra at google.com> wrote:
>
> ---
> lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOAArch64.h | 5
+++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git
a/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOAArch64.h
b/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOAArch64.h
> index 274c552..8fc58ee 100644
> --- a/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOAArch64.h
> +++ b/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOAArch64.h
> @@ -183,8 +183,9 @@ public:
> assert(isInt<33>(Addend) && "Invalid page reloc value.");
>
> // Encode the addend into the instruction.
> - uint32_t ImmLoValue = (uint32_t)(Addend << 17) & 0x60000000;
> - uint32_t ImmHiValue = (uint32_t)(Addend >> 9) & 0x00FFFFE0;
> + uint64_t AddressBits = Addend & 0x1FFFFF000;
> + uint32_t ImmLoValue = (uint32_t)(AddressBits << 17) & 0x60000000;
> + uint32_t ImmHiValue = (uint32_t)(AddressBits >> 9) & 0x00FFFFE0;
> *p = (*p & 0x9F00001F) | ImmHiValue | ImmLoValue;
> break;
> }
> --
> 2.2.0.rc0.207.ga3a616c
>
--
--Artem Belevich
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150108/4be48bf8/attachment.html>
More information about the llvm-commits
mailing list