xref: /llvm-project/llvm/test/tools/llvm-objcopy/ELF/binary-input.test (revision 076698154ad7cd36c590379ed09fdd14047b8244)
16e4dc6f2SAlexander Shaposhnikov# RUN: echo -n abcd > %t.x-txt
26e4dc6f2SAlexander Shaposhnikov# Preserve input to verify it is not modified
36e4dc6f2SAlexander Shaposhnikov# RUN: cp %t.x-txt %t-copy.txt
4ba53030dSFangrui Song# RUN: llvm-objcopy -I binary -O elf64-x86-64 %t.x-txt %t.o
5298ea3f5SJordan Rupprecht# RUN: llvm-readobj --sections --symbols %t.o | FileCheck %s
66e4dc6f2SAlexander Shaposhnikov# RUN: cmp %t.x-txt %t-copy.txt
76e4dc6f2SAlexander Shaposhnikov
86e4dc6f2SAlexander Shaposhnikov# CHECK:      Sections [
96e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:   Section {
106e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Index: 0
116e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Name:  (0)
126e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Type: SHT_NULL (0x0)
136e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Flags [ (0x0)
146e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     ]
156e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Address: 0x0
166e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Offset:
176e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Size:
186e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Link: 0
196e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Info: 0
206e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     AddressAlignment: 0
216e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     EntrySize: 0
226e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:   }
236e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:   Section {
246e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Index: 1
256e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Name: .strtab
266e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Type: SHT_STRTAB (0x3)
276e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Flags [ (0x0)
286e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     ]
296e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Address: 0x0
306e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Offset:
316e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Size:
326e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Link: 0
336e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Info: 0
346e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     AddressAlignment: 1
356e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     EntrySize: 0
366e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:   }
376e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:   Section {
386e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Index: 2
396e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Name: .symtab
406e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Type: SHT_SYMTAB (0x2)
416e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Flags [ (0x0)
426e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     ]
436e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Address: 0x0
446e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Offset:
456e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Size:
466e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Link: 1
476e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Info: 1
481f82176fSJordan Rupprecht# CHECK-NEXT:     AddressAlignment: 8
496e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     EntrySize: 24
506e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:   }
516e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:   Section {
526e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Index: 3
536e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Name: .data
546e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Type: SHT_PROGBITS (0x1)
556e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Flags [ (0x3)
566e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:       SHF_ALLOC (0x2)
576e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:       SHF_WRITE (0x1)
586e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     ]
596e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Address: 0x0
606e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Offset:
616e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Size: 4
626e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Link: 0
636e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Info: 0
646e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     AddressAlignment: 1
656e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     EntrySize: 0
666e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:   }
676e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT: ]
686e4dc6f2SAlexander Shaposhnikov
696e4dc6f2SAlexander Shaposhnikov# Note: the symbol names are derived from the full path (with non-alnum values
706e4dc6f2SAlexander Shaposhnikov# replaced with "_"), e.g. "/tmp/a-b.c" should yield
716e4dc6f2SAlexander Shaposhnikov# _binary__tmp_a_b_c_{start,end,size}.
726e4dc6f2SAlexander Shaposhnikov# Just check for _binary_{{[_a-zA-Z0-9]*}}_x_txt_{start,end,size} to avoid
736e4dc6f2SAlexander Shaposhnikov# making assumptions about how this test is run.
746e4dc6f2SAlexander Shaposhnikov
756e4dc6f2SAlexander Shaposhnikov# CHECK:      Symbols [
766e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:   Symbol {
776e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Name:
786e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Value: 0x0
796e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Size: 0
806e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Binding: Local (0x0)
816e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Type: None (0x0)
826e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Other: 0
836e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Section: Undefined (0x0)
846e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:   }
856e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:   Symbol {
866e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Name: _binary_{{[_a-zA-Z0-9]*}}_x_txt_start
876e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Value: 0x0
886e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Size: 0
896e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Binding: Global (0x1)
906e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Type: None (0x0)
916e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Other: 0
926e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Section: .data
936e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:   }
946e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:   Symbol {
956e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Name: _binary_{{[_a-zA-Z0-9]*}}_x_txt_end
966e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Value: 0x4
976e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Size: 0
986e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Binding: Global (0x1)
996e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Type: None (0x0)
1006e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Other: 0
1016e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Section: .data
1026e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:   }
1036e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:   Symbol {
1046e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Name: _binary_{{[_a-zA-Z0-9]*}}_x_txt_size
1056e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Value: 0x4
1066e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Size: 0
1076e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Binding: Global (0x1)
1086e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Type: None (0x0)
1096e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Other: 0
1106e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Section: Absolute
1116e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:   }
1126e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT: ]
113671fb343SFangrui Song
114671fb343SFangrui Song## The alignment can be changed by --set-section-alignment.
115671fb343SFangrui Song# RUN: llvm-objcopy -I binary -O elf64-x86-64 --set-section-alignment .data=8 %t.x-txt %t2.o
116671fb343SFangrui Song# RUN: llvm-readobj --sections %t2.o | FileCheck --check-prefix=ALIGN %s
117671fb343SFangrui Song
118671fb343SFangrui Song# ALIGN:      Name: .data
119671fb343SFangrui Song# ALIGN:      AddressAlignment:
120671fb343SFangrui Song# ALIGN-SAME:                   8{{$}}
121*07669815SJames Henderson
122*07669815SJames Henderson## Show that a filename with non-ASCII characters can be handled appropriately.
123*07669815SJames Henderson## The exact encoding of the non-ASCII character will determine what characters
124*07669815SJames Henderson## are used, so don't check for them specifically.
125*07669815SJames Henderson# RUN: cp %t.x-txt %t€.x-txt
126*07669815SJames Henderson# RUN: llvm-objcopy -I binary -O elf64-x86-64 %t€.x-txt %t3.o
127*07669815SJames Henderson# RUN: llvm-readobj --sections --symbols %t3.o | FileCheck %s
128