[lld] r290239 - [ELF] - Do not call fatal() in Target.cpp, call error() instead.

George Rimar via llvm-commits llvm-commits at lists.llvm.org
Wed Dec 21 00:21:34 PST 2016


Author: grimar
Date: Wed Dec 21 02:21:34 2016
New Revision: 290239

URL: http://llvm.org/viewvc/llvm-project?rev=290239&view=rev
Log:
[ELF] - Do not call fatal() in Target.cpp, call error() instead.

We probably would want to avoid fatal() if we can in context of librarification,
but for me reason of that patch is to help D27900 go.

D27900 changes errors reporting to something like
error: text1
note: text2
note: text3

where hint used to provide additional information about location. In that case
I can't just call fatal() because user will not see notes after that what adds additional complication to handle.
So It is good to switch fatal() to error() where it is possible.

Also it adds testcase with broken relocation number. 
Previously we did not have any, It checks that error() instead of fatal() works fine.

Differential revision: https://reviews.llvm.org/D27973

Added:
    lld/trunk/test/ELF/invalid/Inputs/invalid-relocation-x64.elf   (with props)
    lld/trunk/test/ELF/invalid/invalid-relocation-x64.s
Modified:
    lld/trunk/ELF/Target.cpp

Modified: lld/trunk/ELF/Target.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Target.cpp?rev=290239&r1=290238&r2=290239&view=diff
==============================================================================
--- lld/trunk/ELF/Target.cpp (original)
+++ lld/trunk/ELF/Target.cpp Wed Dec 21 02:21:34 2016
@@ -870,7 +870,7 @@ void X86_64TargetInfo<ELFT>::relocateOne
     write64le(Loc, Val);
     break;
   default:
-    fatal(getErrorLocation(Loc) + "unrecognized reloc " + Twine(Type));
+    error(getErrorLocation(Loc) + "unrecognized reloc " + Twine(Type));
   }
 }
 
@@ -1039,7 +1039,7 @@ void PPCTargetInfo::relocateOne(uint8_t
     or32be(Loc, Val & 0x3FFFFFC);
     break;
   default:
-    fatal(getErrorLocation(Loc) + "unrecognized reloc " + Twine(Type));
+    error(getErrorLocation(Loc) + "unrecognized reloc " + Twine(Type));
   }
 }
 
@@ -1217,7 +1217,7 @@ void PPC64TargetInfo::relocateOne(uint8_
     break;
   }
   default:
-    fatal(getErrorLocation(Loc) + "unrecognized reloc " + Twine(Type));
+    error(getErrorLocation(Loc) + "unrecognized reloc " + Twine(Type));
   }
 }
 
@@ -1468,7 +1468,7 @@ void AArch64TargetInfo::relocateOne(uint
     or32AArch64Imm(Loc, Val);
     break;
   default:
-    fatal(getErrorLocation(Loc) + "unrecognized reloc " + Twine(Type));
+    error(getErrorLocation(Loc) + "unrecognized reloc " + Twine(Type));
   }
 }
 
@@ -1578,7 +1578,7 @@ void AMDGPUTargetInfo::relocateOne(uint8
     write32le(Loc, Val >> 32);
     break;
   default:
-    fatal(getErrorLocation(Loc) + "unrecognized reloc " + Twine(Type));
+    error(getErrorLocation(Loc) + "unrecognized reloc " + Twine(Type));
   }
 }
 
@@ -1888,7 +1888,7 @@ void ARMTargetInfo::relocateOne(uint8_t
                   (Val & 0x00ff));           // imm8
     break;
   default:
-    fatal(getErrorLocation(Loc) + "unrecognized reloc " + Twine(Type));
+    error(getErrorLocation(Loc) + "unrecognized reloc " + Twine(Type));
   }
 }
 
@@ -2336,7 +2336,7 @@ void MipsTargetInfo<ELFT>::relocateOne(u
     applyMipsPcReloc<E, 32, 0>(Loc, Type, Val);
     break;
   default:
-    fatal(getErrorLocation(Loc) + "unrecognized reloc " + Twine(Type));
+    error(getErrorLocation(Loc) + "unrecognized reloc " + Twine(Type));
   }
 }
 

Added: lld/trunk/test/ELF/invalid/Inputs/invalid-relocation-x64.elf
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/invalid/Inputs/invalid-relocation-x64.elf?rev=290239&view=auto
==============================================================================
Binary file - no diff available.

Propchange: lld/trunk/test/ELF/invalid/Inputs/invalid-relocation-x64.elf
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: lld/trunk/test/ELF/invalid/invalid-relocation-x64.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/invalid/invalid-relocation-x64.s?rev=290239&view=auto
==============================================================================
--- lld/trunk/test/ELF/invalid/invalid-relocation-x64.s (added)
+++ lld/trunk/test/ELF/invalid/invalid-relocation-x64.s Wed Dec 21 02:21:34 2016
@@ -0,0 +1,31 @@
+## invalid-relocation-x64.elf contains relocations with invalid relocation number.
+## Next yaml code was used to create initial binary. After that it
+## was modified with hex-editor to replace known relocations with fake ones,
+## that have 0x98 and 0x98 numbers.
+!ELF
+FileHeader:
+  Class:           ELFCLASS64
+  Data:            ELFDATA2LSB
+  OSABI:           ELFOSABI_FREEBSD
+  Type:            ET_REL
+  Machine:         EM_X86_64
+Sections:
+  - Name:            .text
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_ALLOC ]
+  - Name:            .rela.text
+    Type:            SHT_RELA
+    Link:            .symtab
+    Info:            .text
+    Relocations:
+      - Offset:          0x0000000000000000
+        Symbol:          ''
+        Type:            R_X86_64_NONE
+      - Offset:          0x0000000000000000
+        Symbol:          ''
+        Type:            R_X86_64_NONE
+
+		
+# RUN: not ld.lld %p/Inputs/invalid-relocation-x64.elf -o %t2 2>&1 | FileCheck %s
+# CHECK: unrecognized reloc 152
+# CHECK: unrecognized reloc 153




More information about the llvm-commits mailing list