mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
[llvm-readobj] - Refine --needed-libs implementation and add a test.
We have no good test for --needed-libs option. The one we have as a part of Object/readobj-shared-object.test is not complete. In this patch I've did a minor NFC changes to the implementation and added a test. This allowed to remove this piece from Object/readobj-shared-object.test Differential revision: https://reviews.llvm.org/D73174
This commit is contained in:
parent
8f250c81f4
commit
7bdcb225b9
@ -1,7 +1,7 @@
|
||||
# RUN: llvm-readobj --sections --symbols --dyn-syms --needed-libs \
|
||||
# RUN: llvm-readobj --sections --symbols --dyn-syms \
|
||||
# RUN: %p/Inputs/shared-object-test.elf-i386 | FileCheck %s
|
||||
|
||||
# RUN: llvm-readobj --sections --symbols --dyn-syms --needed-libs \
|
||||
# RUN: llvm-readobj --sections --symbols --dyn-syms \
|
||||
# RUN: %p/Inputs/shared-object-test.elf-x86-64 | FileCheck %s
|
||||
|
||||
# CHECK: Sections [
|
||||
@ -281,8 +281,3 @@
|
||||
# CHECK: Section: Absolute (0xFFF1)
|
||||
# CHECK: }
|
||||
# CHECK: ]
|
||||
|
||||
# CHECK: NeededLibraries [
|
||||
# CHECK-NEXT: libc.so.6
|
||||
# CHECK-NEXT: libm.so.6
|
||||
# CHECK-NEXT: ]
|
||||
|
94
test/tools/llvm-readobj/ELF/needed-libs.test
Normal file
94
test/tools/llvm-readobj/ELF/needed-libs.test
Normal file
@ -0,0 +1,94 @@
|
||||
## In this test we check the --needed-libs option.
|
||||
|
||||
# RUN: yaml2obj %s --docnum=1 -o %t1
|
||||
# RUN: llvm-readobj --needed-libs %t1 \
|
||||
# RUN: | FileCheck %s --strict-whitespace --match-full-lines --check-prefix=NEEDED-LIBS
|
||||
# RUN: llvm-readelf --needed-libs %t1 \
|
||||
# RUN: | FileCheck %s --strict-whitespace --match-full-lines --check-prefix=NEEDED-LIBS
|
||||
|
||||
## Check that library names are sorted when printed.
|
||||
## Document that we also sort error entries.
|
||||
|
||||
# NEEDED-LIBS:NeededLibraries [
|
||||
# NEEDED-LIBS-NEXT: <Invalid offset 0x1111111>
|
||||
# NEEDED-LIBS-NEXT: <Invalid offset 0x9999999>
|
||||
# NEEDED-LIBS-NEXT: aaa
|
||||
# NEEDED-LIBS-NEXT: bbb
|
||||
# NEEDED-LIBS-NEXT: ccc
|
||||
# NEEDED-LIBS-NEXT:]
|
||||
|
||||
--- !ELF
|
||||
FileHeader:
|
||||
Class: ELFCLASS64
|
||||
Data: ELFDATA2LSB
|
||||
Type: ET_EXEC
|
||||
Machine: EM_X86_64
|
||||
Sections:
|
||||
- Name: .dynstr
|
||||
Type: SHT_STRTAB
|
||||
Flags: [ SHF_ALLOC ]
|
||||
Content: '00616161006262620063636300' ## 0,a,a,a,0,b,b,b,0,c,c,c,0
|
||||
- Name: .dynamic
|
||||
Type: SHT_DYNAMIC
|
||||
Entries:
|
||||
- Tag: DT_STRTAB
|
||||
Value: 0x0000000000000000
|
||||
- Tag: DT_NEEDED
|
||||
Value: 0x9999999
|
||||
- Tag: DT_NEEDED
|
||||
Value: 9
|
||||
- Tag: DT_NEEDED
|
||||
Value: 1
|
||||
- Tag: DT_NEEDED
|
||||
Value: 5
|
||||
- Tag: DT_NEEDED
|
||||
Value: 0x1111111
|
||||
- Tag: DT_STRSZ
|
||||
Value: 0xD
|
||||
- Tag: DT_NULL
|
||||
Value: 0x0
|
||||
ProgramHeaders:
|
||||
- Type: PT_LOAD
|
||||
VAddr: 0x0
|
||||
Sections:
|
||||
- Section: .dynstr
|
||||
- Section: .dynamic
|
||||
|
||||
## Check what we print when the dynamic string table is empty.
|
||||
# RUN: yaml2obj %s --docnum=2 -o %t2
|
||||
# RUN: llvm-readobj --needed-libs %t2 | FileCheck %s --check-prefix=EMPTY-DYNSTR
|
||||
# RUN: llvm-readelf --needed-libs %t2 | FileCheck %s --check-prefix=EMPTY-DYNSTR
|
||||
|
||||
# EMPTY-DYNSTR: NeededLibraries [
|
||||
# EMPTY-DYNSTR-NEXT: <String table is empty or was not found>
|
||||
# EMPTY-DYNSTR-NEXT: ]
|
||||
|
||||
--- !ELF
|
||||
FileHeader:
|
||||
Class: ELFCLASS64
|
||||
Data: ELFDATA2LSB
|
||||
Type: ET_EXEC
|
||||
Machine: EM_X86_64
|
||||
Sections:
|
||||
- Name: .dynstr
|
||||
Type: SHT_STRTAB
|
||||
Flags: [ SHF_ALLOC ]
|
||||
Size: 0
|
||||
- Name: .dynamic
|
||||
Type: SHT_DYNAMIC
|
||||
Address: 0x1000
|
||||
Entries:
|
||||
- Tag: DT_STRTAB
|
||||
Value: 0x0000000000000000
|
||||
- Tag: DT_NEEDED
|
||||
Value: 1
|
||||
- Tag: DT_STRSZ
|
||||
Value: 0x0
|
||||
- Tag: DT_NULL
|
||||
Value: 0x0
|
||||
ProgramHeaders:
|
||||
- Type: PT_LOAD
|
||||
VAddr: 0x0
|
||||
Sections:
|
||||
- Section: .dynstr
|
||||
- Section: .dynamic
|
@ -2471,9 +2471,9 @@ template <class ELFT> void ELFDumper<ELFT>::printNeededLibraries() {
|
||||
if (Entry.d_tag == ELF::DT_NEEDED)
|
||||
Libs.push_back(getDynamicString(Entry.d_un.d_val));
|
||||
|
||||
llvm::stable_sort(Libs);
|
||||
llvm::sort(Libs);
|
||||
|
||||
for (const auto &L : Libs)
|
||||
for (const std::string &L : Libs)
|
||||
W.startLine() << L << "\n";
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user