summaryrefslogtreecommitdiffstats
path: root/openmp/offload/src/offload_table.h
diff options
context:
space:
mode:
authorJonas Hahnfeld <hahnjo@hahnjo.de>2018-06-19 19:08:17 +0000
committerJonas Hahnfeld <hahnjo@hahnjo.de>2018-06-19 19:08:17 +0000
commitd03cbf2cfe227605cacd52d4f69c7b0182ec2b66 (patch)
tree35e7efcb8cccb428468f5774569c92a17c383225 /openmp/offload/src/offload_table.h
parent858afbd16521ded4f4b4d149b26e8a96c7957a75 (diff)
downloadbcm5719-llvm-d03cbf2cfe227605cacd52d4f69c7b0182ec2b66.tar.gz
bcm5719-llvm-d03cbf2cfe227605cacd52d4f69c7b0182ec2b66.zip
Remove liboffload from repository
See the mailing list for the proposal and discussion: http://lists.llvm.org/pipermail/openmp-dev/2018-June/002041.html llvm-svn: 335069
Diffstat (limited to 'openmp/offload/src/offload_table.h')
-rw-r--r--openmp/offload/src/offload_table.h301
1 files changed, 0 insertions, 301 deletions
diff --git a/openmp/offload/src/offload_table.h b/openmp/offload/src/offload_table.h
deleted file mode 100644
index cfced3e5608..00000000000
--- a/openmp/offload/src/offload_table.h
+++ /dev/null
@@ -1,301 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.txt for details.
-//
-//===----------------------------------------------------------------------===//
-
-
-/*! \file
- \brief Function and Variable tables used by the runtime library
-*/
-
-#ifndef OFFLOAD_TABLE_H_INCLUDED
-#define OFFLOAD_TABLE_H_INCLUDED
-
-#include <iterator>
-#include "offload_util.h"
-
-// Template representing double linked list of tables
-template <typename T> class TableList {
-public:
- // table type
- typedef T Table;
-
- // List node
- struct Node {
- Table table;
- Node* prev;
- Node* next;
- };
-
-public:
- explicit TableList(Node *node = 0) : m_head(node) {}
-
- void add_table(Node *node) {
- m_lock.lock();
-
- if (m_head != 0) {
- node->next = m_head;
- m_head->prev = node;
- }
- m_head = node;
-
- m_lock.unlock();
- }
-
- void remove_table(Node *node) {
- m_lock.lock();
-
- if (node->next != 0) {
- node->next->prev = node->prev;
- }
- if (node->prev != 0) {
- node->prev->next = node->next;
- }
- if (m_head == node) {
- m_head = node->next;
- }
-
- m_lock.unlock();
- }
-
-protected:
- Node* m_head;
- mutex_t m_lock;
-};
-
-// Function lookup table.
-struct FuncTable {
- //! Function table entry
- /*! This table contains functions created from offload regions. */
- /*! Each entry consists of a pointer to the function's "key"
- and the function address. */
- /*! Each shared library or executable may contain one such table. */
- /*! The end of the table is marked with an entry whose name field
- has value -1. */
- struct Entry {
- const char* name; //!< Name of the function
- void* func; //!< Address of the function
- };
-
- // entries
- const Entry *entries;
-
- // max name length
- int64_t max_name_len;
-};
-
-// Function table
-class FuncList : public TableList<FuncTable> {
-public:
- explicit FuncList(Node *node = 0) : TableList<Table>(node),
- m_max_name_len(-1)
- {}
-
- // add table to the list
- void add_table(Node *node) {
- // recalculate max function name length
- m_max_name_len = -1;
-
- // add table
- TableList<Table>::add_table(node);
- }
-
- // find function address for the given name
- const void* find_addr(const char *name);
-
- // find function name for the given address
- const char* find_name(const void *addr);
-
- // max name length from all tables in the list
- int64_t max_name_length(void);
-
- // debug dump
- void dump(void);
-
-private:
- // max name length within from all tables
- int64_t m_max_name_len;
-};
-
-// Table entry for static variables
-struct VarTable {
- //! Variable table entry
- /*! This table contains statically allocated variables marked with
- __declspec(target(mic) or #pragma omp declare target. */
- /*! Each entry consists of a pointer to the variable's "key",
- the variable address and its size in bytes. */
- /*! Because memory allocation is done from the host,
- the MIC table does not need the size of the variable. */
- /*! Padding to make the table entry size a power of 2 is necessary
- to avoid "holes" between table contributions from different object
- files on Windows when debug information is specified with /Zi. */
- struct Entry {
- const char* name; //!< Name of the variable
- void* addr; //!< Address of the variable
-
-#if HOST_LIBRARY
- uint64_t size;
-
-#ifdef TARGET_WINNT
- // padding to make entry size a power of 2
- uint64_t padding;
-#endif // TARGET_WINNT
-#endif
- };
-
- // Table terminated by an entry with name == -1
- const Entry *entries;
-};
-
-// List of var tables
-class VarList : public TableList<VarTable> {
-public:
- VarList() : TableList<Table>()
- {}
-
- // debug dump
- void dump();
-
-public:
- // var table list iterator
- class Iterator : public std::iterator<std::input_iterator_tag,
- Table::Entry> {
- public:
- Iterator() : m_node(0), m_entry(0) {}
-
- explicit Iterator(Node *node) {
- new_node(node);
- }
-
- Iterator& operator++() {
- if (m_entry != 0) {
- m_entry++;
- while (m_entry->name == 0) {
- m_entry++;
- }
- if (m_entry->name == reinterpret_cast<const char*>(-1)) {
- new_node(m_node->next);
- }
- }
- return *this;
- }
-
- bool operator==(const Iterator &other) const {
- return m_entry == other.m_entry;
- }
-
- bool operator!=(const Iterator &other) const {
- return m_entry != other.m_entry;
- }
-
- const Table::Entry* operator*() const {
- return m_entry;
- }
-
- private:
- void new_node(Node *node) {
- m_node = node;
- m_entry = 0;
- while (m_node != 0) {
- m_entry = m_node->table.entries;
- while (m_entry->name == 0) {
- m_entry++;
- }
- if (m_entry->name != reinterpret_cast<const char*>(-1)) {
- break;
- }
- m_node = m_node->next;
- m_entry = 0;
- }
- }
-
- private:
- Node *m_node;
- const Table::Entry *m_entry;
- };
-
- Iterator begin() const {
- return Iterator(m_head);
- }
-
- Iterator end() const {
- return Iterator();
- }
-
-public:
- // Entry representation in a copy buffer
- struct BufEntry {
- intptr_t name;
- intptr_t addr;
- };
-
- // Calculate the number of elements in the table and
- // returns the size of buffer for the table
- int64_t table_size(int64_t &nelems);
-
- // Copy table contents to given buffer. It is supposed to be large
- // enough to hold all elements as string table.
- void table_copy(void *buf, int64_t nelems);
-
- // Patch name offsets in a table after it's been copied to other side
- static void table_patch_names(void *buf, int64_t nelems);
-};
-
-extern FuncList __offload_entries;
-extern FuncList __offload_funcs;
-extern VarList __offload_vars;
-
-// Section names where the lookup tables are stored
-#ifdef TARGET_WINNT
-#define OFFLOAD_ENTRY_TABLE_SECTION_START ".OffloadEntryTable$a"
-#define OFFLOAD_ENTRY_TABLE_SECTION_END ".OffloadEntryTable$z"
-
-#define OFFLOAD_FUNC_TABLE_SECTION_START ".OffloadFuncTable$a"
-#define OFFLOAD_FUNC_TABLE_SECTION_END ".OffloadFuncTable$z"
-
-#define OFFLOAD_VAR_TABLE_SECTION_START ".OffloadVarTable$a"
-#define OFFLOAD_VAR_TABLE_SECTION_END ".OffloadVarTable$z"
-
-#define OFFLOAD_CRTINIT_SECTION_START ".CRT$XCT"
-
-#pragma section(OFFLOAD_CRTINIT_SECTION_START, read)
-
-#else // TARGET_WINNT
-
-#define OFFLOAD_ENTRY_TABLE_SECTION_START ".OffloadEntryTable."
-#define OFFLOAD_ENTRY_TABLE_SECTION_END ".OffloadEntryTable."
-
-#define OFFLOAD_FUNC_TABLE_SECTION_START ".OffloadFuncTable."
-#define OFFLOAD_FUNC_TABLE_SECTION_END ".OffloadFuncTable."
-
-#define OFFLOAD_VAR_TABLE_SECTION_START ".OffloadVarTable."
-#define OFFLOAD_VAR_TABLE_SECTION_END ".OffloadVarTable."
-#endif // TARGET_WINNT
-
-#pragma section(OFFLOAD_ENTRY_TABLE_SECTION_START, read, write)
-#pragma section(OFFLOAD_ENTRY_TABLE_SECTION_END, read, write)
-
-#pragma section(OFFLOAD_FUNC_TABLE_SECTION_START, read, write)
-#pragma section(OFFLOAD_FUNC_TABLE_SECTION_END, read, write)
-
-#pragma section(OFFLOAD_VAR_TABLE_SECTION_START, read, write)
-#pragma section(OFFLOAD_VAR_TABLE_SECTION_END, read, write)
-
-
-// register/unregister given tables
-extern "C" void __offload_register_tables(
- FuncList::Node *entry_table,
- FuncList::Node *func_table,
- VarList::Node *var_table
-);
-
-extern "C" void __offload_unregister_tables(
- FuncList::Node *entry_table,
- FuncList::Node *func_table,
- VarList::Node *var_table
-);
-#endif // OFFLOAD_TABLE_H_INCLUDED
OpenPOWER on IntegriCloud