//===-- ObjectFileMachO.h ---------------------------------------*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

#ifndef liblldb_ObjectFileMachO_h_
#define liblldb_ObjectFileMachO_h_

// C Includes
// C++ Includes
// Other libraries and framework includes
// Project includes
#include "lldb/Utility/SafeMachO.h"
#include "lldb/Core/Address.h"
#include "lldb/Core/FileSpecList.h"
#include "lldb/Core/RangeMap.h"
#include "lldb/Host/FileSpec.h"
#include "lldb/Host/Mutex.h"
#include "lldb/Symbol/ObjectFile.h"

//----------------------------------------------------------------------
// This class needs to be hidden as eventually belongs in a plugin that
// will export the ObjectFile protocol
//----------------------------------------------------------------------
class ObjectFileMachO :
    public lldb_private::ObjectFile
{
public:
    ObjectFileMachO(const lldb::ModuleSP &module_sp,
                    lldb::DataBufferSP& data_sp,
                    lldb::offset_t data_offset,
                    const lldb_private::FileSpec* file,
                    lldb::offset_t offset,
                    lldb::offset_t length);

    ObjectFileMachO(const lldb::ModuleSP &module_sp,
                    lldb::DataBufferSP& data_sp,
                    const lldb::ProcessSP &process_sp,
                    lldb::addr_t header_addr);

    ~ObjectFileMachO() override = default;

    //------------------------------------------------------------------
    // Static Functions
    //------------------------------------------------------------------
    static void
    Initialize();

    static void
    Terminate();

    static lldb_private::ConstString
    GetPluginNameStatic();

    static const char *
    GetPluginDescriptionStatic();

    static lldb_private::ObjectFile *
    CreateInstance (const lldb::ModuleSP &module_sp,
                    lldb::DataBufferSP& data_sp,
                    lldb::offset_t data_offset,
                    const lldb_private::FileSpec* file,
                    lldb::offset_t file_offset,
                    lldb::offset_t length);

    static lldb_private::ObjectFile *
    CreateMemoryInstance (const lldb::ModuleSP &module_sp, 
                          lldb::DataBufferSP& data_sp, 
                          const lldb::ProcessSP &process_sp, 
                          lldb::addr_t header_addr);

    static size_t
    GetModuleSpecifications (const lldb_private::FileSpec& file,
                             lldb::DataBufferSP& data_sp,
                             lldb::offset_t data_offset,
                             lldb::offset_t file_offset,
                             lldb::offset_t length,
                             lldb_private::ModuleSpecList &specs);

    static bool
    SaveCore (const lldb::ProcessSP &process_sp,
              const lldb_private::FileSpec &outfile,
              lldb_private::Error &error);

    static bool
    MagicBytesMatch (lldb::DataBufferSP& data_sp,
                     lldb::addr_t offset, 
                     lldb::addr_t length);

    //------------------------------------------------------------------
    // Member Functions
    //------------------------------------------------------------------
    bool
    ParseHeader() override;

    bool
    SetLoadAddress(lldb_private::Target &target,
                   lldb::addr_t value,
                   bool value_is_offset) override;
    
    lldb::ByteOrder
    GetByteOrder() const override;
    
    bool
    IsExecutable() const override;

    uint32_t
    GetAddressByteSize() const override;

    lldb::AddressClass
    GetAddressClass(lldb::addr_t file_addr) override;

    lldb_private::Symtab *
    GetSymtab() override;

    bool
    IsStripped() override;
    
    void
    CreateSections(lldb_private::SectionList &unified_section_list) override;

    void
    Dump(lldb_private::Stream *s) override;

    bool
    GetArchitecture(lldb_private::ArchSpec &arch) override;

    bool
    GetUUID(lldb_private::UUID* uuid) override;

    uint32_t
    GetDependentModules(lldb_private::FileSpecList& files) override;

    lldb_private::FileSpecList
    GetReExportedLibraries() override
    {
        return m_reexported_dylibs;
    }

    lldb_private::Address
    GetEntryPointAddress() override;
    
    lldb_private::Address
    GetHeaderAddress() override;
    
    uint32_t
    GetNumThreadContexts() override;
    
    lldb::RegisterContextSP
    GetThreadContextAtIndex(uint32_t idx, lldb_private::Thread &thread) override;

    ObjectFile::Type
    CalculateType() override;
    
    ObjectFile::Strata
    CalculateStrata() override;

    uint32_t
    GetVersion(uint32_t *versions, uint32_t num_versions) override;

    uint32_t
    GetMinimumOSVersion(uint32_t *versions, uint32_t num_versions) override;
    
    uint32_t
    GetSDKVersion(uint32_t *versions, uint32_t num_versions) override;

    bool
    GetIsDynamicLinkEditor() override;

    static bool
    ParseHeader (lldb_private::DataExtractor &data,
                 lldb::offset_t *data_offset_ptr,
                 llvm::MachO::mach_header &header);
    
    //------------------------------------------------------------------
    // PluginInterface protocol
    //------------------------------------------------------------------
    lldb_private::ConstString
    GetPluginName() override;

    uint32_t
    GetPluginVersion() override;

protected:
    static bool
    GetUUID (const llvm::MachO::mach_header &header,
             const lldb_private::DataExtractor &data,
             lldb::offset_t lc_offset, // Offset to the first load command
             lldb_private::UUID& uuid);
    
    static bool
    GetArchitecture (const llvm::MachO::mach_header &header,
                     const lldb_private::DataExtractor &data,
                     lldb::offset_t lc_offset,
                     lldb_private::ArchSpec &arch);

    // Intended for same-host arm device debugging where lldb needs to
    // detect libraries in the shared cache and augment the nlist entries
    // with an on-disk dyld_shared_cache file.  The process will record
    // the shared cache UUID so the on-disk cache can be matched or rejected
    // correctly.
    lldb_private::UUID
    GetProcessSharedCacheUUID (lldb_private::Process *);

    // Intended for same-host arm device debugging where lldb will read
    // shared cache libraries out of its own memory instead of the remote
    // process' memory as an optimization.  If lldb's shared cache UUID 
    // does not match the process' shared cache UUID, this optimization
    // should not be used.
    lldb_private::UUID
    GetLLDBSharedCacheUUID ();

    lldb_private::Section *
    GetMachHeaderSection();

    lldb::addr_t
    CalculateSectionLoadAddressForMemoryImage(lldb::addr_t mach_header_load_address,
                                              const lldb_private::Section *mach_header_section,
                                              const lldb_private::Section *section);

    lldb_private::UUID
    GetSharedCacheUUID (lldb_private::FileSpec dyld_shared_cache, const lldb::ByteOrder byte_order, const uint32_t addr_byte_size);

    size_t
    ParseSymtab();

    llvm::MachO::mach_header m_header;
    static const lldb_private::ConstString &GetSegmentNameTEXT();
    static const lldb_private::ConstString &GetSegmentNameDATA();
    static const lldb_private::ConstString &GetSegmentNameDATA_DIRTY();
    static const lldb_private::ConstString &GetSegmentNameDATA_CONST();
    static const lldb_private::ConstString &GetSegmentNameOBJC();
    static const lldb_private::ConstString &GetSegmentNameLINKEDIT();
    static const lldb_private::ConstString &GetSectionNameEHFrame();

    llvm::MachO::dysymtab_command m_dysymtab;
    std::vector<llvm::MachO::segment_command_64> m_mach_segments;
    std::vector<llvm::MachO::section_64> m_mach_sections;
    std::vector<uint32_t> m_min_os_versions;
    std::vector<uint32_t> m_sdk_versions;
    typedef lldb_private::RangeVector<uint32_t, uint32_t> FileRangeArray;
    lldb_private::Address  m_entry_point_address;
    FileRangeArray m_thread_context_offsets;
    bool m_thread_context_offsets_valid;
    lldb_private::FileSpecList m_reexported_dylibs;
};

#endif // liblldb_ObjectFileMachO_h_
