diff --git a/lib/Target/TargetAsmInfo.cpp b/lib/Target/TargetAsmInfo.cpp
index e71bd01..4c6100b 100644
--- a/lib/Target/TargetAsmInfo.cpp
+++ b/lib/Target/TargetAsmInfo.cpp
@@ -148,8 +148,7 @@
   return Length;
 }
 
-unsigned TargetAsmInfo::PreferredEHDataFormat(DwarfEncoding::Target Reason,
-                                              bool Global) const {
+unsigned TargetAsmInfo::PreferredEHDataFormat() const {
   return dwarf::DW_EH_PE_absptr;
 }
 
diff --git a/lib/Target/X86/X86TargetAsmInfo.cpp b/lib/Target/X86/X86TargetAsmInfo.cpp
index 3223f3c..09adc43 100644
--- a/lib/Target/X86/X86TargetAsmInfo.cpp
+++ b/lib/Target/X86/X86TargetAsmInfo.cpp
@@ -91,19 +91,10 @@
   DwarfExceptionSection = ".section __DATA,__gcc_except_tab";
 }
 
-unsigned
-X86DarwinTargetAsmInfo::PreferredEHDataFormat(DwarfEncoding::Target Reason,
-                                              bool Global) const {
+unsigned X86DarwinTargetAsmInfo::PreferredEHDataFormat() const {
   const X86Subtarget *Subtarget = &TM.getSubtarget<X86Subtarget>();
-
-  if (Subtarget->getDarwinVers() > 9) {
-    if ((Reason == DwarfEncoding::Data || Reason == DwarfEncoding::Functions)
-        && Global)
-      return DW_EH_PE_pcrel | DW_EH_PE_indirect | DW_EH_PE_sdata4;
-
-    if (Reason == DwarfEncoding::CodeLabels || !Global)
-      return DW_EH_PE_pcrel;
-  }
+  if (Subtarget->getDarwinVers() > 9)
+    return DW_EH_PE_pcrel | DW_EH_PE_indirect | DW_EH_PE_sdata4;
 
   return DW_EH_PE_absptr;
 }
@@ -155,8 +146,7 @@
 }
 
 unsigned
-X86ELFTargetAsmInfo::PreferredEHDataFormat(DwarfEncoding::Target Reason,
-                                           bool Global) const {
+X86ELFTargetAsmInfo::PreferredEHDataFormat() const {
   CodeModel::Model CM = TM.getCodeModel();
   bool is64Bit = TM.getSubtarget<X86Subtarget>().is64Bit();
 
@@ -171,32 +161,24 @@
       // - code model is small OR
       // - code model is medium and we're emitting externally visible symbols
       //   or any code symbols
-      if (CM == CodeModel::Small ||
-          (CM == CodeModel::Medium && (Global ||
-                                       Reason != DwarfEncoding::Data)))
+      if (CM == CodeModel::Small || CM == CodeModel::Medium)
         Format = DW_EH_PE_sdata4;
       else
         Format = DW_EH_PE_sdata8;
     }
 
-    if (Global)
-      Format |= DW_EH_PE_indirect;
-
+    Format |= DW_EH_PE_indirect;
     return (Format | DW_EH_PE_pcrel);
-  } else {
-    if (is64Bit &&
-        (CM == CodeModel::Small ||
-         (CM == CodeModel::Medium && Reason != DwarfEncoding::Data)))
-      return DW_EH_PE_udata4;
-    else
-      return DW_EH_PE_absptr;
   }
+  
+  if (is64Bit && CM == CodeModel::Small)
+    return DW_EH_PE_udata4;
+  return DW_EH_PE_absptr;
 }
 
 
 unsigned
-X86COFFTargetAsmInfo::PreferredEHDataFormat(DwarfEncoding::Target Reason,
-                                            bool Global) const {
+X86COFFTargetAsmInfo::PreferredEHDataFormat() const {
   CodeModel::Model CM = TM.getCodeModel();
   bool is64Bit = TM.getSubtarget<X86Subtarget>().is64Bit();
 
@@ -211,23 +193,17 @@
       // - code model is small OR
       // - code model is medium and we're emitting externally visible symbols
       //   or any code symbols
-      if (CM == CodeModel::Small ||
-          (CM == CodeModel::Medium && (Global ||
-                                       Reason != DwarfEncoding::Data)))
+      if (CM == CodeModel::Small || CM == CodeModel::Medium)
         Format = DW_EH_PE_sdata4;
       else
         Format = DW_EH_PE_sdata8;
     }
 
-    if (Global)
-      Format |= DW_EH_PE_indirect;
-
+    Format |= DW_EH_PE_indirect;
     return (Format | DW_EH_PE_pcrel);
   }
   
-  if (is64Bit &&
-      (CM == CodeModel::Small ||
-       (CM == CodeModel::Medium && Reason != DwarfEncoding::Data)))
+  if (is64Bit && CM == CodeModel::Small)
     return DW_EH_PE_udata4;
   return DW_EH_PE_absptr;
 }
diff --git a/lib/Target/X86/X86TargetAsmInfo.h b/lib/Target/X86/X86TargetAsmInfo.h
index 9b4e809..3cc0271 100644
--- a/lib/Target/X86/X86TargetAsmInfo.h
+++ b/lib/Target/X86/X86TargetAsmInfo.h
@@ -37,22 +37,19 @@
 
   struct X86DarwinTargetAsmInfo : public X86TargetAsmInfo<DarwinTargetAsmInfo> {
     explicit X86DarwinTargetAsmInfo(const X86TargetMachine &TM);
-    virtual unsigned PreferredEHDataFormat(DwarfEncoding::Target Reason,
-                                           bool Global) const;
+    virtual unsigned PreferredEHDataFormat() const;
     virtual const char *getEHGlobalPrefix() const;
   };
 
   struct X86ELFTargetAsmInfo : public X86TargetAsmInfo<ELFTargetAsmInfo> {
     explicit X86ELFTargetAsmInfo(const X86TargetMachine &TM);
-    virtual unsigned PreferredEHDataFormat(DwarfEncoding::Target Reason,
-                                           bool Global) const;
+    virtual unsigned PreferredEHDataFormat() const;
   };
 
   struct X86COFFTargetAsmInfo : public X86TargetAsmInfo<COFFTargetAsmInfo> {
     explicit X86COFFTargetAsmInfo(const X86TargetMachine &TM) :
       X86TargetAsmInfo<COFFTargetAsmInfo>(TM) {}
-    virtual unsigned PreferredEHDataFormat(DwarfEncoding::Target Reason,
-                                           bool Global) const;
+    virtual unsigned PreferredEHDataFormat() const;
   };
   
 
