forked from OSchip/llvm-project
[WebAssembly][libObject] Avoid re-use of Section object during parsing
The re-use of this struct across iterations of the loop was causing fields (specifically Name) to be incorrectly shared between multiple sections. Differential Revision: https://reviews.llvm.org/D108984
This commit is contained in:
parent
4a25c3fb61
commit
e4b2f3054a
|
@ -286,9 +286,9 @@ WasmObjectFile::WasmObjectFile(MemoryBufferRef Buffer, Error &Err)
|
|||
return;
|
||||
}
|
||||
|
||||
WasmSection Sec;
|
||||
WasmSectionOrderChecker Checker;
|
||||
while (Ctx.Ptr < Ctx.End) {
|
||||
WasmSection Sec;
|
||||
if ((Err = readSection(Sec, Ctx, Checker)))
|
||||
return;
|
||||
if ((Err = parseSection(Sec)))
|
||||
|
|
|
@ -1,32 +1,36 @@
|
|||
## Test --only-section.
|
||||
# RUN: yaml2obj %s -o %t
|
||||
# RUN: llvm-objcopy --only-section=producers %t %t2
|
||||
# RUN: llvm-objcopy --only-section=foo %t %t2
|
||||
# RUN: obj2yaml %t2 | FileCheck --implicit-check-not TYPE --implicit-check-not linking %s
|
||||
|
||||
## Test that it's the same with only-section + keep-section (for the same section).
|
||||
# RUN: llvm-objcopy --only-section=producers --keep-section=producers %t %t2
|
||||
# RUN: llvm-objcopy --only-section=foo --keep-section=foo %t %t2
|
||||
# RUN: obj2yaml %t2 | FileCheck --implicit-check-not TYPE --implicit-check-not linking %s
|
||||
|
||||
## Also test that only-section overrides remove-section.
|
||||
# RUN: llvm-objcopy --only-section=producers --remove-section=producers %t %t2
|
||||
# RUN: llvm-objcopy --only-section=foo --remove-section=foo %t %t2
|
||||
# RUN: obj2yaml %t2 | FileCheck --implicit-check-not linking %s
|
||||
|
||||
## This file has both known and custom sections. Check that only the producers section is left.
|
||||
## This file has both known and custom sections. Check that only the foo section is left.
|
||||
# CHECK: Sections:
|
||||
# CHECK-NEXT: - Type: CUSTOM
|
||||
# CHECK-NEXT: Name: producers
|
||||
# CHECK-NEXT: Tools:
|
||||
# CHECK-NEXT: Name: foo
|
||||
# CHECK-NEXT: Payload: DEADBEEF
|
||||
# CHECK-NEXT: ...
|
||||
|
||||
## Test that only-section + keep-section keeps both sections.
|
||||
# RUN: llvm-objcopy --only-section=producers --keep-section=linking %t %t2
|
||||
# RUN: llvm-objcopy --only-section=foo --keep-section=linking %t %t2
|
||||
# RUN: obj2yaml %t2 | FileCheck --implicit-check-not=TYPE --check-prefix=KEEP %s
|
||||
# KEEP: Name: foo
|
||||
# KEEP: Name: linking
|
||||
# KEEP: Name: producers
|
||||
|
||||
--- !WASM
|
||||
FileHeader:
|
||||
Version: 0x00000001
|
||||
Sections:
|
||||
- Type: CUSTOM
|
||||
Name: foo
|
||||
Payload: DEADBEEF
|
||||
- Type: TYPE
|
||||
Signatures:
|
||||
- Index: 0
|
||||
|
@ -37,8 +41,3 @@ Sections:
|
|||
- Type: CUSTOM
|
||||
Name: linking
|
||||
Version: 2
|
||||
- Type: CUSTOM
|
||||
Name: producers
|
||||
Tools:
|
||||
- Name: clang
|
||||
Version: 9.0.0
|
||||
|
|
Loading…
Reference in New Issue