[LLVMdev] Problems in instrumentation

Hongxu Chen leftcopy.chx at gmail.com
Tue May 13 10:01:43 PDT 2014


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] <
ml-node+s1065342n68544h55 at n5.nabble.com> 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
> ml-node+s1065342n3h84 at n5.nabble.com
> To unsubscribe from LLVM, click here<http://llvm.1065342.n5.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=2&code=bGVmdGNvcHkuY2h4QGdtYWlsLmNvbXwyfC0xMjc2Njc5OTI2>
> .
> 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: http://llvm.1065342.n5.nabble.com/Problems-in-instrumentation-tp68544p68554.html
Sent from the LLVM - Dev mailing list archive at Nabble.com.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140513/a2f6b785/attachment.html>


More information about the llvm-dev mailing list