Skip to content

[BOLT] pacret-scanner: fix regression test failure #128576

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Feb 24, 2025

Conversation

kbeyls
Copy link
Collaborator

@kbeyls kbeyls commented Feb 24, 2025

... which is caused by a seemingly recent change in BOLTs basic block calculation, where function calls seem to be ending basic blocks? I don't have a pointer to the commit that caused this change. I'll be looking for that later. For now, I'm trying to get the regression tests passing again.

... which is caused by a seemingly recent change in BOLTs basic block
calculation, where function calls seem to be ending basic blocks?
I don't have a pointer to the commit that caused this change. I'll be
looking for that later. For now, I'm trying to get the regression tests
passing again.
@llvmbot
Copy link
Member

llvmbot commented Feb 24, 2025

@llvm/pr-subscribers-bolt

Author: Kristof Beyls (kbeyls)

Changes

... which is caused by a seemingly recent change in BOLTs basic block calculation, where function calls seem to be ending basic blocks? I don't have a pointer to the commit that caused this change. I'll be looking for that later. For now, I'm trying to get the regression tests passing again.


Full diff: https://github.com/llvm/llvm-project/pull/128576.diff

1 Files Affected:

  • (modified) bolt/test/binary-analysis/AArch64/gs-pacret-autiasp.s (+3-77)
diff --git a/bolt/test/binary-analysis/AArch64/gs-pacret-autiasp.s b/bolt/test/binary-analysis/AArch64/gs-pacret-autiasp.s
index 92aca0efd4418..cb81a63289f43 100644
--- a/bolt/test/binary-analysis/AArch64/gs-pacret-autiasp.s
+++ b/bolt/test/binary-analysis/AArch64/gs-pacret-autiasp.s
@@ -18,10 +18,6 @@ f1:
 // CHECK-NEXT:    The 1 instructions that write to the return register after any authentication are:
 // CHECK-NEXT:    1. {{[0-9a-f]+}}: ldp     x29, x30, [sp], #0x10
 // CHECK-NEXT:  This happens in the following basic block:
-// CHECK-NEXT: {{[0-9a-f]+}}:   paciasp
-// CHECK-NEXT: {{[0-9a-f]+}}:   stp     x29, x30, [sp, #-0x10]!
-// CHECK-NEXT: {{[0-9a-f]+}}:   mov     x29, sp
-// CHECK-NEXT: {{[0-9a-f]+}}:   bl      g@PLT
 // CHECK-NEXT: {{[0-9a-f]+}}:   add     x0, x0, #0x3
 // CHECK-NEXT: {{[0-9a-f]+}}:   ldp     x29, x30, [sp], #0x10
 // CHECK-NEXT: {{[0-9a-f]+}}:   ret
@@ -39,15 +35,11 @@ f_intermediate_overwrite1:
         add     x0, x0, #3
         autiasp
         ldp     x29, x30, [sp], #16
-// CHECK-LABEL: GS-PACRET: non-protected ret found in function f_intermediate_overwrite1, basic block .LBB
+// CHECK-LABEL: GS-PACRET: non-protected ret found in function f_intermediate_overwrite1, basic block {{[0-9a-zA-Z.]+}}
 // CHECK-NEXT:    The return instruction is     {{[0-9a-f]+}}:       ret
 // CHECK-NEXT:    The 1 instructions that write to the return register after any authentication are:
 // CHECK-NEXT:    1. {{[0-9a-f]+}}: ldp     x29, x30, [sp], #0x10
 // CHECK-NEXT:  This happens in the following basic block:
-// CHECK-NEXT: {{[0-9a-f]+}}:   paciasp
-// CHECK-NEXT: {{[0-9a-f]+}}:   stp     x29, x30, [sp, #-0x10]!
-// CHECK-NEXT: {{[0-9a-f]+}}:   mov     x29, sp
-// CHECK-NEXT: {{[0-9a-f]+}}:   bl      g@PLT
 // CHECK-NEXT: {{[0-9a-f]+}}:   add     x0, x0, #0x3
 // CHECK-NEXT: {{[0-9a-f]+}}:   autiasp
 // CHECK-NEXT: {{[0-9a-f]+}}:   ldp     x29, x30, [sp], #0x10
@@ -71,10 +63,6 @@ f_intermediate_overwrite2:
 // CHECK-NEXT:    The 1 instructions that write to the return register after any authentication are:
 // CHECK-NEXT:    1. {{[0-9a-f]+}}: mov     x30, x0
 // CHECK-NEXT:  This happens in the following basic block:
-// CHECK-NEXT: {{[0-9a-f]+}}:   paciasp
-// CHECK-NEXT: {{[0-9a-f]+}}:   stp     x29, x30, [sp, #-0x10]!
-// CHECK-NEXT: {{[0-9a-f]+}}:   mov     x29, sp
-// CHECK-NEXT: {{[0-9a-f]+}}:   bl      g@PLT
 // CHECK-NEXT: {{[0-9a-f]+}}:   add     x0, x0, #0x3
 // CHECK-NEXT: {{[0-9a-f]+}}:   ldp     x29, x30, [sp], #0x10
 // CHECK-NEXT: {{[0-9a-f]+}}:   autiasp
@@ -114,10 +102,6 @@ f_intermediate_overwrite3:
 // CHECK-NEXT:    The 1 instructions that write to the return register after any authentication are:
 // CHECK-NEXT:    1. {{[0-9a-f]+}}: mov     w30, w0
 // CHECK-NEXT:  This happens in the following basic block:
-// CHECK-NEXT: {{[0-9a-f]+}}:   paciasp
-// CHECK-NEXT: {{[0-9a-f]+}}:   stp     x29, x30, [sp, #-0x10]!
-// CHECK-NEXT: {{[0-9a-f]+}}:   mov     x29, sp
-// CHECK-NEXT: {{[0-9a-f]+}}:   bl      g@PLT
 // CHECK-NEXT: {{[0-9a-f]+}}:   add     x0, x0, #0x3
 // CHECK-NEXT: {{[0-9a-f]+}}:   ldp     x29, x30, [sp], #0x10
 // CHECK-NEXT: {{[0-9a-f]+}}:   autiasp
@@ -142,10 +126,6 @@ f_nonx30_ret:
 // CHECK-NEXT:    The 1 instructions that write to the return register after any authentication are:
 // CHECK-NEXT:    1. {{[0-9a-f]+}}: mov     x16, x30
 // CHECK-NEXT:  This happens in the following basic block:
-// CHECK-NEXT: {{[0-9a-f]+}}:   paciasp
-// CHECK-NEXT: {{[0-9a-f]+}}:   stp     x29, x30, [sp, #-0x10]!
-// CHECK-NEXT: {{[0-9a-f]+}}:   mov     x29, sp
-// CHECK-NEXT: {{[0-9a-f]+}}:   bl      g@PLT
 // CHECK-NEXT: {{[0-9a-f]+}}:   add     x0, x0, #0x3
 // CHECK-NEXT: {{[0-9a-f]+}}:   ldp     x29, x30, [sp], #0x10
 // CHECK-NEXT: {{[0-9a-f]+}}:   mov     x16, x30
@@ -225,10 +205,7 @@ f_callclobbered_x30:
 // CHECK-LABEL: GS-PACRET: non-protected ret found in function f_callclobbered_x30, basic block {{[0-9a-zA-Z.]+}}, at address
 // CHECK-NEXT:    The return instruction is     {{[0-9a-f]+}}:       ret
 // CHECK-NEXT:    The 1 instructions that write to the return register after any authentication are:
-// CHECK-NEXT:    1. {{[0-9a-f]+}}: bl      g@PLT
-// CHECK-NEXT:  This happens in the following basic block:
-// CHECK-NEXT: {{[0-9a-f]+}}:   bl      g@PLT
-// CHECK-NEXT: {{[0-9a-f]+}}:   ret
+// CHECK-NEXT:    1. {{[0-9a-f]+}}: bl
         ret
         .size f_callclobbered_x30, .-f_callclobbered_x30
 
@@ -239,10 +216,7 @@ f_callclobbered_calleesaved:
 // CHECK-LABEL: GS-PACRET: non-protected ret found in function f_callclobbered_calleesaved, basic block {{[0-9a-zA-Z.]+}}, at address
 // CHECK-NEXT:    The return instruction is     {{[0-9a-f]+}}:       ret x19
 // CHECK-NEXT:    The 1 instructions that write to the return register after any authentication are:
-// CHECK-NEXT:    1. {{[0-9a-f]+}}: bl      g@PLT
-// CHECK-NEXT:  This happens in the following basic block:
-// CHECK-NEXT: {{[0-9a-f]+}}:   bl      g@PLT
-// CHECK-NEXT: {{[0-9a-f]+}}:   ret x19
+// CHECK-NEXT:    1. {{[0-9a-f]+}}: bl
         // x19, according to the Arm ABI (AAPCS) is a callee-saved register.
         // Therefore, if function g respects the AAPCS, it should not write
         // anything to x19. However, we can't know whether function g actually
@@ -330,10 +304,6 @@ f_autia1716:
 // CHECK-NEXT:    The 1 instructions that write to the return register after any authentication are:
 // CHECK-NEXT:    1. {{[0-9a-f]+}}: ldp     x29, x30, [sp], #0x10
 // CHECK-NEXT:  This happens in the following basic block:
-// CHECK-NEXT: {{[0-9a-f]+}}:   paciasp
-// CHECK-NEXT: {{[0-9a-f]+}}:   stp     x29, x30, [sp, #-0x10]!
-// CHECK-NEXT: {{[0-9a-f]+}}:   mov     x29, sp
-// CHECK-NEXT: {{[0-9a-f]+}}:   bl      g@PLT
 // CHECK-NEXT: {{[0-9a-f]+}}:   add     x0, x0, #0x3
 // CHECK-NEXT: {{[0-9a-f]+}}:   ldp     x29, x30, [sp], #0x10
 // CHECK-NEXT: {{[0-9a-f]+}}:   autia1716
@@ -356,10 +326,6 @@ f_autib1716:
 // CHECK-NEXT:    The 1 instructions that write to the return register after any authentication are:
 // CHECK-NEXT:    1. {{[0-9a-f]+}}: ldp     x29, x30, [sp], #0x10
 // CHECK-NEXT:  This happens in the following basic block:
-// CHECK-NEXT: {{[0-9a-f]+}}:   paciasp
-// CHECK-NEXT: {{[0-9a-f]+}}:   stp     x29, x30, [sp, #-0x10]!
-// CHECK-NEXT: {{[0-9a-f]+}}:   mov     x29, sp
-// CHECK-NEXT: {{[0-9a-f]+}}:   bl      g@PLT
 // CHECK-NEXT: {{[0-9a-f]+}}:   add     x0, x0, #0x3
 // CHECK-NEXT: {{[0-9a-f]+}}:   ldp     x29, x30, [sp], #0x10
 // CHECK-NEXT: {{[0-9a-f]+}}:   autib1716
@@ -382,10 +348,6 @@ f_autiax12:
 // CHECK-NEXT:    The 1 instructions that write to the return register after any authentication are:
 // CHECK-NEXT:    1. {{[0-9a-f]+}}: ldp     x29, x30, [sp], #0x10
 // CHECK-NEXT:  This happens in the following basic block:
-// CHECK-NEXT: {{[0-9a-f]+}}:   paciasp
-// CHECK-NEXT: {{[0-9a-f]+}}:   stp     x29, x30, [sp, #-0x10]!
-// CHECK-NEXT: {{[0-9a-f]+}}:   mov     x29, sp
-// CHECK-NEXT: {{[0-9a-f]+}}:   bl      g@PLT
 // CHECK-NEXT: {{[0-9a-f]+}}:   add     x0, x0, #0x3
 // CHECK-NEXT: {{[0-9a-f]+}}:   ldp     x29, x30, [sp], #0x10
 // CHECK-NEXT: {{[0-9a-f]+}}:   autia   x12, sp
@@ -408,10 +370,6 @@ f_autibx12:
 // CHECK-NEXT:    The 1 instructions that write to the return register after any authentication are:
 // CHECK-NEXT:    1. {{[0-9a-f]+}}: ldp     x29, x30, [sp], #0x10
 // CHECK-NEXT:  This happens in the following basic block:
-// CHECK-NEXT: {{[0-9a-f]+}}:   paciasp
-// CHECK-NEXT: {{[0-9a-f]+}}:   stp     x29, x30, [sp, #-0x10]!
-// CHECK-NEXT: {{[0-9a-f]+}}:   mov     x29, sp
-// CHECK-NEXT: {{[0-9a-f]+}}:   bl      g@PLT
 // CHECK-NEXT: {{[0-9a-f]+}}:   add     x0, x0, #0x3
 // CHECK-NEXT: {{[0-9a-f]+}}:   ldp     x29, x30, [sp], #0x10
 // CHECK-NEXT: {{[0-9a-f]+}}:   autib   x12, sp
@@ -463,10 +421,6 @@ f_autdax12:
 // CHECK-NEXT:    The 1 instructions that write to the return register after any authentication are:
 // CHECK-NEXT:    1. {{[0-9a-f]+}}: ldp     x29, x30, [sp], #0x10
 // CHECK-NEXT:  This happens in the following basic block:
-// CHECK-NEXT: {{[0-9a-f]+}}:   paciasp
-// CHECK-NEXT: {{[0-9a-f]+}}:   stp     x29, x30, [sp, #-0x10]!
-// CHECK-NEXT: {{[0-9a-f]+}}:   mov     x29, sp
-// CHECK-NEXT: {{[0-9a-f]+}}:   bl      g@PLT
 // CHECK-NEXT: {{[0-9a-f]+}}:   add     x0, x0, #0x3
 // CHECK-NEXT: {{[0-9a-f]+}}:   ldp     x29, x30, [sp], #0x10
 // CHECK-NEXT: {{[0-9a-f]+}}:   autda   x12, sp
@@ -489,10 +443,6 @@ f_autdbx12:
 // CHECK-NEXT:    The 1 instructions that write to the return register after any authentication are:
 // CHECK-NEXT:    1. {{[0-9a-f]+}}: ldp     x29, x30, [sp], #0x10
 // CHECK-NEXT:  This happens in the following basic block:
-// CHECK-NEXT: {{[0-9a-f]+}}:   paciasp
-// CHECK-NEXT: {{[0-9a-f]+}}:   stp     x29, x30, [sp, #-0x10]!
-// CHECK-NEXT: {{[0-9a-f]+}}:   mov     x29, sp
-// CHECK-NEXT: {{[0-9a-f]+}}:   bl      g@PLT
 // CHECK-NEXT: {{[0-9a-f]+}}:   add     x0, x0, #0x3
 // CHECK-NEXT: {{[0-9a-f]+}}:   ldp     x29, x30, [sp], #0x10
 // CHECK-NEXT: {{[0-9a-f]+}}:   autdb   x12, sp
@@ -544,10 +494,6 @@ f_autizax12:
 // CHECK-NEXT:    The 1 instructions that write to the return register after any authentication are:
 // CHECK-NEXT:    1. {{[0-9a-f]+}}: ldp     x29, x30, [sp], #0x10
 // CHECK-NEXT:  This happens in the following basic block:
-// CHECK-NEXT: {{[0-9a-f]+}}:   paciasp
-// CHECK-NEXT: {{[0-9a-f]+}}:   stp     x29, x30, [sp, #-0x10]!
-// CHECK-NEXT: {{[0-9a-f]+}}:   mov     x29, sp
-// CHECK-NEXT: {{[0-9a-f]+}}:   bl      g@PLT
 // CHECK-NEXT: {{[0-9a-f]+}}:   add     x0, x0, #0x3
 // CHECK-NEXT: {{[0-9a-f]+}}:   ldp     x29, x30, [sp], #0x10
 // CHECK-NEXT: {{[0-9a-f]+}}:   autiza  x12
@@ -570,10 +516,6 @@ f_autizbx12:
 // CHECK-NEXT:    The 1 instructions that write to the return register after any authentication are:
 // CHECK-NEXT:    1. {{[0-9a-f]+}}: ldp     x29, x30, [sp], #0x10
 // CHECK-NEXT:  This happens in the following basic block:
-// CHECK-NEXT: {{[0-9a-f]+}}:   paciasp
-// CHECK-NEXT: {{[0-9a-f]+}}:   stp     x29, x30, [sp, #-0x10]!
-// CHECK-NEXT: {{[0-9a-f]+}}:   mov     x29, sp
-// CHECK-NEXT: {{[0-9a-f]+}}:   bl      g@PLT
 // CHECK-NEXT: {{[0-9a-f]+}}:   add     x0, x0, #0x3
 // CHECK-NEXT: {{[0-9a-f]+}}:   ldp     x29, x30, [sp], #0x10
 // CHECK-NEXT: {{[0-9a-f]+}}:   autizb  x12
@@ -625,10 +567,6 @@ f_autdzax12:
 // CHECK-NEXT:    The 1 instructions that write to the return register after any authentication are:
 // CHECK-NEXT:    1. {{[0-9a-f]+}}: ldp     x29, x30, [sp], #0x10
 // CHECK-NEXT:  This happens in the following basic block:
-// CHECK-NEXT: {{[0-9a-f]+}}:   paciasp
-// CHECK-NEXT: {{[0-9a-f]+}}:   stp     x29, x30, [sp, #-0x10]!
-// CHECK-NEXT: {{[0-9a-f]+}}:   mov     x29, sp
-// CHECK-NEXT: {{[0-9a-f]+}}:   bl      g@PLT
 // CHECK-NEXT: {{[0-9a-f]+}}:   add     x0, x0, #0x3
 // CHECK-NEXT: {{[0-9a-f]+}}:   ldp     x29, x30, [sp], #0x10
 // CHECK-NEXT: {{[0-9a-f]+}}:   autdza  x12
@@ -651,10 +589,6 @@ f_autdzbx12:
 // CHECK-NEXT:    The 1 instructions that write to the return register after any authentication are:
 // CHECK-NEXT:    1. {{[0-9a-f]+}}: ldp     x29, x30, [sp], #0x10
 // CHECK-NEXT:  This happens in the following basic block:
-// CHECK-NEXT: {{[0-9a-f]+}}:   paciasp
-// CHECK-NEXT: {{[0-9a-f]+}}:   stp     x29, x30, [sp, #-0x10]!
-// CHECK-NEXT: {{[0-9a-f]+}}:   mov     x29, sp
-// CHECK-NEXT: {{[0-9a-f]+}}:   bl      g@PLT
 // CHECK-NEXT: {{[0-9a-f]+}}:   add     x0, x0, #0x3
 // CHECK-NEXT: {{[0-9a-f]+}}:   ldp     x29, x30, [sp], #0x10
 // CHECK-NEXT: {{[0-9a-f]+}}:   autdzb  x12
@@ -913,10 +847,6 @@ f_autia171615:
 // CHECK-NEXT:    The 1 instructions that write to the return register after any authentication are:
 // CHECK-NEXT:    1. {{[0-9a-f]+}}: ldp     x29, x30, [sp], #0x10
 // CHECK-NEXT:  This happens in the following basic block:
-// CHECK-NEXT: {{[0-9a-f]+}}:   paciasp
-// CHECK-NEXT: {{[0-9a-f]+}}:   stp     x29, x30, [sp, #-0x10]!
-// CHECK-NEXT: {{[0-9a-f]+}}:   mov     x29, sp
-// CHECK-NEXT: {{[0-9a-f]+}}:   bl      g@PLT
 // CHECK-NEXT: {{[0-9a-f]+}}:   add     x0, x0, #0x3
 // CHECK-NEXT: {{[0-9a-f]+}}:   ldp     x29, x30, [sp], #0x10
 // CHECK-NEXT: {{[0-9a-f]+}}:   autia171615
@@ -939,10 +869,6 @@ f_autib171615:
 // CHECK-NEXT:    The 1 instructions that write to the return register after any authentication are:
 // CHECK-NEXT:    1. {{[0-9a-f]+}}: ldp     x29, x30, [sp], #0x10
 // CHECK-NEXT:  This happens in the following basic block:
-// CHECK-NEXT: {{[0-9a-f]+}}:   paciasp
-// CHECK-NEXT: {{[0-9a-f]+}}:   stp     x29, x30, [sp, #-0x10]!
-// CHECK-NEXT: {{[0-9a-f]+}}:   mov     x29, sp
-// CHECK-NEXT: {{[0-9a-f]+}}:   bl      g@PLT
 // CHECK-NEXT: {{[0-9a-f]+}}:   add     x0, x0, #0x3
 // CHECK-NEXT: {{[0-9a-f]+}}:   ldp     x29, x30, [sp], #0x10
 // CHECK-NEXT: {{[0-9a-f]+}}:   autib171615

@kbeyls kbeyls merged commit 6c61c55 into llvm:main Feb 24, 2025
9 of 11 checks passed
@alanzhao1
Copy link
Contributor

Confirmed fixed, thanks!

@maksfb
Copy link
Contributor

maksfb commented Feb 25, 2025

... which is caused by a seemingly recent change in BOLTs basic block calculation, where function calls seem to be ending basic blocks? I don't have a pointer to the commit that caused this change. I'll be looking for that later. For now, I'm trying to get the regression tests passing again.

There were no recent changes to the way we build BBs. Please keep us posted of your findings.

@kbeyls
Copy link
Collaborator Author

kbeyls commented Feb 25, 2025

... which is caused by a seemingly recent change in BOLTs basic block calculation, where function calls seem to be ending basic blocks? I don't have a pointer to the commit that caused this change. I'll be looking for that later. For now, I'm trying to get the regression tests passing again.

There were no recent changes to the way we build BBs. Please keep us posted of your findings.

My git bisect run ended up pointing to commit 52fc6ff. I'd need to find some time to understand why this commit is causing the behavioural change in llvm-bolt-binary-analysis...

@kbeyls
Copy link
Collaborator Author

kbeyls commented Feb 25, 2025

My git bisect run ended up pointing to commit 52fc6ff. I'd need to find some time to understand why this commit is causing the behavioural change in llvm-bolt-binary-analysis...

It seems only calls to unresolved symbols are affected, in that a new basic block is started after a call to an unresolved symbol, but not in a call to a resolved symbol. I'm guessing this doesn't happen (often) in real binaries, but does happen frequently in our regression tests.

A small reproducer showing this is:

#!/bin/bash
CLANG=./bin/clang
BOLT=./bin/llvm-bolt
cat << EOF > ./test_bolt_bb.s
        .text
        .globl  f1
        .type   f1,@function
f1:
        stp     x29, x30, [sp, #-16]!
        mov     x29, sp
        bl      foo       // unresolved symbol
        ldp     x29, x30, [sp], #16
        ret
        .size f1, .-f1


        .globl  f2
        .type   f2,@function
f2:
        stp     x29, x30, [sp, #-16]!
        mov     x29, sp
        bl      f1      // resolved symbol
        ldp     x29, x30, [sp], #16
        ret
        .size f2, .-f2
EOF
$CLANG -fuse-ld=lld -Wl,--unresolved-symbols=ignore-all --target=aarch64-linux-gnu -nostartfiles -nostdlib -ffreestanding ./test_bolt_bb.s -o ./test_bolt_bb.exe
$BOLT -o tmp.exe --print-cfg --no-threads  ./test_bolt_bb.exe

produces:

...
Binary Function "f1" after building cfg {
  Number      : 1
  State       : CFG constructed
  Address     : 0x10258
  Size        : 0x14
  MaxSize     : 0x14
  Offset      : 0x258
  Section     : .text
  Orc Section : .local.text.f1
  LSDA        : 0x0
  IsSimple    : 1
  IsMultiEntry: 0
  IsSplit     : 0
  BB Count    : 2
  Hash        : df55f35eb8a34774
  BB Layout   : .LBB00, .Ltmp0
}
.LBB00 (3 instructions, align : 1)
  Entry Point
    00000000:   stp     x29, x30, [sp, #-0x10]!
    00000004:   mov     x29, sp
    00000008:   bl      .Ltmp0
  Successors: .Ltmp0

.Ltmp0 (2 instructions, align : 1)
  Predecessors: .LBB00
    0000000c:   ldp     x29, x30, [sp], #0x10
    00000010:   ret

DWARF CFI Instructions:
    <empty>
End of Function "f1"

Binary Function "f2" after building cfg {
  Number      : 2
  State       : CFG constructed
  Address     : 0x1026c
  Size        : 0x14
  MaxSize     : 0x14
  Offset      : 0x26c
  Section     : .text
  Orc Section : .local.text.f2
  LSDA        : 0x0
  IsSimple    : 1
  IsMultiEntry: 0
  IsSplit     : 0
  BB Count    : 1
  Hash        : df55f35eb8a34774
  BB Layout   : .LBB01
}
.LBB01 (5 instructions, align : 1)
  Entry Point
    00000000:   stp     x29, x30, [sp, #-0x10]!
    00000004:   mov     x29, sp
    00000008:   bl      f1
    0000000c:   ldp     x29, x30, [sp], #0x10
    00000010:   ret

...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants