[PATCH] Rework lli-child-target for portability and correctness

Alp Toker alp at nuanti.com
Tue Dec 3 11:26:04 PST 2013


On 03/12/2013 18:05, Reid Kleckner wrote:
> Carving up Support with #ifdefs to support .cpp file inclusion at a 
> distance doesn't seem right.
>
> Why is lli-child-target so large in the first place?  If it links 
> statically and only calls a few helpers out of Support, the linker 
> should avoid linking in unreferenced object files from the static 
> library.  If the .cpp files in Support reference each other too much, 
> maybe we can find a way to factor them differently.

Hi Reid,

Having the lightweight child implementation as a single source is 
important for embedding and deploying the remote JIT if you plan on 
using it anywhere outside the LLVM source tree.

Cross-process (and potentially cross-platform) JIT is an unusual problem 
to solve so it was bound to have an unusual source setup. In this 
instance, I think Andy got it mostly right except for the duplicated 
code, so it'd be a shame to break that model now by introducing a 
dependency on the host build configuration.

I note also that the inc files were originally made to support this use 
case. it's just that they've inadvertently grown a web of 
cross-dependencies in the last few years -- my first patch resolves that 
sufficiently for the lli use case.


>
> Alternatively, we could bring back System for this kind of low-level 
> stuff.

Or you could just fork() from lli, but both would be throwing out the 
baby with the bathwater.

Alp.




>
>
> On Tue, Dec 3, 2013 at 9:34 AM, Alp Toker <alp at nuanti.com 
> <mailto:alp at nuanti.com>> wrote:
>
>     This is a bumper patch to fix assorted MCJIT remote issues, split
>     into two parts for ease of review.
>
>     Minor tweaks outside of lli were necessary to support reuse of
>     LLVM's Support implementation by inclusion without having to link
>     to LLVM.
>
>       9 files changed, 157 insertions(+), 253 deletions(-)
>
>     Patch 1:
>
>     Provide LLVM_STANDALONE for lightweight Support embedders
>
>     This is sufficient to build lli-child-target in a standalone
>     configuration
>     without having to link any LLVM libraries.
>
>     Also fixes a problem in AllocateRWX() where
>     process::get_self()->page_size()
>     was being called repeatedly.
>
>     Patch 2:
>
>     Share a single IPC transport implementation between the child and
>     parent
>     instead of duplicating the code.
>
>     Share the existing LLVM memory management and cache invalidation
>     code instead
>     of copy-and-pasting it. This is complicated; we don't want to
>     maintain two
>     versions but at the same time need to keep lli-child-target free of
>     dependencies.
>
>     Make memory management and instruction cache flushing portable in
>     the child
>     application using LLVM's Support headers in standalone mode.
>     Eliminate lots of
>     copy-and-pasted code.
>
>     Fix a typo that caused the instruction cache invalidation never to
>     run on
>     executable pages, which could be a problem on ARM, PowerPC etc.
>
>     Add assertions for piped read/write. This should help cut down on
>     needless
>     assertions at the callsites.
>
>     Build lli-child-target in a standalone configuration, reducing
>     binary size to
>     24KB down from ~500KB.
>
>     These fixes pave the way for a Windows implementation.
>
>     Alp.
>
>     -- 
>     http://www.nuanti.com
>     the browser experts
>
>
>
>     _______________________________________________
>     llvm-commits mailing list
>     llvm-commits at cs.uiuc.edu <mailto:llvm-commits at cs.uiuc.edu>
>     http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
>

-- 
http://www.nuanti.com
the browser experts




More information about the llvm-commits mailing list