1. 04 Oct, 2023 12 commits
  2. 29 Sep, 2023 1 commit
  3. 28 Sep, 2023 1 commit
  4. 25 Sep, 2023 25 commits
  5. 22 Sep, 2023 1 commit
    • Andrii Nakryiko's avatar
      Merge branch 'libbpf: Support symbol versioning for uprobe' · 831916fb
      Andrii Nakryiko authored
      Hengqi Chen says:
      
      ====================
      Dynamic symbols in shared library may have the same name, for example:
      
          $ nm -D /lib/x86_64-linux-gnu/libc.so.6 | grep rwlock_wrlock
          000000000009b1a0 T __pthread_rwlock_wrlock@GLIBC_2.2.5
          000000000009b1a0 T pthread_rwlock_wrlock@@GLIBC_2.34
          000000000009b1a0 T pthread_rwlock_wrlock@GLIBC_2.2.5
      
          $ readelf -W --dyn-syms /lib/x86_64-linux-gnu/libc.so.6 | grep rwlock_wrlock
            706: 000000000009b1a0   878 FUNC    GLOBAL DEFAULT   15 __pthread_rwlock_wrlock@GLIBC_2.2.5
            2568: 000000000009b1a0   878 FUNC    GLOBAL DEFAULT   15 pthread_rwlock_wrlock@@GLIBC_2.34
            2571: 000000000009b1a0   878 FUNC    GLOBAL DEFAULT   15 pthread_rwlock_wrlock@GLIBC_2.2.5
      
      There are two pthread_rwlock_wrlock symbols in libc.so .dynsym section.
      The one with @@ is the default version, the other is hidden.
      Note that the version info is stored in .gnu.version and .gnu.version_d
      sections of libc and the two symbols are at the _same_ offset.
      
      Currently, specify `pthread_rwlock_wrlock`, `pthread_rwlock_wrlock@@GLIBC_2.34`
      or `pthread_rwlock_wrlock@GLIBC_2.2.5` in bpf_uprobe_opts::func_name won't work.
      Because there are two `pthread_rwlock_wrlock` in .dynsym sections without the
      version suffix and both are global bind.
      
      We could solve this by introducing symbol versioning ([0]). So that users can
      specify func, func@LIB_VERSION or func@@LIB_VERSION to attach a uprobe.
      
      This patchset resolves symbol conflicts and add symbol versioning for uprobe.
        - Patch 1 resolves symbol conflicts at the same offset
        - Patch 2 adds symbol versioning for dynsym
        - Patch 3 adds selftests for the above changes
      
      Changes from v3:
        - Address comments from Andrii
      
      Changes from v2:
        - Add uretprobe selfttest (Alan)
        - Check symbol exact match (Alan)
        - Fix typo (Jiri)
      
      Changes from v1:
        - Address comments from Alan and Jiri
        - Add selftests (Someone reminds me that there is an attempt at [1]
          and part of the selftest code from Andrii is taken from there)
      
        [0]: https://refspecs.linuxfoundation.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/symversion.html
        [1]: https://lore.kernel.org/lkml/CAEf4BzZTrjjyyOm3ak9JsssPSh6T_ZmGd677a2rt5e5rBLUrpQ@mail.gmail.com/
      ====================
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      831916fb