On 8/12/25 12:02 AM, 赵佳炜 wrote:
Yes, I've tried that but it didn't help. FYI:

$ readelf -nsr usdt_rip


Relocation section '.rela.dyn' at offset 0x530 contains 9 entries:
   Offset          Info           Type           Sym. Value    Sym. Name + 
Addend
000000003df0  000000000008 R_X86_64_RELATIVE                    1150
000000003df8  000000000008 R_X86_64_RELATIVE                    1110
000000004008  000000000008 R_X86_64_RELATIVE                    4008
000000004018  000000000008 R_X86_64_RELATIVE                    1160
000000003fd8  000100000006 R_X86_64_GLOB_DAT 0000000000000000 
__libc_start_main@GLIBC_2.34 + 0
000000003fe0  000200000006 R_X86_64_GLOB_DAT 0000000000000000 
_ITM_deregisterTM[...] + 0
000000003fe8  000300000006 R_X86_64_GLOB_DAT 0000000000000000 __gmon_start__ + 0
000000003ff0  000400000006 R_X86_64_GLOB_DAT 0000000000000000 
_ITM_registerTMCl[...] + 0
000000003ff8  000500000006 R_X86_64_GLOB_DAT 0000000000000000 
__cxa_finalize@GLIBC_2.2.5 + 0


Symbol table '.dynsym' contains 6 entries:
    Num:    Value          Size Type    Bind   Vis      Ndx Name
      0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
      1: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND _[...]@GLIBC_2.34 
(2)
      2: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND 
_ITM_deregisterT[...]
      3: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND __gmon_start__
      4: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND 
_ITM_registerTMC[...]
      5: 0000000000000000     0 FUNC    WEAK   DEFAULT  UND [...]@GLIBC_2.2.5 
(3)


Symbol table '.symtab' contains 42 entries:
    Num:    Value          Size Type    Bind   Vis      Ndx Name
      0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
      1: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS Scrt1.o
      2: 000000000000038c    32 OBJECT  LOCAL  DEFAULT    4 __abi_tag
      3: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS usdt_rip.c
      4: 0000000000004021     1 OBJECT  LOCAL  DEFAULT   25 ti
      5: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS crtstuff.c
      6: 00000000000010a0     0 FUNC    LOCAL  DEFAULT   14 deregister_tm_clones
      7: 00000000000010d0     0 FUNC    LOCAL  DEFAULT   14 register_tm_clones
      8: 0000000000001110     0 FUNC    LOCAL  DEFAULT   14 
__do_global_dtors_aux
      9: 0000000000004020     1 OBJECT  LOCAL  DEFAULT   25 completed.0
     10: 0000000000003df8     0 OBJECT  LOCAL  DEFAULT   21 
__do_global_dtor[...]
     11: 0000000000001150     0 FUNC    LOCAL  DEFAULT   14 frame_dummy
     12: 0000000000003df0     0 OBJECT  LOCAL  DEFAULT   20 
__frame_dummy_in[...]
     13: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS damo.c
     14: 0000000000004022     1 OBJECT  LOCAL  DEFAULT   25 ti
     15: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS crtstuff.c
     16: 00000000000020d8     0 OBJECT  LOCAL  DEFAULT   19 __FRAME_END__
     17: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS
     18: 0000000000003e00     0 OBJECT  LOCAL  DEFAULT   22 _DYNAMIC
     19: 0000000000002008     0 NOTYPE  LOCAL  DEFAULT   18 __GNU_EH_FRAME_HDR
     20: 0000000000003fc0     0 OBJECT  LOCAL  DEFAULT   23 
_GLOBAL_OFFSET_TABLE_
     21: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND 
__libc_start_mai[...]
     22: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND 
_ITM_deregisterT[...]
     23: 0000000000004000     0 NOTYPE  WEAK   DEFAULT   24 data_start
     24: 0000000000001160     8 FUNC    GLOBAL DEFAULT   14 add
     25: 0000000000004020     0 NOTYPE  GLOBAL DEFAULT   24 _edata
     26: 0000000000002004     1 NOTYPE  WEAK   HIDDEN    17 _.stapsdt.base
     27: 0000000000004010     8 OBJECT  GLOBAL DEFAULT   24 t1
     28: 0000000000001168     0 FUNC    GLOBAL HIDDEN    15 _fini
     29: 0000000000004000     0 NOTYPE  GLOBAL DEFAULT   24 __data_start
     30: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND __gmon_start__
     31: 0000000000004008     0 OBJECT  GLOBAL HIDDEN    24 __dso_handle
     32: 0000000000002000     4 OBJECT  GLOBAL DEFAULT   16 _IO_stdin_used
     33: 0000000000004028     0 NOTYPE  GLOBAL DEFAULT   25 _end
     34: 0000000000001070    38 FUNC    GLOBAL DEFAULT   14 _start
     35: 0000000000004020     0 NOTYPE  GLOBAL DEFAULT   25 __bss_start
     36: 0000000000001040    48 FUNC    GLOBAL DEFAULT   14 main
     37: 0000000000004018     8 OBJECT  GLOBAL DEFAULT   24 add_ptr
     38: 0000000000004020     0 OBJECT  GLOBAL HIDDEN    24 __TMC_END__
     39: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND 
_ITM_registerTMC[...]
     40: 0000000000000000     0 FUNC    WEAK   DEFAULT  UND 
__cxa_finalize@G[...]
     41: 0000000000001000     0 FUNC    GLOBAL HIDDEN    11 _init


Displaying notes found in: .note.gnu.property
   Owner                Data size        Description
   GNU                  0x00000020       NT_GNU_PROPERTY_TYPE_0
       Properties: x86 feature: IBT, SHSTK
         x86 ISA needed: x86-64-baseline


Displaying notes found in: .note.gnu.build-id
   Owner                Data size        Description
   GNU                  0x00000014       NT_GNU_BUILD_ID (unique build ID 
bitstring)
     Build ID: eb615daa575687cc44edc1d339b27890c12c27f1


Displaying notes found in: .note.ABI-tag
   Owner                Data size        Description
   GNU                  0x00000010       NT_GNU_ABI_TAG (ABI version tag)
     OS: Linux, ABI: 3.2.0


Displaying notes found in: .note.stapsdt
   Owner                Data size        Description
   stapsdt              0x00000066       NT_STAPSDT (SystemTap probe 
descriptors)
     Provider: usdt_rip
     Name: rip_global_var
     Location: 0x0000000000001058, Base: 0x0000000000002004, Semaphore: 
0x0000000000000000
     Arguments: -1@ti(%rip) 8@add_ptr(%rip) -1@4+t1(%rip) -1@ti(%rip)

Could you share the complete source codes and compiler options which
reproduce the above result?




At 2025-08-12 13:06:40, "Yonghong Song" <yonghong.s...@linux.dev> wrote:

On 8/10/25 1:55 AM, 赵佳炜 wrote:

Hi Yonghong,

I found another issue where symbols can be duplicated, and I’m not sure how to 
tell them apart.

For example, I created two C files named usdt_rip.c and hello.c. Both define 
their own static ti variables, like:`static volatile char ti = 0;`.

After compiling, I obtained an ELF file usdt_rip whose .symtab contains the 
following entries:

$ readelf -s usdt_rip

Symbol table '.symtab' contains 42 entries:
     Num:    Value          Size Type    Bind   Vis      Ndx Name
       0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
       1: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS Scrt1.o
       2: 000000000000038c    32 OBJECT  LOCAL  DEFAULT    4 __abi_tag
       3: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS usdt_rip.c
       4: 0000000000004021     1 OBJECT  LOCAL  DEFAULT   25 ti
       5: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS crtstuff.c
       6: 00000000000010a0     0 FUNC    LOCAL  DEFAULT   14 
deregister_tm_clones
       7: 00000000000010d0     0 FUNC    LOCAL  DEFAULT   14 register_tm_clones
       8: 0000000000001110     0 FUNC    LOCAL  DEFAULT   14 
__do_global_dtors_aux
       9: 0000000000004020     1 OBJECT  LOCAL  DEFAULT   25 completed.0
      10: 0000000000003df8     0 OBJECT  LOCAL  DEFAULT   21 
__do_global_dtor[...]
      11: 0000000000001150     0 FUNC    LOCAL  DEFAULT   14 frame_dummy
      12: 0000000000003df0     0 OBJECT  LOCAL  DEFAULT   20 
__frame_dummy_in[...]
      13: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS damo.c
      14: 0000000000004022     1 OBJECT  LOCAL  DEFAULT   25 ti
      15: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS crtstuff.c
      16: 00000000000020d8     0 OBJECT  LOCAL  DEFAULT   19 __FRAME_END__


As you can see, there are two ti variables in the .symtab section. Their values 
are very close, making them hard to distinguish.

I’m unsure how to handle this situation. Do you have any suggestions?
Did you check relocations? Relocaitons should be able to point exact which 
symbol.

Thanks,
Jiawei Zhao
[...]


Reply via email to