Skip to content

llvm-readobj --version-info assumes first symbol version is base version #37072

Open
@glandium

Description

@glandium
Bugzilla Link 37724
Version trunk
OS Linux
Attachments foo executable
CC @jh7370

Extended Description

The output of readobj --version-info for the attached file is the following:

File: foo
Format: ELF64-x86-64
Arch: x86_64
AddressSize: 64bit
LoadName:
Version symbols {
Section Name: .gnu.version (130)
Address: 0x408
Offset: 0x408
Link: 4
Symbols [
Symbol {
Version: 0
Name: @
}
Symbol {
Version: 2
Name: __libc_start_main@GLIBC_2.2.5
}
Symbol {
Version: 2
Name: __cxa_finalize@GLIBC_2.2.5
}
Symbol {
Version: 0
Name: _ITM_registerTMCloneTable@
}
Symbol {
Version: 0
Name: _ITM_deregisterTMCloneTable@
}
Symbol {
Version: 0
Name: gmon_start@
}
Symbol {
Version: 1
Name: foo@
}
Symbol {
Version: 1
Name: FOO@
}
]
}
SHT_GNU_verdef {
Definition {
Version: 1
Flags: 0x0
Index: 1
Hash: 19263
Name: FOO
}
}
SHT_GNU_verneed {
Dependency {
Version: 1
Count: 1
FileName: libc.so.6
Entry {
Hash: 157882997
Flags: 0x0
Index: 2
Name: GLIBC_2.2.5
}
}
}

It's rather unconventional that SHT_GNU_verdef doesn't contain a definition with Flags: Base, but that can happen thanks to GNU gold doing weird things. Anyways, the point is, symbols foo and FOO should appear as foo@@foo and FOO@@foo, not foo@ and FOO@.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions