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#define LOG_TAG "bcinfo"
220164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines#include <cutils/log.h>
230164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines
240164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines#include "llvm/Bitcode/ReaderWriter.h"
250164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines
260164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines#include <cstdlib>
270164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines#include <cstring>
280164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines
290164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hinesnamespace bcinfo {
300164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines
310164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen HinesBitcodeWrapper::BitcodeWrapper(const char *bitcode, size_t bitcodeSize)
320164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines    : mFileType(BC_NOT_BC), mBitcode(bitcode),
330a04898a5ecb4a695e2365942e734038021d5e85Tareq A. Siraj      mBitcodeSize(bitcodeSize),
34b67c9e7a28cb734c1d62d835c33dedbe45074356Stephen Hines      mHeaderVersion(0), mTargetAPI(0), mCompilerVersion(0),
35b67c9e7a28cb734c1d62d835c33dedbe45074356Stephen Hines      mOptimizationLevel(3) {
367cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines  InMemoryWrapperInput inMem(mBitcode, mBitcodeSize);
377cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines  BitcodeWrapperer wrapperer(&inMem, NULL);
387cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines  if (wrapperer.IsInputBitcodeWrapper()) {
397cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines    mFileType = BC_WRAPPER;
407cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines    mHeaderVersion = wrapperer.getAndroidHeaderVersion();
417cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines    mTargetAPI = wrapperer.getAndroidTargetAPI();
427cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines    mCompilerVersion = wrapperer.getAndroidCompilerVersion();
437cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines    mOptimizationLevel = wrapperer.getAndroidOptimizationLevel();
447cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines  } else if (wrapperer.IsInputBitcodeFile()) {
457cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines    mFileType = BC_RAW;
467cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines  }
470164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines}
480164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines
490164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines
500164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen HinesBitcodeWrapper::~BitcodeWrapper() {
510164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines  return;
520164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines}
530164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines
540164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines
550164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hinesbool BitcodeWrapper::unwrap() {
567cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines  return mFileType != BC_NOT_BC;
570164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines}
580164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines
590164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines}  // namespace bcinfo
600164f4647511a71f5b495a3bef156e3ac4e6c6b3Stephen Hines
61