<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/98294>98294</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [LLD][ELF] undefined reference to foo when using --wrap=foo when __real_foo is declared weak
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          xdqi
      </td>
    </tr>
</table>

<pre>
    foo.c
```c
extern __attribute__((weak)) int __real_foo();
int __wrap_foo() {
  if (__real_foo) return __real_foo();
  return 42;
}
int foo();

void _exit(int);
int _start() {
  _exit(foo());
}

```

It's okay to compile and run it with GNU ld or mold:

```sh
❯ clang -o foo foo.c -Wl,--wrap=foo -fuse-ld=ld -nostartfiles
❯ ./foo
❯ echo $?
42
❯ ld -v
GNU ld (GNU Binutils for Ubuntu) 2.38
```

But when I switch to lld, I got an error instead
```sh
❯ clang -o foo foo.c -Wl,--wrap=foo -fuse-ld=lld -nostartfiles
ld.lld: error: undefined symbol: foo
>>> referenced by foo.c
>>>               /tmp/foo-e30076.o:(__wrap_foo)
>>> referenced by foo.c
>>>               /tmp/foo-e30076.o:(__wrap_foo)
>>> did you mean: __wrap_foo
>>> defined in: /tmp/foo-e30076.o
clang: error: linker command failed with exit code 1 (use -v to see invocation)
❯ ld.lld -v
LLD 19.0.0 (https://github.com/llvm/llvm-project.git 4d052a76185875bf8d8343d723a444795b87c8c5) (compatible with GNU linkers)
```

I'm sure that I'm using the latest LLVM. I will try to submit a patch soon
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzEVU9vuzgT_jTOZQQiNg5w4ND-KK8q5d3bb_cYGTwEb42dtU3SfvuVoW3SP7vSHlZboQZmxjN-Hs8zFt6ro0GsCb8nvNmIOYzW1c_yD7XprHypB2vTnmQNye7ILluf1298DugMHA4iBKe6OeDhQGhJaHlB8URoRWgFygQ4HBwKfRisXdwVYfdrhtV5ceJ0dQIpXr0AagBCy9vlFTgM81L1L3LCW0RO322kaK4Fvy5Z_5-tknDAZxUILZUJXzbqg3Dh6ybfllzz3qZ-q_yJwlvjYyC08GCfxAsEC72dTkojCCPBzQZUgIsKI_zvl5-gJVgHk9WSsLtvE_vx1fBASdWQuxZ6LcwREhuBw3KckPymCf2RJJF5wproSIbZYxLzNlpCYuyCdlAa_eeEKaFtBPvJjP1ogdCcsHZ15fRzSMx8Xo2vaAgt49u9MnNQ2sNgHfzsZhPmyDJNWfk3xN3PAS4jGngEf1GhHyN9WktCf8AjHG0AYQCdsw6U8QGF_BfI-p4tLVO9HNJaP77MRuKgDErwL1NndbRdaWQP6wMOB3RoepTQvcCt_N5DPv4R2obptJ5JgizLil1qY3tE5Vy1Vf1nhaSS8GJnmFCYCPom-HPkK0Fqifu-3rJkOaYP7GplntBF8UxROINQGuUqnKhP6K1E2MZ-mz1Cco6t4hFBmbPtRVDWXHd-06-pvunZ_b6BbZVmaRbzjCGc_AK_JbQ9qjDOXdrbidBW6_PbT3Jy9nfsQ3pUAXKZcSqK3bbkZcG7oZQly5ksKBN5nhcV78qiL3u-TBhaxkkgguo03kyABae_bvbbiUJoMYGfHUIYRYD1e_bKHCGMCFoE9AH2-1__n8IjXJTWENwyffzcTSqAgJOIgvLWmo2smaxYJTZYbwua7TKeF2wz1h0OPEdKpSj5TuZsKCrGtvmuKktkXPCNqmlG86zYZlnFC87SHR9YL1jfb7Os5zwjeYaTUDqNVKXWHTfK-xnrqqRVvtGiQ-3friZXL3x289GTPNPKB39dFlTQyyW23zeEN4TfP-xbwpsb1b33e4QZVbyMjpWUD-pe7Nf7BZQHib0WLjYUiqfN7HT9z06f0HYB5gltV2znmv4ZAAD__0R1Lg0">