summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/lib/ReaderWriter/ELF/DefaultLayout.h8
-rw-r--r--lld/test/elf/Hexagon/Inputs/dynobj.c26
-rw-r--r--lld/test/elf/Hexagon/Inputs/dynobj.obin0 -> 1288 bytes
-rw-r--r--lld/test/elf/Hexagon/rela-order.test9
4 files changed, 41 insertions, 2 deletions
diff --git a/lld/lib/ReaderWriter/ELF/DefaultLayout.h b/lld/lib/ReaderWriter/ELF/DefaultLayout.h
index ede4aa10694..73a4c163143 100644
--- a/lld/lib/ReaderWriter/ELF/DefaultLayout.h
+++ b/lld/lib/ReaderWriter/ELF/DefaultLayout.h
@@ -259,7 +259,7 @@ public:
RelocationTable<ELFT> *getDynamicRelocationTable() {
if (!_dynamicRelocationTable) {
_dynamicRelocationTable.reset(new (_allocator) RelocationTable<ELFT>(
- _targetInfo, ".rela.dyn", ORDER_REL));
+ _targetInfo, ".rela.dyn", ORDER_DYNAMIC_RELOCS));
addSection(_dynamicRelocationTable.get());
}
return _dynamicRelocationTable.get();
@@ -269,7 +269,7 @@ public:
RelocationTable<ELFT> *getPLTRelocationTable() {
if (!_pltRelocationTable) {
_pltRelocationTable.reset(new (_allocator) RelocationTable<ELFT>(
- _targetInfo, ".rela.plt", ORDER_REL));
+ _targetInfo, ".rela.plt", ORDER_DYNAMIC_PLT_RELOCS));
addSection(_pltRelocationTable.get());
}
return _pltRelocationTable.get();
@@ -386,6 +386,8 @@ Layout::SegmentType DefaultLayout<ELFT>::getSegmentType(
case ORDER_HASH:
case ORDER_DYNAMIC_SYMBOLS:
case ORDER_DYNAMIC_STRINGS:
+ case ORDER_DYNAMIC_RELOCS:
+ case ORDER_DYNAMIC_PLT_RELOCS:
case ORDER_REL:
case ORDER_INIT:
case ORDER_PLT:
@@ -429,6 +431,8 @@ bool DefaultLayout<ELFT>::hasOutputSegment(Section<ELFT> *section) {
case ORDER_HASH:
case ORDER_DYNAMIC_SYMBOLS:
case ORDER_DYNAMIC_STRINGS:
+ case ORDER_DYNAMIC_RELOCS:
+ case ORDER_DYNAMIC_PLT_RELOCS:
case ORDER_REL:
case ORDER_INIT:
case ORDER_PLT:
diff --git a/lld/test/elf/Hexagon/Inputs/dynobj.c b/lld/test/elf/Hexagon/Inputs/dynobj.c
new file mode 100644
index 00000000000..fa025ad43c6
--- /dev/null
+++ b/lld/test/elf/Hexagon/Inputs/dynobj.c
@@ -0,0 +1,26 @@
+extern int shankar;
+static int a;
+static int b;
+int c;
+int fn2() {
+ return 0;
+}
+
+int fn1() {
+ return 0;
+}
+
+int fn() {
+ a = 10;
+ b = 20;
+ c = 10;
+ shankar = 20;
+ return 0;
+}
+
+int fn3() {
+ fn();
+ fn1();
+ fn2();
+ return 0;
+}
diff --git a/lld/test/elf/Hexagon/Inputs/dynobj.o b/lld/test/elf/Hexagon/Inputs/dynobj.o
new file mode 100644
index 00000000000..6c184f2edd6
--- /dev/null
+++ b/lld/test/elf/Hexagon/Inputs/dynobj.o
Binary files differ
diff --git a/lld/test/elf/Hexagon/rela-order.test b/lld/test/elf/Hexagon/rela-order.test
new file mode 100644
index 00000000000..b3f4ce066f8
--- /dev/null
+++ b/lld/test/elf/Hexagon/rela-order.test
@@ -0,0 +1,9 @@
+RUN: lld -core -target hexagon %p/Inputs/dynobj.o \
+RUN: -output=%t -noinhibit-exec -output-type=shared
+RUN: llvm-objdump -section-headers %t | FileCheck %s
+
+CHECK: .dynsym
+CHECK-NEXT: .dynstr
+CHECK-NEXT: .rela.dyn
+CHECK-NEXT: .rela.plt
+CHECK-NEXT: .plt
OpenPOWER on IntegriCloud