]> oss.titaniummirror.com Git - msp430-binutils.git/blobdiff - gold/compressed_output.h
Imported binutils-2.20
[msp430-binutils.git] / gold / compressed_output.h
diff --git a/gold/compressed_output.h b/gold/compressed_output.h
new file mode 100644 (file)
index 0000000..11b2762
--- /dev/null
@@ -0,0 +1,74 @@
+// compressed_output.h -- compressed output sections for gold  -*- C++ -*-
+
+// Copyright 2007, 2008 Free Software Foundation, Inc.
+// Written by Ian Lance Taylor <iant@google.com>.
+
+// This file is part of gold.
+
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 3 of the License, or
+// (at your option) any later version.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+// MA 02110-1301, USA.
+
+// We support compressing .debug_* sections on output.  (And,
+// potentially one day, other sections.)  This is a form of
+// relaxation.  This file adds support for merging and emitting the
+// compressed sections.
+
+#ifndef GOLD_COMPRESSED_OUTPUT_H
+#define GOLD_COMPRESSED_OUTPUT_H
+
+#include <string>
+
+#include "output.h"
+
+namespace gold
+{
+
+class General_options;
+
+// This is used for a section whose data should be compressed.  It is
+// a regular Output_section which computes its contents into a buffer
+// and then postprocesses it.
+
+class Output_compressed_section : public Output_section
+{
+ public:
+  Output_compressed_section(const General_options* options,
+                           const char* name, elfcpp::Elf_Word flags,
+                           elfcpp::Elf_Xword type)
+    : Output_section(name, flags, type),
+      options_(options)
+  { this->set_requires_postprocessing(); }
+
+ protected:
+  // Set the final data size.
+  void
+  set_final_data_size();
+
+  // Write out the compressed contents.
+  void
+  do_write(Output_file*);
+
+ private:
+  // The options--this includes the compression type.
+  const General_options* options_;
+  // The compressed data.
+  unsigned char* data_;
+  // The new section name if we do compress.
+  std::string new_section_name_;
+};
+
+} // End namespace gold.
+
+#endif // !defined(GOLD_COMPRESSED_OUTPUT_H)