<div dir="ltr"><div dir="ltr">On Sun, Jan 9, 2022 at 12:42 AM Alberto Barbaro via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>Hi all,</div><div>I'm working on a little LLVM pass that should add a call to an external function ( C++ project ) and pass as a parameter the name of the function that is about to be called. I have a problem finding a nice way to pass the current function name. In fact, so far,  Unfortunately the only solution that I have found for passing the name is to create a global for each function, store the name there and pass it as a parameter. I don't really like this solution because the size of the final binary increases and the overall approach feels not  optimal.</div><div><br></div><div>Assuming that I have a variable `I` which is the CallInst instruction, is it possible to pass the function name at runtime to my external library in a nice way? I thought about passing the address of the instruction and casting it back to the CallInst instruction but I don't know how to do it.</div></div></blockquote><div><br></div><div>That doesn't quite line up to me - the "Instruction"/CallInst only exists at compile-time, not runtime. So if you embedded the pointer value into the program, casting that pointer back to a CallInst at runtime in the program would only give you a corrupt pointer/garbage.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>Any suggestions?</div></div></blockquote><div><br>Not much to it that I can think of - one way or another you'd have to have the string embedded in the program somewhere, or in a side-table (eg: your compiler could produce a little csv file or something that lets you lookup some ID number to the string value - then you just encode/pass around the ID in the program, and in some post-processing step you can lookup the string in the csv file given the ID). You could avoid a global variable by generating instructions in the caller that could write the string value into a buffer, then pass that buffer by-value to the function you're calling - but that's a ton of extra instructions compared to passing a pointer to a global/constant buffer.</div></div></div>