<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <p><br>
    </p>
    <br>
    <div class="moz-cite-prefix">On 7/5/17 2:42 PM, Asiri Rathnayake
      wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:CAGhzUqJdgzGH5GtewzJ00XScO5nWB4h+6Ee5C7fE0AdfnoQ2vg@mail.gmail.com">
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <div dir="auto">
        <div><br>
          <div class="gmail_extra"><br>
            <div class="gmail_quote">On 5 Jul 2017 7:34 pm, "Weiming
              Zhao via Phabricator via llvm-commits" <<a
                href="mailto:llvm-commits@lists.llvm.org"
                moz-do-not-send="true">llvm-commits@lists.llvm.org</a>>
              wrote:<br type="attribution">
              <blockquote class="quote" style="margin:0 0 0
                .8ex;border-left:1px #ccc solid;padding-left:1ex">weimingz
                added a comment.<br>
                <div class="quoted-text"><br>
                  In <a href="https://reviews.llvm.org/D34918#799141"
                    rel="noreferrer" target="_blank"
                    moz-do-not-send="true">https://reviews.llvm.org/<wbr>D34918#799141</a>,
                  @EricWF wrote:<br>
                  <br>
                  > > On architectures without atomic
                  instructions, the atomic built-ins cannot be lowered.
                  If _LIBCPP_HAS_NO_THREADS is enabled, we should just
                  use regular code.<br>
                  ><br>
                </div>
                <div class="quoted-text">> Does "cannot be lowered"
                  mean using them causes a compile error? If so I'm
                  curious as to why you're the first one to run into
                  this issue. If no compile error is caused then could
                  you re-explain the rational for this change.<br>
                  ><br>
                  > In <a
                    href="https://reviews.llvm.org/D34918#798422"
                    rel="noreferrer" target="_blank"
                    moz-do-not-send="true">https://reviews.llvm.org/<wbr>D34918#798422</a>,
                  @weimingz wrote:<br>
                  ><br>
                  > > In <a
                    href="https://reviews.llvm.org/D34918#797661"
                    rel="noreferrer" target="_blank"
                    moz-do-not-send="true">https://reviews.llvm.org/<wbr>D34918#797661</a>,
                  @joerg wrote:<br>
                  > ><br>
                  > > > Lock-free atomic operations are also
                  signal safe. Your code is not. While I don't know
                  whether all this functions are not required to be
                  signal safe, the general assertion is certainly
                  questionable.<br>
                  > ><br>
                  > ><br>
                  > > No, they are no signal safe.  Per [1], "call
                  to any library function, except the following
                  signal-safe functions (note, in particular, dynamic
                  allocation is not signal-safe):".<br>
                  > ><br>
                  > > Locale.cpp should be fine with the change.<br>
                  > >  {set,get}_new_handler,
                  {set,get}_unexpected_handler are not in the list.<br>
                  > >  I'm not very sure about
                  "__libcpp_refstring". Seems it is only used by
                  stdexcept. Although throw expression is explicitly
                  stated as not signal safe, the ref counting of
                  stdexcept might be. We can leave it unchanged.<br>
                  ><br>
                  ><br>
                  > It would be really nice if we didn't cause the
                  user unnecessary pain. Just because these functions
                  aren't *required* to be signal safe doesn't
                  necessarily mean they shouldn't be.<br>
                  ><br>
                  > If this patch is indeed needed I would like to
                  see it done similar to how `__libcpp_refcount_foo`
                  <<a
href="https://github.com/llvm-mirror/libcxx/blob/master/include/memory#L3370"
                    rel="noreferrer" target="_blank"
                    moz-do-not-send="true">https://github.com/llvm-<wbr>mirror/libcxx/blob/master/<wbr>include/memory#L3370</a>>
                  or the `src/include/atomic_support.h` <<a
href="https://github.com/llvm-mirror/libcxx/blob/master/src/include/atomic_support.h"
                    rel="noreferrer" target="_blank"
                    moz-do-not-send="true">https://github.com/llvm-<wbr>mirror/libcxx/blob/master/src/<wbr>include/atomic_support.h</a>>
                  logic is implemented, where instead of having `#ifdef`
                  branches at each call site the logic has been
                  abstracted away into a function.<br>
                  ><br>
                  > That being said I would like to better understand
                  the rational for this patch before proceeding.<br>
                  <br>
                  <br>
                </div>
                When the builtin cannot be lowered, compiler just emits
                function call, which eventually becomes a linker error
                as no libs implement those functions (libgcc.
                libclang-rt, libc)<br>
              </blockquote>
            </div>
          </div>
        </div>
        <div dir="auto"><br>
        </div>
        <div dir="auto">
          <div dir="auto" style="font-family:sans-serif">I thought this
            is where compiler-rt comes in? You should be able to build
            that for cortex-m0.</div>
          <div dir="auto" style="font-family:sans-serif"><br>
          </div>
          <div dir="auto" style="font-family:sans-serif">I haven't seen
            this on bare-metal though, I think it works for Linux
            platforms. Not 100% sure. Adding Renato for comments.</div>
        </div>
      </div>
    </blockquote>
    <br>
    Yeah, it can be implemented via a syscall on linux, but on baremetal
    you have to disable/re-enable interrupts in order to have something
    that behaves like compare & swap.<br>
    <br>
    <br>
    Jon<br>
    <blockquote type="cite"
cite="mid:CAGhzUqJdgzGH5GtewzJ00XScO5nWB4h+6Ee5C7fE0AdfnoQ2vg@mail.gmail.com">
      <div dir="auto">
        <div dir="auto">
          <div dir="auto" style="font-family:sans-serif"><br>
          </div>
          <div dir="auto" style="font-family:sans-serif">Cheers,</div>
          <div dir="auto" style="font-family:sans-serif"><br>
          </div>
          <div dir="auto" style="font-family:sans-serif">/ Asiri</div>
        </div>
        <div dir="auto"><br>
        </div>
        <div dir="auto">
          <div class="gmail_extra">
            <div class="gmail_quote">
              <blockquote class="quote" style="margin:0 0 0
                .8ex;border-left:1px #ccc solid;padding-left:1ex">
                <div class="quoted-text"><br>
                  <br>
                  Repository:<br>
                    rL LLVM<br>
                  <br>
                  <a href="https://reviews.llvm.org/D34918"
                    rel="noreferrer" target="_blank"
                    moz-do-not-send="true">https://reviews.llvm.org/<wbr>D34918</a><br>
                  <br>
                  <br>
                  <br>
                </div>
                <div class="elided-text">______________________________<wbr>_________________<br>
                  llvm-commits mailing list<br>
                  <a href="mailto:llvm-commits@lists.llvm.org"
                    moz-do-not-send="true">llvm-commits@lists.llvm.org</a><br>
                  <a
                    href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits"
                    rel="noreferrer" target="_blank"
                    moz-do-not-send="true">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
                </div>
              </blockquote>
            </div>
            <br>
          </div>
        </div>
      </div>
    </blockquote>
    <br>
    <pre class="moz-signature" cols="72">-- 
Jon Roelofs
<a class="moz-txt-link-abbreviated" href="mailto:jonathan@codesourcery.com">jonathan@codesourcery.com</a>
CodeSourcery / Mentor Embedded / Siemens</pre>
  </body>
</html>