diff --git a/lib/ExecutionEngine/MCCacheReader.cpp b/lib/ExecutionEngine/MCCacheReader.cpp
index 692cac3..35a006a 100644
--- a/lib/ExecutionEngine/MCCacheReader.cpp
+++ b/lib/ExecutionEngine/MCCacheReader.cpp
@@ -51,7 +51,9 @@
   if (mpFuncTable) { free(mpFuncTable); }
 }
 
-ScriptCached *MCCacheReader::readCacheFile(FileHandle *objFile, FileHandle *infoFile, Script *S) {
+ScriptCached *MCCacheReader::readCacheFile(FileHandle *objFile,
+                                           FileHandle *infoFile,
+                                           Script *S) {
   // Check file handle
   if (!objFile || objFile->getFD() < 0 || !infoFile || infoFile->getFD() < 0) {
     return false;
@@ -379,7 +381,8 @@
   }
 
   if (self->mpSymbolLookupFn) {
-    if (void *Addr = self->mpSymbolLookupFn(self->mpSymbolLookupContext, name)) {
+    if (void *Addr =
+        self->mpSymbolLookupFn(self->mpSymbolLookupContext, name)) {
       return Addr;
     }
   }
@@ -435,15 +438,18 @@
                     reinterpret_cast<char *>(mpHeader->root_base_addr);
   for (size_t i = 0; i < mpResult->getExportVarCount(); ++i) {
     mpResult->mpExportVars->cached_addr_list[i] =
-    reinterpret_cast<void *>(reinterpret_cast<char *>(mpResult->mpExportVars->cached_addr_list[i]) + mRootOffset);
+    reinterpret_cast<void *>(
+        reinterpret_cast<char *>(mpResult->mpExportVars->cached_addr_list[i])
+        + mRootOffset);
   }
   for (size_t i = 0; i < mpResult->getExportFuncCount(); ++i) {
     mpResult->mpExportFuncs->cached_addr_list[i] =
-    reinterpret_cast<void *>(reinterpret_cast<char *>(mpResult->mpExportFuncs->cached_addr_list[i]) + mRootOffset);
+    reinterpret_cast<void *>(
+        reinterpret_cast<char *>(mpResult->mpExportFuncs->cached_addr_list[i])
+        + mRootOffset);
   }
   return true;
 }
 
-
 } // namespace bcc
 #endif
diff --git a/lib/ExecutionEngine/MCCacheWriter.cpp b/lib/ExecutionEngine/MCCacheWriter.cpp
index 7642572..dc42cf0 100644
--- a/lib/ExecutionEngine/MCCacheWriter.cpp
+++ b/lib/ExecutionEngine/MCCacheWriter.cpp
@@ -356,12 +356,12 @@
 bool MCCacheWriter::writeAll() {
 #define WRITE_SECTION(NAME, OFFSET, SIZE, SECTION)                          \
   do {                                                                      \
-    if (mInfoFile->seek(OFFSET, SEEK_SET) == -1) {                              \
+    if (mInfoFile->seek(OFFSET, SEEK_SET) == -1) {                          \
       LOGE("Unable to seek to " #NAME " section for writing.\n");           \
       return false;                                                         \
     }                                                                       \
                                                                             \
-    if (mInfoFile->write(reinterpret_cast<char *>(SECTION), (SIZE)) !=          \
+    if (mInfoFile->write(reinterpret_cast<char *>(SECTION), (SIZE)) !=      \
         static_cast<ssize_t>(SIZE)) {                                       \
       LOGE("Unable to write " #NAME " section to cache file.\n");           \
       return false;                                                         \
@@ -386,8 +386,9 @@
 
 #undef WRITE_SECTION_SIMPLE
 #undef WRITE_SECTION
-  
-  if (static_cast<size_t>(mObjFile->write(mpOwner->getELF(), mpOwner->getELFSize()))
+
+  if (static_cast<size_t>(mObjFile->write(mpOwner->getELF(),
+                                          mpOwner->getELFSize()))
       != mpOwner->getELFSize()) {
       LOGE("Unable to write ELF to cache file.\n");
       return false;
@@ -396,6 +397,5 @@
   return true;
 }
 
-
 } // namespace bcc
 #endif
