Hi Rich, Sorry to trouble you again about symbol versioning(regardless of rationality). I've investigated the relevant code of dynamic linker and done some experiments, which raises the following questions, prerequisites: 1. clone the repo https://github.com/rofl0r/symbol-versioning-test 2. use the musl-gcc wrapper to compile the code questions: 1. I tried the command "readelf -sD libdso.so", which output two identical symbol "func" in the symbol table of ".gnu.hash". Symbol table of `.gnu.hash' for image: Num  Buc:  Value              Size   Type    Bind    Vis      Ndx  Name  5    0:   0000000000000000   0      OBJECT  GLOBAL  DEFAULT  ABS  NEW  6    2:   0000000000001110   23     FUNC    GLOBAL  DEFAULT  12   func  7    2:   00000000000010f9   23     FUNC    GLOBAL  DEFAULT  12   func  8    2:   0000000000000000   0      OBJECT  GLOBAL  DEFAULT  ABS  OLD the function gnu_lookup() of ldso/dynlink.c, uses the hashtab to find a symbol. It returns the first "func"(0000000000001110) that is the default symbol. Should I change the hashtab for saving complete symbol name? like func@@NEW and func@OLD? 2. I couldn't tell the meaning of "versym" in "struct dso". When "dso->versym[i] > 0", its value is 3, not NEW or OLD. Neither is "dso->strings + dso->versym[i]". 3. It seems like that the function map_library() doesn't save information of the ".dynsym" table. I think I need to change the behavior to save all symbol versions, right? Looking forward to your valuable advice. Thank you so much! ------------------ Original ------------------ From: "musl"