[lld] r344925 - Merging r343668:

George Rimar via llvm-commits llvm-commits at lists.llvm.org
Fri Oct 26 03:16:08 PDT 2018


Hi!

The r343669 "[ELF] - Fix BB after r343668" should be backported as well,
it fixed the same issue as you observe atm.

Best regards,
George | Developer | Access Softek, Inc

________________________________________
От: douglas.yung at sony.com <douglas.yung at sony.com>
Отправлено: 26 октября 2018 г. 7:48
Кому: tstellar at redhat.com; George Rimar
Копия: llvm-commits at lists.llvm.org
Тема: RE: [lld] r344925 - Merging r343668:

CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.

Hi Tom and George,

The test added in this commit is failing when run in a linux build on our internal build bot. Are there some other changes that need to be ported over?

FAIL: lld :: ELF/local-ver-preemptible.s (45591 of 46401)
******************** TEST 'lld :: ELF/local-ver-preemptible.s' FAILED ********************
Script:
--
: 'RUN: at line 2';   echo '.global foo; .type foo, @function; foo:' |    /home/siadmin/jenkins/w/opensource-llvm70/opensource_build/build/bin/llvm-mc -filetype=obj -triple=x86_64-unknown-linux - -o /home/siadmin/jenkins/w/opensource-llvm70/opensource_build/build/tools/lld/test/ELF/Output/local-ver-preemptible.s.tmp.so.o
: 'RUN: at line 4';   /home/siadmin/jenkins/w/opensource-llvm70/opensource_build/build/bin/ld.lld /home/siadmin/jenkins/w/opensource-llvm70/opensource_build/build/tools/lld/test/ELF/Output/local-ver-preemptible.s.tmp.so.o -o /home/siadmin/jenkins/w/opensource-llvm70/opensource_build/build/tools/lld/test/ELF/Output/local-ver-preemptible.s.tmp.so -shared
: 'RUN: at line 6';   echo "{ global: main; local: *; };" > /home/siadmin/jenkins/w/opensource-llvm70/opensource_build/build/tools/lld/test/ELF/Output/local-ver-preemptible.s.tmp.script
: 'RUN: at line 8';   /home/siadmin/jenkins/w/opensource-llvm70/opensource_build/build/bin/llvm-mc -filetype=obj -triple=x86_64-unknown-linux /home/siadmin/jenkins/w/opensource-llvm70/opensource_build/llvm/tools/lld/test/ELF/local-ver-preemptible.s -o /home/siadmin/jenkins/w/opensource-llvm70/opensource_build/build/tools/lld/test/ELF/Output/local-ver-preemptible.s.tmp.o
: 'RUN: at line 9';   /home/siadmin/jenkins/w/opensource-llvm70/opensource_build/build/bin/ld.lld /home/siadmin/jenkins/w/opensource-llvm70/opensource_build/build/tools/lld/test/ELF/Output/local-ver-preemptible.s.tmp.o /home/siadmin/jenkins/w/opensource-llvm70/opensource_build/build/tools/lld/test/ELF/Output/local-ver-preemptible.s.tmp.so -o /home/siadmin/jenkins/w/opensource-llvm70/opensource_build/build/tools/lld/test/ELF/Output/local-ver-preemptible.s.tmp -version-script /home/siadmin/jenkins/w/opensource-llvm70/opensource_build/build/tools/lld/test/ELF/Output/local-ver-preemptible.s.tmp.script
: 'RUN: at line 10';   /home/siadmin/jenkins/w/opensource-llvm70/opensource_build/build/bin/llvm-readelf -r --symbols /home/siadmin/jenkins/w/opensource-llvm70/opensource_build/build/tools/lld/test/ELF/Output/local-ver-preemptible.s.tmp | /home/siadmin/jenkins/w/opensource-llvm70/opensource_build/build/bin/FileCheck /home/siadmin/jenkins/w/opensource-llvm70/opensource_build/llvm/tools/lld/test/ELF/local-ver-preemptible.s
--
Exit Code: 1

Command Output (stderr):
--
ld.lld: warning: cannot find entry symbol _start; defaulting to 0x201000
/home/siadmin/jenkins/w/opensource-llvm70/opensource_build/llvm/tools/lld/test/ELF/local-ver-preemptible.s:12:10: error: CHECK: expected string not found in input
# CHECK: Relocation section '.rela.plt' at offset 0x290 contains 1 entries:
         ^
<stdin>:2:1: note: scanning from here
Relocation section '.rela.plt' at offset 0x2b0 contains 1 entries:
^

--

********************

Douglas Yung

-----Original Message-----
From: llvm-commits <llvm-commits-bounces at lists.llvm.org> On Behalf Of Tom Stellard via llvm-commits
Sent: Monday, October 22, 2018 10:44 AM
To: llvm-commits at lists.llvm.org; llvm-branch-commits at lists.llvm.org
Subject: [lld] r344925 - Merging r343668:

Author: tstellar
Date: Mon Oct 22 10:44:17 2018
New Revision: 344925

URL: http://llvm.org/viewvc/llvm-project?rev=344925&view=rev
Log:
Merging r343668:

------------------------------------------------------------------------
r343668 | grimar | 2018-10-03 02:33:00 -0700 (Wed, 03 Oct 2018) | 20 lines

[ELF] - Do not forget to include to .dymsym symbols that were converted to Defined.

This is the fix for
"Bug 39104 - LLD links incorrect ELF executable if version script contains "local: *;"
(https://bugs.llvm.org/show_bug.cgi?id=39104).

The issue happens when we have non-PIC program call to function in a shared library.
(for example, the PR above has R_X86_64_PC32 relocation against __libc_start_main)

LLD converts symbol to Defined in that case with the use of replaceWithDefined()

The issue is that after above we create a broken relocation because do not include the symbol into .dynsym.

That happens when the version script is used because we treat the symbol as STB_LOCAL if the following condition match:
VersionId == VER_NDX_LOCAL && isDefined() and do not include it to .dynsym because of that. Patch fixes the issue.

Differential revision: https://reviews.llvm.org/D52724
------------------------------------------------------------------------

Added:
    lld/branches/release_70/test/ELF/local-ver-preemptible.s
Modified:
    lld/branches/release_70/ELF/Symbols.cpp

Modified: lld/branches/release_70/ELF/Symbols.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/branches/release_70/ELF/Symbols.cpp?rev=344925&r1=344924&r2=344925&view=diff
==============================================================================
--- lld/branches/release_70/ELF/Symbols.cpp (original)
+++ lld/branches/release_70/ELF/Symbols.cpp Mon Oct 22 10:44:17 2018
@@ -209,7 +209,7 @@ uint8_t Symbol::computeBinding() const {
     return Binding;
   if (Visibility != STV_DEFAULT && Visibility != STV_PROTECTED)
     return STB_LOCAL;
-  if (VersionId == VER_NDX_LOCAL && isDefined())
+  if (VersionId == VER_NDX_LOCAL && isDefined() && !IsPreemptible)
     return STB_LOCAL;
   if (!Config->GnuUnique && Binding == STB_GNU_UNIQUE)
     return STB_GLOBAL;

Added: lld/branches/release_70/test/ELF/local-ver-preemptible.s
URL: http://llvm.org/viewvc/llvm-project/lld/branches/release_70/test/ELF/local-ver-preemptible.s?rev=344925&view=auto
==============================================================================
--- lld/branches/release_70/test/ELF/local-ver-preemptible.s (added)
+++ lld/branches/release_70/test/ELF/local-ver-preemptible.s Mon Oct 22
+++ 10:44:17 2018
@@ -0,0 +1,21 @@
+# REQUIRES: x86
+# RUN: echo '.global foo; .type foo, @function; foo:' | \
+# RUN:   llvm-mc -filetype=obj -triple=x86_64-unknown-linux - -o %t.so.o
+# RUN: ld.lld %t.so.o -o %t.so -shared
+
+# RUN: echo "{ global: main; local: *; };" > %t.script
+
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o #
+RUN: ld.lld %t.o %t.so -o %t -version-script %t.script # RUN:
+llvm-readelf -r --symbols %t | FileCheck %s
+
+# CHECK:      Relocation section '.rela.plt' at offset 0x290 contains 1 entries:
+# CHECK:        R_X86_64_JUMP_SLOT 0000000000201020 foo + 0
+
+# CHECK:      Symbol table '.dynsym' contains 2 entries:
+# CHECK-NEXT:   Num:    Value          Size Type    Bind   Vis      Ndx Name
+# CHECK-NEXT:     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND @
+# CHECK-NEXT:     1: 0000000000201020     0 FUNC    GLOBAL DEFAULT  UND foo@
+
+_start:
+  movl $foo - ., %eax


_______________________________________________
llvm-commits mailing list
llvm-commits at lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list