[llvm] r361450 - [llvm-objcopy] Add file names to error messages
Seiya Nuta via llvm-commits
llvm-commits at lists.llvm.org
Wed May 22 17:42:46 PDT 2019
Author: seiya
Date: Wed May 22 17:42:46 2019
New Revision: 361450
URL: http://llvm.org/viewvc/llvm-project?rev=361450&view=rev
Log:
[llvm-objcopy] Add file names to error messages
Summary:
This patch adds the file names to llvm-objcopy error messages. It makes easy to identify which file causes an error.
Bugzilla: https://bugs.llvm.org/show_bug.cgi?id=41798
Reviewers: espindola, alexshap, rupprecht, jhenderson, jakehehrlich
Reviewed By: rupprecht, jhenderson, jakehehrlich
Subscribers: emaste, arichardson, jakehehrlich, MaskRay, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D61993
Modified:
llvm/trunk/test/tools/llvm-objcopy/ELF/dump-section.test
llvm/trunk/test/tools/llvm-objcopy/ELF/dynrelocsec-remove-shlink-reference.test
llvm/trunk/test/tools/llvm-objcopy/ELF/dynsym-error-remove-strtab.test
llvm/trunk/test/tools/llvm-objcopy/ELF/no-build-id.test
llvm/trunk/test/tools/llvm-objcopy/ELF/reloc-error-remove-symtab.test
llvm/trunk/test/tools/llvm-objcopy/ELF/remove-linked-section.test
llvm/trunk/test/tools/llvm-objcopy/ELF/remove-shstrtab-error.test
llvm/trunk/test/tools/llvm-objcopy/ELF/strip-section-err.test
llvm/trunk/test/tools/llvm-objcopy/ELF/strip-symbol-and-relocation.test
llvm/trunk/test/tools/llvm-objcopy/ELF/symtab-error-on-remove-strtab.test
llvm/trunk/tools/llvm-objcopy/ELF/ELFObjcopy.cpp
Modified: llvm/trunk/test/tools/llvm-objcopy/ELF/dump-section.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objcopy/ELF/dump-section.test?rev=361450&r1=361449&r2=361450&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-objcopy/ELF/dump-section.test (original)
+++ llvm/trunk/test/tools/llvm-objcopy/ELF/dump-section.test Wed May 22 17:42:46 2019
@@ -3,7 +3,7 @@
# RUN: llvm-objcopy -O binary --only-section .text %t %t3
# RUN: llvm-objcopy --dump-section .text=%t4 %t %t5
# RUN: llvm-objcopy --dump-section .foo=%t6 %t %t7
-# RUN: not llvm-objcopy --dump-section .bar=%t8 %t %t9 2>&1 | FileCheck %s --check-prefix=NOBITS
+# RUN: not llvm-objcopy --dump-section .bar=%t8 %t %t9 2>&1 | FileCheck %s --check-prefix=NOBITS -DINPUT=%t
# RUN: od -t x1 %t2 | FileCheck %s
# RUN: od -t x1 %t6 | FileCheck %s --check-prefix=NON-ALLOC
# RUN: wc -c %t2 | FileCheck %s --check-prefix=SIZE
@@ -41,4 +41,4 @@ ProgramHeaders:
#SIZE: 4
-#NOBITS: cannot dump section '.bar': it has no contents
+#NOBITS: error: '[[INPUT]]': cannot dump section '.bar': it has no contents
Modified: llvm/trunk/test/tools/llvm-objcopy/ELF/dynrelocsec-remove-shlink-reference.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objcopy/ELF/dynrelocsec-remove-shlink-reference.test?rev=361450&r1=361449&r2=361450&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-objcopy/ELF/dynrelocsec-remove-shlink-reference.test (original)
+++ llvm/trunk/test/tools/llvm-objcopy/ELF/dynrelocsec-remove-shlink-reference.test Wed May 22 17:42:46 2019
@@ -2,8 +2,8 @@
## Check we cannot remove the .dynsym symbol table because dynamic
## relocation section .rela.dyn still references it via sh_link field.
-# RUN: not llvm-objcopy -R .dynsym %t %t2 2>&1 >/dev/null | FileCheck %s --check-prefix=ERR
-# ERR: error: symbol table '.dynsym' cannot be removed because it is referenced by the relocation section '.rela.dyn'
+# RUN: not llvm-objcopy -R .dynsym %t %t2 2>&1 >/dev/null | FileCheck %s --check-prefix=ERR -DINPUT=%t
+# ERR: error: '[[INPUT]]': symbol table '.dynsym' cannot be removed because it is referenced by the relocation section '.rela.dyn'
## Check we can remove .dynsym after removing the reference.
# RUN: llvm-objcopy -R .dynsym -R .rela.dyn %t %t2
Modified: llvm/trunk/test/tools/llvm-objcopy/ELF/dynsym-error-remove-strtab.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objcopy/ELF/dynsym-error-remove-strtab.test?rev=361450&r1=361449&r2=361450&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-objcopy/ELF/dynsym-error-remove-strtab.test (original)
+++ llvm/trunk/test/tools/llvm-objcopy/ELF/dynsym-error-remove-strtab.test Wed May 22 17:42:46 2019
@@ -1,8 +1,9 @@
-# RUN: not llvm-objcopy -R .dynstr %p/Inputs/dynsym.so %t 2>&1 >/dev/null | FileCheck %s --check-prefix=ERR
+# RUN: not llvm-objcopy -R .dynstr %p/Inputs/dynsym.so %t 2>&1 >/dev/null | FileCheck %s --check-prefix=ERR1 -DINPUT=%p/Inputs/dynsym.so
# RUN: cp %p/Inputs/dynsym.so %t2
-# RUN: not llvm-strip --no-strip-all -R .dynstr %t2 2>&1 >/dev/null | FileCheck %s --check-prefix=ERR
+# RUN: not llvm-strip --no-strip-all -R .dynstr %t2 2>&1 >/dev/null | FileCheck %s --check-prefix=ERR2 -DINPUT=%t2
-# ERR: section '.dynstr' cannot be removed because it is referenced by the section '.dynsym'
+# ERR1: error: '[[INPUT]]': section '.dynstr' cannot be removed because it is referenced by the section '.dynsym'
+# ERR2: error: '[[INPUT]]': section '.dynstr' cannot be removed because it is referenced by the section '.dynsym'
# RUN: llvm-objcopy --allow-broken-links -R .dynstr %p/Inputs/dynsym.so %t3
# RUN: llvm-objdump --section-headers %t3 | FileCheck %s --check-prefix=SECTIONS --implicit-check-not=.dynstr
Modified: llvm/trunk/test/tools/llvm-objcopy/ELF/no-build-id.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objcopy/ELF/no-build-id.test?rev=361450&r1=361449&r2=361450&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-objcopy/ELF/no-build-id.test (original)
+++ llvm/trunk/test/tools/llvm-objcopy/ELF/no-build-id.test Wed May 22 17:42:46 2019
@@ -1,7 +1,7 @@
# RUN: yaml2obj %s > %t
-# RUN: not llvm-objcopy --build-id-link-dir=%t-dir --build-id-link-input=.debug %t 2>&1 >/dev/null | FileCheck %s
+# RUN: not llvm-objcopy --build-id-link-dir=%t-dir --build-id-link-input=.debug %t 2>&1 >/dev/null | FileCheck %s -DINPUT=%t
-# CHECK: could not find build ID
+# CHECK: error: '[[INPUT]]': could not find build ID
--- !ELF
FileHeader:
Modified: llvm/trunk/test/tools/llvm-objcopy/ELF/reloc-error-remove-symtab.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objcopy/ELF/reloc-error-remove-symtab.test?rev=361450&r1=361449&r2=361450&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-objcopy/ELF/reloc-error-remove-symtab.test (original)
+++ llvm/trunk/test/tools/llvm-objcopy/ELF/reloc-error-remove-symtab.test Wed May 22 17:42:46 2019
@@ -1,7 +1,7 @@
# RUN: yaml2obj %s > %t
-# RUN: not llvm-objcopy -R .symtab %t %t2 2>&1 >/dev/null | FileCheck %s --check-prefix=ERR
+# RUN: not llvm-objcopy -R .symtab %t %t2 2>&1 >/dev/null | FileCheck %s --check-prefix=ERR1 -DINPUT=%t
# RUN: cp %t %t3
-# RUN: not llvm-strip --no-strip-all -R .symtab %t3 2>&1 >/dev/null | FileCheck %s --check-prefix=ERR
+# RUN: not llvm-strip --no-strip-all -R .symtab %t3 2>&1 >/dev/null | FileCheck %s --check-prefix=ERR2 -DINPUT=%t3
!ELF
FileHeader:
@@ -31,7 +31,8 @@ Symbols:
Size: 4
Binding: STB_GLOBAL
-# ERR: symbol table '.symtab' cannot be removed because it is referenced by the relocation section '.rel.text'
+# ERR1: error: '[[INPUT]]': symbol table '.symtab' cannot be removed because it is referenced by the relocation section '.rel.text'
+# ERR2: error: '[[INPUT]]': symbol table '.symtab' cannot be removed because it is referenced by the relocation section '.rel.text'
# RUN: llvm-objcopy --allow-broken-links -R .symtab %t %t4
# RUN: llvm-readobj --sections %t4 | FileCheck %s --check-prefix=SECTIONS --implicit-check-not=.symtab
Modified: llvm/trunk/test/tools/llvm-objcopy/ELF/remove-linked-section.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objcopy/ELF/remove-linked-section.test?rev=361450&r1=361449&r2=361450&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-objcopy/ELF/remove-linked-section.test (original)
+++ llvm/trunk/test/tools/llvm-objcopy/ELF/remove-linked-section.test Wed May 22 17:42:46 2019
@@ -1,7 +1,7 @@
# RUN: yaml2obj %s -o %t.o
-# RUN: not llvm-objcopy -R .foo %t.o %t1 2>&1 >/dev/null | FileCheck %s --check-prefix=ERR
+# RUN: not llvm-objcopy -R .foo %t.o %t1 2>&1 >/dev/null | FileCheck %s --check-prefix=ERR1 -DINPUT=%t.o
# RUN: cp %t.o %t2
-# RUN: not llvm-strip --no-strip-all -R .foo %t2 2>&1 >/dev/null | FileCheck %s --check-prefix=ERR
+# RUN: not llvm-strip --no-strip-all -R .foo %t2 2>&1 >/dev/null | FileCheck %s --check-prefix=ERR2 -DINPUT=%t2
--- !ELF
FileHeader:
@@ -16,7 +16,8 @@ Sections:
Type: SHT_PROGBITS
Link: .foo
-# ERR: section '.foo' cannot be removed because it is referenced by the section '.bar'
+# ERR1: error: '[[INPUT]]': section '.foo' cannot be removed because it is referenced by the section '.bar'
+# ERR2: error: '[[INPUT]]': section '.foo' cannot be removed because it is referenced by the section '.bar'
# RUN: llvm-objcopy --allow-broken-links -R .foo %t.o %t3
# RUN: llvm-readobj --sections %t3 | FileCheck %s --check-prefix=SECTIONS --implicit-check-not=.foo
Modified: llvm/trunk/test/tools/llvm-objcopy/ELF/remove-shstrtab-error.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objcopy/ELF/remove-shstrtab-error.test?rev=361450&r1=361449&r2=361450&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-objcopy/ELF/remove-shstrtab-error.test (original)
+++ llvm/trunk/test/tools/llvm-objcopy/ELF/remove-shstrtab-error.test Wed May 22 17:42:46 2019
@@ -1,5 +1,5 @@
# RUN: yaml2obj %s > %t
-# RUN: not llvm-objcopy -R .shstrtab %t %t2 2>&1 >/dev/null | FileCheck %s
+# RUN: not llvm-objcopy -R .shstrtab %t %t2 2>&1 >/dev/null | FileCheck %s -DINPUT=%t
!ELF
FileHeader:
@@ -8,4 +8,4 @@ FileHeader:
Type: ET_REL
Machine: EM_X86_64
-# CHECK: cannot write section header table because section header string table was removed
+# CHECK: error: '[[INPUT]]': cannot write section header table because section header string table was removed
Modified: llvm/trunk/test/tools/llvm-objcopy/ELF/strip-section-err.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objcopy/ELF/strip-section-err.test?rev=361450&r1=361449&r2=361450&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-objcopy/ELF/strip-section-err.test (original)
+++ llvm/trunk/test/tools/llvm-objcopy/ELF/strip-section-err.test Wed May 22 17:42:46 2019
@@ -2,8 +2,8 @@
## referenced by relocations contained in the object.
# RUN: yaml2obj %s > %t1
-# RUN: not llvm-objcopy -R .data %t1 2>&1 | FileCheck %s
-# CHECK: error: section '.data' cannot be removed: (.text+0x1) has relocation against symbol 'foo'
+# RUN: not llvm-objcopy -R .data %t1 2>&1 | FileCheck %s -DINPUT=%t1
+# CHECK: error: '[[INPUT]]': section '.data' cannot be removed: (.text+0x1) has relocation against symbol 'foo'
## Check the behavior when we also remove the relocation section.
## We have no reference in this case and hence no error should be emitted.
Modified: llvm/trunk/test/tools/llvm-objcopy/ELF/strip-symbol-and-relocation.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objcopy/ELF/strip-symbol-and-relocation.test?rev=361450&r1=361449&r2=361450&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-objcopy/ELF/strip-symbol-and-relocation.test (original)
+++ llvm/trunk/test/tools/llvm-objcopy/ELF/strip-symbol-and-relocation.test Wed May 22 17:42:46 2019
@@ -20,8 +20,8 @@
# STRIPSYM-NOT: bar
# STRIPSYM-NOT: .rela.text
-# RUN: not llvm-objcopy --strip-symbol=bar %t %t2 2>&1 | FileCheck %s --check-prefix=ERR
-# ERR: not stripping symbol 'bar' because it is named in a relocation
+# RUN: not llvm-objcopy --strip-symbol=bar %t %t2 2>&1 | FileCheck %s --check-prefix=ERR -DINPUT=%t
+# ERR: error: '[[INPUT]]': not stripping symbol 'bar' because it is named in a relocation
--- !ELF
FileHeader:
Modified: llvm/trunk/test/tools/llvm-objcopy/ELF/symtab-error-on-remove-strtab.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objcopy/ELF/symtab-error-on-remove-strtab.test?rev=361450&r1=361449&r2=361450&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-objcopy/ELF/symtab-error-on-remove-strtab.test (original)
+++ llvm/trunk/test/tools/llvm-objcopy/ELF/symtab-error-on-remove-strtab.test Wed May 22 17:42:46 2019
@@ -1,7 +1,7 @@
# RUN: yaml2obj %s > %t
-# RUN: not llvm-objcopy -R .strtab %t %t2 2>&1 >/dev/null | FileCheck %s --check-prefix=ERR
+# RUN: not llvm-objcopy -R .strtab %t %t2 2>&1 >/dev/null | FileCheck %s --check-prefix=ERR1 -DINPUT=%t
# RUN: cp %t %t3
-# RUN: not llvm-strip --no-strip-all -R .strtab %t3 2>&1 >/dev/null | FileCheck %s --check-prefix=ERR
+# RUN: not llvm-strip --no-strip-all -R .strtab %t3 2>&1 >/dev/null | FileCheck %s --check-prefix=ERR2 -DINPUT=%t3
!ELF
FileHeader:
@@ -10,7 +10,8 @@ FileHeader:
Type: ET_REL
Machine: EM_X86_64
-# ERR: string table '.strtab' cannot be removed because it is referenced by the symbol table '.symtab'
+# ERR1: error: '[[INPUT]]': string table '.strtab' cannot be removed because it is referenced by the symbol table '.symtab'
+# ERR2: error: '[[INPUT]]': string table '.strtab' cannot be removed because it is referenced by the symbol table '.symtab'
# RUN: llvm-objcopy --allow-broken-links -R .strtab %t %t4
# RUN: llvm-objdump --section-headers %t4 | FileCheck %s --check-prefix=SECTIONS --implicit-check-not=.strtab
Modified: llvm/trunk/tools/llvm-objcopy/ELF/ELFObjcopy.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-objcopy/ELF/ELFObjcopy.cpp?rev=361450&r1=361449&r2=361450&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-objcopy/ELF/ELFObjcopy.cpp (original)
+++ llvm/trunk/tools/llvm-objcopy/ELF/ELFObjcopy.cpp Wed May 22 17:42:46 2019
@@ -156,8 +156,12 @@ static std::unique_ptr<Writer> createWri
template <class ELFT>
static Expected<ArrayRef<uint8_t>>
-findBuildID(const object::ELFFile<ELFT> &In) {
- for (const auto &Phdr : unwrapOrError(In.program_headers())) {
+findBuildID(const CopyConfig &Config, const object::ELFFile<ELFT> &In) {
+ auto PhdrsOrErr = In.program_headers();
+ if (auto Err = PhdrsOrErr.takeError())
+ return createFileError(Config.InputFilename, std::move(Err));
+
+ for (const auto &Phdr : *PhdrsOrErr) {
if (Phdr.p_type != PT_NOTE)
continue;
Error Err = Error::success();
@@ -165,22 +169,25 @@ findBuildID(const object::ELFFile<ELFT>
if (Note.getType() == NT_GNU_BUILD_ID && Note.getName() == ELF_NOTE_GNU)
return Note.getDesc();
if (Err)
- return std::move(Err);
+ return createFileError(Config.InputFilename, std::move(Err));
}
- return createStringError(llvm::errc::invalid_argument,
- "could not find build ID");
+
+ return createFileError(
+ Config.InputFilename,
+ createStringError(llvm::errc::invalid_argument,
+ "could not find build ID"));
}
static Expected<ArrayRef<uint8_t>>
-findBuildID(const object::ELFObjectFileBase &In) {
+findBuildID(const CopyConfig &Config, const object::ELFObjectFileBase &In) {
if (auto *O = dyn_cast<ELFObjectFile<ELF32LE>>(&In))
- return findBuildID(*O->getELFFile());
+ return findBuildID(Config, *O->getELFFile());
else if (auto *O = dyn_cast<ELFObjectFile<ELF64LE>>(&In))
- return findBuildID(*O->getELFFile());
+ return findBuildID(Config, *O->getELFFile());
else if (auto *O = dyn_cast<ELFObjectFile<ELF32BE>>(&In))
- return findBuildID(*O->getELFFile());
+ return findBuildID(Config, *O->getELFFile());
else if (auto *O = dyn_cast<ELFObjectFile<ELF64BE>>(&In))
- return findBuildID(*O->getELFFile());
+ return findBuildID(Config, *O->getELFFile());
llvm_unreachable("Bad file format");
}
@@ -681,7 +688,7 @@ static Error handleArgs(const CopyConfig
StringRef SecName = SecPair.first;
StringRef File = SecPair.second;
if (Error E = dumpSectionToFile(SecName, File, Obj))
- return createFileError(Config.InputFilename, std::move(E));
+ return E;
}
if (!Config.AddGnuDebugLink.empty())
@@ -730,7 +737,11 @@ Error executeObjcopyOnBinary(const CopyC
ArrayRef<uint8_t> BuildIdBytes;
if (!Config.BuildIdLinkDir.empty()) {
- BuildIdBytes = unwrapOrError(findBuildID(In));
+ auto BuildIdBytesOrErr = findBuildID(Config, In);
+ if (auto E = BuildIdBytesOrErr.takeError())
+ return E;
+ BuildIdBytes = *BuildIdBytesOrErr;
+
if (BuildIdBytes.size() < 2)
return createFileError(
Config.InputFilename,
@@ -745,18 +756,19 @@ Error executeObjcopyOnBinary(const CopyC
return E;
if (Error E = handleArgs(Config, *Obj, Reader, OutputElfType))
- return E;
+ return createFileError(Config.InputFilename, std::move(E));
+
std::unique_ptr<Writer> Writer =
createWriter(Config, *Obj, Out, OutputElfType);
if (Error E = Writer->finalize())
- return E;
+ return createFileError(Config.InputFilename, std::move(E));
if (Error E = Writer->write())
return E;
if (!Config.BuildIdLinkDir.empty() && Config.BuildIdLinkOutput)
if (Error E =
linkToBuildIdDir(Config, Config.OutputFilename,
Config.BuildIdLinkOutput.getValue(), BuildIdBytes))
- return E;
+ return createFileError(Config.OutputFilename, std::move(E));
return Error::success();
}
More information about the llvm-commits
mailing list