diff options
author | Seiya Nuta <nuta@seiya.me> | 2019-10-30 15:12:17 +0900 |
---|---|---|
committer | Seiya Nuta <nuta@seiya.me> | 2019-10-30 15:12:22 +0900 |
commit | 1e589f67ef726ecfa1135750c557d4c8f95b71cd (patch) | |
tree | bb62de792d3a17f93173567873ac42a1c133efcb /llvm/test/tools | |
parent | 358c2918d62190aef3f351aa5ed7f2d48785fd34 (diff) | |
download | bcm5719-llvm-1e589f67ef726ecfa1135750c557d4c8f95b71cd.tar.gz bcm5719-llvm-1e589f67ef726ecfa1135750c557d4c8f95b71cd.zip |
[llvm-objcopy][MachO] Support indirect symbol table
Summary:
Parse the indirect symbol table and update the indexes of
symbol entries in the table in the writer in case they have
been changed.
Reviewers: alexshap, rupprecht, jhenderson
Reviewed By: alexshap, rupprecht
Subscribers: jakehehrlich, abrachet, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D66280
Diffstat (limited to 'llvm/test/tools')
-rw-r--r-- | llvm/test/tools/llvm-objcopy/MachO/indirect-symbol-table-copy.s | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/llvm/test/tools/llvm-objcopy/MachO/indirect-symbol-table-copy.s b/llvm/test/tools/llvm-objcopy/MachO/indirect-symbol-table-copy.s new file mode 100644 index 00000000000..e1a0b1836a0 --- /dev/null +++ b/llvm/test/tools/llvm-objcopy/MachO/indirect-symbol-table-copy.s @@ -0,0 +1,64 @@ +## Show that llvm-objcopy copies the indirect symbol table properly. +# RUN: llvm-mc -assemble -triple x86_64-apple-darwin9 -filetype=obj %s -o %t +# RUN: llvm-objcopy %t %t.copy +# RUN: llvm-readobj --symbols --macho-indirect-symbols %t.copy \ +# RUN: | FileCheck %s + +# __DATA,__nl_symbol_ptr +.non_lazy_symbol_pointer +bar: + .long 0 +baz: + .long 0 + +.indirect_symbol bar + +# __DATA,__la_symbol_ptr +.lazy_symbol_pointer +foo: + .long 0 + +.indirect_symbol foo + +# CHECK: Symbols [ +# CHECK-NEXT: Symbol { +# CHECK-NEXT: Name: bar (5) +# CHECK-NEXT: Type: Section (0xE) +# CHECK-NEXT: Section: __nl_symbol_ptr (0x2) +# CHECK-NEXT: RefType: UndefinedNonLazy (0x0) +# CHECK-NEXT: Flags [ (0x0) +# CHECK-NEXT: ] +# CHECK-NEXT: Value: 0x0 +# CHECK-NEXT: } +# CHECK-NEXT: Symbol { +# CHECK-NEXT: Name: baz (1) +# CHECK-NEXT: Type: Section (0xE) +# CHECK-NEXT: Section: __nl_symbol_ptr (0x2) +# CHECK-NEXT: RefType: UndefinedNonLazy (0x0) +# CHECK-NEXT: Flags [ (0x0) +# CHECK-NEXT: ] +# CHECK-NEXT: Value: 0x4 +# CHECK-NEXT: } +# CHECK-NEXT: Symbol { +# CHECK-NEXT: Name: foo (9) +# CHECK-NEXT: Type: Section (0xE) +# CHECK-NEXT: Section: __la_symbol_ptr (0x3) +# CHECK-NEXT: RefType: UndefinedNonLazy (0x0) +# CHECK-NEXT: Flags [ (0x0) +# CHECK-NEXT: ] +# CHECK-NEXT: Value: 0x8 +# CHECK-NEXT: } +# CHECK-NEXT: ] +# CHECK-NEXT: Indirect Symbols { +# CHECK-NEXT: Number: 2 +# CHECK-NEXT: Symbols [ +# CHECK-NEXT: Entry { +# CHECK-NEXT: Entry Index: 0 +# CHECK-NEXT: Symbol Index: 0x80000000 +# CHECK-NEXT: } +# CHECK-NEXT: Entry { +# CHECK-NEXT: Entry Index: 1 +# CHECK-NEXT: Symbol Index: 0x2 +# CHECK-NEXT: } +# CHECK-NEXT: ] +# CHECK-NEXT: } |