2 // RUN
: llvm-mc
-filetype
=obj
-arm-add-build-attributes
-triple
=armv7a-linux-gnueabihf
%p
/Inputs
/arm-shared.s
-o
%t-lib.o
3 // RUN
: llvm-mc
-filetype
=obj
-arm-add-build-attributes
-triple
=armv7a-linux-gnueabihf
%s
-o
%t.o
4 // RUN
: ld.lld
%t-lib.o
--shared
-o
%t.so
5 // RUN
: echo
"SECTIONS { \
6 // RUN: .text : { *(.text) } \
7 // RUN: .rela.dyn : { *(.rel.dyn) *(.rel.plt) } \
8 // RUN: } " > %t.script
9 // RUN
: ld.lld
%t.o
-o
%t.axf
%t.so
--script
%t.script
10 // RUN
: llvm-readobj
--section-headers
--dynamic-table
%t.axf | FileCheck
%s
12 // The linker script above combines the
.rela.dyn and .rela.plt into a single
13 // table. ELF is clear that the DT_PLTRELSZ should match the subset of
14 // relocations that is associated with the PLT. It is less clear about what
15 // the value of DT_RELASZ should be. ELF implies that it should
be the size
16 // of the single table so that DT_RELASZ includes DT_PLTRELSZ. The loader in
17 // glibc permits this as long as
.rela.plt comes after .rela.dyn in the
18 // combined table. In the ARM case irelative relocations do
not count as PLT
23 .type indirect,%gnu_indirect_function
27 .globl bar2 // from Inputs/arm-shared.s
31 .type _start,%function
39 // CHECK
: Name
: .rela.dyn
40 // CHECK-NEXT
: Type
: SHT_REL
41 // CHECK-NEXT
: Flags
[
42 // CHECK-NEXT
: SHF_ALLOC
43 // CHECK-NEXT
: SHF_INFO_LINK
45 // CHECK-NEXT
: Address
:
46 // CHECK-NEXT
: Offset
:
47 // CHECK-NEXT
: Size
: 24
49 // CHECK
: 0x00000012 RELSZ
24 (bytes
)
50 // CHECK
: 0x00000002 PLTRELSZ
8 (bytes
)