blob: ec7151f3e57c9289590c3d2843cbb5315af90acb [file] [log] [blame]
//===-- ZipFileResolver.h ---------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#ifndef LLDB_HOST_ZIPFILERESOLVER_H
#define LLDB_HOST_ZIPFILERESOLVER_H
#include "lldb/lldb-private.h"
namespace lldb_private {
/// In Android API level 23 and above, bionic dynamic linker is able to load
/// .so file directly from APK or .zip file. This is a utility class to resolve
/// the file spec in order to get the zip path and the .so file offset and size
/// if the file spec contains "zip_path!/so_path".
/// https://android.googlesource.com/platform/bionic/+/master/
/// android-changes-for-ndk-developers.md#
/// opening-shared-libraries-directly-from-an-apk
class ZipFileResolver {
public:
enum FileKind {
eFileKindInvalid = 0,
eFileKindNormal,
eFileKindZip,
};
static bool ResolveSharedLibraryPath(const FileSpec &file_spec,
FileKind &file_kind,
std::string &file_path,
lldb::offset_t &so_file_offset,
lldb::offset_t &so_file_size);
};
} // end of namespace lldb_private
#endif // LLDB_HOST_ZIPFILERESOLVER_H