diff --git a/angr/analyses/girlscout.py b/angr/analyses/girlscout.py
index <HASH>..<HASH> 100644
--- a/angr/analyses/girlscout.py
+++ b/angr/analyses/girlscout.py
@@ -796,4 +796,22 @@ class GirlScout(Analysis):
 
         return ret
 
-from ..blade import Blade
\ No newline at end of file
+    def gen_callmap_sif(self, filepath):
+        '''
+        Generate a sif file
+        :return:
+        '''
+        graph = self.call_map
+
+        if graph is None:
+            raise AngrGirlScoutError('Please generate the call graph first.')
+
+        f = open(filepath, "wb")
+
+        for src, dst in graph.edges():
+            f.write("0x%x\tDirectEdge\t0x%x\n" % (src, dst))
+
+        f.close()
+
+from ..blade import Blade
+from ..errors import AngrGirlScoutError
\ No newline at end of file
diff --git a/angr/errors.py b/angr/errors.py
index <HASH>..<HASH> 100644
--- a/angr/errors.py
+++ b/angr/errors.py
@@ -38,4 +38,7 @@ class AngrCFGError(AngrError):
     pass
 
 class AngrBackwardSlicingError(AngrError):
+    pass
+
+class AngrGirlScoutError(AngrError):
     pass
\ No newline at end of file
Support generating a sif file of the callmap