Files
swift-mirror/stdlib/public/runtime/SymbolInfo.h

82 lines
2.2 KiB
C++

//===--- 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 <cstdint>
#if defined(_WIN32)
#define WIN32_LEAN_AND_MEAN
#define NOMINMAX
#include <Windows.h>
#endif
#if defined(_WIN32) && !defined(__CYGWIN__)
#include <DbgHelp.h>
#elif SWIFT_STDLIB_HAS_DLADDR
#include <dlfcn.h>
#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<SymbolInfo> lookup(const void *address);
};
} // end namespace swift
#endif