-
Notifications
You must be signed in to change notification settings - Fork 13k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Archive] Don't throw away errors for malformed archive members
When adding an archive member with a problem, e.g. a new bitcode with an old archiver, containing an unsupported attribute, or an ELF file with a malformed symbol table, the archiver would throw away the error and simply add the member to the archive without any symbol entries. This meant that the resultant archive could be silently unusable when not using --whole-archive, and result in unexpected undefined symbols. This change fixes this issue by addressing two FIXMEs and only throwing away not-an-object errors. However, this meant that some LLD tests which didn't need symbol tables and were using invalid members deliberately to test the linker's malformed input handling no longer worked, so this patch also stops the archiver from looking for symbols in an object if it doesn't require a symbol table, and updates the tests accordingly. Differential Revision: https://reviews.llvm.org/D88288 Reviewed by: grimar, rupprecht, MaskRay
- Loading branch information
Showing
7 changed files
with
116 additions
and
34 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
## Show that the archive library emits error messages when adding malformed | ||
## objects. | ||
|
||
# RUN: rm -rf %t.dir | ||
# RUN: split-file %s %t.dir | ||
# RUN: cd %t.dir | ||
|
||
## Malformed bitcode object. | ||
# RUN: llvm-as input.ll -o input.bc | ||
# RUN: %python -c "with open('input.bc', 'a') as f: f.truncate(10)" | ||
# RUN: not llvm-ar rc bad.a input.bc 2>&1 | FileCheck %s --check-prefix=ERR1 | ||
|
||
# ERR1: error: bad.a: Invalid bitcode signature | ||
|
||
## Non-bitcode malformed file. | ||
# RUN: yaml2obj input.yaml -o input.o | ||
# RUN: not llvm-ar rc bad.a input.o 2>&1 | FileCheck %s --check-prefix=ERR2 | ||
|
||
# ERR2: error: bad.a: section header table goes past the end of the file: e_shoff = 0x9999 | ||
|
||
## Don't emit an error if the symbol table is not required. | ||
# RUN: llvm-ar rcS good.a input.o input.bc | ||
# RUN: llvm-ar t good.a | FileCheck %s --check-prefix=CONTENTS | ||
|
||
# CONTENTS: input.o | ||
# CONTENTS-NEXT: input.bc | ||
|
||
#--- input.ll | ||
target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128" | ||
target triple = "x86_64-pc-linux" | ||
|
||
#--- input.yaml | ||
--- !ELF | ||
FileHeader: | ||
Class: ELFCLASS64 | ||
Data: ELFDATA2LSB | ||
Type: ET_REL | ||
EShOff: 0x9999 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
## Show that the archive library does not emit an error or add any symbols to | ||
## the archive symbol table, when it encounters an unknown file type, but still | ||
## adds the file to the archive. | ||
|
||
# RUN: echo something > %t | ||
# RUN: rm -f %t.a | ||
# RUN: llvm-ar rc %t.a %t | ||
# RUN: llvm-ar t %t.a | FileCheck %s --check-prefix=CONTENTS -DFILE=%basename_t | ||
# RUN: llvm-nm --print-armap %t.a | FileCheck %s --allow-empty --implicit-check-not={{.}} | ||
|
||
# CONTENTS: [[FILE]] |