# Checks that linking an object file with a shared object creates the necessary # PLT/GOT Entries RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/use-shared.x86-64 \ RUN: %p/Inputs/shared.so-x86-64 --output-filetype=yaml -o %t1 --noinhibit-exec RUN: FileCheck %s < %t1 RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/use-shared-32s.x86-64 \ RUN: %p/Inputs/shared.so-x86-64 --output-filetype=yaml --noinhibit-exec \ RUN: | FileCheck %s --check-prefix=32S CHECK: - name: main CHECK: scope: global CHECK: references: CHECK: - kind: R_X86_64_PC32 CHECK: offset: 18 CHECK: target: [[PLTNAME:[-a-zA-Z0-9_]+]] CHECK: addend: -4 CHECK: - kind: R_X86_64_GOTPCREL CHECK: offset: 25 CHECK: target: [[GOTNAME:[-a-zA-Z0-9_]+]] CHECK: addend: -4 - name: .PLT0 CHECK: type: stub CHECK: content: [ FF, 35, 00, 00, 00, 00, FF, 25, 00, 00, 00, 00, CHECK: 90, 90, 90, 90 ] CHECK: alignment: 2^4 CHECK: section-choice: custom-required CHECK: section-name: .plt CHECK: references: CHECK: - kind: R_X86_64_PC32 CHECK: offset: 2 target: __got0 CHECK: addend: -4 CHECK: - kind: R_X86_64_PC32 CHECK: offset: 8 target: __got1 CHECK: addend: -4 - name: [[PLTNAME]] CHECK: type: stub CHECK: content: [ FF, 25, 00, 00, 00, 00, 68, 00, 00, 00, 00, E9, CHECK: 00, 00, 00, 00 ] CHECK: alignment: 2^4 CHECK: section-choice: custom-required CHECK: section-name: .plt CHECK: references: CHECK: - kind: R_X86_64_PC32 CHECK: offset: 2 target: __got_foo CHECK: addend: -4 CHECK: - kind: LLD_R_X86_64_GOTRELINDEX CHECK: offset: 7 target: __got_foo CHECK: - kind: R_X86_64_PC32 CHECK: offset: 12 target: .PLT0 CHECK: addend: -4 // Don't check the GOT and PLT names as they are only present in assert builds. CHECK: type: got CHECK: content: [ 00, 00, 00, 00, 00, 00, 00, 00 ] CHECK: section-choice: custom-required CHECK: section-name: .got CHECK: permissions: rw- CHECK: references: CHECK: - kind: R_X86_64_GLOB_DAT CHECK: offset: 0 CHECK: target: i CHECK:shared-library-atoms: CHECK: - name: foo CHECK: load-name: shared.so-x86-64 32S: name: main 32S: kind: R_X86_64_PC32 32S: target: func 32S: kind: R_X86_64_32S 32S: kind: R_X86_64_PC32 32S: type: stub