[llvm-dev] Hoisting in the presence of volatile loads.

Juneyoung Lee via llvm-dev llvm-dev at lists.llvm.org
Sat Dec 23 11:56:50 PST 2017


Hello.
This might be a trivial question, but is it correct if the signal handler
aborts the program?
For example:

  int *normal = ADDRESS1;
  volatile int* ptr = ADDRESS2;
  int k = *ptr; // segfaults, and the signal handler calls abort()
  int value = *normal; // this may be UB(undefined behavior).

Let's assume that normal is dereferenceable if ptr1 does not raise SEGSEGV,
but accessing normal raises UB if ptr1 raises SEGSEGV.
Before reordering is done, there's no UB because the program will always
abort if UB could happen, but UB may happen after they are reordered.

Best Regards,
Juneyoung Lee

On Thu, Dec 21, 2017 at 4:50 AM, Krzysztof Parzyszek via llvm-dev <
llvm-dev at lists.llvm.org> wrote:

> On 12/20/2017 1:37 PM, Sanjoy Das wrote:>
>
>> Fwiw, I was under the impression that regular loads could *not* be
>> reordered with volatile loads since we could have e.g.:
>>
>>    int *normal = &global_variable;
>>    volatile int* ptr = 0;
>>    int k = *ptr; // segfaults, and the signal handler writes to *normal
>>    int value = *normal;
>>
>> and that we'd have to treat volatile loads and stores essentially as
>> calls to unknown functions.
>>
>
> For this to work, "normal" should be volatile as well.
>
> -Krzysztof
>
> --
> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted
> by The Linux Foundation
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>



-- 

Juneyoung Lee
Software Foundation Lab, Seoul National University
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20171224/6acac74b/attachment.html>


More information about the llvm-dev mailing list