#include "Driver.h"
#include "Error.h"
#include "InputSection.h"
+#include "LinkerScript.h"
#include "SymbolTable.h"
#include "Symbols.h"
#include "llvm/ADT/STLExtras.h"
if (Config->Optimize == 0)
return false;
+ // We don't merge if linker script has SECTIONS command. When script
+ // do layout it can merge several sections with different attributes
+ // into single output sections. We currently do not support adding
+ // mergeable input sections to regular output ones as well as adding
+ // regular input sections to mergeable output.
+ if (ScriptConfig->HasContents)
+ return false;
+
// A mergeable section with size 0 is useless because they don't have
// any data to merge. A mergeable string section with size 0 can be
// argued as invalid because it doesn't end with a null character.
--- /dev/null
+# REQUIRES: x86
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+
+# RUN: echo "SECTIONS { .foo : { *(.foo.*) } }" > %t.script
+# RUN: ld.lld -o %t1 --script %t.script %t
+# RUN: llvm-objdump -s %t1 | FileCheck %s
+# CHECK: Contents of section .foo:
+# CHECK-NEXT: 0158 01000000 02000000 00000000 73686f72 ............shor
+# CHECK-NEXT: 0168 7420756e 7369676e 65642069 6e7400 t unsigned int.
+
+.global _start
+_start:
+ nop
+
+.section .foo.1, "aw"
+writable:
+ .long 1
+
+.section .foo.2, "aM",@progbits,1
+readable:
+ .long 2
+
+.section .foo.3, "awx"
+ .long 0
+
+.section .foo.4, "MS",@progbits,1
+.LASF2:
+ .string "short unsigned int"