Skip to content

Commit

Permalink
[ARM] Add dynamic symbols to the dynamic library writer
Browse files Browse the repository at this point in the history
llvm-svn: 237898
  • Loading branch information
Denis Protivensky committed May 21, 2015
1 parent 31619a8 commit af1c9dd
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 3 deletions.
9 changes: 8 additions & 1 deletion lld/lib/ReaderWriter/ELF/ARM/ARMDynamicLibraryWriter.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,22 @@ class ARMDynamicLibraryWriter
protected:
// Add any runtime files and their atoms to the output
void createImplicitFiles(std::vector<std::unique_ptr<File>> &) override;

private:
ARMLinkingContext &_ctx;
};

ARMDynamicLibraryWriter::ARMDynamicLibraryWriter(ARMLinkingContext &ctx,
ARMTargetLayout &layout)
: ARMELFWriter(ctx, layout) {}
: ARMELFWriter(ctx, layout), _ctx(ctx) {}

void ARMDynamicLibraryWriter::createImplicitFiles(
std::vector<std::unique_ptr<File>> &result) {
DynamicLibraryWriter::createImplicitFiles(result);
auto file = llvm::make_unique<RuntimeFile<ELF32LE>>(_ctx, "ARM dynamic file");
file->addAbsoluteAtom(gotSymbol);
file->addAbsoluteAtom(dynamicSymbol);
result.push_back(std::move(file));
}

} // namespace elf
Expand Down
29 changes: 27 additions & 2 deletions lld/test/elf/ARM/dynamic-symbols.test
Original file line number Diff line number Diff line change
Expand Up @@ -14,20 +14,40 @@
# RUN: llvm-readobj -symbols %t | FileCheck -check-prefix=EXEC-DYN %s

# EXEC-DYN: Name: _GLOBAL_OFFSET_TABLE_
# EXEC-DYN-NEXT: Value: {{[0-9]+}}
# EXEC-DYN-NEXT: Value: 0x401000
# EXEC-DYN-NEXT: Size: 0
# EXEC-DYN-NEXT: Binding: Global (0x1)
# EXEC-DYN-NEXT: Type: Object (0x1)
# EXEC-DYN-NEXT: Other: 0
# EXEC-DYN-NEXT: Section: Absolute (0xFFF1)
# EXEC-DYN: Name: _DYNAMIC
# EXEC-DYN-NEXT: Value: {{[0-9]+}}
# EXEC-DYN-NEXT: Value: 0x400130
# EXEC-DYN-NEXT: Size: 0
# EXEC-DYN-NEXT: Binding: Global (0x1)
# EXEC-DYN-NEXT: Type: Object (0x1)
# EXEC-DYN-NEXT: Other: 0
# EXEC-DYN-NEXT: Section: Absolute (0xFFF1)

# RUN: yaml2obj -format=elf %s > %t-o.o
# RUN: lld -flavor gnu -target arm-linux-gnu \
# RUN: -shared --noinhibit-exec %t-o.o -o %t
# RUN: llvm-readobj -symbols %t | FileCheck -check-prefix=SHARED %s

# SHARED: Name: _GLOBAL_OFFSET_TABLE_
# SHARED-NEXT: Value: 0x401000
# SHARED-NEXT: Size: 0
# SHARED-NEXT: Binding: Global (0x1)
# SHARED-NEXT: Type: Object (0x1)
# SHARED-NEXT: Other: 0
# SHARED-NEXT: Section: Absolute (0xFFF1)
# SHARED: Name: _DYNAMIC
# SHARED-NEXT: Value: 0x4000EC
# SHARED-NEXT: Size: 0
# SHARED-NEXT: Binding: Global (0x1)
# SHARED-NEXT: Type: Object (0x1)
# SHARED-NEXT: Other: 0
# SHARED-NEXT: Section: Absolute (0xFFF1)

---
FileHeader:
Class: ELFCLASS32
Expand All @@ -51,6 +71,11 @@ Sections:
Flags: [ SHF_WRITE, SHF_ALLOC ]
AddressAlign: 0x0000000000000001
Content: ''
- Name: .got
Type: SHT_PROGBITS
Flags: [ SHF_WRITE, SHF_ALLOC ]
AddressAlign: 0x0000000000000004
Content: 0000
Symbols:
Global:
- Name: main
Expand Down

0 comments on commit af1c9dd

Please sign in to comment.