The GNU documentation is ambiguous about the version index for unversioned undefined symbols. The current specification at https://sourceware.org/gnu-gabi/program-loading-and-dynamic-linking.txt defines VER_NDX_LOCAL (0) as "The symbol is private, and is not available outside this object." However, this naming is misleading for undefined symbols. As suggested in discussions, VER_NDX_LOCAL should conceptually be VER_NDX_NONE and apply to unversioned undefined symbols as well. GNU ld has used index 0 for unversioned undefined symbols both before version 2.35 (see https://sourceware.org/PR26002) and in the upcoming 2.46 release (see https://sourceware.org/PR33577). This change aligns with GNU ld's behavior by switching from index 1 to index 0. While here, add a test to dso-undef-extract-lazy.s that undefined symbols of index 0 in DSO are treated as unversioned symbols.
20 lines
549 B
ArmAsm
20 lines
549 B
ArmAsm
# REQUIRES: x86
|
|
|
|
# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
|
|
# RUN: echo "FOO { global: extern \"C++\" { \"abb(int)\"; }; };" > %t.script
|
|
# RUN: ld.lld --version-script %t.script --undefined-version -shared %t.o -o %t.so
|
|
# RUN: llvm-readobj -V %t.so | FileCheck %s
|
|
|
|
# CHECK: VersionSymbols [
|
|
# CHECK-NEXT: Symbol {
|
|
# CHECK-NEXT: Version: 0
|
|
# CHECK-NEXT: Name:
|
|
# CHECK-NEXT: }
|
|
# CHECK-NEXT: Symbol {
|
|
# CHECK-NEXT: Version: 0
|
|
# CHECK-NEXT: Name: _Z3abbi
|
|
# CHECK-NEXT: }
|
|
# CHECK-NEXT: ]
|
|
|
|
.globl _Z3abbi
|