Each expression has a language so we should be able to get the Language* for 
renderscript:


    lldb_private::Language* language = lldb_private::Language::FindPlugin 
(m_expr.GetLanguage());

Then you can add a new virtual class on lldb_private::Language that can get any 
additional compiler flags needed for expressions and just make it work? The 
renderscript language would set the appropriate ABI flags needed?

Greg


> On Dec 3, 2015, at 8:44 AM, Luke Drummond via lldb-dev 
> <lldb-dev@lists.llvm.org> wrote:
> 
> Hello all
> 
> I've recently tracked down a problem in the expression evaluation engine for 
> lldb, and I'm hoping for some historical context, and possibly some direction 
> on the most appropriate fix.
> 
> ## Problem
> 
> I'd like to be able to set some target options for the JIT when calling `expr 
> myRenderscriptFunction(some_arg)`, so that the JIT compiler generates calling 
> code that matches a given calling convention.
> 
> Expression evaluation on x86 targets for our RenderScript LanguageRuntime 
> requires the JIT to call a RenderScript function with a slightly different 
> ABI than the default detected ABI for the module, (vectors are required to be 
> passed in SSE registers) and there doesn't appear to be a way to configure 
> the `Clang::Compiler` object used in `lldb_private::ClangExpressionParser` to 
> use non-default code-generation options.
> 
> Unfortunately, for now there's no way to get the target options we need in 
> `lldb_private::ClangExpressionParser`. It seems that the constructor for the 
> ClangExpressionParser class hard-codes the target options based on some 
> possibly broken assumptions on the target hardware and ABI available:
> 
> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp?view=markup#l178
> 
> This has been marked a `TODO` in the source, so I've been working on the 
> assumption that there is no currently implemented way to do this, and have 
> been trying to work out the best way to approach this.
> 
> However, as any new implementation may involve touching codepaths I'm not 
> particularly familiar with - or that other people are actively working on - 
> I'd appreciate if anyone on list can suggest whether:
> 
>   1. There's a better way to do what I need (I hope this is the case).
>   2. If not (1) whether the TODOs/FIXMEs in the current ClangExpressionParser 
> implementation are being worked on already.
> 
> I notice that some of the folks at Imagination gave a similar problem 
> statement on this list, back in April, and it was suggested they encode the 
> processor specific features in the ELF header `e_flags` word (header offset 
> 0x24).
> 
>    http://lists.llvm.org/pipermail/lldb-dev/2015-April/007295.html
> 
> I have checked the LLVM source tree, and it seems that there are no i386 
> specific flags specified at the present time, so this path doesn't solve the 
> issue either.
> 
>    http://llvm.org/docs/doxygen/html/Support_2ELF_8h_source.html
> 
> These flags seem to be little-used, and a quick search of my current Linux 
> system's lib32 shared objects directory turned up only four files with 
> non-zero e_flags in their header. I've not been able to track down what they 
> mean (grepping GNU binutils was fruitless).
> 
> Any suggestions are welcome.
> 
> All the Best
> 
> Luke
> 
> -- 
> Codeplay Software Ltd.
> Level C, Argyle House, 3 Lady Lawson St, Edinburgh, EH3 9DR
> https://www.codeplay.com
> _______________________________________________
> lldb-dev mailing list
> lldb-dev@lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev

_______________________________________________
lldb-dev mailing list
lldb-dev@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev

Reply via email to