<div dir="ltr">On Fri, Sep 6, 2013 at 1:19 PM, Shankar Kalpathi Easwaran <span dir="ltr"><<a href="mailto:shankarke@gmail.com" target="_blank">shankarke@gmail.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
  It also changes the call to the __wrap_symbol if real symbol is not found.<br>
  If the real symbol is found, the call still is routed to the real function and not the wrap function.<br>
  This is clearly the alias feature. The implementation suggested by Nick is very clean in my opinion for this.<br></blockquote><div><br></div><div>I'm not saying that that is not an aliasing feature. What I said is it's not a simple aliasing feature which I think is usually transitive (if B is an alias of A and C is an alias of B, C is an alias of A). PECOFF's "weak external" symbols also have as we have seen in this thread slightly different semantics. I don't think I can address these aspects of all different flavor of aliasing soon. By aliasing itself, it's going to be larger and complicated patch than this one. We can discuss and implement that later.</div>

<div><br></div><div>My point is that this patch is useful and simple enough, so we should submit this to make LLD to actually link real C++ programs.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<br>
  Below is a snippet that uses calls to wrap :-<br>
<br>
  Example :-<br>
  (1) Using wrap function directly<br>
  $cat wrap.c<br>
  #include <stdio.h><br>
<br>
  void __wrap_myfn()<br>
  {<br>
    printf("Hello World\n");<br>
  }<br>
<br>
  int main() {<br>
    myfn();<br>
    return 0;<br>
  }<br>
  $gcc wrap.c -Wl,--wrap,myfn<br>
  $./a.out<br>
  Hello World<br>
  $gcc wrap.c<br>
  /tmp/ccV7Dm8C.o: In function `main':<br>
  wrap.c:(.text+0x1a): undefined reference to `myfn'<br>
  collect2: error: ld returned 1 exit status<br>
<br>
  (2) wrap with a definition<br>
<br>
  #include <stdio.h><br>
<br>
  void myfn() {<br>
    printf("not in wrap function\n");<br>
  }<br>
<br>
  void __wrap_myfn()<br>
  {<br>
    printf("Hello World\n");<br>
  }<br>
<br>
  int main() {<br>
    myfn();<br>
    return 0;<br>
  }<br>
<br>
  $gcc wrapdefn.c -Wl,--wrap,myfn<br>
  $./a.out<br>
  not in wrap function<br>
<br>
<a href="http://llvm-reviews.chandlerc.com/D1550" target="_blank">http://llvm-reviews.chandlerc.com/D1550</a><br>
</blockquote></div><br></div></div>