<div dir="ltr"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span style="font-family:arial,sans-serif;font-size:12.800000190734863px">Maybe you can try to pick up the patch?</span></blockquote>

<div><span style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:12.800000190734863px">I can try but i've never messed with a compiler before so please consider that I have no idea of what I'm doing and need some guidance. </span></div>

<div><span style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:12.800000190734863px">First, I compiled ToT llvm/clang and applied the patch. There are 4 new tests in the patch. Everything passes. I tried a small example using the "-finstrument-exclude-file-list" feature and it works as expected. </span></div>

<div><span style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:12.800000190734863px">In the original mailings: </span><font face="arial, sans-serif"><a href="http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20130311/075910.html">http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20130311/075910.html</a> some issues were raised. </font></div>

<div><br></div><div><span style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></span></div><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

+  // Inline functions that are not externally visible mustn't be instrumented.<br>+  // They create a named reference to the inlined function, as the first<br>+  // parameter to __cyg_<u>profile</u>_* functions, which a linker will never be able<br>

+  // to resolve.<br>+  if (const FunctionDecl *ActualFuncDecl =<br>+        dyn_cast<FunctionDecl>(CurFuncDecl)) {<br>+    if (ActualFuncDecl->isInlined() &&<br>+        !ActualFuncDecl->isInlineDefinitionExternallyVisible())<br>

+      return false;<br>+  }<br>This seems like a separable, ready-to-commit bug fix.<br></blockquote><div><br></div><div>I've re-submitted Matthews original patch.</div></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

std::set is pretty heavyweight, and isn't buying us anything. I think just having one large string to search would be best. Comma probably isn't the best separator character; embedded NULLs or something non-ASCII would be better.</blockquote>

<div> </div><div>I replaced std::set<std::string> with a std::vector<std::string>. Rationale: 1) we get a std::vector<string> as input anyways, 2) using a string with a delimiter is more complicated, 3) in particular NULLs, because some string algorithms like find stop at the first NULL.  I looked in the docs but wasn't able to find algorithms for working with this type of data structure (<a href="http://llvm.org/docs/ProgrammersManual.html#string-like-containers">http://llvm.org/docs/ProgrammersManual.html#string-like-containers</a>). Please point me to them in case I miss them. Otherwise, I don't think is worth it to implement them for this case.</div>

<div><br></div><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">If Fn->isExternC(), there's no point in demangling. Let's save ourselves the work in that case.</blockquote>

<div><br></div><div>How can I call isExternC()? Fn is of type llvm::Function but I've only been able to find clang::FunctionDecl::isExternC().</div></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

Our correctness did not depend on host's cxa_demangle before... There's also a fixme in compiler_rt about shipping our own cxa_demangle in order not to leak memory (it is used inside sanitizers, so it has special requirements about allocating memory).</blockquote>

<div><br></div><div>Is there another better demangle function I should call instead? Or what should be done about this?</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

I didn't see anything to handle escaped commas in the input, which GCC's documentation mentions. </blockquote><div><div> </div></div><div>Can you give me hints about what to look for in the docs to be able to implement this? I haven't been able to find anything about dealing with escaped commas or characters.H</div>

<div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">I suggest that we look through macro expansions to find the FileID where the expansion occurred, then check that. Also, can we cache the result of this lookup based on the FileID? There are a lot of string searches we're potentially doing here, many of which will be redundant.</blockquote>

<div><br></div><div>What is the best way to do this? I've added a std::map for the caching but don't know if this is the preferred solution. Any hints are welcome.</div><div><br></div><div>Bests,</div><div>Gonzalo</div>

</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Nov 12, 2013 at 5:38 AM, Nico Weber <span dir="ltr"><<a href="mailto:thakis@chromium.org" target="_blank">thakis@chromium.org</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">It looks like the patch stalled in review. This is the last message on the thread: <a href="http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20130311/075917.html" target="_blank">http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20130311/075917.html</a> ("I will look at these issues with the patch and work on resolving them" and then nothing). Maybe you can try to pick up the patch?</div>


<div class="gmail_extra"><br><br><div class="gmail_quote"><div><div class="h5">On Mon, Nov 11, 2013 at 11:24 AM, Gonzalo BG <span dir="ltr"><<a href="mailto:gonzalobg88@gmail.com" target="_blank">gonzalobg88@gmail.com</a>></span> wrote:<br>


</div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5"><div dir="ltr">Hi,<div><br></div><div>I'm trying to use "-finstrument-functions" in an application and this feature seems to work fine. </div>


<div><br></div><div>However, I can't exclude the standard library from getting instrumented. This means I cannot use any std library function in the "__cyg_profile_func_enter" and "__cyg_profile_func_exit" call backs. This is severely limiting. </div>




<div><br></div>GCC defines "-finstrument-functions-exclude-file-list=file,file,..." (see <a href="http://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html" target="_blank">http://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html</a>) which allows you to exclude instrumentation of some files (e.g. the std library headers!). Someone filled a bug report and submitted a patch in march but it hasn't been merged yet: <a href="http://llvm.org/bugs/show_bug.cgi?id=15255" target="_blank">http://llvm.org/bugs/show_bug.cgi?id=15255</a> . <div>




<br></div><div>Anyone knows the reason? If I'm not able to exclude the standard library I can't use instrumentation in my application.</div><div><br></div><div>Bests,</div><div>Gonzalo</div>
</div>
<br></div></div>_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@cs.uiuc.edu" target="_blank">cfe-dev@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
<br></blockquote></div><br></div>
</blockquote></div><br></div>