summaryrefslogtreecommitdiffstats
path: root/llvm/test/tools/llvm-objcopy/ELF
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/tools/llvm-objcopy/ELF')
-rw-r--r--llvm/test/tools/llvm-objcopy/ELF/binary-input.test8
-rw-r--r--llvm/test/tools/llvm-objcopy/ELF/set-section-alignment.test54
2 files changed, 62 insertions, 0 deletions
diff --git a/llvm/test/tools/llvm-objcopy/ELF/binary-input.test b/llvm/test/tools/llvm-objcopy/ELF/binary-input.test
index 8eef7f772f9..f232296ded8 100644
--- a/llvm/test/tools/llvm-objcopy/ELF/binary-input.test
+++ b/llvm/test/tools/llvm-objcopy/ELF/binary-input.test
@@ -110,3 +110,11 @@
# CHECK-NEXT: Section: Absolute
# CHECK-NEXT: }
# CHECK-NEXT: ]
+
+## The alignment can be changed by --set-section-alignment.
+# RUN: llvm-objcopy -I binary -O elf64-x86-64 --set-section-alignment .data=8 %t.x-txt %t2.o
+# RUN: llvm-readobj --sections %t2.o | FileCheck --check-prefix=ALIGN %s
+
+# ALIGN: Name: .data
+# ALIGN: AddressAlignment:
+# ALIGN-SAME: 8{{$}}
diff --git a/llvm/test/tools/llvm-objcopy/ELF/set-section-alignment.test b/llvm/test/tools/llvm-objcopy/ELF/set-section-alignment.test
new file mode 100644
index 00000000000..79c7eddffdd
--- /dev/null
+++ b/llvm/test/tools/llvm-objcopy/ELF/set-section-alignment.test
@@ -0,0 +1,54 @@
+# RUN: yaml2obj %s -o %t
+
+# RUN: llvm-objcopy --set-section-alignment .foo=4 --set-section-alignment .bar=0x5 \
+# RUN: --set-section-alignment .baz=0 %t %t.2
+# RUN: llvm-readobj --sections %t.2 | FileCheck --check-prefix=CHECK %s
+
+# CHECK: Name: .foo
+# CHECK: AddressAlignment:
+# CHECK-SAME: 4{{$}}
+# CHECK: Name: .bar
+# CHECK: AddressAlignment:
+# CHECK-SAME: 5{{$}}
+# CHECK: Name: .baz
+# CHECK: AddressAlignment:
+# CHECK-SAME: 0{{$}}
+
+## If a section is specified multiple times, the last wins.
+# RUN: llvm-objcopy --set-section-alignment .foo=4 --set-section-alignment=.foo=7 %t %t.3
+# RUN: llvm-readobj --sections %t.3 | FileCheck --check-prefix=MULTI %s
+
+# MULTI: Name: .foo
+# MULTI: AddressAlignment:
+# MULTI-SAME: 7{{$}}
+
+## Ignore the option if the section does not exist.
+# RUN: llvm-objcopy --set-section-alignment .not_exist=4 %t.3 %t.4
+# RUN: cmp %t.3 %t.4
+
+# RUN: not llvm-objcopy --set-section-alignment=.foo %t /dev/null 2>&1 | \
+# RUN: FileCheck --check-prefix=MISSING-EQUAL %s
+# MISSING-EQUAL: error: bad format for --set-section-alignment: missing '='
+
+# RUN: not llvm-objcopy --set-section-alignment==4 %t /dev/null 2>&1 | \
+# RUN: FileCheck --check-prefix=MISSING-SECTION %s
+# MISSING-SECTION: error: bad format for --set-section-alignment: missing section name
+
+# RUN: not llvm-objcopy --set-section-alignment=.foo=bar %t /dev/null 2>&1 | \
+# RUN: FileCheck --check-prefix=INVALID-ALIGN %s
+# INVALID-ALIGN: error: invalid alignment for --set-section-alignment: 'bar'
+
+!ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .foo
+ Type: SHT_PROGBITS
+ - Name: .bar
+ Type: SHT_NOBITS
+ - Name: .baz
+ Type: SHT_NOTE
+ AddressAlign: 4
OpenPOWER on IntegriCloud