summaryrefslogtreecommitdiffstats
path: root/binutils-2.25/gold/compressed_output.h
diff options
context:
space:
mode:
Diffstat (limited to 'binutils-2.25/gold/compressed_output.h')
-rw-r--r--binutils-2.25/gold/compressed_output.h86
1 files changed, 86 insertions, 0 deletions
diff --git a/binutils-2.25/gold/compressed_output.h b/binutils-2.25/gold/compressed_output.h
new file mode 100644
index 00000000..2d6ebd95
--- /dev/null
+++ b/binutils-2.25/gold/compressed_output.h
@@ -0,0 +1,86 @@
+// compressed_output.h -- compressed output sections for gold -*- C++ -*-
+
+// Copyright 2007, 2008, 2010 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;
+
+// Read the compression header of a compressed debug section and return
+// the uncompressed size.
+
+extern uint64_t
+get_uncompressed_size(const unsigned char*, section_size_type);
+
+// Decompress a compressed debug section directly into the output file.
+
+extern bool
+decompress_input_section(const unsigned char*, unsigned long, unsigned char*,
+ unsigned long);
+
+// 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)