mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 19:52:54 +01:00
0bad578cf3
Looking at the Doxygen-generated documentation for the llvm namespace currently shows all sorts of random comments from different parts of the codebase. These are mostly caused by: - File doc comments that aren't marked with \file, so they're attached to the next declaration, which is usually "namespace llvm {". - Class doc comments placed before the namespace rather than before the class. - Code comments before the namespace that (in my opinion) shouldn't be extracted by doxygen at all. This commit fixes these comments. The generated doxygen documentation now has proper docs for several classes and files, and the docs for the llvm and llvm::detail namespaces are now empty. Reviewed By: thakis, mizvekov Differential Revision: https://reviews.llvm.org/D96736
76 lines
2.5 KiB
C++
76 lines
2.5 KiB
C++
//===-------- llvm/GlobalIFunc.h - GlobalIFunc class ------------*- 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
///
|
|
/// \file
|
|
/// This file contains the declaration of the GlobalIFunc class, which
|
|
/// represents a single indirect function in the IR. Indirect function uses
|
|
/// ELF symbol type extension to mark that the address of a declaration should
|
|
/// be resolved at runtime by calling a resolver function.
|
|
///
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_IR_GLOBALIFUNC_H
|
|
#define LLVM_IR_GLOBALIFUNC_H
|
|
|
|
#include "llvm/ADT/ilist_node.h"
|
|
#include "llvm/IR/GlobalIndirectSymbol.h"
|
|
#include "llvm/IR/Value.h"
|
|
|
|
namespace llvm {
|
|
|
|
class Twine;
|
|
class Module;
|
|
|
|
// Traits class for using GlobalIFunc in symbol table in Module.
|
|
template <typename ValueSubClass> class SymbolTableListTraits;
|
|
|
|
class GlobalIFunc final : public GlobalIndirectSymbol,
|
|
public ilist_node<GlobalIFunc> {
|
|
friend class SymbolTableListTraits<GlobalIFunc>;
|
|
|
|
GlobalIFunc(Type *Ty, unsigned AddressSpace, LinkageTypes Linkage,
|
|
const Twine &Name, Constant *Resolver, Module *Parent);
|
|
|
|
public:
|
|
GlobalIFunc(const GlobalIFunc &) = delete;
|
|
GlobalIFunc &operator=(const GlobalIFunc &) = delete;
|
|
|
|
/// If a parent module is specified, the ifunc is automatically inserted into
|
|
/// the end of the specified module's ifunc list.
|
|
static GlobalIFunc *create(Type *Ty, unsigned AddressSpace,
|
|
LinkageTypes Linkage, const Twine &Name,
|
|
Constant *Resolver, Module *Parent);
|
|
|
|
/// This method unlinks 'this' from the containing module, but does not
|
|
/// delete it.
|
|
void removeFromParent();
|
|
|
|
/// This method unlinks 'this' from the containing module and deletes it.
|
|
void eraseFromParent();
|
|
|
|
/// These methods retrieve and set ifunc resolver function.
|
|
void setResolver(Constant *Resolver) {
|
|
setIndirectSymbol(Resolver);
|
|
}
|
|
const Constant *getResolver() const {
|
|
return getIndirectSymbol();
|
|
}
|
|
Constant *getResolver() {
|
|
return getIndirectSymbol();
|
|
}
|
|
|
|
// Methods for support type inquiry through isa, cast, and dyn_cast:
|
|
static bool classof(const Value *V) {
|
|
return V->getValueID() == Value::GlobalIFuncVal;
|
|
}
|
|
};
|
|
|
|
} // end namespace llvm
|
|
|
|
#endif // LLVM_IR_GLOBALIFUNC_H
|