File: hot-end-symbol.s

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (80 lines) | stat: -rwxr-xr-x 1,718 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# This reproduces a bug where BOLT would read __hot_end as
# the name of a function even when -hot-text is used, which
# means BOLT will emit another __hot_end label, eventually
# asserting due to a symbol redefinition in MCStreamer.

# REQUIRES: system-linux

# RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown \
# RUN:   %s -o %t.o
# RUN: link_fdata %s %t.o %t.fdata
# RUN: llvm-strip --strip-unneeded %t.o
# RUN: %clang %cflags -no-pie %t.o -o %t.exe -Wl,-q

# RUN: llvm-bolt %t.exe --relocs=1 --hot-text --reorder-functions=hfsort \
# RUN:    --data %t.fdata -o %t.out | FileCheck %s

# RUN: %t.out 1

# CHECK: BOLT-INFO: setting __hot_end to

# RUN: llvm-nm -n %t.exe | FileCheck %s --check-prefix=CHECK-INPUT
# RUN: llvm-nm -n %t.out | FileCheck %s --check-prefix=CHECK-OUTPUT

# CHECK-INPUT:       __hot_start
# CHECK-INPUT-NEXT:  main
# CHECK-INPUT-NEXT:  foo
# CHECK-INPUT-NEXT:  __hot_end

# Our fdata only logs activity in main, so hot markers will change
# CHECK-OUTPUT:       __hot_start
# CHECK-OUTPUT-NEXT:  main
# CHECK-OUTPUT-NEXT:  __hot_end

  .text
  .globl  main
  .type main, %function
  .globl  __hot_start
  .type __hot_start, %object
  .p2align  4
main:
__hot_start:
# FDATA: 0 [unknown] 0 1 main 0 0 510
  pushq %rbp
  movq  %rsp, %rbp
  cmpl  $0x2, %edi
  jb    .BBend
.BB2:
  callq bar
  leaq mystring, %rdi
  callq puts

.BBend:
  xorq %rax, %rax
  leaveq
  retq
  .size main, .-main

  .globl foo
  .type foo, %function
  .p2align 4
foo:
  retq
  .size foo, .-foo

  .globl __hot_end
  .type __hot_end, %object
  .p2align 2
__hot_end:
  int3
  .size __hot_end, 0

  .globl bar
  .type bar, %function
  .p2align 4
bar:
  retq
  .size bar, .-bar

  .data
mystring: .asciz "test\n"