[LLVMdev] Problems in instrumentation

lucefe noviceup at gmail.com
Wed May 14 07:56:00 PDT 2014


Hi, Hongxu

Thank you for your advice. Now I resolve to the DataLayout (TargetData in
lower llvm version) analysis pass to get the size of each type.

Best Regards!
Qiuping


2014-05-14 1:01 GMT+08:00 Hongxu Chen <leftcopy.chx at gmail.com>:

> Hi Qiuping,
>
>       IIRC, there's a wrapper API for easy use of all type definitions;
> however I cannot remember exactly now.
>       For a void* type, is the size i8? I don't think you can get the size
> of *p though since this formal parameter of a function in C is no more than
> an address.
>       Another tip: you can try some C++11 features(such as range-based for
> loops) in order to avoid "ugly code", or customize some macros yourself.
>
>
> Thanks and Regards,
> Hongxu
>
>
> On Tue, May 13, 2014 at 5:01 PM, Qiuping Yi-2 [via LLVM] <[hidden email]<http://user/SendEmail.jtp?type=node&node=68554&i=0>
> > wrote:
>
>> Hi everyone,
>>
>> I have some trouble in instrumenting load instructions. I want to
>> instrument load instructions as follow: Firstly, I judge whether the loaded
>> pointer(*any type is possible*) is NULL. If so, I want to explicitly
>> allocate the corresponding address space of its type to the pointer.
>>
>> For example, in source code level I want to translate the next statement
>>
>> *p = 1;
>>
>> into the next statements
>>
>> if (p == NULL)
>>     *p = malloc(sizeof(*p));
>> *p = 1;
>>
>> For simplicity, I want to wrapper the first two statements into function
>> init. And then I can implement as follow:
>>
>> init((void*)p, sizeof(*p));
>> *p = 1;
>>
>> where
>>
>> void init(void *p, int size) {
>>      if (p == NULL)
>>          p = malloc(size);
>> }
>>
>> I am trying to use the next pass for instrumentation:
>>
>> for (Module::iterator f=M.begin(), fe=M.end(); f!=fe; ++f) {
>>    for (Function::iterator b=f->begin(), be=f->end(); b!=be; ++b) {
>>       for (BasicBlock::iterator i=b->begin(), ie=b->end()l i!=ie; ++i)  {
>>           if (i->getOpcode() == Instruction::Load) {
>>
>> *             CallInst::create(....); // add a call inst before inst i to
>> invoke function init*
>>
>>
>>           }
>>       }
>>    }
>> }
>>
>> So my question is How should I create the previous call inst to execute
>> invocation: init((void*)p, sizeof(p)). Because any pointer type is
>> possible, so I let the first parameter of function init as 'void*'.
>> Furthermore, how should I get the size of *p? I check Type.h, and found
>> class Type only provide function getPrimitiveSizeInBits() to return the
>> size of the primitive types. How can I know the size of other types, eg.
>> the size of a structure type.
>>
>> Any Suggestions are welcome. Thank you all in advance.
>>
>> Best Regards!
>>
>> --------------------------------------------
>> Qiuping Yi
>> Institute Of Software
>> Chinese Academy of Sciences
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> [hidden email] <http://user/SendEmail.jtp?type=node&node=68544&i=0>
>>     http://llvm.cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>
>>
>> ------------------------------
>>  If you reply to this email, your message will be added to the
>> discussion below:
>> http://llvm.1065342.n5.nabble.com/Problems-in-instrumentation-tp68544.html
>>  To start a new topic under LLVM - Dev, email [hidden email]<http://user/SendEmail.jtp?type=node&node=68554&i=1>
>> To unsubscribe from LLVM, click here.
>> NAML<http://llvm.1065342.n5.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml>
>>
>
>
> ------------------------------
> View this message in context: Re: Problems in instrumentation<http://llvm.1065342.n5.nabble.com/Problems-in-instrumentation-tp68544p68554.html>
> Sent from the LLVM - Dev mailing list archive<http://llvm.1065342.n5.nabble.com/LLVM-Dev-f3.html>at Nabble.com.
>
> _______________________________________________
> 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/20140514/2641fa2f/attachment.html>


More information about the llvm-dev mailing list