<div dir="ltr">Probably also these as well <a href="http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-android/builds/34196" class="cremed">http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-android/builds/34196</a></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, 5 Aug 2020 at 04:04, Vitaly Buka <<a href="mailto:vitalybuka@google.com">vitalybuka@google.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>It fails CFI tests <a href="http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux/builds/28828" target="_blank">http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux/builds/28828</a></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, 2 Aug 2020 at 18:06, Fangrui Song via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
Author: Fangrui Song<br>
Date: 2020-08-02T18:05:17-07:00<br>
New Revision: b497665d98ad5026b1d3d67d5793a28fefe27bea<br>
<br>
URL: <a href="https://github.com/llvm/llvm-project/commit/b497665d98ad5026b1d3d67d5793a28fefe27bea" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/b497665d98ad5026b1d3d67d5793a28fefe27bea</a><br>
DIFF: <a href="https://github.com/llvm/llvm-project/commit/b497665d98ad5026b1d3d67d5793a28fefe27bea.diff" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/b497665d98ad5026b1d3d67d5793a28fefe27bea.diff</a><br>
<br>
LOG: Reland D64327 [MC][ELF] Allow STT_SECTION referencing SHF_MERGE on REL targets<br>
<br>
This drops a GNU gold workaround and reverts the revert commit rL366708.<br>
<br>
  Before binutils 2.34, gold -O2 and above did not correctly handle R_386_GOTOFF to<br>
  SHF_MERGE|SHF_STRINGS sections: <a href="https://sourceware.org/bugzilla/show_bug.cgi?id=16794" rel="noreferrer" target="_blank">https://sourceware.org/bugzilla/show_bug.cgi?id=16794</a><br>
<br>
>From the original review:<br>
<br>
  ... it reduced the size of a big ARM-32 debug image by 33%. It contained ~68M<br>
  of relocations symbols out of total ~71M symbols (96% of symbols table was<br>
  generated for relocations with symbol).<br>
<br>
-Wl,-O2 (and -Wl,-O3) is so rare that we should just lower the<br>
optimization level for LLVM_LINKER_IS_GOLD rather than pessimizing all users.<br>
<br>
Added: <br>
<br>
<br>
Modified: <br>
    llvm/cmake/modules/AddLLVM.cmake<br>
    llvm/lib/MC/ELFObjectWriter.cpp<br>
    llvm/test/MC/ELF/basic-elf-32.s<br>
    llvm/test/MC/ELF/compression.s<br>
    llvm/test/MC/ELF/relocation-386.s<br>
    llvm/test/MC/Mips/elf-relsym.s<br>
    llvm/test/MC/Mips/xgot.s<br>
<br>
Removed: <br>
<br>
<br>
<br>
################################################################################<br>
diff  --git a/llvm/cmake/modules/AddLLVM.cmake b/llvm/cmake/modules/AddLLVM.cmake<br>
index 333167bfb6b0..a25f3e87af61 100644<br>
--- a/llvm/cmake/modules/AddLLVM.cmake<br>
+++ b/llvm/cmake/modules/AddLLVM.cmake<br>
@@ -222,8 +222,13 @@ function(add_link_opts target_name)<br>
     # Pass -O3 to the linker. This enabled <br>
diff erent optimizations on <br>
diff erent<br>
     # linkers.<br>
     if(NOT (${CMAKE_SYSTEM_NAME} MATCHES "Darwin|SunOS|AIX" OR WIN32))<br>
-      set_property(TARGET ${target_name} APPEND_STRING PROPERTY<br>
-                   LINK_FLAGS " -Wl,-O3")<br>
+      # Before binutils 2.34, gold -O2 and above did not correctly handle R_386_GOTOFF to<br>
+      # SHF_MERGE|SHF_STRINGS sections: <a href="https://sourceware.org/bugzilla/show_bug.cgi?id=16794" rel="noreferrer" target="_blank">https://sourceware.org/bugzilla/show_bug.cgi?id=16794</a><br>
+      if(LLVM_LINKER_IS_GOLD)<br>
+        set_property(TARGET ${target_name} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,-O1")<br>
+      else()<br>
+        set_property(TARGET ${target_name} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,-O3")<br>
+      endif()<br>
     endif()<br>
<br>
     if(LLVM_LINKER_IS_GOLD)<br>
<br>
diff  --git a/llvm/lib/MC/ELFObjectWriter.cpp b/llvm/lib/MC/ELFObjectWriter.cpp<br>
index 1ca9d0fe1e18..5a5692c0cb63 100644<br>
--- a/llvm/lib/MC/ELFObjectWriter.cpp<br>
+++ b/llvm/lib/MC/ELFObjectWriter.cpp<br>
@@ -1389,11 +1389,6 @@ bool ELFObjectWriter::shouldRelocateWithSymbol(const MCAssembler &Asm,<br>
     if (Flags & ELF::SHF_MERGE) {<br>
       if (C != 0)<br>
         return true;<br>
-<br>
-      // It looks like gold has a bug (<a href="http://sourceware.org/PR16794" rel="noreferrer" target="_blank">http://sourceware.org/PR16794</a>) and can<br>
-      // only handle section relocations to mergeable sections if using RELA.<br>
-      if (!hasRelocationAddend())<br>
-        return true;<br>
     }<br>
<br>
     // Most TLS relocations use a got, so they need the symbol. Even those that<br>
<br>
diff  --git a/llvm/test/MC/ELF/basic-elf-32.s b/llvm/test/MC/ELF/basic-elf-32.s<br>
index effc363d1c6c..1a923106036a 100644<br>
--- a/llvm/test/MC/ELF/basic-elf-32.s<br>
+++ b/llvm/test/MC/ELF/basic-elf-32.s<br>
@@ -46,9 +46,9 @@ main:                                   # @main<br>
<br>
 // CHECK: Relocations [<br>
 // CHECK:   Section {{.*}} .rel.text {<br>
-// CHECK:     0x6  R_386_32   .L.str1<br>
+// CHECK:     0x6  R_386_32   .rodata.str1.1 0x0<br>
 // CHECK:     0xB  R_386_PC32 puts<br>
-// CHECK:     0x12 R_386_32   .L.str2<br>
+// CHECK:     0x12 R_386_32   .rodata.str1.1 0x0<br>
 // CHECK:     0x17 R_386_PC32 puts<br>
 // CHECK:   }<br>
 // CHECK: ]<br>
<br>
diff  --git a/llvm/test/MC/ELF/compression.s b/llvm/test/MC/ELF/compression.s<br>
index 93a77b3fcbdb..9bc5c0ecc699 100644<br>
--- a/llvm/test/MC/ELF/compression.s<br>
+++ b/llvm/test/MC/ELF/compression.s<br>
@@ -38,7 +38,7 @@<br>
<br>
 // In x86 32 bit named symbols are used for temporary symbols in merge<br>
 // sections, so make sure we handle symbols inside compressed sections<br>
-// 386-SYMBOLS-GNU: Name: .Linfo_string0<br>
+// 386-SYMBOLS-GNU: Name: .zdebug_str<br>
 // 386-SYMBOLS-GNU-NOT: }<br>
 // 386-SYMBOLS-GNU: Section: .zdebug_str<br>
<br>
@@ -73,7 +73,7 @@<br>
 // ZLIB-STYLE-FLAGS32-NEXT: AddressAlignment: 4<br>
 // ZLIB-STYLE-FLAGS64-NEXT: AddressAlignment: 8<br>
<br>
-// 386-SYMBOLS-ZLIB: Name: .Linfo_string0<br>
+// 386-SYMBOLS-ZLIB: Name: .debug_str<br>
 // 386-SYMBOLS-ZLIB-NOT: }<br>
 // 386-SYMBOLS-ZLIB: Section: .debug_str<br>
<br>
<br>
diff  --git a/llvm/test/MC/ELF/relocation-386.s b/llvm/test/MC/ELF/relocation-386.s<br>
index 4273750a4192..b9bf9b6a00c1 100644<br>
--- a/llvm/test/MC/ELF/relocation-386.s<br>
+++ b/llvm/test/MC/ELF/relocation-386.s<br>
@@ -8,7 +8,7 @@<br>
 // I386: Format: elf32-i386<br>
 // CHECK:      Relocations [<br>
 // CHECK-NEXT:   Section {{.*}} .rel.text {<br>
-// CHECK-NEXT:     0x2          R_386_GOTOFF     .Lfoo 0x0<br>
+// CHECK-NEXT:     0x2          R_386_GOTOFF     .rodata.str1.16 0x0<br>
 // CHECK-NEXT:     0x{{[^ ]+}}  R_386_PLT32      bar2 0x0<br>
 // CHECK-NEXT:     0x{{[^ ]+}}  R_386_GOTPC      _GLOBAL_OFFSET_TABLE_ 0x0<br>
 // Relocation 3 (bar3@GOTOFF) is done with symbol 7 (bss)<br>
<br>
diff  --git a/llvm/test/MC/Mips/elf-relsym.s b/llvm/test/MC/Mips/elf-relsym.s<br>
index b8c2f89e82e6..d19b4e3c4820 100644<br>
--- a/llvm/test/MC/Mips/elf-relsym.s<br>
+++ b/llvm/test/MC/Mips/elf-relsym.s<br>
@@ -4,16 +4,10 @@<br>
<br>
 // CHECK: Symbols [<br>
 // CHECK:   Symbol {<br>
-// CHECK:     Name: $.str<br>
+// CHECK:     Name: .rodata.cst8<br>
 // CHECK:   }<br>
 // CHECK:   Symbol {<br>
-// CHECK:     Name: $.str1<br>
-// CHECK:   }<br>
-// CHECK:   Symbol {<br>
-// CHECK:     Name: $CPI0_0<br>
-// CHECK:   }<br>
-// CHECK:   Symbol {<br>
-// CHECK:     Name: $CPI0_1<br>
+// CHECK:     Name: .rodata.str1.1<br>
 // CHECK:   }<br>
 // CHECK: ]<br>
<br>
<br>
diff  --git a/llvm/test/MC/Mips/xgot.s b/llvm/test/MC/Mips/xgot.s<br>
index 100d25e67223..76490f0dec93 100644<br>
--- a/llvm/test/MC/Mips/xgot.s<br>
+++ b/llvm/test/MC/Mips/xgot.s<br>
@@ -10,8 +10,8 @@<br>
 // CHECK:   0x1C R_MIPS_GOT_LO16 ext_1<br>
 // CHECK:   0x24 R_MIPS_CALL_HI16 printf<br>
 // CHECK:   0x30 R_MIPS_CALL_LO16 printf<br>
-// CHECK:   0x2C R_MIPS_GOT16 $.str<br>
-// CHECK:   0x38 R_MIPS_LO16 $.str<br>
+// CHECK:   0x2C R_MIPS_GOT16 .rodata.str1.1 0x0<br>
+// CHECK:   0x38 R_MIPS_LO16 .rodata.str1.1 0x0<br>
 // CHECK: ]<br>
<br>
        .text<br>
<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>
</blockquote></div>