62 lines · plain
1// Check that marker symbols ($d, $x) denoting data embedded in code are ignored2// if they fall outside their respective sections.3 4// RUN: yaml2obj %S/Inputs/spurious-marker-symbol.yaml -o %t.exe5// RUN: llvm-bolt %t.exe -o %t.bolt 2>&1 | FileCheck %s6// CHECK: 1 out of 1 functions were overwritten7// RUN: llvm-objdump -j .text -d %t.bolt | FileCheck %s -check-prefix=CHECK-DISASM8// CHECK-DISASM: func9// CHECK-DISASM: 2a0000: d2800540 mov10// CHECK-DISASM: 2a0004: d65f03c0 ret11 12// The YAML encodes the following assembly and debug information:13 14 .text15 .globl func16 .type func, %function17func:18 mov x0, #4219// $d.42: (symbol in .ignored, with an address in .text)20 ret21 22// .eh_frame contains minimal DWARF with a CFA operation on the `ret`. BOLT23// should ignore the spurious `$d.42`. If it doesn't, then it will stop24// disassembling after the `mov` and will fail to process the second25// DW_CFA_def_cfa_offset.26//27// CIE28// length: 0000001029// CIE_id: 0000000030// version: 0131// augmentation:32// "zR" 7a 52 0033// - read augmentation data34// - read FDE pointer encoding35// code_alignment_factor: 0436// data_alignment_factor: 78 (-8)37// return_address_register: 1e (r30 / lr)38//39// augmentation data:40// length: 0141// FDE pointers are absptr+sdata4 0b42//43// initial_instructions:44// DW_CFA_def_cfa (31, 0): 0c 1f 0045//46// Encoding: 10000000'00000000'01'7a5200'04'78'1e'10'0b'0c1f0047//48// FDE49// length: 0000001450// CIE_pointer: 00000018 (backwards offset from here to CIE)51// initial_location: 002a0000 (`func` as absptr+sdata4)52// address_range: 0000000853// augmentation data:54// length: 0055// instructions:56// DW_CFA_def_cfa_offset (1) 0e 0157// DW_CFA_advance_loc (1) 41 (`ret` at 0x2a0004)58// DW_CFA_def_cfa_offset (1) 0e 01 Fails unless $d.42 is ignored.59// DW_CFA_nop 00 0060//61// Encoding: 14000000'18000000'00002a00'08000000'000e0141'0e01000062