// 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.voidset_final_data_size();// Write out the compressed contents.voiddo_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)