//===--- ImageInspection.h - Image inspection routines ----------*- C++ -*-===// // // This source file is part of the Swift.org open source project // // Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors // Licensed under Apache License v2.0 with Runtime Library Exception // // See https://swift.org/LICENSE.txt for license information // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // //===----------------------------------------------------------------------===// /// /// \file /// /// This file includes routines that extract metadata from executable and /// dynamic library image files generated by the Swift compiler. The concrete /// implementations vary greatly by platform. /// //===----------------------------------------------------------------------===// #ifndef SWIFT_RUNTIME_SYMBOLINFO_H #define SWIFT_RUNTIME_SYMBOLINFO_H #include "swift/Runtime/Config.h" #include #if defined(_WIN32) #define WIN32_LEAN_AND_MEAN #define NOMINMAX #include #endif #if defined(_WIN32) && !defined(__CYGWIN__) #include #elif SWIFT_STDLIB_HAS_DLADDR #include #endif #include "llvm/ADT/Optional.h" namespace swift { struct SymbolInfo { private: #if defined(_WIN32) && !defined(__CYGWIN__) SYMBOL_INFO_PACKAGE _package; #elif SWIFT_STDLIB_HAS_DLADDR Dl_info _info; #endif public: SymbolInfo() {} /// Get the file name of the image where the symbol was found. /// /// The resulting C string is only valid for the lifetime of \c this. const char *getFilename() const; /// Get the base address of the image where the symbol was found. const void *getBaseAddress() const; /// Get the name of the symbol. /// /// The resulting C string is only valid for the lifetime of \c this. const char *getSymbolName() const; /// Get the address of the symbol. const void *getSymbolAddress() const; /// Look up a symbol by address. /// /// \param address The address where the symbol is located. /// /// \returns On success, an instance of \c SymbolInfo containing information /// about the symbol at \a address. On failure, \c llvm::None. static llvm::Optional lookup(const void *address); }; } // end namespace swift #endif