diff --git a/src/main/java/com/android/tools/r8/graph/DexDebugEntry.java b/src/main/java/com/android/tools/r8/graph/DexDebugEntry.java
index 2547996..f89353c 100644
--- a/src/main/java/com/android/tools/r8/graph/DexDebugEntry.java
+++ b/src/main/java/com/android/tools/r8/graph/DexDebugEntry.java
@@ -4,11 +4,18 @@
 package com.android.tools.r8.graph;
 
 import com.android.tools.r8.ir.code.Position;
+import com.android.tools.r8.ir.code.Position.OutlineCallerPosition;
+import com.android.tools.r8.ir.code.Position.OutlineCallerPosition.OutlineCallerPositionBuilder;
+import com.android.tools.r8.ir.code.Position.OutlinePosition;
+import com.android.tools.r8.ir.code.Position.PositionBuilder;
+import com.android.tools.r8.ir.code.Position.SourcePosition;
+import com.android.tools.r8.utils.Int2StructuralItemArrayMap;
 import com.android.tools.r8.utils.StringUtils;
 import com.google.common.collect.ImmutableMap;
 import java.util.Map;
 import java.util.SortedSet;
 import java.util.TreeSet;
+import java.util.function.Function;
 
 public class DexDebugEntry {
 
@@ -21,6 +28,9 @@
   public final Map<Integer, DebugLocalInfo> locals;
   public final DexMethod method;
   public final Position callerPosition;
+  public final boolean isOutline;
+  public final DexMethod outlineCallee;
+  public final Int2StructuralItemArrayMap<Position> outlineCallerPositions;
 
   public DexDebugEntry(
       boolean lineEntry,
@@ -31,7 +41,10 @@
       boolean epilogueBegin,
       ImmutableMap<Integer, DebugLocalInfo> locals,
       DexMethod method,
-      Position callerPosition) {
+      Position callerPosition,
+      boolean isOutline,
+      DexMethod outlineCallee,
+      Int2StructuralItemArrayMap<Position> outlineCallerPositions) {
     this.lineEntry = lineEntry;
     this.address = address;
     this.line = line;
@@ -42,6 +55,9 @@
     this.method = method;
     assert method != null;
     this.callerPosition = callerPosition;
+    this.isOutline = isOutline;
+    this.outlineCallee = outlineCallee;
+    this.outlineCallerPositions = outlineCallerPositions;
   }
 
   @Override
@@ -67,6 +83,15 @@
         caller = caller.getCallerPosition();
       }
     }
+    if (isOutline) {
+      builder.append(", isOutline = true");
+    }
+    if (outlineCallee != null) {
+      builder.append(", outlineCallee = ").append(outlineCallee);
+    }
+    if (outlineCallerPositions != null) {
+      builder.append(", outlineCallerPositions = ").append(outlineCallerPositions);
+    }
     if (prologueEnd) {
       builder.append(", prologue_end = true");
     }
@@ -89,4 +114,23 @@
     }
     return builder.toString();
   }
+
+  public Position toPosition(Function<Position, Position> canonicalizeCallerPosition) {
+    PositionBuilder<?, ?> positionBuilder;
+    if (outlineCallee != null) {
+      OutlineCallerPositionBuilder outlineCallerPositionBuilder =
+          OutlineCallerPosition.builder().setOutlineCallee(outlineCallee).setIsOutline(isOutline);
+      outlineCallerPositions.forEach(outlineCallerPositionBuilder::addOutlinePosition);
+      positionBuilder = outlineCallerPositionBuilder;
+    } else if (isOutline) {
+      positionBuilder = OutlinePosition.builder();
+    } else {
+      positionBuilder = SourcePosition.builder().setFile(sourceFile);
+    }
+    return positionBuilder
+        .setLine(line)
+        .setMethod(method)
+        .setCallerPosition(canonicalizeCallerPosition.apply(callerPosition))
+        .build();
+  }
 }
diff --git a/src/main/java/com/android/tools/r8/graph/DexDebugEntryBuilder.java b/src/main/java/com/android/tools/r8/graph/DexDebugEntryBuilder.java
index 2a67e34..5a4fd84 100644
--- a/src/main/java/com/android/tools/r8/graph/DexDebugEntryBuilder.java
+++ b/src/main/java/com/android/tools/r8/graph/DexDebugEntryBuilder.java
@@ -170,7 +170,10 @@
               pending.epilogueBegin,
               getLocals(),
               pending.method,
-              pending.callerPosition));
+              pending.callerPosition,
+              pending.isOutline,
+              pending.outlineCallee,
+              pending.outlineCallerPositions));
     }
     pending =
         new DexDebugEntry(
@@ -182,7 +185,10 @@
             epilogueBegin,
             null,
             positionState.getCurrentMethod(),
-            positionState.getCurrentCallerPosition());
+            positionState.getCurrentCallerPosition(),
+            positionState.isOutline(),
+            positionState.getOutlineCallee(),
+            positionState.getOutlineCallerPositions());
     prologueEnd = false;
     epilogueBegin = false;
   }
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/DexSourceCode.java b/src/main/java/com/android/tools/r8/ir/conversion/DexSourceCode.java
index 6dec27c..a8d0ccd 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/DexSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/DexSourceCode.java
@@ -44,7 +44,6 @@
 import com.android.tools.r8.ir.code.CanonicalPositions;
 import com.android.tools.r8.ir.code.CatchHandlers;
 import com.android.tools.r8.ir.code.Position;
-import com.android.tools.r8.ir.code.Position.SourcePosition;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -262,14 +261,8 @@
     // If this instruction has already been inlined then this.method must be the outermost caller.
     assert entry.callerPosition == null
         || entry.callerPosition.getOutermostCaller().getMethod() == originalMethod;
-
     return canonicalPositions.getCanonical(
-        SourcePosition.builder()
-            .setLine(entry.line)
-            .setFile(entry.sourceFile)
-            .setMethod(entry.method)
-            .setCallerPosition(canonicalPositions.canonicalizeCallerPosition(entry.callerPosition))
-            .build());
+        entry.toPosition(canonicalPositions::canonicalizeCallerPosition));
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/utils/LineNumberOptimizer.java b/src/main/java/com/android/tools/r8/utils/LineNumberOptimizer.java
index a85ff88..78f612a 100644
--- a/src/main/java/com/android/tools/r8/utils/LineNumberOptimizer.java
+++ b/src/main/java/com/android/tools/r8/utils/LineNumberOptimizer.java
@@ -1120,7 +1120,7 @@
     } else if (state.isOutline()) {
       positionBuilder = OutlinePosition.builder();
     } else {
-      positionBuilder = SourcePosition.builder();
+      positionBuilder = SourcePosition.builder().setFile(state.getCurrentFile());
     }
     return positionBuilder
         .setLine(state.getCurrentLine())
