[llvm-dev] Finding all pointers to functions

Russell Wallace via llvm-dev llvm-dev at lists.llvm.org
Thu Jan 7 10:37:50 PST 2016


Because that was before I realized that functions keep track of a use list.

On Thu, Jan 7, 2016 at 5:40 PM, David Blaikie <dblaikie at gmail.com> wrote:

> Everyone else has said good/important things here, but for the original
> problem I'm not quite sure why you were trying to search through to find
> the uses, rather than walking the Function's use list?
>
> - David
>
> On Mon, Dec 21, 2015 at 9:11 PM, Russell Wallace via llvm-dev <
> llvm-dev at lists.llvm.org> wrote:
>
>> I need to track down all pointers anywhere in a module that could be
>> pointing to functions (because some of the optimizations I want to do,
>> require either identifying every use of a function, or conservatively
>> identifying when such cannot be done).
>>
>> A starting point is to look at all the global variables:
>>
>>   for (auto &G : M.globals())
>>     for (auto &V : G.operands())
>>       if (auto F = dyn_cast<Function>(V))
>>
>> Of course, instructions can also refer to functions, both as direct calls
>> and otherwise:
>>
>>   for (auto &F : M) {
>>     for (auto &I : inst_range(F)) {
>>       for (auto &V : I.operands())
>>         if (auto F = dyn_cast<Function>(V))
>>
>> But there are other things as well, for example it seems there is
>> something called a personality function that can be a pointer to another
>> function, so need to add that
>>
>>     if (F.hasPersonalityFn())
>>
>> It seems there are other things called prefix data and prologue data,
>> which are pointers to constants, which could contain pointers to functions,
>> so would need to include those as well.
>>
>> Am I correct in thinking that prefix data and prologue data will not be
>> included in the global variables list, so do need special handling?
>>
>> Could they be recursive? That is, could those constants contain pointers
>> to other constants... which end up containing pointers to functions... such
>> that none of the intermediate constant objects are in the global variable
>> list?
>>
>> Is there anything else I'm missing?
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160107/a7e40813/attachment.html>


More information about the llvm-dev mailing list