aboutsummaryrefslogtreecommitdiff
path: root/gold/dynobj.h
diff options
context:
space:
mode:
Diffstat (limited to 'gold/dynobj.h')
-rw-r--r--gold/dynobj.h56
1 files changed, 56 insertions, 0 deletions
diff --git a/gold/dynobj.h b/gold/dynobj.h
new file mode 100644
index 0000000..99e7883
--- /dev/null
+++ b/gold/dynobj.h
@@ -0,0 +1,56 @@
+// dynobj.h -- dynamic object support for gold -*- C++ -*-
+
+#ifndef GOLD_DYNOBJ_H
+#define GOLD_DYNOBJ_H
+
+#include "object.h"
+
+namespace gold
+{
+
+// A dynamic object (ET_DYN). This is an abstract base class itself.
+// The implementations is the template class Sized_dynobj.
+
+class Dynobj : public Object
+{
+ public:
+ Dynobj(const std::string& name, Input_file* input_file, off_t offset = 0)
+ : Object(name, input_file, true, offset)
+ { }
+};
+
+// A dynamic object, size and endian specific version.
+
+template<int size, bool big_endian>
+class Sized_dynobj : public Dynobj
+{
+ public:
+ Sized_dynobj(const std::string& name, Input_file* input_file, off_t offset,
+ const typename elfcpp::Ehdr<size, big_endian>&);
+
+ // Read the symbols.
+ void
+ do_read_symbols(Read_symbols_data*);
+
+ // Lay out the input sections.
+ void
+ do_layout(const General_options&, Symbol_table*, Layout*,
+ Read_symbols_data*);
+
+ // Add the symbols to the symbol table.
+ void
+ do_add_symbols(Symbol_table*, Read_symbols_data*);
+
+ // Return a view of the contents of a section. Set *PLEN to the
+ // size.
+ const unsigned char*
+ do_section_contents(unsigned int shnum, off_t* plen) = 0;
+
+ // Get the name of a section.
+ std::string
+ do_section_name(unsigned int shnum);
+};
+
+} // End namespace gold.
+
+#endif // !defined(GOLD_DYNOBJ_H)