<div dir="ltr"><div>It fails CFI tests <a href="http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux/builds/28828" class="cremed">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">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>