Mohit Mishra
2015-Jul-16 21:05 UTC
[LLVMdev] Adding integer field to all C++ classes in LLVM
Hi, I want to add an integer field to all C++ classes in LLVM. Where do I look at in the LLVM source to make the necessary changes? As of now, what I understand is that I need to make changes in Type.cpp (llvm/lib/IR/Type.cpp) where I insert an integer field in the ArrayRef passed to StructType::setBody? Thanks! -Mohit. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150717/7a81e3c8/attachment.html>
mats petersson
2015-Jul-16 21:31 UTC
[LLVMdev] Adding integer field to all C++ classes in LLVM
I take it you mean that you want to add a field to all classes COMPILED by LLVM, and not all classes that LLVM consists of? Still, not sure if that is a good idea - I'm fairly sure the compiler (e.g. Clang) will make up its own classes that need to be of a certain size and have certain content to match external functionst that are not compiled at this time (e.g. data structures used to call OS system calls, C and C++ runtime functions, etc) [certainly my Pascal compiler produces internal structures in this way, for example for FILE, STRING and SET], and adding extra fields here would be pretty much guaranteed to cause things to go wrong. So a better idea is probably to understand what data structures are part of your actual source-code [not counting system header files such as <iostream>, <stdio.h> or <string>], and add fields ONLY to those structures that "you own", not the ones that clang produced internally. This would of course mean you have to do this either at the source level or in the AST of the compiler, not at LLVM level - but I'm fairly sure that doing this at LLVM level is a bad idea. Also, unless I'm terribly misinformed, adding something to an ArrayRef is not going to work. ArrayRef, StringRef and such are "references to the original data in the calling code", which means you have no right to modify it. I'm pretty sure you are asking what is called an XY question, you want to do X, you think Y is the method of achieving that, and therefore ask how to do Y. I'm pretty sure asking how to achieve whatever X is in your case will provide you with better ideas of how to achieve what you want to do - as knowing what the actual goal is will help a lot in providing a -- Mats On 16 July 2015 at 22:05, Mohit Mishra <mmishra23 at gmail.com> wrote:> Hi, > > I want to add an integer field to all C++ classes in LLVM. Where do I look > at in the LLVM source to make the necessary changes? As of now, what I > understand is that I need to make changes in Type.cpp > (llvm/lib/IR/Type.cpp) where I insert an integer field in the ArrayRef > passed to StructType::setBody? > > Thanks! > > -Mohit. > > _______________________________________________ > 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/20150716/4d860c6d/attachment.html>
Mohit Mishra
2015-Jul-16 21:37 UTC
[LLVMdev] Adding integer field to all C++ classes in LLVM
HI Mats, Thanks for getting back to me. I take it you mean that you want to add a field to all classes COMPILED by> LLVM, and not all classes that LLVM consists of? >YES!> > Also, unless I'm terribly misinformed, adding something to an ArrayRef is > not going to work. ArrayRef, StringRef and such are "references to the > original data in the calling code", which means you have no right to modify > it. >What I want is to be able to randomize object layout; and hence adding of integer fields to the classes might be a good option. While I did think so about ArrayRef, I thought about to substitute that with vector something like this: vector<Type*> vecType = Elements.vec (); vecType.insert (Type::getInt32Ty (Context)) ST->setBody(vecType, isPacked); and modify the setBody function parameters replacing ArrayRef with the vector. However, I'm still skeptical about this. What do you propose to have a fairly good object layout randomization? Best, Mohit. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150717/0ca5b930/attachment.html>