diff options
-rw-r--r-- | lld/lib/ReaderWriter/ELF/DefaultLayout.h | 8 | ||||
-rw-r--r-- | lld/test/elf/Hexagon/Inputs/dynobj.c | 26 | ||||
-rw-r--r-- | lld/test/elf/Hexagon/Inputs/dynobj.o | bin | 0 -> 1288 bytes | |||
-rw-r--r-- | lld/test/elf/Hexagon/rela-order.test | 9 |
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 Binary files differnew file mode 100644 index 00000000000..6c184f2edd6 --- /dev/null +++ b/lld/test/elf/Hexagon/Inputs/dynobj.o 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 |