diff --git a/llvm/lib/ObjCopy/wasm/WasmObjcopy.cpp b/llvm/lib/ObjCopy/wasm/WasmObjcopy.cpp index 6877cd68bee47..19f10bf4c8180 100644 --- a/llvm/lib/ObjCopy/wasm/WasmObjcopy.cpp +++ b/llvm/lib/ObjCopy/wasm/WasmObjcopy.cpp @@ -126,9 +126,11 @@ static Error handleArgs(const CommonConfig &Config, Object &Obj) { Sec.SectionType = llvm::wasm::WASM_SEC_CUSTOM; Sec.Name = NewSection.SectionName; + llvm::StringRef InputData = + llvm::StringRef(NewSection.SectionData->getBufferStart(), + NewSection.SectionData->getBufferSize()); std::unique_ptr BufferCopy = MemoryBuffer::getMemBufferCopy( - NewSection.SectionData->getBufferStart(), - NewSection.SectionData->getBufferIdentifier()); + InputData, NewSection.SectionData->getBufferIdentifier()); Sec.Contents = makeArrayRef( reinterpret_cast(BufferCopy->getBufferStart()), BufferCopy->getBufferSize()); diff --git a/llvm/test/tools/llvm-objcopy/wasm/add-section.test b/llvm/test/tools/llvm-objcopy/wasm/add-section.test index 2f32eaca0ac46..1a0df092dc7c4 100644 --- a/llvm/test/tools/llvm-objcopy/wasm/add-section.test +++ b/llvm/test/tools/llvm-objcopy/wasm/add-section.test @@ -20,6 +20,17 @@ # REPLACE: Name: foo # REPLACE: Payload: 3132330A +## Check that raw data bytes can be imported and exported unchanged especially the ones containing empty bytes. +# RUN: echo -e -n "\x02\x01\x00\x01\x02" > %t6 +# RUN: llvm-objcopy --add-section=bar=%t6 %t %t7 +# RUN: llvm-objcopy --dump-section=bar=%t8 %t7 +# RUN: diff %t8 %t6 +# RUN: obj2yaml %t7 | FileCheck %s --check-prefix=RAW-DATA + +## Check that raw data is well formated in the file as well. +# RAW-DATA: Name: bar +# RAW-DATA-NEXT: Payload: '0201000102' + --- !WASM FileHeader: Version: 0x00000001