[llvm] [DWARFLinker] Fix DW_AT_LLVM_stmt_sequence attributes patched to wrong offsets (PR #178486)

via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 9 18:01:18 PDT 2026


https://github.com/alx32 updated https://github.com/llvm/llvm-project/pull/178486

>From a50f3218cb807946dde6dc8555325be389050622 Mon Sep 17 00:00:00 2001
From: Alex Borcan <alexborcan at fb.com>
Date: Wed, 28 Jan 2026 10:56:51 -0800
Subject: [PATCH 1/4] [DWARFLinker] Fix DW_AT_LLVM_stmt_sequence attributes
 patched to wrong offsets

---
 llvm/lib/DWARFLinker/Classic/DWARFLinker.cpp  |   61 +-
 .../dsymutil/AArch64/stmt-seq-macho.test      | 2151 +++++++----------
 2 files changed, 874 insertions(+), 1338 deletions(-)

diff --git a/llvm/lib/DWARFLinker/Classic/DWARFLinker.cpp b/llvm/lib/DWARFLinker/Classic/DWARFLinker.cpp
index daf37886394514..08921ee3e6cf2c 100644
--- a/llvm/lib/DWARFLinker/Classic/DWARFLinker.cpp
+++ b/llvm/lib/DWARFLinker/Classic/DWARFLinker.cpp
@@ -2448,6 +2448,19 @@ void DWARFLinker::DIECloner::generateLineTableForUnit(CompileUnit &Unit) {
           insertLineSequence(Seq, OutputRows);
       }
 
+      // Recompute isStartSeqInOutput based on the final row ordering.
+      // A row is a sequence start (will have DW_LNE_set_address emitted) iff:
+      // 1. It's the first row, OR
+      // 2. The previous row has EndSequence = 1
+      // This is necessary because insertLineSequence may merge sequences when
+      // an EndSequence row is replaced by the start of a new sequence, which
+      // removes the EndSequence marker and invalidates the original flag.
+      if (!OutputRows.empty()) {
+        OutputRows[0].isStartSeqInOutput = true;
+        for (size_t i = 1; i < OutputRows.size(); ++i)
+          OutputRows[i].isStartSeqInOutput = OutputRows[i - 1].Row.EndSequence;
+      }
+
       // Materialize the tracked rows into final DWARFDebugLine::Row objects.
       LineTable.Rows.clear();
       LineTable.Rows.reserve(OutputRows.size());
@@ -2478,10 +2491,24 @@ void DWARFLinker::DIECloner::generateLineTableForUnit(CompileUnit &Unit) {
         if (!LT->Rows.empty())
           constructSeqOffsettoOrigRowMapping(Unit, *LT, SeqOffToOrigRow);
 
-        // Create a map of original row indices to new row indices.
-        DenseMap<size_t, size_t> OrigRowToNewRow;
-        for (size_t i = 0; i < OutputRows.size(); ++i)
-          OrigRowToNewRow[OutputRows[i].OriginalRowIndex] = i;
+        // Build two maps to handle stmt_sequence patching:
+        // 1. OrigRowToOutputRow: maps original row indices to output row
+        // indices (for all rows, not just sequence starts)
+        // 2. OutputRowToSeqStart: maps each output row index to its sequence
+        //    start's output row index
+        DenseMap<size_t, size_t> OrigRowToOutputRow;
+        std::vector<size_t> OutputRowToSeqStart(OutputRows.size());
+
+        size_t CurrentSeqStart = 0;
+        for (size_t i = 0; i < OutputRows.size(); ++i) {
+          // Track the current sequence start
+          if (OutputRows[i].isStartSeqInOutput)
+            CurrentSeqStart = i;
+          OutputRowToSeqStart[i] = CurrentSeqStart;
+
+          // Map original row index to output row index
+          OrigRowToOutputRow[OutputRows[i].OriginalRowIndex] = i;
+        }
 
         // Patch DW_AT_LLVM_stmt_sequence attributes in the compile unit DIE
         // with the correct offset into the .debug_line section.
@@ -2500,21 +2527,27 @@ void DWARFLinker::DIECloner::generateLineTableForUnit(CompileUnit &Unit) {
           }
           size_t OrigRowIndex = OrigRowIter->second;
 
-          // 2. Get the new row index from the original row index.
-          auto NewRowIter = OrigRowToNewRow.find(OrigRowIndex);
-          if (NewRowIter == OrigRowToNewRow.end()) {
-            // If the original row index is not found in the map, update the
-            // stmt_sequence attribute to the 'invalid offset' magic value.
+          // 2. Find the output row for this original row.
+          auto OutputRowIter = OrigRowToOutputRow.find(OrigRowIndex);
+          if (OutputRowIter == OrigRowToOutputRow.end()) {
+            // Row was dropped during linking.
             StmtSeq.set(InvalidOffset);
             continue;
           }
+          size_t OutputRowIdx = OutputRowIter->second;
+
+          // 3. Find the sequence start for this output row.
+          //    If the original row was a sequence start but got merged into
+          //    another sequence, this finds the correct sequence start.
+          size_t SeqStartIdx = OutputRowToSeqStart[OutputRowIdx];
 
-          // 3. Get the offset of the new row in the output .debug_line section.
-          assert(NewRowIter->second < OutputRowOffsets.size() &&
-                 "New row index out of bounds");
-          uint64_t NewStmtSeqOffset = OutputRowOffsets[NewRowIter->second];
+          // 4. Get the offset of the sequence start in the output .debug_line
+          //    section. This offset points to the DW_LNE_set_address opcode.
+          assert(SeqStartIdx < OutputRowOffsets.size() &&
+                 "Sequence start index out of bounds");
+          uint64_t NewStmtSeqOffset = OutputRowOffsets[SeqStartIdx];
 
-          // 4. Patch the stmt_list attribute with the new offset.
+          // 5. Patch the stmt_sequence attribute with the new offset.
           StmtSeq.set(NewStmtSeqOffset);
         }
       }
diff --git a/llvm/test/tools/dsymutil/AArch64/stmt-seq-macho.test b/llvm/test/tools/dsymutil/AArch64/stmt-seq-macho.test
index db223cda43247d..974ba6f7dffe2b 100644
--- a/llvm/test/tools/dsymutil/AArch64/stmt-seq-macho.test
+++ b/llvm/test/tools/dsymutil/AArch64/stmt-seq-macho.test
@@ -1,72 +1,95 @@
 ## Test that verifies DW_AT_LLVM_stmt_sequence attributes are correctly patched in the dSYM
+## even when line table sequences need to be reordered due to address ordering.
+##
+## This test uses two object files (a.o and b.o) linked with b.o first so that
+## b's functions get lower addresses than a's functions. When dsymutil processes
+## the debug info, it must correctly handle the case where line table sequences
+## from different compilation units need to be interleaved by address.
 
 # RUN: rm -rf %t && split-file %s %t && cd %t
 # RUN: yaml2obj %t/stmt_seq_macho.exe.yaml -o %t/stmt_seq_macho.exe
-# RUN: yaml2obj %t/stmt_seq_macho.o.yaml   -o %t/stmt_seq_macho.o
+# RUN: yaml2obj %t/a.o.yaml -o %t/a.o
+# RUN: yaml2obj %t/b.o.yaml -o %t/b.o
 # RUN: dsymutil --flat --verify-dwarf=none -oso-prepend-path %t %t/stmt_seq_macho.exe -o %t/stmt_seq_macho.dSYM
-# RUN: llvm-dwarfdump --debug-info --debug-line -v %t/stmt_seq_macho.dSYM | sort | FileCheck %s -check-prefix=CHECK_DSYM
 # RUN: llvm-dwarfdump --debug-info --debug-line -v %t/stmt_seq_macho.dSYM > %t/stmt_seq_macho.dSYM.txt
-# RUN: cat %t/stmt_seq_macho.dSYM.txt | sort | FileCheck %s -check-prefix=CHECK_DSYM
-# RUN: cat %t/stmt_seq_macho.dSYM.txt | FileCheck %s -check-prefix=CHECK_NO_INVALID_OFFSET
-# RUN: cat stmt_seq_macho.dSYM.txt | grep DW_AT_LLVM_stmt_sequence | sort | uniq -d | wc -l | FileCheck %s -check-prefix=CHECK_NO_DUPLICATES
 
-# CHECK_NO_DUPLICATES: 0
-# CHECK_NO_INVALID_OFFSET-NOT: DW_AT_LLVM_stmt_sequence{{.*}}0xfffffff
-# CHECK_DSYM: DW_AT_LLVM_stmt_sequence [DW_FORM_sec_offset] ([[OFFSET1:(0x[0-9a-f]+)]])
-# CHECK_DSYM: DW_AT_LLVM_stmt_sequence [DW_FORM_sec_offset] ([[OFFSET2:(0x[0-9a-f]+)]])
-# CHECK_DSYM: DW_AT_LLVM_stmt_sequence [DW_FORM_sec_offset] ([[OFFSET3:(0x[0-9a-f]+)]])
-# CHECK_DSYM: DW_AT_LLVM_stmt_sequence [DW_FORM_sec_offset] ([[OFFSET4:(0x[0-9a-f]+)]])
+## Verify that all stmt_sequence offsets point to DW_LNE_set_address opcodes
+## Extract unique stmt_sequence offsets and verify each appears as a set_address offset
+# RUN: cat %t/stmt_seq_macho.dSYM.txt | grep "DW_AT_LLVM_stmt_sequence" | \
+# RUN:   sed 's/.*(\(0x[0-9a-f]*\)).*/\1/' | sort -u > %t/stmt_offsets.txt
+# RUN: cat %t/stmt_seq_macho.dSYM.txt | grep "DW_LNE_set_address" | \
+# RUN:   sed 's/^\(0x[0-9a-f]*\):.*/\1/' | sort -u > %t/setaddr_offsets.txt
+# RUN: comm -23 %t/stmt_offsets.txt %t/setaddr_offsets.txt > %t/bad_offsets.txt
+# RUN: test ! -s %t/bad_offsets.txt
 
-# CHECK_DSYM: [[OFFSET1]]: 00 DW_LNE_set_address
-# CHECK_DSYM: [[OFFSET2]]: 00 DW_LNE_set_address
-# CHECK_DSYM: [[OFFSET3]]: 00 DW_LNE_set_address
-# CHECK_DSYM: [[OFFSET4]]: 00 DW_LNE_set_address
+## Ensure no sentinel/invalid offsets (0xffffffff indicates broken patching)
+# RUN: cat %t/stmt_seq_macho.dSYM.txt | FileCheck %s -check-prefix=CHECK_NO_INVALID_OFFSET
+# CHECK_NO_INVALID_OFFSET-NOT: DW_AT_LLVM_stmt_sequence{{.*}}0xfffffff
 
 #--- stmt_seq_macho.cpp
+// This file is split into a.cpp and b.cpp by the gen script.
+// The functions are compiled into separate object files and linked
+// with b.o first, so function_b gets a lower address than function_a.
+// This triggers reordering in dsymutil's line table processing.
+
+#--- a.cpp
+// Functions in a.o - will have HIGHER addresses in the final executable
 #define ATTRIB extern "C" __attribute__((noinline))
-ATTRIB int function1_copy1(int a) {
-  return ++a;
+
+ATTRIB int function_a1(int a) {
+    int b = a + 1;
+    return b * 2;
 }
 
-ATTRIB int function3_copy1(int a) {
+ATTRIB int function_a2(int a) {
     int b = a + 3;
     return b + 1;
 }
 
-ATTRIB int function2_copy1(int a) {
-    return a - 22;
-}
+#--- b.cpp
+// Functions in b.o - will have LOWER addresses in the final executable
+#define ATTRIB extern "C" __attribute__((noinline))
 
-ATTRIB int function3_copy2(int a) {
-    int b = a + 3;
-    return b + 1;
+ATTRIB int function_b1(int a) {
+    int b = a - 1;
+    return b * 3;
 }
 
-ATTRIB int function2_copy2(int a) {
-    int result = a - 22;
-    return result;
+ATTRIB int function_b2(int a) {
+    int b = a - 5;
+    return b + 2;
 }
 
-struct logic_error {
-    logic_error(const char* s) {}
-};
-
-struct length_error : public logic_error {
-    __attribute__((noinline)) explicit length_error(const char* s) : logic_error(s) {}
-};
+#--- main.cpp
+extern "C" int function_a1(int);
+extern "C" int function_a2(int);
+extern "C" int function_b1(int);
+extern "C" int function_b2(int);
 
 int main() {
     int sum = 0;
-    sum += function2_copy2(3);
-    sum += function3_copy2(41);
-    sum += function2_copy1(11);
-    sum += function1_copy1(42);
-    length_error e("test");
+    sum += function_a1(1);
+    sum += function_a2(2);
+    sum += function_b1(3);
+    sum += function_b2(4);
     return sum;
 }
 
 #--- gen
-# Compile to an object file
+# Compile to separate object files with stmt_sequence attributes
+clang --target=arm64-apple-macos11 \
+  -c \
+  -fdebug-compilation-dir=/private/tmp/stmt_seq \
+  -g \
+  -gdwarf-4 \
+  -fno-unwind-tables \
+  -mllvm -emit-func-debug-line-table-offsets \
+  -fno-exceptions \
+  -mno-outline \
+  -Oz \
+  a.cpp \
+  -o a.o
+
 clang --target=arm64-apple-macos11 \
   -c \
   -fdebug-compilation-dir=/private/tmp/stmt_seq \
@@ -77,23 +100,38 @@ clang --target=arm64-apple-macos11 \
   -fno-exceptions \
   -mno-outline \
   -Oz \
-  stmt_seq_macho.cpp \
-  -o stmt_seq_macho.o
+  b.cpp \
+  -o b.o
+
+clang --target=arm64-apple-macos11 \
+  -c \
+  -fdebug-compilation-dir=/private/tmp/stmt_seq \
+  -g \
+  -gdwarf-4 \
+  -fno-unwind-tables \
+  -fno-exceptions \
+  -mno-outline \
+  -Oz \
+  main.cpp \
+  -o main.o
 
-# Link into an executable
+# Link with b.o FIRST so b's functions get LOWER addresses than a's functions.
+# This means when dsymutil processes a.o, its line table sequences will need
+# to be placed AFTER b.o's sequences in the output, triggering reordering.
 ld64.lld \
   -arch arm64 \
   -platform_version macos 11.0.0 11.0.0 \
   -o stmt_seq_macho.exe \
-  stmt_seq_macho.o \
-  -dead_strip \
-  --icf=all \
-  -oso_prefix $(pwd)/ \
-  --keep-icf-stabs
+  b.o a.o main.o \
+  -oso_prefix $(pwd)/
 
-# Convert executable to YAML for the test
-echo "#--- stmt_seq_macho.o.yaml"
-obj2yaml stmt_seq_macho.o | sed '1a\
+# Convert to YAML for the test
+echo "#--- a.o.yaml"
+obj2yaml a.o | sed '1a\
+IsLittleEndian: true'
+echo ""
+echo "#--- b.o.yaml"
+obj2yaml b.o | sed '1a\
 IsLittleEndian: true'
 echo ""
 echo "#--- stmt_seq_macho.exe.yaml"
@@ -101,7 +139,7 @@ obj2yaml stmt_seq_macho.exe | sed '1a\
 IsLittleEndian: true'
 
 #--- stmt-seq-macho.yaml
-#--- stmt_seq_macho.o.yaml
+#--- a.o.yaml
 --- !mach-o
 IsLittleEndian: true
 FileHeader:
@@ -109,119 +147,41 @@ FileHeader:
   cputype:         0x100000C
   cpusubtype:      0x0
   filetype:        0x1
-  ncmds:           5
-  sizeofcmds:      1176
+  ncmds:           4
+  sizeofcmds:      1080
   flags:           0x2000
   reserved:        0x0
 LoadCommands:
   - cmd:             LC_SEGMENT_64
-    cmdsize:         1032
+    cmdsize:         952
     segname:         ''
     vmaddr:          0
-    vmsize:          3125
-    fileoff:         1208
-    filesize:        3125
+    vmsize:          937
+    fileoff:         1112
+    filesize:        937
     maxprot:         7
     initprot:        7
-    nsects:          12
+    nsects:          11
     flags:           0
     Sections:
       - sectname:        __text
         segname:         __TEXT
         addr:            0x0
-        size:            148
-        offset:          0x4B8
+        size:            20
+        offset:          0x458
         align:           2
-        reloff:          0x10F0
-        nreloc:          8
-        flags:           0x80000400
-        reserved1:       0x0
-        reserved2:       0x0
-        reserved3:       0x0
-        content:         00040011C0035FD600100011C0035FD600580051C0035FD600100011C0035FD600580051C0035FD6FFC300D1F44F01A9FD7B02A9FD8300916000805200000094F30300AA20058052000000941400130B6001805200000094F30300AA40058052000000947302000B0100009021000091E03F0091000000948002130BFD7B42A9F44F41A9FFC30091C0035FD600000014C0035FD6
-        relocations:
-          - address:         0x8C
-            symbolnum:       4
-            pcrel:           true
-            length:          2
-            extern:          true
-            type:            2
-            scattered:       false
-            value:           0
-          - address:         0x74
-            symbolnum:       3
-            pcrel:           true
-            length:          2
-            extern:          true
-            type:            2
-            scattered:       false
-            value:           0
-          - address:         0x6C
-            symbolnum:       1
-            pcrel:           false
-            length:          2
-            extern:          true
-            type:            4
-            scattered:       false
-            value:           0
-          - address:         0x68
-            symbolnum:       1
-            pcrel:           true
-            length:          2
-            extern:          true
-            type:            3
-            scattered:       false
-            value:           0
-          - address:         0x60
-            symbolnum:       5
-            pcrel:           true
-            length:          2
-            extern:          true
-            type:            2
-            scattered:       false
-            value:           0
-          - address:         0x54
-            symbolnum:       6
-            pcrel:           true
-            length:          2
-            extern:          true
-            type:            2
-            scattered:       false
-            value:           0
-          - address:         0x48
-            symbolnum:       9
-            pcrel:           true
-            length:          2
-            extern:          true
-            type:            2
-            scattered:       false
-            value:           0
-          - address:         0x3C
-            symbolnum:       7
-            pcrel:           true
-            length:          2
-            extern:          true
-            type:            2
-            scattered:       false
-            value:           0
-      - sectname:        __cstring
-        segname:         __TEXT
-        addr:            0x94
-        size:            5
-        offset:          0x54C
-        align:           0
         reloff:          0x0
         nreloc:          0
-        flags:           0x2
+        flags:           0x80000400
         reserved1:       0x0
         reserved2:       0x0
         reserved3:       0x0
-        content:         '7465737400'
+        content:         08781F5300090011C0035FD600100011C0035FD6
       - sectname:        __debug_loc
         segname:         __DWARF
-        addr:            0x99
-        size:            412
-        offset:          0x551
+        addr:            0x14
+        size:            188
+        offset:          0x46C
         align:           0
         reloff:          0x0
         nreloc:          0
@@ -229,12 +189,12 @@ LoadCommands:
         reserved1:       0x0
         reserved2:       0x0
         reserved3:       0x0
-        content:         08000000000000000C000000000000000100500C0000000000000010000000000000000400A301509F0000000000000000000000000000000008000000000000000C00000000000000030070039F0000000000000000000000000000000010000000000000001400000000000000010050140000000000000018000000000000000400A301509F0000000000000000000000000000000018000000000000001C000000000000000100501C0000000000000020000000000000000400A301509F0000000000000000000000000000000018000000000000001C00000000000000030070039F0000000000000000000000000000000020000000000000002400000000000000010050240000000000000028000000000000000400A301509F00000000000000000000000000000000240000000000000028000000000000000100500000000000000000000000000000000038000000000000004400000000000000030011009F4400000000000000500000000000000001006350000000000000005C0000000000000001006400000000000000000000000000000000
+        content:         0000000000000000080000000000000001005008000000000000000C000000000000000400A301509F0000000000000000000000000000000000000000000000000800000000000000030070019F000000000000000000000000000000000C000000000000001000000000000000010050100000000000000014000000000000000400A301509F000000000000000000000000000000000C000000000000001000000000000000030070039F00000000000000000000000000000000
       - sectname:        __debug_abbrev
         segname:         __DWARF
-        addr:            0x235
-        size:            372
-        offset:          0x6ED
+        addr:            0xD0
+        size:            99
+        offset:          0x528
         align:           0
         reloff:          0x0
         nreloc:          0
@@ -244,114 +204,18 @@ LoadCommands:
         reserved3:       0x0
       - sectname:        __debug_info
         segname:         __DWARF
-        addr:            0x3A9
-        size:            747
-        offset:          0x861
+        addr:            0x133
+        size:            174
+        offset:          0x58B
         align:           0
-        reloff:          0x1130
-        nreloc:          16
+        reloff:          0x808
+        nreloc:          3
         flags:           0x2000000
         reserved1:       0x0
         reserved2:       0x0
         reserved3:       0x0
         relocations:
-          - address:         0x2A7
-            symbolnum:       1
-            pcrel:           false
-            length:          3
-            extern:          false
-            type:            0
-            scattered:       false
-            value:           0
-          - address:         0x28E
-            symbolnum:       1
-            pcrel:           false
-            length:          3
-            extern:          false
-            type:            0
-            scattered:       false
-            value:           0
-          - address:         0x253
-            symbolnum:       1
-            pcrel:           false
-            length:          3
-            extern:          false
-            type:            0
-            scattered:       false
-            value:           0
-          - address:         0x1F5
-            symbolnum:       1
-            pcrel:           false
-            length:          3
-            extern:          false
-            type:            0
-            scattered:       false
-            value:           0
-          - address:         0x1E1
-            symbolnum:       1
-            pcrel:           false
-            length:          3
-            extern:          false
-            type:            0
-            scattered:       false
-            value:           0
-          - address:         0x1CE
-            symbolnum:       1
-            pcrel:           false
-            length:          3
-            extern:          false
-            type:            0
-            scattered:       false
-            value:           0
-          - address:         0x1BA
-            symbolnum:       1
-            pcrel:           false
-            length:          3
-            extern:          false
-            type:            0
-            scattered:       false
-            value:           0
-          - address:         0x1A7
-            symbolnum:       1
-            pcrel:           false
-            length:          3
-            extern:          false
-            type:            0
-            scattered:       false
-            value:           0
-          - address:         0x169
-            symbolnum:       1
-            pcrel:           false
-            length:          3
-            extern:          false
-            type:            0
-            scattered:       false
-            value:           0
-          - address:         0x12D
-            symbolnum:       1
-            pcrel:           false
-            length:          3
-            extern:          false
-            type:            0
-            scattered:       false
-            value:           0
-          - address:         0xF1
-            symbolnum:       1
-            pcrel:           false
-            length:          3
-            extern:          false
-            type:            0
-            scattered:       false
-            value:           0
-          - address:         0xC4
-            symbolnum:       1
-            pcrel:           false
-            length:          3
-            extern:          false
-            type:            0
-            scattered:       false
-            value:           0
-          - address:         0x88
+          - address:         0x6B
             symbolnum:       1
             pcrel:           false
             length:          3
@@ -359,7 +223,7 @@ LoadCommands:
             type:            0
             scattered:       false
             value:           0
-          - address:         0x5F
+          - address:         0x2F
             symbolnum:       1
             pcrel:           false
             length:          3
@@ -367,14 +231,6 @@ LoadCommands:
             type:            0
             scattered:       false
             value:           0
-          - address:         0x37
-            symbolnum:       2
-            pcrel:           false
-            length:          3
-            extern:          false
-            type:            0
-            scattered:       false
-            value:           0
           - address:         0x22
             symbolnum:       1
             pcrel:           false
@@ -385,9 +241,9 @@ LoadCommands:
             value:           0
       - sectname:        __debug_str
         segname:         __DWARF
-        addr:            0x694
-        size:            400
-        offset:          0xB4C
+        addr:            0x1E1
+        size:            63
+        offset:          0x639
         align:           0
         reloff:          0x0
         nreloc:          0
@@ -397,9 +253,9 @@ LoadCommands:
         reserved3:       0x0
       - sectname:        __apple_names
         segname:         __DWARF
-        addr:            0x824
-        size:            288
-        offset:          0xCDC
+        addr:            0x220
+        size:            88
+        offset:          0x678
         align:           0
         reloff:          0x0
         nreloc:          0
@@ -407,12 +263,12 @@ LoadCommands:
         reserved1:       0x0
         reserved2:       0x0
         reserved3:       0x0
-        content:         485341480100000009000000090000000C00000000000000010000000100060000000000FFFFFFFFFFFFFFFF0100000003000000040000000600000007000000080000004A08311CC78E3C8288CB36CF89CB36CFD1125E53522B705390D9F86F6A7F9A7C4908311C8C0000009C000000AC000000BC000000CC000000DC000000EC00000000010000100100000601000001000000F000000000000000D6000000010000005E00000000000000F600000001000000C30000000000000016010000010000002C01000000000000440100000100000052020000000000005C01000001000000A6020000000000002B0100000200000052020000A60200000000000026010000010000006801000000000000E6000000010000008700000000000000
+        content:         485341480100000002000000020000000C00000000000000010000000100060000000000010000003CF983303DF9833038000000480000001F000000010000002E000000000000002B000000010000006A00000000000000
       - sectname:        __apple_objc
         segname:         __DWARF
-        addr:            0x944
+        addr:            0x278
         size:            36
-        offset:          0xDFC
+        offset:          0x6D0
         align:           0
         reloff:          0x0
         nreloc:          0
@@ -423,9 +279,9 @@ LoadCommands:
         content:         485341480100000001000000000000000C000000000000000100000001000600FFFFFFFF
       - sectname:        __apple_namespac
         segname:         __DWARF
-        addr:            0x968
+        addr:            0x29C
         size:            36
-        offset:          0xE20
+        offset:          0x6F4
         align:           0
         reloff:          0x0
         nreloc:          0
@@ -436,9 +292,9 @@ LoadCommands:
         content:         485341480100000001000000000000000C000000000000000100000001000600FFFFFFFF
       - sectname:        __apple_types
         segname:         __DWARF
-        addr:            0x98C
-        size:            195
-        offset:          0xE44
+        addr:            0x2C0
+        size:            71
+        offset:          0x718
         align:           0
         reloff:          0x0
         nreloc:          0
@@ -446,69 +302,21 @@ LoadCommands:
         reserved1:       0x0
         reserved2:       0x0
         reserved3:       0x0
-        content:         48534148010000000500000005000000140000000000000003000000010006000300050004000B000000000002000000FFFFFFFF03000000040000007CA8F05D90D9F86F5B738CDC3080880B6320957C64000000770000008A0000009D000000B0000000380100000100000027020000130000000000002B010000010000000502000013000000000000C20000000100000057000000240000000000007401000001000000DE02000024000000000000BD000000010000005000000024000000000000
+        content:         48534148010000000100000001000000140000000000000003000000010006000300050004000B00000000003080880B340000003700000001000000A600000024000000000000
       - sectname:        __debug_frame
         segname:         __DWARF
-        addr:            0xA50
-        size:            232
-        offset:          0xF08
+        addr:            0x308
+        size:            72
+        offset:          0x760
         align:           3
-        reloff:          0x11B0
-        nreloc:          8
+        reloff:          0x820
+        nreloc:          2
         flags:           0x2000000
         reserved1:       0x0
         reserved2:       0x0
         reserved3:       0x0
-        content:         14000000FFFFFFFF0400080001781E0C1F00000000000000140000000000000000000000000000000800000000000000140000000000000008000000000000000800000000000000140000000000000010000000000000000800000000000000140000000000000018000000000000000800000000000000140000000000000020000000000000000800000000000000240000000000000028000000000000006400000000000000500C1D109E019D02930394040000000014000000000000008C000000000000000400000000000000140000000000000090000000000000000400000000000000
+        content:         14000000FFFFFFFF0400080001781E0C1F00000000000000140000000000000000000000000000000C0000000000000014000000000000000C000000000000000800000000000000
         relocations:
-          - address:         0xD8
-            symbolnum:       1
-            pcrel:           false
-            length:          3
-            extern:          false
-            type:            0
-            scattered:       false
-            value:           0
-          - address:         0xC0
-            symbolnum:       1
-            pcrel:           false
-            length:          3
-            extern:          false
-            type:            0
-            scattered:       false
-            value:           0
-          - address:         0x98
-            symbolnum:       1
-            pcrel:           false
-            length:          3
-            extern:          false
-            type:            0
-            scattered:       false
-            value:           0
-          - address:         0x80
-            symbolnum:       1
-            pcrel:           false
-            length:          3
-            extern:          false
-            type:            0
-            scattered:       false
-            value:           0
-          - address:         0x68
-            symbolnum:       1
-            pcrel:           false
-            length:          3
-            extern:          false
-            type:            0
-            scattered:       false
-            value:           0
-          - address:         0x50
-            symbolnum:       1
-            pcrel:           false
-            length:          3
-            extern:          false
-            type:            0
-            scattered:       false
-            value:           0
           - address:         0x38
             symbolnum:       1
             pcrel:           false
@@ -527,66 +335,18 @@ LoadCommands:
             value:           0
       - sectname:        __debug_line
         segname:         __DWARF
-        addr:            0xB38
-        size:            253
-        offset:          0xFF0
+        addr:            0x350
+        size:            89
+        offset:          0x7A8
         align:           0
-        reloff:          0x11F0
-        nreloc:          8
+        reloff:          0x830
+        nreloc:          2
         flags:           0x2000000
         reserved1:       0x0
         reserved2:       0x0
         reserved3:       0x0
         relocations:
-          - address:         0xED
-            symbolnum:       1
-            pcrel:           false
-            length:          3
-            extern:          false
-            type:            0
-            scattered:       false
-            value:           0
-          - address:         0xD9
-            symbolnum:       1
-            pcrel:           false
-            length:          3
-            extern:          false
-            type:            0
-            scattered:       false
-            value:           0
-          - address:         0xAA
-            symbolnum:       1
-            pcrel:           false
-            length:          3
-            extern:          false
-            type:            0
-            scattered:       false
-            value:           0
-          - address:         0x96
-            symbolnum:       1
-            pcrel:           false
-            length:          3
-            extern:          false
-            type:            0
-            scattered:       false
-            value:           0
-          - address:         0x7E
-            symbolnum:       1
-            pcrel:           false
-            length:          3
-            extern:          false
-            type:            0
-            scattered:       false
-            value:           0
-          - address:         0x66
-            symbolnum:       1
-            pcrel:           false
-            length:          3
-            extern:          false
-            type:            0
-            scattered:       false
-            value:           0
-          - address:         0x50
+          - address:         0x45
             symbolnum:       1
             pcrel:           false
             length:          3
@@ -594,7 +354,7 @@ LoadCommands:
             type:            0
             scattered:       false
             value:           0
-          - address:         0x3A
+          - address:         0x2D
             symbolnum:       1
             pcrel:           false
             length:          3
@@ -608,23 +368,19 @@ LoadCommands:
     minos:           720896
     sdk:             0
     ntools:          0
-  - cmd:             LC_LINKER_OPTIMIZATION_HINT
-    cmdsize:         16
-    dataoff:         4656
-    datasize:        8
   - cmd:             LC_SYMTAB
     cmdsize:         24
-    symoff:          4664
-    nsyms:           11
-    stroff:          4840
-    strsize:         168
+    symoff:          2112
+    nsyms:           3
+    stroff:          2160
+    strsize:         40
   - cmd:             LC_DYSYMTAB
     cmdsize:         80
     ilocalsym:       0
-    nlocalsym:       3
-    iextdefsym:      3
-    nextdefsym:      8
-    iundefsym:       11
+    nlocalsym:       1
+    iextdefsym:      1
+    nextdefsym:      2
+    iundefsym:       3
     nundefsym:       0
     tocoff:          0
     ntoc:            0
@@ -640,73 +396,25 @@ LoadCommands:
     nlocrel:         0
 LinkEditData:
   NameList:
-    - n_strx:          155
+    - n_strx:          27
       n_type:          0xE
       n_sect:          1
       n_desc:          0
       n_value:         0
-    - n_strx:          1
-      n_type:          0xE
-      n_sect:          2
-      n_desc:          0
-      n_value:         148
-    - n_strx:          149
-      n_type:          0xE
-      n_sect:          2
-      n_desc:          0
-      n_value:         148
-    - n_strx:          39
-      n_type:          0xF
-      n_sect:          1
-      n_desc:          192
-      n_value:         140
     - n_strx:          14
-      n_type:          0xF
-      n_sect:          1
-      n_desc:          192
-      n_value:         144
-    - n_strx:          132
       n_type:          0xF
       n_sect:          1
       n_desc:          0
       n_value:         0
-    - n_strx:          115
-      n_type:          0xF
-      n_sect:          1
-      n_desc:          0
-      n_value:         16
-    - n_strx:          81
-      n_type:          0xF
-      n_sect:          1
-      n_desc:          0
-      n_value:         32
-    - n_strx:          98
+    - n_strx:          1
       n_type:          0xF
       n_sect:          1
       n_desc:          0
-      n_value:         8
-    - n_strx:          64
-      n_type:          0xF
-      n_sect:          1
-      n_desc:          0
-      n_value:         24
-    - n_strx:          8
-      n_type:          0xF
-      n_sect:          1
-      n_desc:          0
-      n_value:         40
+      n_value:         12
   StringTable:
     - ''
-    - l_.str
-    - _main
-    - __ZN12length_errorC2EPKc
-    - __ZN12length_errorC1EPKc
-    - _function3_copy2
-    - _function2_copy2
-    - _function3_copy1
-    - _function2_copy1
-    - _function1_copy1
-    - ltmp1
+    - _function_a2
+    - _function_a1
     - ltmp0
     - ''
     - ''
@@ -717,30 +425,15 @@ LinkEditData:
     - ''
 DWARF:
   debug_str:
-    - 'Facebook clang version 19.1.5 (https://git.internal.tfbnw.net/repos/git/rw/osmeta/external/llvm-project b36c9ae1f8f2b39e4aafb9ca4700c608c3036365)'
-    - stmt_seq_macho.cpp
+    - ''
+    - a.cpp
     - '/'
     - '/private/tmp/stmt_seq'
-    - char
-    - __ARRAY_SIZE_TYPE__
-    - function1_copy1
-    - function3_copy1
-    - function2_copy1
-    - function3_copy2
-    - function2_copy2
-    - main
-    - length_error
-    - logic_error
-    - _ZN12length_errorC1EPKc
-    - _ZN12length_errorC2EPKc
+    - function_a1
+    - function_a2
     - int
     - a
     - b
-    - result
-    - e
-    - sum
-    - this
-    - s
   debug_abbrev:
     - ID:              0
       Table:
@@ -767,58 +460,6 @@ DWARF:
             - Attribute:       DW_AT_high_pc
               Form:            DW_FORM_data4
         - Code:            0x2
-          Tag:             DW_TAG_variable
-          Children:        DW_CHILDREN_no
-          Attributes:
-            - Attribute:       DW_AT_type
-              Form:            DW_FORM_ref4
-            - Attribute:       DW_AT_decl_file
-              Form:            DW_FORM_data1
-            - Attribute:       DW_AT_decl_line
-              Form:            DW_FORM_data1
-            - Attribute:       DW_AT_location
-              Form:            DW_FORM_exprloc
-        - Code:            0x3
-          Tag:             DW_TAG_array_type
-          Children:        DW_CHILDREN_yes
-          Attributes:
-            - Attribute:       DW_AT_type
-              Form:            DW_FORM_ref4
-        - Code:            0x4
-          Tag:             DW_TAG_subrange_type
-          Children:        DW_CHILDREN_no
-          Attributes:
-            - Attribute:       DW_AT_type
-              Form:            DW_FORM_ref4
-            - Attribute:       DW_AT_count
-              Form:            DW_FORM_data1
-        - Code:            0x5
-          Tag:             DW_TAG_const_type
-          Children:        DW_CHILDREN_no
-          Attributes:
-            - Attribute:       DW_AT_type
-              Form:            DW_FORM_ref4
-        - Code:            0x6
-          Tag:             DW_TAG_base_type
-          Children:        DW_CHILDREN_no
-          Attributes:
-            - Attribute:       DW_AT_name
-              Form:            DW_FORM_strp
-            - Attribute:       DW_AT_encoding
-              Form:            DW_FORM_data1
-            - Attribute:       DW_AT_byte_size
-              Form:            DW_FORM_data1
-        - Code:            0x7
-          Tag:             DW_TAG_base_type
-          Children:        DW_CHILDREN_no
-          Attributes:
-            - Attribute:       DW_AT_name
-              Form:            DW_FORM_strp
-            - Attribute:       DW_AT_byte_size
-              Form:            DW_FORM_data1
-            - Attribute:       DW_AT_encoding
-              Form:            DW_FORM_data1
-        - Code:            0x8
           Tag:             DW_TAG_subprogram
           Children:        DW_CHILDREN_yes
           Attributes:
@@ -846,19 +487,7 @@ DWARF:
               Form:            DW_FORM_flag_present
             - Attribute:       DW_AT_APPLE_optimized
               Form:            DW_FORM_flag_present
-        - Code:            0x9
-          Tag:             DW_TAG_formal_parameter
-          Children:        DW_CHILDREN_no
-          Attributes:
-            - Attribute:       DW_AT_name
-              Form:            DW_FORM_strp
-            - Attribute:       DW_AT_decl_file
-              Form:            DW_FORM_data1
-            - Attribute:       DW_AT_decl_line
-              Form:            DW_FORM_data1
-            - Attribute:       DW_AT_type
-              Form:            DW_FORM_ref4
-        - Code:            0xA
+        - Code:            0x3
           Tag:             DW_TAG_formal_parameter
           Children:        DW_CHILDREN_no
           Attributes:
@@ -872,7 +501,7 @@ DWARF:
               Form:            DW_FORM_data1
             - Attribute:       DW_AT_type
               Form:            DW_FORM_ref4
-        - Code:            0xB
+        - Code:            0x4
           Tag:             DW_TAG_variable
           Children:        DW_CHILDREN_no
           Attributes:
@@ -886,198 +515,18 @@ DWARF:
               Form:            DW_FORM_data1
             - Attribute:       DW_AT_type
               Form:            DW_FORM_ref4
-        - Code:            0xC
-          Tag:             DW_TAG_subprogram
-          Children:        DW_CHILDREN_yes
-          Attributes:
-            - Attribute:       DW_AT_low_pc
-              Form:            DW_FORM_addr
-            - Attribute:       DW_AT_high_pc
-              Form:            DW_FORM_data4
-            - Attribute:       DW_AT_LLVM_stmt_sequence
-              Form:            DW_FORM_sec_offset
-            - Attribute:       DW_AT_frame_base
-              Form:            DW_FORM_exprloc
-            - Attribute:       DW_AT_call_all_calls
-              Form:            DW_FORM_flag_present
-            - Attribute:       DW_AT_name
-              Form:            DW_FORM_strp
-            - Attribute:       DW_AT_decl_file
-              Form:            DW_FORM_data1
-            - Attribute:       DW_AT_decl_line
-              Form:            DW_FORM_data1
-            - Attribute:       DW_AT_type
-              Form:            DW_FORM_ref4
-            - Attribute:       DW_AT_external
-              Form:            DW_FORM_flag_present
-            - Attribute:       DW_AT_APPLE_optimized
-              Form:            DW_FORM_flag_present
-        - Code:            0xD
-          Tag:             DW_TAG_variable
+        - Code:            0x5
+          Tag:             DW_TAG_base_type
           Children:        DW_CHILDREN_no
           Attributes:
-            - Attribute:       DW_AT_location
-              Form:            DW_FORM_exprloc
             - Attribute:       DW_AT_name
               Form:            DW_FORM_strp
-            - Attribute:       DW_AT_decl_file
-              Form:            DW_FORM_data1
-            - Attribute:       DW_AT_decl_line
-              Form:            DW_FORM_data1
-            - Attribute:       DW_AT_type
-              Form:            DW_FORM_ref4
-        - Code:            0xE
-          Tag:             DW_TAG_call_site
-          Children:        DW_CHILDREN_yes
-          Attributes:
-            - Attribute:       DW_AT_call_origin
-              Form:            DW_FORM_ref4
-            - Attribute:       DW_AT_call_return_pc
-              Form:            DW_FORM_addr
-        - Code:            0xF
-          Tag:             DW_TAG_call_site_parameter
-          Children:        DW_CHILDREN_no
-          Attributes:
-            - Attribute:       DW_AT_location
-              Form:            DW_FORM_exprloc
-            - Attribute:       DW_AT_call_value
-              Form:            DW_FORM_exprloc
-        - Code:            0x10
-          Tag:             DW_TAG_structure_type
-          Children:        DW_CHILDREN_yes
-          Attributes:
-            - Attribute:       DW_AT_calling_convention
+            - Attribute:       DW_AT_encoding
               Form:            DW_FORM_data1
-            - Attribute:       DW_AT_name
-              Form:            DW_FORM_strp
             - Attribute:       DW_AT_byte_size
               Form:            DW_FORM_data1
-            - Attribute:       DW_AT_decl_file
-              Form:            DW_FORM_data1
-            - Attribute:       DW_AT_decl_line
-              Form:            DW_FORM_data1
-        - Code:            0x11
-          Tag:             DW_TAG_inheritance
-          Children:        DW_CHILDREN_no
-          Attributes:
-            - Attribute:       DW_AT_type
-              Form:            DW_FORM_ref4
-            - Attribute:       DW_AT_data_member_location
-              Form:            DW_FORM_data1
-        - Code:            0x12
-          Tag:             DW_TAG_subprogram
-          Children:        DW_CHILDREN_yes
-          Attributes:
-            - Attribute:       DW_AT_name
-              Form:            DW_FORM_strp
-            - Attribute:       DW_AT_decl_file
-              Form:            DW_FORM_data1
-            - Attribute:       DW_AT_decl_line
-              Form:            DW_FORM_data1
-            - Attribute:       DW_AT_declaration
-              Form:            DW_FORM_flag_present
-            - Attribute:       DW_AT_external
-              Form:            DW_FORM_flag_present
-            - Attribute:       DW_AT_APPLE_optimized
-              Form:            DW_FORM_flag_present
-            - Attribute:       DW_AT_explicit
-              Form:            DW_FORM_flag_present
-        - Code:            0x13
-          Tag:             DW_TAG_formal_parameter
-          Children:        DW_CHILDREN_no
-          Attributes:
-            - Attribute:       DW_AT_type
-              Form:            DW_FORM_ref4
-            - Attribute:       DW_AT_artificial
-              Form:            DW_FORM_flag_present
-        - Code:            0x14
-          Tag:             DW_TAG_formal_parameter
-          Children:        DW_CHILDREN_no
-          Attributes:
-            - Attribute:       DW_AT_type
-              Form:            DW_FORM_ref4
-        - Code:            0x15
-          Tag:             DW_TAG_subprogram
-          Children:        DW_CHILDREN_yes
-          Attributes:
-            - Attribute:       DW_AT_name
-              Form:            DW_FORM_strp
-            - Attribute:       DW_AT_decl_file
-              Form:            DW_FORM_data1
-            - Attribute:       DW_AT_decl_line
-              Form:            DW_FORM_data1
-            - Attribute:       DW_AT_declaration
-              Form:            DW_FORM_flag_present
-            - Attribute:       DW_AT_external
-              Form:            DW_FORM_flag_present
-            - Attribute:       DW_AT_APPLE_optimized
-              Form:            DW_FORM_flag_present
-        - Code:            0x16
-          Tag:             DW_TAG_pointer_type
-          Children:        DW_CHILDREN_no
-          Attributes:
-            - Attribute:       DW_AT_type
-              Form:            DW_FORM_ref4
-        - Code:            0x17
-          Tag:             DW_TAG_subprogram
-          Children:        DW_CHILDREN_yes
-          Attributes:
-            - Attribute:       DW_AT_low_pc
-              Form:            DW_FORM_addr
-            - Attribute:       DW_AT_high_pc
-              Form:            DW_FORM_data4
-            - Attribute:       DW_AT_APPLE_omit_frame_ptr
-              Form:            DW_FORM_flag_present
-            - Attribute:       DW_AT_LLVM_stmt_sequence
-              Form:            DW_FORM_sec_offset
-            - Attribute:       DW_AT_frame_base
-              Form:            DW_FORM_exprloc
-            - Attribute:       DW_AT_object_pointer
-              Form:            DW_FORM_ref4
-            - Attribute:       DW_AT_call_all_calls
-              Form:            DW_FORM_flag_present
-            - Attribute:       DW_AT_linkage_name
-              Form:            DW_FORM_strp
-            - Attribute:       DW_AT_specification
-              Form:            DW_FORM_ref4
-        - Code:            0x18
-          Tag:             DW_TAG_formal_parameter
-          Children:        DW_CHILDREN_no
-          Attributes:
-            - Attribute:       DW_AT_location
-              Form:            DW_FORM_exprloc
-            - Attribute:       DW_AT_name
-              Form:            DW_FORM_strp
-            - Attribute:       DW_AT_type
-              Form:            DW_FORM_ref4
-            - Attribute:       DW_AT_artificial
-              Form:            DW_FORM_flag_present
-        - Code:            0x19
-          Tag:             DW_TAG_formal_parameter
-          Children:        DW_CHILDREN_no
-          Attributes:
-            - Attribute:       DW_AT_location
-              Form:            DW_FORM_exprloc
-            - Attribute:       DW_AT_name
-              Form:            DW_FORM_strp
-            - Attribute:       DW_AT_decl_file
-              Form:            DW_FORM_data1
-            - Attribute:       DW_AT_decl_line
-              Form:            DW_FORM_data1
-            - Attribute:       DW_AT_type
-              Form:            DW_FORM_ref4
-        - Code:            0x1A
-          Tag:             DW_TAG_call_site
-          Children:        DW_CHILDREN_yes
-          Attributes:
-            - Attribute:       DW_AT_call_origin
-              Form:            DW_FORM_ref4
-            - Attribute:       DW_AT_call_tail_call
-              Form:            DW_FORM_flag_present
-            - Attribute:       DW_AT_call_pc
-              Form:            DW_FORM_addr
   debug_info:
-    - Length:          0x2E7
+    - Length:          0xAA
       Version:         4
       AbbrevTableID:   0
       AbbrOffset:      0x0
@@ -1087,411 +536,619 @@ DWARF:
           Values:
             - Value:           0x0
             - Value:           0x21
-            - Value:           0x92
-            - Value:           0xA5
-            - Value:           0x0
-            - Value:           0xA7
             - Value:           0x1
+            - Value:           0x7
             - Value:           0x0
-            - Value:           0x94
-        - AbbrCode:        0x2
-          Values:
-            - Value:           0x3F
-            - Value:           0x1
-            - Value:           0x27
             - Value:           0x9
-              BlockData:       [ 0x3, 0x94, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-                                 0x0 ]
-        - AbbrCode:        0x3
-          Values:
-            - Value:           0x4B
-        - AbbrCode:        0x4
-          Values:
-            - Value:           0x57
-            - Value:           0x5
-        - AbbrCode:        0x0
-        - AbbrCode:        0x5
-          Values:
-            - Value:           0x50
-        - AbbrCode:        0x6
-          Values:
-            - Value:           0xBD
-            - Value:           0x6
             - Value:           0x1
-        - AbbrCode:        0x7
-          Values:
-            - Value:           0xC2
-            - Value:           0x8
-            - Value:           0x7
-        - AbbrCode:        0x8
+            - Value:           0x0
+            - Value:           0x14
+        - AbbrCode:        0x2
           Values:
             - Value:           0x0
-            - Value:           0x8
+            - Value:           0xC
             - Value:           0x1
-            - Value:           0x34
+            - Value:           0x27
             - Value:           0x1
               BlockData:       [ 0x6F ]
             - Value:           0x1
-            - Value:           0xD6
+            - Value:           0x1F
+            - Value:           0x1
+            - Value:           0x4
+            - Value:           0xA6
             - Value:           0x1
-            - Value:           0x2
-            - Value:           0x2DE
             - Value:           0x1
+        - AbbrCode:        0x3
+          Values:
+            - Value:           0x0
+            - Value:           0x3B
             - Value:           0x1
-        - AbbrCode:        0x9
+            - Value:           0x4
+            - Value:           0xA6
+        - AbbrCode:        0x4
           Values:
-            - Value:           0x178
+            - Value:           0x39
+            - Value:           0x3D
             - Value:           0x1
-            - Value:           0x2
-            - Value:           0x2DE
+            - Value:           0x5
+            - Value:           0xA6
         - AbbrCode:        0x0
-        - AbbrCode:        0x8
+        - AbbrCode:        0x2
           Values:
-            - Value:           0x8
+            - Value:           0xC
             - Value:           0x8
             - Value:           0x1
-            - Value:           0x4A
+            - Value:           0x3F
             - Value:           0x1
               BlockData:       [ 0x6F ]
             - Value:           0x1
-            - Value:           0xE6
+            - Value:           0x2B
             - Value:           0x1
-            - Value:           0x6
-            - Value:           0x2DE
+            - Value:           0x9
+            - Value:           0xA6
             - Value:           0x1
             - Value:           0x1
-        - AbbrCode:        0xA
+        - AbbrCode:        0x3
           Values:
-            - Value:           0x0
-            - Value:           0x178
+            - Value:           0x5E
+            - Value:           0x3B
             - Value:           0x1
-            - Value:           0x6
-            - Value:           0x2DE
-        - AbbrCode:        0xB
-          Values:
-            - Value:           0x39
-            - Value:           0x17A
-            - Value:           0x1
-            - Value:           0x7
-            - Value:           0x2DE
-        - AbbrCode:        0x0
-        - AbbrCode:        0x8
-          Values:
-            - Value:           0x10
-            - Value:           0x8
-            - Value:           0x1
-            - Value:           0x60
-            - Value:           0x1
-              BlockData:       [ 0x6F ]
-            - Value:           0x1
-            - Value:           0xF6
-            - Value:           0x1
-            - Value:           0xB
-            - Value:           0x2DE
-            - Value:           0x1
-            - Value:           0x1
-        - AbbrCode:        0xA
-          Values:
-            - Value:           0x5E
-            - Value:           0x178
-            - Value:           0x1
-            - Value:           0xB
-            - Value:           0x2DE
-        - AbbrCode:        0x0
-        - AbbrCode:        0x8
-          Values:
-            - Value:           0x18
-            - Value:           0x8
-            - Value:           0x1
-            - Value:           0x78
-            - Value:           0x1
-              BlockData:       [ 0x6F ]
-            - Value:           0x1
-            - Value:           0x106
-            - Value:           0x1
-            - Value:           0xF
-            - Value:           0x2DE
-            - Value:           0x1
-            - Value:           0x1
-        - AbbrCode:        0xA
+            - Value:           0x9
+            - Value:           0xA6
+        - AbbrCode:        0x4
           Values:
             - Value:           0x97
-            - Value:           0x178
-            - Value:           0x1
-            - Value:           0xF
-            - Value:           0x2DE
-        - AbbrCode:        0xB
-          Values:
-            - Value:           0xD0
-            - Value:           0x17A
-            - Value:           0x1
-            - Value:           0x10
-            - Value:           0x2DE
-        - AbbrCode:        0x0
-        - AbbrCode:        0x8
-          Values:
-            - Value:           0x20
-            - Value:           0x8
-            - Value:           0x1
-            - Value:           0x90
-            - Value:           0x1
-              BlockData:       [ 0x6F ]
-            - Value:           0x1
-            - Value:           0x116
-            - Value:           0x1
-            - Value:           0x14
-            - Value:           0x2DE
-            - Value:           0x1
-            - Value:           0x1
-        - AbbrCode:        0xA
-          Values:
-            - Value:           0xF5
-            - Value:           0x178
-            - Value:           0x1
-            - Value:           0x14
-            - Value:           0x2DE
-        - AbbrCode:        0xB
-          Values:
-            - Value:           0x12E
-            - Value:           0x17C
-            - Value:           0x1
-            - Value:           0x15
-            - Value:           0x2DE
-        - AbbrCode:        0x0
-        - AbbrCode:        0xC
-          Values:
-            - Value:           0x28
-            - Value:           0x64
-            - Value:           0xA7
-            - Value:           0x1
-              BlockData:       [ 0x6D ]
-            - Value:           0x1
-            - Value:           0x126
-            - Value:           0x1
-            - Value:           0x21
-            - Value:           0x2DE
-            - Value:           0x1
-            - Value:           0x1
-        - AbbrCode:        0xD
-          Values:
-            - Value:           0x2
-              BlockData:       [ 0x8F, 0xF ]
-            - Value:           0x183
-            - Value:           0x1
-            - Value:           0x27
-            - Value:           0x205
-        - AbbrCode:        0xB
-          Values:
-            - Value:           0x151
-            - Value:           0x185
-            - Value:           0x1
-            - Value:           0x22
-            - Value:           0x2DE
-        - AbbrCode:        0xE
-          Values:
-            - Value:           0x12C
-            - Value:           0x40
-        - AbbrCode:        0xF
-          Values:
-            - Value:           0x1
-              BlockData:       [ 0x50 ]
-            - Value:           0x1
-              BlockData:       [ 0x33 ]
-        - AbbrCode:        0x0
-        - AbbrCode:        0xE
-          Values:
-            - Value:           0xF0
-            - Value:           0x4C
-        - AbbrCode:        0xF
-          Values:
-            - Value:           0x1
-              BlockData:       [ 0x50 ]
-            - Value:           0x2
-              BlockData:       [ 0x10, 0x29 ]
-        - AbbrCode:        0x0
-        - AbbrCode:        0xE
-          Values:
-            - Value:           0xC3
-            - Value:           0x58
-        - AbbrCode:        0xF
-          Values:
-            - Value:           0x1
-              BlockData:       [ 0x50 ]
-            - Value:           0x1
-              BlockData:       [ 0x3B ]
-        - AbbrCode:        0x0
-        - AbbrCode:        0xE
-          Values:
-            - Value:           0x5E
-            - Value:           0x64
-        - AbbrCode:        0xF
-          Values:
-            - Value:           0x1
-              BlockData:       [ 0x50 ]
-            - Value:           0x2
-              BlockData:       [ 0x10, 0x2A ]
-        - AbbrCode:        0x0
-        - AbbrCode:        0xE
-          Values:
-            - Value:           0x252
-            - Value:           0x78
-        - AbbrCode:        0xF
-          Values:
+            - Value:           0x3D
             - Value:           0x1
-              BlockData:       [ 0x50 ]
-            - Value:           0x2
-              BlockData:       [ 0x8F, 0xF ]
+            - Value:           0xA
+            - Value:           0xA6
         - AbbrCode:        0x0
-        - AbbrCode:        0x0
-        - AbbrCode:        0x10
+        - AbbrCode:        0x5
           Values:
+            - Value:           0x37
             - Value:           0x5
-            - Value:           0x12B
-            - Value:           0x1
-            - Value:           0x1
-            - Value:           0x1D
-        - AbbrCode:        0x11
+            - Value:           0x4
+        - AbbrCode:        0x0
+  debug_line:
+    - Length:          85
+      Version:         4
+      PrologueLength:  29
+      MinInstLength:   1
+      MaxOpsPerInst:   1
+      DefaultIsStmt:   1
+      LineBase:        251
+      LineRange:       14
+      OpcodeBase:      13
+      StandardOpcodeLengths: [ 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1 ]
+      Files:
+        - Name:            a.cpp
+          DirIdx:          0
+          ModTime:         0
+          Length:          0
+      Opcodes:
+        - Opcode:          DW_LNS_set_column
+          Data:            14
+        - Opcode:          DW_LNS_set_prologue_end
+          Data:            0
+        - Opcode:          DW_LNS_extended_op
+          ExtLen:          9
+          SubOpcode:       DW_LNE_set_address
+          Data:            0
+        - Opcode:          0x17
+          Data:            0
+        - Opcode:          DW_LNS_set_column
+          Data:            5
+        - Opcode:          DW_LNS_negate_stmt
+          Data:            0
+        - Opcode:          0x82
+          Data:            0
+        - Opcode:          DW_LNS_advance_pc
+          Data:            4
+        - Opcode:          DW_LNS_extended_op
+          ExtLen:          1
+          SubOpcode:       DW_LNE_end_sequence
+          Data:            0
+        - Opcode:          DW_LNS_set_column
+          Data:            14
+        - Opcode:          DW_LNS_set_prologue_end
+          Data:            0
+        - Opcode:          DW_LNS_extended_op
+          ExtLen:          9
+          SubOpcode:       DW_LNE_set_address
+          Data:            12
+        - Opcode:          DW_LNS_advance_line
+          SData:           10
+          Data:            0
+        - Opcode:          DW_LNS_copy
+          Data:            0
+        - Opcode:          DW_LNS_set_column
+          Data:            5
+        - Opcode:          DW_LNS_negate_stmt
+          Data:            0
+        - Opcode:          0x4A
+          Data:            0
+        - Opcode:          DW_LNS_advance_pc
+          Data:            4
+        - Opcode:          DW_LNS_extended_op
+          ExtLen:          1
+          SubOpcode:       DW_LNE_end_sequence
+          Data:            0
+...
+
+#--- b.o.yaml
+--- !mach-o
+IsLittleEndian: true
+FileHeader:
+  magic:           0xFEEDFACF
+  cputype:         0x100000C
+  cpusubtype:      0x0
+  filetype:        0x1
+  ncmds:           4
+  sizeofcmds:      1080
+  flags:           0x2000
+  reserved:        0x0
+LoadCommands:
+  - cmd:             LC_SEGMENT_64
+    cmdsize:         952
+    segname:         ''
+    vmaddr:          0
+    vmsize:          937
+    fileoff:         1112
+    filesize:        937
+    maxprot:         7
+    initprot:        7
+    nsects:          11
+    flags:           0
+    Sections:
+      - sectname:        __text
+        segname:         __TEXT
+        addr:            0x0
+        size:            20
+        offset:          0x458
+        align:           2
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x80000400
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         0804000B000D0051C0035FD6000C0051C0035FD6
+      - sectname:        __debug_loc
+        segname:         __DWARF
+        addr:            0x14
+        size:            188
+        offset:          0x46C
+        align:           0
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x2000000
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         0000000000000000080000000000000001005008000000000000000C000000000000000400A301509F00000000000000000000000000000000000000000000000008000000000000000300707F9F000000000000000000000000000000000C000000000000001000000000000000010050100000000000000014000000000000000400A301509F000000000000000000000000000000000C0000000000000010000000000000000300707B9F00000000000000000000000000000000
+      - sectname:        __debug_abbrev
+        segname:         __DWARF
+        addr:            0xD0
+        size:            99
+        offset:          0x528
+        align:           0
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x2000000
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+      - sectname:        __debug_info
+        segname:         __DWARF
+        addr:            0x133
+        size:            174
+        offset:          0x58B
+        align:           0
+        reloff:          0x808
+        nreloc:          3
+        flags:           0x2000000
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        relocations:
+          - address:         0x6B
+            symbolnum:       1
+            pcrel:           false
+            length:          3
+            extern:          false
+            type:            0
+            scattered:       false
+            value:           0
+          - address:         0x2F
+            symbolnum:       1
+            pcrel:           false
+            length:          3
+            extern:          false
+            type:            0
+            scattered:       false
+            value:           0
+          - address:         0x22
+            symbolnum:       1
+            pcrel:           false
+            length:          3
+            extern:          false
+            type:            0
+            scattered:       false
+            value:           0
+      - sectname:        __debug_str
+        segname:         __DWARF
+        addr:            0x1E1
+        size:            63
+        offset:          0x639
+        align:           0
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x2000000
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+      - sectname:        __apple_names
+        segname:         __DWARF
+        addr:            0x220
+        size:            88
+        offset:          0x678
+        align:           0
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x2000000
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         485341480100000002000000020000000C00000000000000010000000100060000000000010000005EF983305DF9833038000000480000002B000000010000006A000000000000001F000000010000002E00000000000000
+      - sectname:        __apple_objc
+        segname:         __DWARF
+        addr:            0x278
+        size:            36
+        offset:          0x6D0
+        align:           0
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x2000000
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         485341480100000001000000000000000C000000000000000100000001000600FFFFFFFF
+      - sectname:        __apple_namespac
+        segname:         __DWARF
+        addr:            0x29C
+        size:            36
+        offset:          0x6F4
+        align:           0
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x2000000
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         485341480100000001000000000000000C000000000000000100000001000600FFFFFFFF
+      - sectname:        __apple_types
+        segname:         __DWARF
+        addr:            0x2C0
+        size:            71
+        offset:          0x718
+        align:           0
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x2000000
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         48534148010000000100000001000000140000000000000003000000010006000300050004000B00000000003080880B340000003700000001000000A600000024000000000000
+      - sectname:        __debug_frame
+        segname:         __DWARF
+        addr:            0x308
+        size:            72
+        offset:          0x760
+        align:           3
+        reloff:          0x820
+        nreloc:          2
+        flags:           0x2000000
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         14000000FFFFFFFF0400080001781E0C1F00000000000000140000000000000000000000000000000C0000000000000014000000000000000C000000000000000800000000000000
+        relocations:
+          - address:         0x38
+            symbolnum:       1
+            pcrel:           false
+            length:          3
+            extern:          false
+            type:            0
+            scattered:       false
+            value:           0
+          - address:         0x20
+            symbolnum:       1
+            pcrel:           false
+            length:          3
+            extern:          false
+            type:            0
+            scattered:       false
+            value:           0
+      - sectname:        __debug_line
+        segname:         __DWARF
+        addr:            0x350
+        size:            89
+        offset:          0x7A8
+        align:           0
+        reloff:          0x830
+        nreloc:          2
+        flags:           0x2000000
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        relocations:
+          - address:         0x45
+            symbolnum:       1
+            pcrel:           false
+            length:          3
+            extern:          false
+            type:            0
+            scattered:       false
+            value:           0
+          - address:         0x2D
+            symbolnum:       1
+            pcrel:           false
+            length:          3
+            extern:          false
+            type:            0
+            scattered:       false
+            value:           0
+  - cmd:             LC_BUILD_VERSION
+    cmdsize:         24
+    platform:        1
+    minos:           720896
+    sdk:             0
+    ntools:          0
+  - cmd:             LC_SYMTAB
+    cmdsize:         24
+    symoff:          2112
+    nsyms:           3
+    stroff:          2160
+    strsize:         40
+  - cmd:             LC_DYSYMTAB
+    cmdsize:         80
+    ilocalsym:       0
+    nlocalsym:       1
+    iextdefsym:      1
+    nextdefsym:      2
+    iundefsym:       3
+    nundefsym:       0
+    tocoff:          0
+    ntoc:            0
+    modtaboff:       0
+    nmodtab:         0
+    extrefsymoff:    0
+    nextrefsyms:     0
+    indirectsymoff:  0
+    nindirectsyms:   0
+    extreloff:       0
+    nextrel:         0
+    locreloff:       0
+    nlocrel:         0
+LinkEditData:
+  NameList:
+    - n_strx:          27
+      n_type:          0xE
+      n_sect:          1
+      n_desc:          0
+      n_value:         0
+    - n_strx:          14
+      n_type:          0xF
+      n_sect:          1
+      n_desc:          0
+      n_value:         0
+    - n_strx:          1
+      n_type:          0xF
+      n_sect:          1
+      n_desc:          0
+      n_value:         12
+  StringTable:
+    - ''
+    - _function_b2
+    - _function_b1
+    - ltmp0
+    - ''
+    - ''
+    - ''
+    - ''
+    - ''
+    - ''
+    - ''
+DWARF:
+  debug_str:
+    - ''
+    - b.cpp
+    - '/'
+    - '/private/tmp/stmt_seq'
+    - function_b1
+    - function_b2
+    - int
+    - a
+    - b
+  debug_abbrev:
+    - ID:              0
+      Table:
+        - Code:            0x1
+          Tag:             DW_TAG_compile_unit
+          Children:        DW_CHILDREN_yes
+          Attributes:
+            - Attribute:       DW_AT_producer
+              Form:            DW_FORM_strp
+            - Attribute:       DW_AT_language
+              Form:            DW_FORM_data2
+            - Attribute:       DW_AT_name
+              Form:            DW_FORM_strp
+            - Attribute:       DW_AT_LLVM_sysroot
+              Form:            DW_FORM_strp
+            - Attribute:       DW_AT_stmt_list
+              Form:            DW_FORM_sec_offset
+            - Attribute:       DW_AT_comp_dir
+              Form:            DW_FORM_strp
+            - Attribute:       DW_AT_APPLE_optimized
+              Form:            DW_FORM_flag_present
+            - Attribute:       DW_AT_low_pc
+              Form:            DW_FORM_addr
+            - Attribute:       DW_AT_high_pc
+              Form:            DW_FORM_data4
+        - Code:            0x2
+          Tag:             DW_TAG_subprogram
+          Children:        DW_CHILDREN_yes
+          Attributes:
+            - Attribute:       DW_AT_low_pc
+              Form:            DW_FORM_addr
+            - Attribute:       DW_AT_high_pc
+              Form:            DW_FORM_data4
+            - Attribute:       DW_AT_APPLE_omit_frame_ptr
+              Form:            DW_FORM_flag_present
+            - Attribute:       DW_AT_LLVM_stmt_sequence
+              Form:            DW_FORM_sec_offset
+            - Attribute:       DW_AT_frame_base
+              Form:            DW_FORM_exprloc
+            - Attribute:       DW_AT_call_all_calls
+              Form:            DW_FORM_flag_present
+            - Attribute:       DW_AT_name
+              Form:            DW_FORM_strp
+            - Attribute:       DW_AT_decl_file
+              Form:            DW_FORM_data1
+            - Attribute:       DW_AT_decl_line
+              Form:            DW_FORM_data1
+            - Attribute:       DW_AT_type
+              Form:            DW_FORM_ref4
+            - Attribute:       DW_AT_external
+              Form:            DW_FORM_flag_present
+            - Attribute:       DW_AT_APPLE_optimized
+              Form:            DW_FORM_flag_present
+        - Code:            0x3
+          Tag:             DW_TAG_formal_parameter
+          Children:        DW_CHILDREN_no
+          Attributes:
+            - Attribute:       DW_AT_location
+              Form:            DW_FORM_sec_offset
+            - Attribute:       DW_AT_name
+              Form:            DW_FORM_strp
+            - Attribute:       DW_AT_decl_file
+              Form:            DW_FORM_data1
+            - Attribute:       DW_AT_decl_line
+              Form:            DW_FORM_data1
+            - Attribute:       DW_AT_type
+              Form:            DW_FORM_ref4
+        - Code:            0x4
+          Tag:             DW_TAG_variable
+          Children:        DW_CHILDREN_no
+          Attributes:
+            - Attribute:       DW_AT_location
+              Form:            DW_FORM_sec_offset
+            - Attribute:       DW_AT_name
+              Form:            DW_FORM_strp
+            - Attribute:       DW_AT_decl_file
+              Form:            DW_FORM_data1
+            - Attribute:       DW_AT_decl_line
+              Form:            DW_FORM_data1
+            - Attribute:       DW_AT_type
+              Form:            DW_FORM_ref4
+        - Code:            0x5
+          Tag:             DW_TAG_base_type
+          Children:        DW_CHILDREN_no
+          Attributes:
+            - Attribute:       DW_AT_name
+              Form:            DW_FORM_strp
+            - Attribute:       DW_AT_encoding
+              Form:            DW_FORM_data1
+            - Attribute:       DW_AT_byte_size
+              Form:            DW_FORM_data1
+  debug_info:
+    - Length:          0xAA
+      Version:         4
+      AbbrevTableID:   0
+      AbbrOffset:      0x0
+      AddrSize:        8
+      Entries:
+        - AbbrCode:        0x1
           Values:
-            - Value:           0x227
             - Value:           0x0
-        - AbbrCode:        0x12
-          Values:
-            - Value:           0x12B
-            - Value:           0x1
-            - Value:           0x1E
-            - Value:           0x1
-            - Value:           0x1
-            - Value:           0x1
-            - Value:           0x1
-        - AbbrCode:        0x13
-          Values:
-            - Value:           0x24D
-            - Value:           0x1
-        - AbbrCode:        0x14
-          Values:
-            - Value:           0x248
-        - AbbrCode:        0x0
-        - AbbrCode:        0x0
-        - AbbrCode:        0x10
-          Values:
-            - Value:           0x5
-            - Value:           0x138
-            - Value:           0x1
-            - Value:           0x1
-            - Value:           0x19
-        - AbbrCode:        0x15
-          Values:
-            - Value:           0x138
-            - Value:           0x1
-            - Value:           0x1A
-            - Value:           0x1
-            - Value:           0x1
+            - Value:           0x21
             - Value:           0x1
-        - AbbrCode:        0x13
-          Values:
-            - Value:           0x243
+            - Value:           0x7
+            - Value:           0x0
+            - Value:           0x9
             - Value:           0x1
-        - AbbrCode:        0x14
-          Values:
-            - Value:           0x248
-        - AbbrCode:        0x0
-        - AbbrCode:        0x0
-        - AbbrCode:        0x16
-          Values:
-            - Value:           0x227
-        - AbbrCode:        0x16
-          Values:
-            - Value:           0x4B
-        - AbbrCode:        0x16
-          Values:
-            - Value:           0x205
-        - AbbrCode:        0x17
+            - Value:           0x0
+            - Value:           0x14
+        - AbbrCode:        0x2
           Values:
-            - Value:           0x8C
-            - Value:           0x4
+            - Value:           0x0
+            - Value:           0xC
             - Value:           0x1
-            - Value:           0xD3
+            - Value:           0x27
             - Value:           0x1
               BlockData:       [ 0x6F ]
-            - Value:           0x271
             - Value:           0x1
-            - Value:           0x144
-            - Value:           0x214
-        - AbbrCode:        0x18
-          Values:
-            - Value:           0x1
-              BlockData:       [ 0x50 ]
-            - Value:           0x189
-            - Value:           0x2E5
-            - Value:           0x1
-        - AbbrCode:        0x19
-          Values:
+            - Value:           0x1F
             - Value:           0x1
-              BlockData:       [ 0x51 ]
-            - Value:           0x18E
+            - Value:           0x4
+            - Value:           0xA6
             - Value:           0x1
-            - Value:           0x1E
-            - Value:           0x248
-        - AbbrCode:        0x1A
-          Values:
-            - Value:           0x2A6
             - Value:           0x1
-            - Value:           0x8C
-        - AbbrCode:        0xF
+        - AbbrCode:        0x3
           Values:
+            - Value:           0x0
+            - Value:           0x3B
             - Value:           0x1
-              BlockData:       [ 0x50 ]
-            - Value:           0x3
-              BlockData:       [ 0xA3, 0x1, 0x50 ]
-        - AbbrCode:        0xF
+            - Value:           0x4
+            - Value:           0xA6
+        - AbbrCode:        0x4
           Values:
+            - Value:           0x39
+            - Value:           0x3D
             - Value:           0x1
-              BlockData:       [ 0x51 ]
-            - Value:           0x3
-              BlockData:       [ 0xA3, 0x1, 0x51 ]
-        - AbbrCode:        0x0
+            - Value:           0x5
+            - Value:           0xA6
         - AbbrCode:        0x0
-        - AbbrCode:        0x17
+        - AbbrCode:        0x2
           Values:
-            - Value:           0x90
-            - Value:           0x4
+            - Value:           0xC
+            - Value:           0x8
             - Value:           0x1
-            - Value:           0xE7
+            - Value:           0x3F
             - Value:           0x1
               BlockData:       [ 0x6F ]
-            - Value:           0x2C5
             - Value:           0x1
-            - Value:           0x15C
-            - Value:           0x214
-        - AbbrCode:        0x18
-          Values:
+            - Value:           0x2B
+            - Value:           0x1
+            - Value:           0x9
+            - Value:           0xA6
             - Value:           0x1
-              BlockData:       [ 0x50 ]
-            - Value:           0x189
-            - Value:           0x2E5
             - Value:           0x1
-        - AbbrCode:        0x19
+        - AbbrCode:        0x3
           Values:
+            - Value:           0x5E
+            - Value:           0x3B
             - Value:           0x1
-              BlockData:       [ 0x51 ]
-            - Value:           0x18E
+            - Value:           0x9
+            - Value:           0xA6
+        - AbbrCode:        0x4
+          Values:
+            - Value:           0x97
+            - Value:           0x3D
             - Value:           0x1
-            - Value:           0x1E
-            - Value:           0x248
+            - Value:           0xA
+            - Value:           0xA6
         - AbbrCode:        0x0
-        - AbbrCode:        0x6
+        - AbbrCode:        0x5
           Values:
-            - Value:           0x174
+            - Value:           0x37
             - Value:           0x5
             - Value:           0x4
-        - AbbrCode:        0x16
-          Values:
-            - Value:           0x205
         - AbbrCode:        0x0
   debug_line:
-    - Length:          249
+    - Length:          85
       Version:         4
-      PrologueLength:  42
+      PrologueLength:  29
       MinInstLength:   1
       MaxOpsPerInst:   1
       DefaultIsStmt:   1
@@ -1500,51 +1157,11 @@ DWARF:
       OpcodeBase:      13
       StandardOpcodeLengths: [ 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1 ]
       Files:
-        - Name:            stmt_seq_macho.cpp
+        - Name:            b.cpp
           DirIdx:          0
           ModTime:         0
           Length:          0
       Opcodes:
-        - Opcode:          DW_LNS_set_column
-          Data:            10
-        - Opcode:          DW_LNS_set_prologue_end
-          Data:            0
-        - Opcode:          DW_LNS_extended_op
-          ExtLen:          9
-          SubOpcode:       DW_LNE_set_address
-          Data:            0
-        - Opcode:          0x14
-          Data:            0
-        - Opcode:          DW_LNS_set_column
-          Data:            3
-        - Opcode:          DW_LNS_negate_stmt
-          Data:            0
-        - Opcode:          0x4A
-          Data:            0
-        - Opcode:          DW_LNS_extended_op
-          ExtLen:          1
-          SubOpcode:       DW_LNE_end_sequence
-          Data:            0
-        - Opcode:          DW_LNS_set_column
-          Data:            14
-        - Opcode:          DW_LNS_set_prologue_end
-          Data:            0
-        - Opcode:          DW_LNS_extended_op
-          ExtLen:          9
-          SubOpcode:       DW_LNE_set_address
-          Data:            8
-        - Opcode:          0x19
-          Data:            0
-        - Opcode:          DW_LNS_set_column
-          Data:            5
-        - Opcode:          DW_LNS_negate_stmt
-          Data:            0
-        - Opcode:          0x4A
-          Data:            0
-        - Opcode:          DW_LNS_extended_op
-          ExtLen:          1
-          SubOpcode:       DW_LNE_end_sequence
-          Data:            0
         - Opcode:          DW_LNS_set_column
           Data:            14
         - Opcode:          DW_LNS_set_prologue_end
@@ -1552,18 +1169,17 @@ DWARF:
         - Opcode:          DW_LNS_extended_op
           ExtLen:          9
           SubOpcode:       DW_LNE_set_address
-          Data:            16
-        - Opcode:          DW_LNS_advance_line
-          SData:           11
           Data:            0
-        - Opcode:          DW_LNS_copy
+        - Opcode:          0x17
           Data:            0
         - Opcode:          DW_LNS_set_column
           Data:            5
         - Opcode:          DW_LNS_negate_stmt
           Data:            0
-        - Opcode:          0x4A
+        - Opcode:          0x82
           Data:            0
+        - Opcode:          DW_LNS_advance_pc
+          Data:            4
         - Opcode:          DW_LNS_extended_op
           ExtLen:          1
           SubOpcode:       DW_LNE_end_sequence
@@ -1575,9 +1191,9 @@ DWARF:
         - Opcode:          DW_LNS_extended_op
           ExtLen:          9
           SubOpcode:       DW_LNE_set_address
-          Data:            24
+          Data:            12
         - Opcode:          DW_LNS_advance_line
-          SData:           16
+          SData:           10
           Data:            0
         - Opcode:          DW_LNS_copy
           Data:            0
@@ -1587,114 +1203,6 @@ DWARF:
           Data:            0
         - Opcode:          0x4A
           Data:            0
-        - Opcode:          DW_LNS_extended_op
-          ExtLen:          1
-          SubOpcode:       DW_LNE_end_sequence
-          Data:            0
-        - Opcode:          DW_LNS_set_column
-          Data:            20
-        - Opcode:          DW_LNS_set_prologue_end
-          Data:            0
-        - Opcode:          DW_LNS_extended_op
-          ExtLen:          9
-          SubOpcode:       DW_LNE_set_address
-          Data:            32
-        - Opcode:          DW_LNS_advance_line
-          SData:           20
-          Data:            0
-        - Opcode:          DW_LNS_copy
-          Data:            0
-        - Opcode:          DW_LNS_set_column
-          Data:            5
-        - Opcode:          0x4B
-          Data:            0
-        - Opcode:          DW_LNS_extended_op
-          ExtLen:          1
-          SubOpcode:       DW_LNE_end_sequence
-          Data:            0
-        - Opcode:          DW_LNS_extended_op
-          ExtLen:          9
-          SubOpcode:       DW_LNE_set_address
-          Data:            40
-        - Opcode:          DW_LNS_advance_line
-          SData:           32
-          Data:            0
-        - Opcode:          DW_LNS_copy
-          Data:            0
-        - Opcode:          DW_LNS_set_column
-          Data:            12
-        - Opcode:          DW_LNS_set_prologue_end
-          Data:            0
-        - Opcode:          0xF4
-          Data:            0
-        - Opcode:          0xBB
-          Data:            0
-        - Opcode:          DW_LNS_set_column
-          Data:            9
-        - Opcode:          DW_LNS_negate_stmt
-          Data:            0
-        - Opcode:          0x82
-          Data:            0
-        - Opcode:          DW_LNS_set_column
-          Data:            12
-        - Opcode:          DW_LNS_negate_stmt
-          Data:            0
-        - Opcode:          0x4B
-          Data:            0
-        - Opcode:          0xBB
-          Data:            0
-        - Opcode:          DW_LNS_set_column
-          Data:            9
-        - Opcode:          0x81
-          Data:            0
-        - Opcode:          DW_LNS_set_column
-          Data:            18
-        - Opcode:          0x4C
-          Data:            0
-        - Opcode:          DW_LNS_set_column
-          Data:            9
-        - Opcode:          0xF1
-          Data:            0
-        - Opcode:          DW_LNS_set_column
-          Data:            5
-        - Opcode:          DW_LNS_set_epilogue_begin
-          Data:            0
-        - Opcode:          0x4C
-          Data:            0
-        - Opcode:          DW_LNS_extended_op
-          ExtLen:          1
-          SubOpcode:       DW_LNE_end_sequence
-          Data:            0
-        - Opcode:          DW_LNS_set_column
-          Data:            85
-        - Opcode:          DW_LNS_set_prologue_end
-          Data:            0
-        - Opcode:          DW_LNS_extended_op
-          ExtLen:          9
-          SubOpcode:       DW_LNE_set_address
-          Data:            140
-        - Opcode:          DW_LNS_advance_line
-          SData:           29
-          Data:            0
-        - Opcode:          DW_LNS_copy
-          Data:            0
-        - Opcode:          DW_LNS_extended_op
-          ExtLen:          1
-          SubOpcode:       DW_LNE_end_sequence
-          Data:            0
-        - Opcode:          DW_LNS_set_column
-          Data:            86
-        - Opcode:          DW_LNS_set_prologue_end
-          Data:            0
-        - Opcode:          DW_LNS_extended_op
-          ExtLen:          9
-          SubOpcode:       DW_LNE_set_address
-          Data:            144
-        - Opcode:          DW_LNS_advance_line
-          SData:           29
-          Data:            0
-        - Opcode:          DW_LNS_copy
-          Data:            0
         - Opcode:          DW_LNS_advance_pc
           Data:            4
         - Opcode:          DW_LNS_extended_op
@@ -1712,7 +1220,7 @@ FileHeader:
   cpusubtype:      0x0
   filetype:        0x2
   ncmds:           13
-  sizeofcmds:      688
+  sizeofcmds:      608
   flags:           0x200085
   reserved:        0x0
 LoadCommands:
@@ -1728,7 +1236,7 @@ LoadCommands:
     nsects:          0
     flags:           0
   - cmd:             LC_SEGMENT_64
-    cmdsize:         232
+    cmdsize:         152
     segname:         __TEXT
     vmaddr:          4294967296
     vmsize:          16384
@@ -1736,14 +1244,14 @@ LoadCommands:
     filesize:        16384
     maxprot:         5
     initprot:        5
-    nsects:          2
+    nsects:          1
     flags:           0
     Sections:
       - sectname:        __text
         segname:         __TEXT
-        addr:            0x1000002F0
-        size:            132
-        offset:          0x2F0
+        addr:            0x1000002A0
+        size:            116
+        offset:          0x2A0
         align:           2
         reloff:          0x0
         nreloc:          0
@@ -1751,27 +1259,14 @@ LoadCommands:
         reserved1:       0x0
         reserved2:       0x0
         reserved3:       0x0
-        content:         00040011C0035FD600580051C0035FD600100011C0035FD6FFC300D1F44F01A9FD7B02A9FD83009160008052F7FFFF97F30300AA20058052F6FFFF971400130B60018052F1FFFF97F30300AA40058052ECFFFF977302000B610100101F2003D5E03F0091060000948002130BFD7B42A9F44F41A9FFC30091C0035FD601000014C0035FD6
-      - sectname:        __cstring
-        segname:         __TEXT
-        addr:            0x100000374
-        size:            5
-        offset:          0x374
-        align:           0
-        reloff:          0x0
-        nreloc:          0
-        flags:           0x2
-        reserved1:       0x0
-        reserved2:       0x0
-        reserved3:       0x0
-        content:         '7465737400'
+        content:         0804000B000D0051C0035FD6000C0051C0035FD608781F5300090011C0035FD600100011C0035FD6F44FBEA9FD7B01A9FD43009120008052F7FFFF97F30300AA40008052F7FFFF971400130B60008052ECFFFF97F30300AA80008052ECFFFF976802000B8002080BFD7B41A9F44FC2A8C0035FD6
   - cmd:             LC_SEGMENT_64
     cmdsize:         72
     segname:         __LINKEDIT
     vmaddr:          4294983680
-    vmsize:          1040
+    vmsize:          1008
     fileoff:         16384
-    filesize:        1040
+    filesize:        1008
     maxprot:         1
     initprot:        1
     nsects:          0
@@ -1787,13 +1282,13 @@ LoadCommands:
     lazy_bind_off:   0
     lazy_bind_size:  0
     export_off:      16384
-    export_size:     112
+    export_size:     104
   - cmd:             LC_SYMTAB
     cmdsize:         24
-    symoff:          16504
+    symoff:          16496
     nsyms:           25
-    stroff:          16904
-    strsize:         208
+    stroff:          16896
+    strsize:         184
   - cmd:             LC_DYSYMTAB
     cmdsize:         80
     ilocalsym:       0
@@ -1821,7 +1316,7 @@ LoadCommands:
     ZeroPadBytes:    7
   - cmd:             LC_UUID
     cmdsize:         24
-    uuid:            4C4C443F-5555-3144-A15F-DE084AB2A15B
+    uuid:            4C4C4417-5555-3144-A18D-150CDE11EB04
   - cmd:             LC_BUILD_VERSION
     cmdsize:         32
     platform:        1
@@ -1833,19 +1328,19 @@ LoadCommands:
         version:         1245445
   - cmd:             LC_MAIN
     cmdsize:         24
-    entryoff:        776
+    entryoff:        712
     stacksize:       0
   - cmd:             LC_FUNCTION_STARTS
     cmdsize:         16
-    dataoff:         16496
+    dataoff:         16488
     datasize:        8
   - cmd:             LC_DATA_IN_CODE
     cmdsize:         16
-    dataoff:         16504
+    dataoff:         16496
     datasize:        0
   - cmd:             LC_CODE_SIGNATURE
     cmdsize:         16
-    dataoff:         17120
+    dataoff:         17088
     datasize:        304
 LinkEditData:
   ExportTrie:
@@ -1866,185 +1361,193 @@ LinkEditData:
         ImportName:      ''
         Children:
           - TerminalSize:    2
-            NodeOffset:      43
+            NodeOffset:      44
             Name:            _mh_execute_header
             Flags:           0x0
             Address:         0x0
             Other:           0x0
             ImportName:      ''
           - TerminalSize:    3
-            NodeOffset:      47
+            NodeOffset:      48
             Name:            main
             Flags:           0x0
-            Address:         0x308
+            Address:         0x2C8
             Other:           0x0
             ImportName:      ''
           - TerminalSize:    0
-            NodeOffset:      52
-            Name:            function
+            NodeOffset:      53
+            Name:            function_
             Flags:           0x0
             Address:         0x0
             Other:           0x0
             ImportName:      ''
             Children:
-              - TerminalSize:    3
-                NodeOffset:      80
-                Name:            1_copy1
-                Flags:           0x0
-                Address:         0x2F0
-                Other:           0x0
-                ImportName:      ''
               - TerminalSize:    0
-                NodeOffset:      85
-                Name:            2_copy
+                NodeOffset:      61
+                Name:            b
                 Flags:           0x0
                 Address:         0x0
                 Other:           0x0
                 ImportName:      ''
                 Children:
                   - TerminalSize:    3
-                    NodeOffset:      93
-                    Name:            '1'
+                    NodeOffset:      69
+                    Name:            '2'
                     Flags:           0x0
-                    Address:         0x2F8
+                    Address:         0x2AC
                     Other:           0x0
                     ImportName:      ''
                   - TerminalSize:    3
-                    NodeOffset:      98
-                    Name:            '2'
+                    NodeOffset:      74
+                    Name:            '1'
                     Flags:           0x0
-                    Address:         0x2F8
+                    Address:         0x2A0
                     Other:           0x0
                     ImportName:      ''
-              - TerminalSize:    3
-                NodeOffset:      103
-                Name:            3_copy2
+              - TerminalSize:    0
+                NodeOffset:      79
+                Name:            a
                 Flags:           0x0
-                Address:         0x300
+                Address:         0x0
                 Other:           0x0
                 ImportName:      ''
+                Children:
+                  - TerminalSize:    3
+                    NodeOffset:      87
+                    Name:            '2'
+                    Flags:           0x0
+                    Address:         0x2C0
+                    Other:           0x0
+                    ImportName:      ''
+                  - TerminalSize:    3
+                    NodeOffset:      92
+                    Name:            '1'
+                    Flags:           0x0
+                    Address:         0x2B4
+                    Other:           0x0
+                    ImportName:      ''
   NameList:
-    - n_strx:          146
+    - n_strx:          80
       n_type:          0x64
       n_sect:          0
       n_desc:          0
       n_value:         0
-    - n_strx:          187
+    - n_strx:          108
       n_type:          0x66
       n_sect:          0
       n_desc:          1
       n_value:         0
-    - n_strx:          76
+    - n_strx:          8
       n_type:          0x24
       n_sect:          1
       n_desc:          0
-      n_value:         4294968172
+      n_value:         4294967968
     - n_strx:          1
       n_type:          0x24
       n_sect:          0
       n_desc:          0
-      n_value:         4
-    - n_strx:          101
+      n_value:         12
+    - n_strx:          21
       n_type:          0x24
       n_sect:          1
       n_desc:          0
-      n_value:         4294968176
+      n_value:         4294967980
     - n_strx:          1
       n_type:          0x24
       n_sect:          0
       n_desc:          0
-      n_value:         4
-    - n_strx:          2
-      n_type:          0x24
+      n_value:         8
+    - n_strx:          1
+      n_type:          0x64
       n_sect:          1
       n_desc:          0
-      n_value:         4294968072
-    - n_strx:          1
-      n_type:          0x24
+      n_value:         0
+    - n_strx:          112
+      n_type:          0x64
       n_sect:          0
       n_desc:          0
-      n_value:         100
-    - n_strx:          8
+      n_value:         0
+    - n_strx:          140
+      n_type:          0x66
+      n_sect:          0
+      n_desc:          1
+      n_value:         0
+    - n_strx:          34
       n_type:          0x24
       n_sect:          1
       n_desc:          0
-      n_value:         4294968048
+      n_value:         4294967988
     - n_strx:          1
       n_type:          0x24
       n_sect:          0
       n_desc:          0
-      n_value:         8
-    - n_strx:          25
+      n_value:         12
+    - n_strx:          47
       n_type:          0x24
       n_sect:          1
       n_desc:          0
-      n_value:         4294968056
+      n_value:         4294968000
     - n_strx:          1
       n_type:          0x24
       n_sect:          0
       n_desc:          0
       n_value:         8
-    - n_strx:          42
-      n_type:          0x24
+    - n_strx:          1
+      n_type:          0x64
       n_sect:          1
       n_desc:          0
-      n_value:         4294968064
-    - n_strx:          1
-      n_type:          0x24
+      n_value:         0
+    - n_strx:          144
+      n_type:          0x64
       n_sect:          0
       n_desc:          0
-      n_value:         8
-    - n_strx:          59
+      n_value:         0
+    - n_strx:          175
+      n_type:          0x66
+      n_sect:          0
+      n_desc:          1
+      n_value:         0
+    - n_strx:          2
       n_type:          0x24
       n_sect:          1
       n_desc:          0
-      n_value:         4294968056
+      n_value:         4294968008
     - n_strx:          1
       n_type:          0x24
       n_sect:          0
       n_desc:          0
-      n_value:         8
+      n_value:         76
     - n_strx:          1
       n_type:          0x64
       n_sect:          1
       n_desc:          0
       n_value:         0
-    - n_strx:          76
-      n_type:          0x1E
-      n_sect:          1
-      n_desc:          0
-      n_value:         4294968172
-    - n_strx:          101
-      n_type:          0x1E
-      n_sect:          1
-      n_desc:          0
-      n_value:         4294968176
     - n_strx:          2
       n_type:          0xF
       n_sect:          1
       n_desc:          0
-      n_value:         4294968072
+      n_value:         4294968008
     - n_strx:          8
       n_type:          0xF
       n_sect:          1
       n_desc:          0
-      n_value:         4294968048
-    - n_strx:          25
+      n_value:         4294967968
+    - n_strx:          21
       n_type:          0xF
       n_sect:          1
       n_desc:          0
-      n_value:         4294968056
-    - n_strx:          42
+      n_value:         4294967980
+    - n_strx:          34
       n_type:          0xF
       n_sect:          1
       n_desc:          0
-      n_value:         4294968064
-    - n_strx:          59
+      n_value:         4294967988
+    - n_strx:          47
       n_type:          0xF
       n_sect:          1
       n_desc:          0
-      n_value:         4294968056
-    - n_strx:          126
+      n_value:         4294968000
+    - n_strx:          60
       n_type:          0xF
       n_sect:          1
       n_desc:          16
@@ -2052,18 +1555,18 @@ LinkEditData:
   StringTable:
     - ' '
     - _main
-    - _function1_copy1
-    - _function2_copy1
-    - _function3_copy2
-    - _function2_copy2
-    - __ZN12length_errorC1EPKc
-    - __ZN12length_errorC2EPKc
+    - _function_b1
+    - _function_b2
+    - _function_a1
+    - _function_a2
     - __mh_execute_header
-    - '/private/tmp/stmt_seq/stmt_seq_macho.cpp'
-    - stmt_seq_macho.o
-    - ''
-    - ''
+    - '/private/tmp/stmt_seq/b.cpp'
+    - b.o
+    - '/private/tmp/stmt_seq/a.cpp'
+    - a.o
+    - '/private/tmp/stmt_seq/main.cpp'
+    - main.o
     - ''
     - ''
-  FunctionStarts:  [ 0x2F0, 0x2F8, 0x300, 0x308, 0x36C, 0x370 ]
+  FunctionStarts:  [ 0x2A0, 0x2AC, 0x2B4, 0x2C0, 0x2C8 ]
 ...

>From c7afe7b6b7045fe332d604895f80d0be24fadb43 Mon Sep 17 00:00:00 2001
From: alx32 <103613512+alx32 at users.noreply.github.com>
Date: Mon, 9 Mar 2026 18:00:48 -0700
Subject: [PATCH 2/4] Update llvm/lib/DWARFLinker/Classic/DWARFLinker.cpp

Co-authored-by: Jonas Devlieghere <jonas at devlieghere.com>
---
 llvm/lib/DWARFLinker/Classic/DWARFLinker.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/llvm/lib/DWARFLinker/Classic/DWARFLinker.cpp b/llvm/lib/DWARFLinker/Classic/DWARFLinker.cpp
index 08921ee3e6cf2c..888555abb08532 100644
--- a/llvm/lib/DWARFLinker/Classic/DWARFLinker.cpp
+++ b/llvm/lib/DWARFLinker/Classic/DWARFLinker.cpp
@@ -2501,7 +2501,7 @@ void DWARFLinker::DIECloner::generateLineTableForUnit(CompileUnit &Unit) {
 
         size_t CurrentSeqStart = 0;
         for (size_t i = 0; i < OutputRows.size(); ++i) {
-          // Track the current sequence start
+          // Track the current sequence start.
           if (OutputRows[i].isStartSeqInOutput)
             CurrentSeqStart = i;
           OutputRowToSeqStart[i] = CurrentSeqStart;

>From 297fbdffbe78936faa5900eba9b0794c9a39b0ad Mon Sep 17 00:00:00 2001
From: alx32 <103613512+alx32 at users.noreply.github.com>
Date: Mon, 9 Mar 2026 18:00:59 -0700
Subject: [PATCH 3/4] Update llvm/lib/DWARFLinker/Classic/DWARFLinker.cpp

Co-authored-by: Jonas Devlieghere <jonas at devlieghere.com>
---
 llvm/lib/DWARFLinker/Classic/DWARFLinker.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/llvm/lib/DWARFLinker/Classic/DWARFLinker.cpp b/llvm/lib/DWARFLinker/Classic/DWARFLinker.cpp
index 888555abb08532..5fd983a20edfba 100644
--- a/llvm/lib/DWARFLinker/Classic/DWARFLinker.cpp
+++ b/llvm/lib/DWARFLinker/Classic/DWARFLinker.cpp
@@ -2506,7 +2506,7 @@ void DWARFLinker::DIECloner::generateLineTableForUnit(CompileUnit &Unit) {
             CurrentSeqStart = i;
           OutputRowToSeqStart[i] = CurrentSeqStart;
 
-          // Map original row index to output row index
+          // Map original row index to output row index.
           OrigRowToOutputRow[OutputRows[i].OriginalRowIndex] = i;
         }
 

>From e3c20856dc6e8e2982a721ef60e306578350ba27 Mon Sep 17 00:00:00 2001
From: alx32 <103613512+alx32 at users.noreply.github.com>
Date: Mon, 9 Mar 2026 18:01:07 -0700
Subject: [PATCH 4/4] Update llvm/lib/DWARFLinker/Classic/DWARFLinker.cpp

Co-authored-by: Jonas Devlieghere <jonas at devlieghere.com>
---
 llvm/lib/DWARFLinker/Classic/DWARFLinker.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/llvm/lib/DWARFLinker/Classic/DWARFLinker.cpp b/llvm/lib/DWARFLinker/Classic/DWARFLinker.cpp
index 5fd983a20edfba..6c347ff91866d0 100644
--- a/llvm/lib/DWARFLinker/Classic/DWARFLinker.cpp
+++ b/llvm/lib/DWARFLinker/Classic/DWARFLinker.cpp
@@ -2493,7 +2493,7 @@ void DWARFLinker::DIECloner::generateLineTableForUnit(CompileUnit &Unit) {
 
         // Build two maps to handle stmt_sequence patching:
         // 1. OrigRowToOutputRow: maps original row indices to output row
-        // indices (for all rows, not just sequence starts)
+        // indices (for all rows, not just sequence starts).
         // 2. OutputRowToSeqStart: maps each output row index to its sequence
         //    start's output row index
         DenseMap<size_t, size_t> OrigRowToOutputRow;



More information about the llvm-commits mailing list