mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-24 23:28:41 +00:00
Support reading GNU symbol versions in ELFObjectFile
* Add enums and structures for GNU version information. * Implement extraction of that information on a per-symbol basis (ELFObjectFile::getSymbolVersion). * Implement a generic interface, GetELFSymbolVersion(), for getting the symbol version from the ObjectFile (hides the templating). * Have llvm-readobj print out the version, when available. * Add a test for the new feature: readobj-elf-versioning.test git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@152436 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
BIN
test/Object/Inputs/elf-versioning-test.i386
Executable file
BIN
test/Object/Inputs/elf-versioning-test.i386
Executable file
Binary file not shown.
BIN
test/Object/Inputs/elf-versioning-test.x86_64
Executable file
BIN
test/Object/Inputs/elf-versioning-test.x86_64
Executable file
Binary file not shown.
31
test/Object/Inputs/elfver.S
Normal file
31
test/Object/Inputs/elfver.S
Normal file
@@ -0,0 +1,31 @@
|
||||
# Compile with:
|
||||
# ARGS="-shared -nostdlib -Wl,--version-script=elfver.script"
|
||||
# clang $ARGS -m32 elfver.S -lc -o elf-versioning-test.i386
|
||||
# clang $ARGS -m64 elfver.S -lc -o elf-versioning-test.x86_64
|
||||
|
||||
# Also, strip off non-dynamic symbols:
|
||||
# strip elf-versioning-test.i386
|
||||
# strip elf-versioning-test.x86_64
|
||||
|
||||
#ifdef __i386__
|
||||
.symver _puts, puts@GLIBC_2.0
|
||||
#else
|
||||
.symver _puts, puts@GLIBC_2.2.5
|
||||
#endif
|
||||
call _puts@PLT
|
||||
|
||||
.symver foo1, foo@VER1
|
||||
.globl foo1
|
||||
.type foo1, @function
|
||||
foo1:
|
||||
ret
|
||||
|
||||
.symver foo2, foo@@VER2
|
||||
.globl foo2
|
||||
.type foo2, @function
|
||||
foo2:
|
||||
ret
|
||||
|
||||
.globl unversioned_define
|
||||
.type unversioned_define, @function
|
||||
unversioned_define:
|
10
test/Object/Inputs/elfver.script
Normal file
10
test/Object/Inputs/elfver.script
Normal file
@@ -0,0 +1,10 @@
|
||||
VER1 {
|
||||
global:
|
||||
foo;
|
||||
};
|
||||
|
||||
VER2 {
|
||||
global:
|
||||
foo;
|
||||
} VER1;
|
||||
|
15
test/Object/readobj-elf-versioning.test
Normal file
15
test/Object/readobj-elf-versioning.test
Normal file
@@ -0,0 +1,15 @@
|
||||
RUN: llvm-readobj %p/Inputs/elf-versioning-test.i386 \
|
||||
RUN: | FileCheck %s -check-prefix ELF
|
||||
RUN: llvm-readobj %p/Inputs/elf-versioning-test.i386 \
|
||||
RUN: | FileCheck %s -check-prefix ELF32
|
||||
RUN: llvm-readobj %p/Inputs/elf-versioning-test.x86_64 \
|
||||
RUN: | FileCheck %s -check-prefix ELF
|
||||
RUN: llvm-readobj %p/Inputs/elf-versioning-test.x86_64 \
|
||||
RUN: | FileCheck %s -check-prefix ELF64
|
||||
|
||||
ELF: foo@@VER2 FUNC {{[0-9a-f]+}} {{[0-9a-f]+}} {{[0-9a-f]+}} global
|
||||
ELF: foo@VER1 FUNC {{[0-9a-f]+}} {{[0-9a-f]+}} {{[0-9a-f]+}} global
|
||||
ELF: unversioned_define FUNC {{[0-9a-f]+}} {{[0-9a-f]+}} {{[0-9a-f]+}} global
|
||||
|
||||
ELF32: puts@GLIBC_2.0 FUNC {{[0-9a-f]+}} {{[0-9a-f]+}} {{[0-9a-f]+}} undef,global
|
||||
ELF64: puts@GLIBC_2.2.5 FUNC {{[0-9a-f]+}} {{[0-9a-f]+}} {{[0-9a-f]+}} undef,global
|
Reference in New Issue
Block a user