Hi, My requirement is something like as given below, a.c => a.obj contains a1() and a2() function b.c => b.obj contains b1() and b2() function main.c => main.obj call to a1, a2, b1, b2 Now, I want to move a1(), a2() from a.obj to b2.obj and on top of function b1() When I call b1() from main, it should call first a1, a2 and then function definition of b1 Can you please give me some pointers for my requirement. Thank you in advance. Deepika On Wed, Feb 10, 2016 at 2:54 PM, mats petersson <mats at planetcatfish.com> wrote:> This is the starting point: > http://llvm.org/docs/WritingAnLLVMPass.html > > I suspect you want either a "FunctionPass" or a "BlockPass". > > The question you stil haven't answered is how you know what you are going > to insert function calls for. Inserting the call itself is relatively > simple, detecting the right place may or may not be simple - and this is > where the above advice may not be at all meaningful - since for example > modifying the AST in the Clang part of the compiler may be more suitable, > since that is where you have the knowledge of what the original source code > looks like, rather than LLVM IR which is more disconnected from the > original source. > > -- > Mats > > On 10 February 2016 at 08:07, Sandeep Kumar Singh <deepdondo007 at gmail.com> > wrote: > >> Hi, >> >> Yes I am looking for IR pass that will do insert call of functions that >> defined in another file. >> Links/suggestions that guide me to start for adding IR pass will help me >> so much. >> >> Regards, >> Deepika >> >> On Wed, Feb 10, 2016 at 1:03 PM, mats petersson <mats at planetcatfish.com> >> wrote: >> >>> So how do you know what you want to modify (conceptually)? >>> >>> Have you got a IR pass that you are working on, or are you asking for >>> links/suggestions on how to start on one? >>> >>> -- >>> Mats >>> >>> On 10 February 2016 at 04:04, Sandeep Kumar Singh < >>> deepdondo007 at gmail.com> wrote: >>> >>>> Hi, >>>> >>>> I want to call/add some functions(that defined in another file) on top >>>> of some functions, and reflect the same changes in object file. >>>> No, I am not looking for contractor. >>>> >>>> Thanks, >>>> Deepika >>>> >>>> On Tue, Feb 9, 2016 at 7:04 PM, mats petersson <mats at planetcatfish.com> >>>> wrote: >>>> >>>>> What is the condition for adding this code? >>>>> >>>>> What have you tried so far? [Or are you looking for a contractor that >>>>> can write code for you - I'm not sure this is quite the right place for >>>>> that, but there are probably some people like that on this mailing list] >>>>> >>>>> -- >>>>> Mats >>>>> >>>>> On 9 February 2016 at 09:34, Sandeep Kumar Singh via llvm-dev < >>>>> llvm-dev at lists.llvm.org> wrote: >>>>> >>>>>> Hi, >>>>>> >>>>>> I want to edit LLVM generated IR file, like as given below, >>>>>> >>>>>> Original LLVM IR file, >>>>>> @.str2 = private unnamed_addr constant [17 x i8] c"\0AI am in >>>>>> one_11\0A\00", align 1 >>>>>> >>>>>> ; Function Attrs: nounwind >>>>>> define i32 @one_1(i32 %ivar1, i32 %ivar2) #0 { >>>>>> entry: >>>>>> %ivar1.addr = alloca i32, align 4 >>>>>> %ivar2.addr = alloca i32, align 4 >>>>>> %isum = alloca i32, align 4 >>>>>> store i32 %ivar1, i32* %ivar1.addr, align 4 >>>>>> store i32 %ivar2, i32* %ivar2.addr, align 4 >>>>>> store i32 0, i32* %isum, align 4 >>>>>> %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds >>>>>> ([16 x i8]* @.str, i32 0, i32 0)) #1 >>>>>> %0 = load i32* %ivar1.addr, align 4 >>>>>> %1 = load i32* %ivar2.addr, align 4 >>>>>> %call1 = call i32 @one_11(i32 %0, i32 %1) >>>>>> store i32 %call1, i32* %isum, align 4 >>>>>> %2 = load i32* %isum, align 4 >>>>>> ret i32 %2 >>>>>> } >>>>>> >>>>>> Modified LLVM IR file, >>>>>> @.str2 = private unnamed_addr constant [17 x i8] c"\0AI am in >>>>>> one_11\0A\00", align 1 >>>>>> @.str3 = private unnamed_addr constant [17 x i8] c"\0AI am in >>>>>> one_12\0A\00", align 1 >>>>>> >>>>>> ; Function Attrs: nounwind >>>>>> define i32 @one_1(i32 %ivar1, i32 %ivar2) #0 { >>>>>> entry: >>>>>> %ivar1.addr = alloca i32, align 4 >>>>>> %ivar2.addr = alloca i32, align 4 >>>>>> %isum = alloca i32, align 4 >>>>>> store i32 %ivar1, i32* %ivar1.addr, align 4 >>>>>> store i32 %ivar2, i32* %ivar2.addr, align 4 >>>>>> store i32 0, i32* %isum, align 4 >>>>>> %call1 = call i32 @one_12(i32 %0, i32 %1) <=>>>>>> store i32 %call1, i32* %isum, align <=>>>>>> %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds >>>>>> ([16 x i8]* @.str, i32 0, i32 0)) #1 >>>>>> %0 = load i32* %ivar1.addr, align 4 >>>>>> %1 = load i32* %ivar2.addr, align 4 >>>>>> %call2 = call i32 @one_11(i32 %0, i32 %1) <=>>>>>> store i32 %call2, i32* %isum, align 4 <=>>>>>> %2 = load i32* %isum, align 4 >>>>>> ret i32 %2 >>>>>> } >>>>>> >>>>>> With llc tool, I want to generate object file for modified llvm ir >>>>>> file and it should call function >>>>>> first "one_12"" and then function "one_11". >>>>>> >>>>>> Can someone please tell me how I can do my above requirement. >>>>>> >>>>>> Thanks in advance, >>>>>> Deepika >>>>>> >>>>>> _______________________________________________ >>>>>> LLVM Developers mailing list >>>>>> llvm-dev at lists.llvm.org >>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >>>>>> >>>>>> >>>>> >>>> >>>> >>>> -- >>>> >>>> Thanks and Regards, >>>> Sandeep Kumar Singh >>>> >>> >>> >> >> >> -- >> >> Thanks and Regards, >> Sandeep Kumar Singh >> > >-- Thanks and Regards, Sandeep Kumar Singh -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160210/d88367c5/attachment.html>
So, I think we need to take one (or a dozen) step(s) back and look at what you are ACTUALLY trying to do. In other words, your question is a bit of an XY Question - like someone with a car with a punctured tyre, asking a mechanic how to undo the wheel nuts, because that's what immediately comes to mind for taking the wheel off. But you should ask "how do I fix a puncture" (because the right steps and order of them is more than just undo the nuts that hold the wheel in place). So what is your "fix a puncture" goal here? -- Magts On 10 February 2016 at 10:49, Sandeep Kumar Singh <deepdondo007 at gmail.com> wrote:> Hi, > > My requirement is something like as given below, > a.c => a.obj contains a1() and a2() function > b.c => b.obj contains b1() and b2() function > main.c => main.obj call to a1, a2, b1, b2 > > Now, I want to move a1(), a2() from a.obj to b2.obj and on top of function > b1() > When I call b1() from main, it should call first a1, a2 and then function > definition of b1 > > Can you please give me some pointers for my requirement. > > Thank you in advance. > Deepika > > On Wed, Feb 10, 2016 at 2:54 PM, mats petersson <mats at planetcatfish.com> > wrote: > >> This is the starting point: >> http://llvm.org/docs/WritingAnLLVMPass.html >> >> I suspect you want either a "FunctionPass" or a "BlockPass". >> >> The question you stil haven't answered is how you know what you are going >> to insert function calls for. Inserting the call itself is relatively >> simple, detecting the right place may or may not be simple - and this is >> where the above advice may not be at all meaningful - since for example >> modifying the AST in the Clang part of the compiler may be more suitable, >> since that is where you have the knowledge of what the original source code >> looks like, rather than LLVM IR which is more disconnected from the >> original source. >> >> -- >> Mats >> >> On 10 February 2016 at 08:07, Sandeep Kumar Singh <deepdondo007 at gmail.com >> > wrote: >> >>> Hi, >>> >>> Yes I am looking for IR pass that will do insert call of functions that >>> defined in another file. >>> Links/suggestions that guide me to start for adding IR pass will help me >>> so much. >>> >>> Regards, >>> Deepika >>> >>> On Wed, Feb 10, 2016 at 1:03 PM, mats petersson <mats at planetcatfish.com> >>> wrote: >>> >>>> So how do you know what you want to modify (conceptually)? >>>> >>>> Have you got a IR pass that you are working on, or are you asking for >>>> links/suggestions on how to start on one? >>>> >>>> -- >>>> Mats >>>> >>>> On 10 February 2016 at 04:04, Sandeep Kumar Singh < >>>> deepdondo007 at gmail.com> wrote: >>>> >>>>> Hi, >>>>> >>>>> I want to call/add some functions(that defined in another file) on top >>>>> of some functions, and reflect the same changes in object file. >>>>> No, I am not looking for contractor. >>>>> >>>>> Thanks, >>>>> Deepika >>>>> >>>>> On Tue, Feb 9, 2016 at 7:04 PM, mats petersson <mats at planetcatfish.com >>>>> > wrote: >>>>> >>>>>> What is the condition for adding this code? >>>>>> >>>>>> What have you tried so far? [Or are you looking for a contractor that >>>>>> can write code for you - I'm not sure this is quite the right place for >>>>>> that, but there are probably some people like that on this mailing list] >>>>>> >>>>>> -- >>>>>> Mats >>>>>> >>>>>> On 9 February 2016 at 09:34, Sandeep Kumar Singh via llvm-dev < >>>>>> llvm-dev at lists.llvm.org> wrote: >>>>>> >>>>>>> Hi, >>>>>>> >>>>>>> I want to edit LLVM generated IR file, like as given below, >>>>>>> >>>>>>> Original LLVM IR file, >>>>>>> @.str2 = private unnamed_addr constant [17 x i8] c"\0AI am in >>>>>>> one_11\0A\00", align 1 >>>>>>> >>>>>>> ; Function Attrs: nounwind >>>>>>> define i32 @one_1(i32 %ivar1, i32 %ivar2) #0 { >>>>>>> entry: >>>>>>> %ivar1.addr = alloca i32, align 4 >>>>>>> %ivar2.addr = alloca i32, align 4 >>>>>>> %isum = alloca i32, align 4 >>>>>>> store i32 %ivar1, i32* %ivar1.addr, align 4 >>>>>>> store i32 %ivar2, i32* %ivar2.addr, align 4 >>>>>>> store i32 0, i32* %isum, align 4 >>>>>>> %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds >>>>>>> ([16 x i8]* @.str, i32 0, i32 0)) #1 >>>>>>> %0 = load i32* %ivar1.addr, align 4 >>>>>>> %1 = load i32* %ivar2.addr, align 4 >>>>>>> %call1 = call i32 @one_11(i32 %0, i32 %1) >>>>>>> store i32 %call1, i32* %isum, align 4 >>>>>>> %2 = load i32* %isum, align 4 >>>>>>> ret i32 %2 >>>>>>> } >>>>>>> >>>>>>> Modified LLVM IR file, >>>>>>> @.str2 = private unnamed_addr constant [17 x i8] c"\0AI am in >>>>>>> one_11\0A\00", align 1 >>>>>>> @.str3 = private unnamed_addr constant [17 x i8] c"\0AI am in >>>>>>> one_12\0A\00", align 1 >>>>>>> >>>>>>> ; Function Attrs: nounwind >>>>>>> define i32 @one_1(i32 %ivar1, i32 %ivar2) #0 { >>>>>>> entry: >>>>>>> %ivar1.addr = alloca i32, align 4 >>>>>>> %ivar2.addr = alloca i32, align 4 >>>>>>> %isum = alloca i32, align 4 >>>>>>> store i32 %ivar1, i32* %ivar1.addr, align 4 >>>>>>> store i32 %ivar2, i32* %ivar2.addr, align 4 >>>>>>> store i32 0, i32* %isum, align 4 >>>>>>> %call1 = call i32 @one_12(i32 %0, i32 %1) <=>>>>>>> store i32 %call1, i32* %isum, align <=>>>>>>> %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds >>>>>>> ([16 x i8]* @.str, i32 0, i32 0)) #1 >>>>>>> %0 = load i32* %ivar1.addr, align 4 >>>>>>> %1 = load i32* %ivar2.addr, align 4 >>>>>>> %call2 = call i32 @one_11(i32 %0, i32 %1) <=>>>>>>> store i32 %call2, i32* %isum, align 4 <=>>>>>>> %2 = load i32* %isum, align 4 >>>>>>> ret i32 %2 >>>>>>> } >>>>>>> >>>>>>> With llc tool, I want to generate object file for modified llvm ir >>>>>>> file and it should call function >>>>>>> first "one_12"" and then function "one_11". >>>>>>> >>>>>>> Can someone please tell me how I can do my above requirement. >>>>>>> >>>>>>> Thanks in advance, >>>>>>> Deepika >>>>>>> >>>>>>> _______________________________________________ >>>>>>> LLVM Developers mailing list >>>>>>> llvm-dev at lists.llvm.org >>>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >>>>>>> >>>>>>> >>>>>> >>>>> >>>>> >>>>> -- >>>>> >>>>> Thanks and Regards, >>>>> Sandeep Kumar Singh >>>>> >>>> >>>> >>> >>> >>> -- >>> >>> Thanks and Regards, >>> Sandeep Kumar Singh >>> >> >> > > > -- > > Thanks and Regards, > Sandeep Kumar Singh >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160210/2d2a7415/attachment-0001.html>
Hi, My goal is to edit a C object file and introduce a new function call within another function. In my first post I edited IR file and then generate obj file with command, llc -filetype=obj -o test.obj test.ll In test.obj file I achieved my goal, but I have done this edition in IR file manually. I want to control this by adding some IR passes in LLVM. I am trying to add pass as per your suggested link. I built LLVM with cmake and now I have a question, where I have to place .cpp file so it can build with cmake without any error. Thank you for your pointers, Deepika On Wed, Feb 10, 2016 at 4:31 PM, mats petersson <mats at planetcatfish.com> wrote:> So, I think we need to take one (or a dozen) step(s) back and look at what > you are ACTUALLY trying to do. In other words, your question is a bit of an > XY Question - like someone with a car with a punctured tyre, asking a > mechanic how to undo the wheel nuts, because that's what immediately comes > to mind for taking the wheel off. But you should ask "how do I fix a > puncture" (because the right steps and order of them is more than just undo > the nuts that hold the wheel in place). > > So what is your "fix a puncture" goal here? > > -- > Magts > > On 10 February 2016 at 10:49, Sandeep Kumar Singh <deepdondo007 at gmail.com> > wrote: > >> Hi, >> >> My requirement is something like as given below, >> a.c => a.obj contains a1() and a2() function >> b.c => b.obj contains b1() and b2() function >> main.c => main.obj call to a1, a2, b1, b2 >> >> Now, I want to move a1(), a2() from a.obj to b2.obj and on top of >> function b1() >> When I call b1() from main, it should call first a1, a2 and then function >> definition of b1 >> >> Can you please give me some pointers for my requirement. >> >> Thank you in advance. >> Deepika >> >> On Wed, Feb 10, 2016 at 2:54 PM, mats petersson <mats at planetcatfish.com> >> wrote: >> >>> This is the starting point: >>> http://llvm.org/docs/WritingAnLLVMPass.html >>> >>> I suspect you want either a "FunctionPass" or a "BlockPass". >>> >>> The question you stil haven't answered is how you know what you are >>> going to insert function calls for. Inserting the call itself is relatively >>> simple, detecting the right place may or may not be simple - and this is >>> where the above advice may not be at all meaningful - since for example >>> modifying the AST in the Clang part of the compiler may be more suitable, >>> since that is where you have the knowledge of what the original source code >>> looks like, rather than LLVM IR which is more disconnected from the >>> original source. >>> >>> -- >>> Mats >>> >>> On 10 February 2016 at 08:07, Sandeep Kumar Singh < >>> deepdondo007 at gmail.com> wrote: >>> >>>> Hi, >>>> >>>> Yes I am looking for IR pass that will do insert call of functions that >>>> defined in another file. >>>> Links/suggestions that guide me to start for adding IR pass will help >>>> me so much. >>>> >>>> Regards, >>>> Deepika >>>> >>>> On Wed, Feb 10, 2016 at 1:03 PM, mats petersson <mats at planetcatfish.com >>>> > wrote: >>>> >>>>> So how do you know what you want to modify (conceptually)? >>>>> >>>>> Have you got a IR pass that you are working on, or are you asking for >>>>> links/suggestions on how to start on one? >>>>> >>>>> -- >>>>> Mats >>>>> >>>>> On 10 February 2016 at 04:04, Sandeep Kumar Singh < >>>>> deepdondo007 at gmail.com> wrote: >>>>> >>>>>> Hi, >>>>>> >>>>>> I want to call/add some functions(that defined in another file) on >>>>>> top of some functions, and reflect the same changes in object file. >>>>>> No, I am not looking for contractor. >>>>>> >>>>>> Thanks, >>>>>> Deepika >>>>>> >>>>>> On Tue, Feb 9, 2016 at 7:04 PM, mats petersson < >>>>>> mats at planetcatfish.com> wrote: >>>>>> >>>>>>> What is the condition for adding this code? >>>>>>> >>>>>>> What have you tried so far? [Or are you looking for a contractor >>>>>>> that can write code for you - I'm not sure this is quite the right place >>>>>>> for that, but there are probably some people like that on this mailing list] >>>>>>> >>>>>>> -- >>>>>>> Mats >>>>>>> >>>>>>> On 9 February 2016 at 09:34, Sandeep Kumar Singh via llvm-dev < >>>>>>> llvm-dev at lists.llvm.org> wrote: >>>>>>> >>>>>>>> Hi, >>>>>>>> >>>>>>>> I want to edit LLVM generated IR file, like as given below, >>>>>>>> >>>>>>>> Original LLVM IR file, >>>>>>>> @.str2 = private unnamed_addr constant [17 x i8] c"\0AI am in >>>>>>>> one_11\0A\00", align 1 >>>>>>>> >>>>>>>> ; Function Attrs: nounwind >>>>>>>> define i32 @one_1(i32 %ivar1, i32 %ivar2) #0 { >>>>>>>> entry: >>>>>>>> %ivar1.addr = alloca i32, align 4 >>>>>>>> %ivar2.addr = alloca i32, align 4 >>>>>>>> %isum = alloca i32, align 4 >>>>>>>> store i32 %ivar1, i32* %ivar1.addr, align 4 >>>>>>>> store i32 %ivar2, i32* %ivar2.addr, align 4 >>>>>>>> store i32 0, i32* %isum, align 4 >>>>>>>> %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds >>>>>>>> ([16 x i8]* @.str, i32 0, i32 0)) #1 >>>>>>>> %0 = load i32* %ivar1.addr, align 4 >>>>>>>> %1 = load i32* %ivar2.addr, align 4 >>>>>>>> %call1 = call i32 @one_11(i32 %0, i32 %1) >>>>>>>> store i32 %call1, i32* %isum, align 4 >>>>>>>> %2 = load i32* %isum, align 4 >>>>>>>> ret i32 %2 >>>>>>>> } >>>>>>>> >>>>>>>> Modified LLVM IR file, >>>>>>>> @.str2 = private unnamed_addr constant [17 x i8] c"\0AI am in >>>>>>>> one_11\0A\00", align 1 >>>>>>>> @.str3 = private unnamed_addr constant [17 x i8] c"\0AI am in >>>>>>>> one_12\0A\00", align 1 >>>>>>>> >>>>>>>> ; Function Attrs: nounwind >>>>>>>> define i32 @one_1(i32 %ivar1, i32 %ivar2) #0 { >>>>>>>> entry: >>>>>>>> %ivar1.addr = alloca i32, align 4 >>>>>>>> %ivar2.addr = alloca i32, align 4 >>>>>>>> %isum = alloca i32, align 4 >>>>>>>> store i32 %ivar1, i32* %ivar1.addr, align 4 >>>>>>>> store i32 %ivar2, i32* %ivar2.addr, align 4 >>>>>>>> store i32 0, i32* %isum, align 4 >>>>>>>> %call1 = call i32 @one_12(i32 %0, i32 %1) <=>>>>>>>> store i32 %call1, i32* %isum, align <=>>>>>>>> %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds >>>>>>>> ([16 x i8]* @.str, i32 0, i32 0)) #1 >>>>>>>> %0 = load i32* %ivar1.addr, align 4 >>>>>>>> %1 = load i32* %ivar2.addr, align 4 >>>>>>>> %call2 = call i32 @one_11(i32 %0, i32 %1) <=>>>>>>>> store i32 %call2, i32* %isum, align 4 <=>>>>>>>> %2 = load i32* %isum, align 4 >>>>>>>> ret i32 %2 >>>>>>>> } >>>>>>>> >>>>>>>> With llc tool, I want to generate object file for modified llvm ir >>>>>>>> file and it should call function >>>>>>>> first "one_12"" and then function "one_11". >>>>>>>> >>>>>>>> Can someone please tell me how I can do my above requirement. >>>>>>>> >>>>>>>> Thanks in advance, >>>>>>>> Deepika >>>>>>>> >>>>>>>> _______________________________________________ >>>>>>>> LLVM Developers mailing list >>>>>>>> llvm-dev at lists.llvm.org >>>>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> >>>>>> Thanks and Regards, >>>>>> Sandeep Kumar Singh >>>>>> >>>>> >>>>> >>>> >>>> >>>> -- >>>> >>>> Thanks and Regards, >>>> Sandeep Kumar Singh >>>> >>> >>> >> >> >> -- >> >> Thanks and Regards, >> Sandeep Kumar Singh >> > >-- Thanks and Regards, Sandeep Kumar Singh -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160210/502be23d/attachment.html>