diff --git a/lib/Bitcode/Reader/BitcodeReader.cpp b/lib/Bitcode/Reader/BitcodeReader.cpp
index 8223f76..2355198 100644
--- a/lib/Bitcode/Reader/BitcodeReader.cpp
+++ b/lib/Bitcode/Reader/BitcodeReader.cpp
@@ -714,7 +714,8 @@
 
     // Read a record.
     Record.clear();
-    switch (Stream.ReadRecord(Code, Record)) {
+    unsigned VSTCode = Stream.ReadRecord(Code, Record);
+    switch (VSTCode) {
     default:  // Default behavior: unknown type.
       break;
     case bitc::VST_CODE_ENTRY: {  // VST_ENTRY: [valueid, namechar x N]
@@ -729,13 +730,17 @@
       ValueName.clear();
       break;
     }
-    case bitc::VST_CODE_BBENTRY: {
+    case bitc::VST_CODE_BBENTRY:
+    case bitc::VST_CODE_LPADENTRY: {
       if (ConvertToString(Record, 1, ValueName))
         return Error("Invalid VST_BBENTRY record");
       BasicBlock *BB = getBasicBlock(Record[0]);
       if (BB == 0)
         return Error("Invalid BB ID in VST_BBENTRY record");
 
+      if (VSTCode == bitc::VST_CODE_LPADENTRY)
+        BB->setIsLandingPad(true);
+
       BB->setName(StringRef(ValueName.data(), ValueName.size()));
       ValueName.clear();
       break;
diff --git a/lib/Bitcode/Writer/BitcodeWriter.cpp b/lib/Bitcode/Writer/BitcodeWriter.cpp
index e34137f..51c13bd 100644
--- a/lib/Bitcode/Writer/BitcodeWriter.cpp
+++ b/lib/Bitcode/Writer/BitcodeWriter.cpp
@@ -40,6 +40,7 @@
   VST_ENTRY_7_ABBREV,
   VST_ENTRY_6_ABBREV,
   VST_BBENTRY_6_ABBREV,
+  VST_LPADENTRY_6_ABBREV,
 
   // CONSTANTS_BLOCK abbrev id's.
   CONSTANTS_SETTYPE_ABBREV = bitc::FIRST_APPLICATION_ABBREV,
@@ -1179,13 +1180,20 @@
 
     unsigned AbbrevToUse = VST_ENTRY_8_ABBREV;
 
-    // VST_ENTRY:   [valueid, namechar x N]
-    // VST_BBENTRY: [bbid, namechar x N]
+    // VST_ENTRY:     [valueid, namechar x N]
+    // VST_BBENTRY:   [bbid, namechar x N]
+    // VST_LPADENTRY: [lpadid, namechar x N]
     unsigned Code;
-    if (isa<BasicBlock>(SI->getValue())) {
-      Code = bitc::VST_CODE_BBENTRY;
-      if (isChar6)
-        AbbrevToUse = VST_BBENTRY_6_ABBREV;
+    if (const BasicBlock *BB = dyn_cast<BasicBlock>(SI->getValue())) {
+      if (BB->isLandingPad()) {
+        Code = bitc::VST_CODE_LPADENTRY;
+        if (isChar6)
+          AbbrevToUse = VST_LPADENTRY_6_ABBREV;
+      } else {
+        Code = bitc::VST_CODE_BBENTRY;
+        if (isChar6)
+          AbbrevToUse = VST_BBENTRY_6_ABBREV;
+      }
     } else {
       Code = bitc::VST_CODE_ENTRY;
       if (isChar6)
@@ -1366,8 +1374,16 @@
                                    Abbv) != VST_BBENTRY_6_ABBREV)
       llvm_unreachable("Unexpected abbrev ordering!");
   }
-
-
+  { // 6-bit char6 VST_LPADENTRY strings.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::VST_CODE_LPADENTRY));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Char6));
+    if (Stream.EmitBlockInfoAbbrev(bitc::VALUE_SYMTAB_BLOCK_ID,
+                                   Abbv) != VST_LPADENTRY_6_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
 
   { // SETTYPE abbrev for CONSTANTS_BLOCK.
     BitCodeAbbrev *Abbv = new BitCodeAbbrev();
