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

    <tr>
        <th>Summary</th>
        <td>
            Broken `STAP_PROBE()` when linking with LLD
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          cj-tommi-rantala
      </td>
    </tr>
</table>

<pre>
    I'm using `STAP_PROBE`s in C code to add static tracepoints into my program.
But when using the LLD linker with `-fuse-ld=lld` the tracepoints do not work (at least) with the `perf` tool.
Something goes wrong with the probe address?

I'm testing in Ubuntu 22.04:
```
$ ld.lld --version
Ubuntu LLD 16.0.6 (compatible with GNU linkers)
```

Small reproducer, put this into `Makefile`:
```
main: main.c
        $(CC) $< -o $@ -g -Wall -O2 -Wl,--build-id=sha1 $(LLL)
        @echo ====================================================================
        readelf --notes main
        @echo ====================================================================
        objdump --disassemble=main main

main.c:
        printf "#include <sys/sdt.h>\nint main(void) { STAP_PROBE(foo, bar); }\n" >$@

probe:
        @-perf probe --quiet -d 'sdt_foo:*'
        perf buildid-cache --purge=main
        perf buildid-cache --add=main
        perf buildid-cache --list | grep main
        file main
        @echo
        perf probe -a 'sdt_foo:*'
        perf probe -l

trace:
        perf trace -e 'sdt_foo:*' bash -c './main; sleep 0.1'

clean:
        -perf probe --quiet -d 'sdt_foo:*'
        $(RM) main main.c
```

Then build and run, with default linker the probe should work:
```
$ make && sudo make probe && sudo make trace && sudo make clean
[...]
perf probe -l
  sdt_foo:bar (on main@main.c in .../main)
perf trace -e 'sdt_foo:*' bash -c './main; sleep 0.1'
     0.000 main/312053 sdt_foo:bar(__probe_ip: 94479394426948)
[...]
```

After adding `-fuse-ld=lld` it does not work, `perf probe -l` output looks suspicious and no output from the `perf trace` command:
```
$ make LLL='-fuse-ld=lld' && sudo make probe && sudo make trace && sudo make clean
[...]
perf probe -l
Failed to find debug information for address 2754
  sdt_foo:bar          (on __TMC_END__+3452 in .../main)
perf trace -e 'sdt_foo:*' bash -c './main; sleep 0.1'
[...]
```

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkVkmv2zYQ_jX0ZUCBJmXJOvjwbMdFAWdBFuRoUCJlMY8SVZLKQ_59MZIc-yVuUhRtD61heKFm_ebjzMgQzLnTekNWW7LaL-QQG-c31ScaXdsa6mUXpZWL0qkvm18Jz1sYgunOQDL27v3Dm9Obt6-3L0jGApgOdlA5pSE6kEpBiDKaCqKXle6d6SLKRAftF-i9O3vZJoTtCXvYDhGeGt3NpmOj4XjcgzXdo_bwZGKD7mg9BE2tImJvrSIZGwVvrSsHnYvw5PwjEL6WEayWIRJeTEZQnmSs174e1Z2zcwTvXKtjg87PTgd48q47X3V670qNKXkdAhGHSWf6nDCJOkTUNh18KIcuDsB5wlIiZimSsfk9_eUpWJVYq4DSz9oH47rpyayN6S-zhCUZJlK5tpfRlFZPMf3y6sMMTiC8uO9hSquV1oLXvXdqqLQnfAf9ECE2Zq4FydhL-ahrYzXq_kG8rTQdEQ-A30l18VAQnhK-3u0QYPwtdkDd-CtlQM9AP6J7-poD_WgJ31FaDsYqarCGoZFLmCwcj8drHqwgKdNV44CI_X_nfUnOa6m0rYHSzkUdRkj_H5m78pMa2h4oVSbIEHRbWk3EHhF4BsOFcUl15SMrem-6WAPhnHBhusoOSgMRu_AlEH4IKiYNES_IateZLk72-PqzM2pkZ76Fm3bF17VzeBlK6ZF5Ygsk36Mu4RzQzMjh24DGHnAbD0kZxU4ydwdKfxuMjkAVEJ4HFU_oQjwQ_kB4fs0CNcZbYBStZNWgZj_48wWJH0tKpf6UnDUhAsl3cPa6f84xvOp3Wffc4pyV_Hk2s6S9RWvsys-qh5LjKVB9zyaUMjRAK3yWEH6YWs4WgtW6B5Ysb_ziZ2W17G49_IViTN3n7UtkyFcWfu1v9xrqe5xSI9ggOwV-6JBFY1NWupaDjZepdZ0boXGDVeNU-tE8aOUjApMRnkEYlJsOJhPfHU9Ifnc8gTKZXG2TJCGr-f7dqRTAFZhSehw0br6IKZuQwHmGVuZyXHr031hMwBdLGGPzlT2IJWcr8Tw2wten0xj9yfQ4iIo0zQtRpCnPinR9HR7Pk75bwoc6ao_DfN5ivl8rTASFW8Bll8ASz2vDFcKMgRsiDlPr3GOAMITeVMYNYWRG5y6Pa-_a281jAg71K9e2slM_JQWOR7EnPP8mVJ7_q3w5SGO1wuWuNp0CpcsBF57a-VZG4zqonb8sScDzVXqfZl9fE99Op_cvd6cXr_anE-Fbka74P0-6H9NkoTZCFaKQC71ZZsWKiYzn-aLZ5JXQq_Wy4OUqE0g_kWYiVVzlZZUtS74wG864YMVyvVzyVORJqta1ZiLPmeZFlVfYaVtpbGLt5zZx_rwwIQx6k2WZYAsrS23DuIlzPhaY40ruNyhNy-EcSMqws4erfjTR6s3Wu0fdfbOT8_FeZGxarbEtmctSezzuF4O3mybGPowAHgg_nE1shjKpXEv4AT3MX7T37pOuIuGHMVyct2PEvwcAAP__oXhrFQ">