10164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines/*
27cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines * Copyright 2011-2012, The Android Open Source Project
30164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines *
40164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines * Licensed under the Apache License, Version 2.0 (the "License");
50164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines * you may not use this file except in compliance with the License.
60164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines * You may obtain a copy of the License at
70164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines *
80164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines *     http://www.apache.org/licenses/LICENSE-2.0
90164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines *
100164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines * Unless required by applicable law or agreed to in writing, software
110164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines * distributed under the License is distributed on an "AS IS" BASIS,
120164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines * See the License for the specific language governing permissions and
140164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines * limitations under the License.
150164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines */
160164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines
170164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines#include "bcinfo/BitcodeWrapper.h"
187cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines#include "bcinfo/Wrap/bitcode_wrapperer.h"
197cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines#include "bcinfo/Wrap/in_memory_wrapper_input.h"
200164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines
210164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines#include "llvm/Bitcode/ReaderWriter.h"
220164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines
230164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines#include <cstdlib>
240164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines#include <cstring>
250164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines
260164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hinesnamespace bcinfo {
270164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines
280164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen HinesBitcodeWrapper::BitcodeWrapper(const char *bitcode, size_t bitcodeSize)
290164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines    : mFileType(BC_NOT_BC), mBitcode(bitcode),
300a04898a5ecb4a695e2365942e734038021d5e85Tareq A. Siraj      mBitcodeSize(bitcodeSize),
31b67c9e7a28cb734c1d62d835c33dedbe45074356Stephen Hines      mHeaderVersion(0), mTargetAPI(0), mCompilerVersion(0),
32b67c9e7a28cb734c1d62d835c33dedbe45074356Stephen Hines      mOptimizationLevel(3) {
337cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines  InMemoryWrapperInput inMem(mBitcode, mBitcodeSize);
34900c6c1f08f7c572125d7d39abe0f0f9eafbfa14Chris Wailes  BitcodeWrapperer wrapperer(&inMem, nullptr);
357cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines  if (wrapperer.IsInputBitcodeWrapper()) {
367cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines    mFileType = BC_WRAPPER;
377cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines    mHeaderVersion = wrapperer.getAndroidHeaderVersion();
387cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines    mTargetAPI = wrapperer.getAndroidTargetAPI();
397cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines    mCompilerVersion = wrapperer.getAndroidCompilerVersion();
407cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines    mOptimizationLevel = wrapperer.getAndroidOptimizationLevel();
417cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines  } else if (wrapperer.IsInputBitcodeFile()) {
427cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines    mFileType = BC_RAW;
437cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines  }
440164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines}
450164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines
460164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines
470164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen HinesBitcodeWrapper::~BitcodeWrapper() {
480164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines  return;
490164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines}
500164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines
510164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines
520164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hinesbool BitcodeWrapper::unwrap() {
537cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines  return mFileType != BC_NOT_BC;
540164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines}
550164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines
560164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines}  // namespace bcinfo
570164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines
58