R2RDump - Gracefully handle inability to parse GC Info
authorSimon Nattress <nattress@gmail.com>
Thu, 21 Feb 2019 21:37:50 +0000 (13:37 -0800)
committerSimon Nattress <nattress@gmail.com>
Fri, 22 Feb 2019 20:27:10 +0000 (12:27 -0800)
The Amd64 GC Info parser is not complete in its implementation and
sometimes will index to a location beyond the size of the image.

If we fail to parse the GC info for a method, continue dumping the rest
of the image.

Emit a warning when this happens so we don't forget about this.

Commit migrated from https://github.com/dotnet/coreclr/commit/b43650c6b60b47c5823c9bf1806fab0a5ca3f7c1

src/coreclr/src/tools/r2rdump/R2RReader.cs

index b74e9b2..3e38adc 100644 (file)
@@ -456,7 +456,15 @@ namespace R2RDump
                         unwindInfo = new Amd64.UnwindInfo(Image, unwindOffset);
                         if (isEntryPoint[runtimeFunctionId])
                         {
-                            gcInfo = new Amd64.GcInfo(Image, unwindOffset + unwindInfo.Size, Machine, R2RHeader.MajorVersion);
+                            try
+                            {
+                                gcInfo = new Amd64.GcInfo(Image, unwindOffset + unwindInfo.Size, Machine, R2RHeader.MajorVersion);
+                            }
+                            catch (IndexOutOfRangeException)
+                            {
+                                Console.WriteLine($"Warning: Could not parse GC Info for method: {method.SignatureString}");
+                            }
+                            
                         }
                     }
                     else if (Machine == Machine.I386)