Re: [PATCH v3 19/30] perf clang jit: Insignt BPF and JIT functions in a Module

From: Alexei Starovoitov
Date: Sat Nov 26 2016 - 12:32:43 EST


On Sat, Nov 26, 2016 at 07:03:43AM +0000, Wang Nan wrote:
> Identify BPF functions, JIT functions and maps during init. Functions in
> section starting with "perfhook:" are JIT functions. They will be JIT
> compiled and hooked at perfhooks.
>
> During init of PerfModule, mark JIT functions as AvailableExternallyLinkage.
> LLVM skips functions with linkage like this so they won't be compiled
> into BPF objects.
>
> Signed-off-by: Wang Nan <wangnan0@xxxxxxxxxx>
...
> +void PerfModule::prepareBPF(void)
> +{
> + for (llvm::Function *F : JITFunctions)
> + F->setLinkage(llvm::GlobalValue::AvailableExternallyLinkage);
> + for (llvm::Function *F : BPFFunctions)
> + F->setLinkage(llvm::GlobalValue::ExternalLinkage);
> +
> +}
> +
> +void PerfModule::prepareJIT(void)
> +{
> + for (llvm::Function *F : BPFFunctions)
> + F->setLinkage(llvm::GlobalValue::AvailableExternallyLinkage);
> + for (llvm::Function *F : JITFunctions)
> + F->setLinkage(llvm::GlobalValue::ExternalLinkage);
> +
> +}

Nice trick.
Please document it in the perf+llvm design doc.

Acked-by: Alexei Starovoitov <ast@xxxxxxxxxx>