X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gold%2Fscript-sections.h;h=daf9f64e1a5744374352125f8e632a028e98a895;hb=cfd4e875aeacf565f945c2818dbfff47807b6199;hp=f18b06c7d13a1f2625c56f6ac59dc3ff330c38e4;hpb=f6973bdcb778ca7a54817a696cb0c6457f4ae96f;p=platform%2Fupstream%2Fbinutils.git diff --git a/gold/script-sections.h b/gold/script-sections.h index f18b06c..daf9f64 100644 --- a/gold/script-sections.h +++ b/gold/script-sections.h @@ -1,6 +1,6 @@ // script-sections.h -- linker script SECTIONS for gold -*- C++ -*- -// Copyright 2008, 2009 Free Software Foundation, Inc. +// Copyright (C) 2008-2014 Free Software Foundation, Inc. // Written by Ian Lance Taylor . // This file is part of gold. @@ -37,6 +37,7 @@ struct Parser_output_section_trailer; struct Input_section_spec; class Expression; class Sections_element; +class Memory_region; class Phdrs_element; class Output_data; class Output_section_definition; @@ -46,13 +47,11 @@ class Orphan_section_placement; class Script_sections { - private: + public: // This is a list, not a vector, because we insert orphan sections // in the middle. typedef std::list Sections_elements; - public: - // Logical script section types. We map section types returned by the // parser into these since some section types have the same semantics. enum Section_type @@ -164,10 +163,12 @@ class Script_sections // PSCRIPT_SECTION_TYPE points to a location for returning the section // type specified in script. This can be SCRIPT_SECTION_TYPE_NONE if // no type is specified. + // *KEEP indicates whether the section should survive garbage collection. const char* output_section_name(const char* file_name, const char* section_name, Output_section*** output_section_slot, - Section_type* pscript_section_type); + Section_type* pscript_section_type, + bool* keep); // Place a marker for an orphan output section into the SECTIONS // clause. @@ -220,6 +221,37 @@ class Script_sections set_saw_segment_start_expression(bool value) { this->saw_segment_start_expression_ = value; } + // Add a memory region. + void + add_memory_region(const char*, size_t, unsigned int, + Expression*, Expression*); + + // Find a memory region's origin. + Expression* + find_memory_region_origin(const char*, size_t); + + // Find a memory region's length. + Expression* + find_memory_region_length(const char*, size_t); + + // Find a memory region by name. + Memory_region* + find_memory_region(const char*, size_t); + + // Find a memory region that should be used by a given output section. + Memory_region* + find_memory_region(Output_section_definition*, bool, + Output_section_definition**); + + // Returns true if the provide block of memory is contained + // within a memory region. + bool + block_in_region(Symbol_table*, Layout*, uint64_t, uint64_t) const; + + // Set the memory region of the section. + void + set_memory_region(Memory_region*, bool); + // Print the contents to the FILE. This is for debugging. void print(FILE*) const; @@ -228,6 +260,7 @@ class Script_sections typedef Sections_elements::iterator Elements_iterator; private: + typedef std::vector Memory_regions; typedef std::vector Phdrs_elements; // Create segments. @@ -271,6 +304,8 @@ class Script_sections Sections_elements* sections_elements_; // The current output section, if there is one. Output_section_definition* output_section_; + // The list of memory regions in the MEMORY clause. + Memory_regions* memory_regions_; // The list of program headers in the PHDRS clause. Phdrs_elements* phdrs_elements_; // Where to put orphan sections. @@ -286,6 +321,17 @@ class Script_sections bool saw_segment_start_expression_; }; +// Attributes for memory regions. +enum +{ + MEM_EXECUTABLE = (1 << 0), + MEM_WRITEABLE = (1 << 1), + MEM_READABLE = (1 << 2), + MEM_ALLOCATABLE = (1 << 3), + MEM_INITIALIZED = (1 << 4), + MEM_ATTR_MASK = (1 << 5) - 1 +}; + } // End namespace gold. #endif // !defined(GOLD_SCRIPT_SECTIONS_H