From 04946d54db28d963a330f4d390c433069ac36da8 Mon Sep 17 00:00:00 2001 From: Owen Anderson Date: Wed, 18 Dec 2013 19:20:29 +0000 Subject: Add a unit test for loading an object file via a file descriptor. Patch by Pete Cooper. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@197600 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../ArchiveFileDescriptor.cpp | 53 ++++++++++++++++++++++ unittests/ArchiveFileDescriptor/CMakeLists.txt | 8 ++++ unittests/ArchiveFileDescriptor/Makefile | 15 ++++++ unittests/CMakeLists.txt | 1 + unittests/Makefile | 4 +- 5 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 unittests/ArchiveFileDescriptor/ArchiveFileDescriptor.cpp create mode 100644 unittests/ArchiveFileDescriptor/CMakeLists.txt create mode 100644 unittests/ArchiveFileDescriptor/Makefile diff --git a/unittests/ArchiveFileDescriptor/ArchiveFileDescriptor.cpp b/unittests/ArchiveFileDescriptor/ArchiveFileDescriptor.cpp new file mode 100644 index 0000000000..193e5710c3 --- /dev/null +++ b/unittests/ArchiveFileDescriptor/ArchiveFileDescriptor.cpp @@ -0,0 +1,53 @@ +//===- llvm/unittest/ArchiveFileDescriptor/ArchiveFileDescriptor.cpp ------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "llvm/Object/Archive.h" +#include "llvm/Object/ObjectFile.h" +#include "llvm/Support/MemoryBuffer.h" +#include "gtest/gtest.h" + +using namespace llvm; +using namespace llvm::object; + +static void failIfError(error_code EC) { + if (!EC) + return; + + errs() << "ERROR: " << EC.message() << "\n"; + exit(1); +} + +TEST(ArchiveFileDescriptor, Test1) { + int FD; + + error_code EC = sys::fs::openFileForRead("ArchiveFileDescriptor", FD); + failIfError(EC); + + OwningPtr MemoryBuffer; + EC = MemoryBuffer::getOpenFile(FD, "Dummy Filename", + MemoryBuffer, + /* FileSize */ -1, + /* RequiresNullTerminator */ false); + failIfError(EC); + + // Attempt to open the binary. + OwningPtr Binary; + EC = createBinary(MemoryBuffer.take(), Binary); + failIfError(EC); + + if (Archive *Arc = dyn_cast(Binary.get())) { + (void)Arc; + errs() << "ERROR: Loaded archive, was expecting object file\n"; + } else if (ObjectFile *Obj = dyn_cast(Binary.get())) { + (void)Obj; + } else { + outs() << "ERROR: Unknown file type\n"; + exit(1); + } +} diff --git a/unittests/ArchiveFileDescriptor/CMakeLists.txt b/unittests/ArchiveFileDescriptor/CMakeLists.txt new file mode 100644 index 0000000000..c7e292ad64 --- /dev/null +++ b/unittests/ArchiveFileDescriptor/CMakeLists.txt @@ -0,0 +1,8 @@ +set(LLVM_LINK_COMPONENTS + Object + Support + ) + +add_llvm_unittest(ArchiveFileDescriptor + ArchiveFileDescriptor.cpp + ) diff --git a/unittests/ArchiveFileDescriptor/Makefile b/unittests/ArchiveFileDescriptor/Makefile new file mode 100644 index 0000000000..460b86c0a0 --- /dev/null +++ b/unittests/ArchiveFileDescriptor/Makefile @@ -0,0 +1,15 @@ +##===- unittests/ArchiveFileDescriptor/Makefile ------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LEVEL = ../.. +TESTNAME = ArchiveFileDescriptor +LINK_COMPONENTS := object + +include $(LEVEL)/Makefile.config +include $(LLVM_SRC_ROOT)/unittests/Makefile.unittest diff --git a/unittests/CMakeLists.txt b/unittests/CMakeLists.txt index 52702ba23a..9857e787ee 100644 --- a/unittests/CMakeLists.txt +++ b/unittests/CMakeLists.txt @@ -7,6 +7,7 @@ endfunction() add_subdirectory(ADT) add_subdirectory(Analysis) +add_subdirectory(ArchiveFileDescriptor) add_subdirectory(Bitcode) add_subdirectory(CodeGen) add_subdirectory(DebugInfo) diff --git a/unittests/Makefile b/unittests/Makefile index 06ba93243e..d80cab2621 100644 --- a/unittests/Makefile +++ b/unittests/Makefile @@ -9,8 +9,8 @@ LEVEL = .. -PARALLEL_DIRS = ADT Analysis Bitcode CodeGen DebugInfo ExecutionEngine IR \ - MC Object Option Support Transforms +PARALLEL_DIRS = ADT Analysis ArchiveFileDescriptor Bitcode CodeGen DebugInfo \ + ExecutionEngine IR MC Object Option Support Transforms include $(LEVEL)/Makefile.common -- cgit v1.2.3