[LLVMdev] Using LLVM code in projects/compiler-rt

Kostya Serebryany kcc at google.com
Fri Jun 1 01:56:53 PDT 2012


On Fri, Jun 1, 2012 at 12:49 PM, Benjamin Kramer
<benny.kra at googlemail.com>wrote:

>
> On 01.06.2012, at 08:14, Kostya Serebryany wrote:
>
> >
> >
> > On Fri, Jun 1, 2012 at 7:13 AM, Chris Lattner <clattner at apple.com>
> wrote:
> > On May 31, 2012, at 6:48 PM, Chandler Carruth wrote:
> >> I'm not sure that this solves the problem.  The reason we have dual
> licenses for the runtime stuff is that we don't want the UIUC license
> (which has a binary attribution clause) to affect stuff built with the
> compiler.  Saying that "clang -fasan produces code that has to binary
> attribute the LLVM license" is pretty lame.
> >>
> >> I think that what is *traditionally* thought of as compiler-rt has
> different needs from ASan/TSan/etc. The latter runtimes are really intended
> to be separate units from the binary; for example none of their code would
> ever be directly emitted into a function, etc. Certainly the scope and
> complexity of them are very different, and so it might still make sense to
> split these into two groups of runtime libraries.
> >
> > To be clear, compiler-rt isn't injected into functions.  Maybe a better
> definition is that compiler-rt is statically linked in, vs the more
> advanced runtimes that are dynamically linked in.
> >
> > Forming the division like this might make it easier to handle the
> attribution issues too enough trickery.
> >
> >> Were I drawing an arbitrary line, I would draw it around the runtime
> libraries which are stand-alone and implement an available spec for which
> other implementations can and do exist. (libgcc, libstdc++, etc etc.)
> Regardless of licensing issues, I suspect making this bucketing more clear
> would simplify some of these projects....
> >
> > Yeah, I completely agree with your goals.  This is one of the big
> concerns I had back when the dual licensing happened in the first place.
> >
> >
> >> Anyways, there seem to be a few, all somewhat bad options left to us
> with ASan/TSan and similar more "advanced" runtimes:
> >>
> >> 1) Swallow the lame binary attribution clause requirement. Document
> this noisily.
> >> 2) Require they are build as DSOs, and thus the attribution restricted
> to that runtime library entity.
> >
> > Maybe 2a: engineer asan so that it *optionally* links to the DSO.  If
> the DSO is present, functionality is enabled, if not, it is silently
> disabled and the app still works (at some performance cost).   Could this
> work?
> >
> > DSO? You mean to make asan.so instead of asan.a?
> > This will work, but may cause confusion. If asan.so is not present, the
> asan-ified binary will crash instantly.
> >
> > For tsan, making it tsan.so instead of tsan.a will cause a huge
> performance penalty because tsan reads TLS on every memory access.
>
> It depends where you need to use LLVM libraries. Going back to the initial
> post of this thread, LLVM libraries will be used by asan/tsan to
> symbolicate stack traces. If that's the only use of LLVM in asan it would
> make a lot of sense to split that part into a DSO and link it on demand.


That'll work too and is indeed simpler.

--kcc


> That way we don't have to link all the (large) debug info code into every
> binary built with asan and have a nice workaround for the licensing issue.
>
> I'm mildly opposed to relicensing parts of LLVM. While it makes sense to
> have lib/Support as liberally licensed as possible I'm afraid that it will
> creep into other parts too. Asking all developers to agree to a license
> change and reimplementing stuff written by people who won't answer is
> feasible but it will be painful and, in my opinion, a waste of development
> resources that are better spent improving LLVM.
>
> - Ben
>
> >
> > --kcc
> >
> >
> >
> >> 3) Build the functionality needed by ASan/TSan/etc independently of
> LLVM's core libraries. Code duplication here, and only a dim hope that we
> could package in a way that lldb or others might be able to shift to depend
> upon the dual-licensed functionality rather than the core LLVM
> functionality.
> >> 4) Start moving core LLVM libraries into a separate 'core library' or
> 'common library' project which has the dual-license requirement, but is a
> "lower-level" component than LLVM itself.
> >
> > #4 is somewhat independently useful anyway.  The support and system
> libraries are the lowest level (from a layering perspective) and most
> reusable across sub-projects.  Actually relicensing them would be a major
> effort though.
> >
> >> #3 seems like painting ourselves into a corner, and borrowing a lot of
> technical debt in the future. I suspect we'll keep having to replicate
> functionality here.
> >
> > Yeah.
> >
> >> #4 is interesting, but a *ton* of work. The Object library, most of
> Support and System, all would have to sink into this core module, all would
> have to get dual-licensed (ow!!! how? some of the contributors are around
> to agree to new license, but not all... likely a fair amount of rewrite
> required to produce new versions of libraries under the correct license).
> >
> > I think that #4 is the best long term answer, but yeah... oww.  If
> you're interested in stack traces in particular, making pieces "optionally
> enabled" seems really attractive.
> >
> > -Chris
> >
> > _______________________________________________
> > LLVM Developers mailing list
> > LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
> >
> >
> > _______________________________________________
> > LLVM Developers mailing list
> > LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120601/29bbf260/attachment.html>


More information about the llvm-dev mailing list