diff options
author | Nick Clifton <nickc@redhat.com> | 2010-09-08 16:10:33 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2010-09-08 16:10:33 +0000 |
commit | 7f8cd8440375de26ebca766ab281c34522262b53 (patch) | |
tree | ada43984d6bc35a3487c093cb6b1c5b1a988527b /gold/script-sections.h | |
parent | ab3e2b4a1c329818752fe855215d81fe21f88a8b (diff) | |
download | gdb-7f8cd8440375de26ebca766ab281c34522262b53.zip gdb-7f8cd8440375de26ebca766ab281c34522262b53.tar.gz gdb-7f8cd8440375de26ebca766ab281c34522262b53.tar.bz2 |
* README: Remove claim that MEMORY is not supported.
* expression.cc (script_exp_function_origin)
(script_exp_function_length): Move from here to ...
* script.cc: ... here.
(script_set_section_region, script_add_memory)
(script_parse_memory_attr, script_include_directive): New
functions.
* script-sections.cc
(class Memory_region): New class.
(class Output_section_definition): Add set_memory_region,
set_section_vma, set_section_lma and get_section_name methods.
(class Script_Sections): Add add_memory_region,
find_memory_region, find_memory_region_origin,
find_memory_region_length and set_memory_region methods.
Have set_section_addresses method walk the list of set memory
regions.
Extend the print methos to display memory regions.
* script-sections.h: Add prototypes for new methods.
Add enum for MEMORY region attributes.
* yyscript.y: Add support for parsing MEMORY regions.
* script-c.h: Add prototypes for new functions.
* testsuite/Makefile.am: Add test of MEMORY region functionality.
* testsuite/Makefile.in: Regenerate.
* testsuite/memory_test.sh: New script.
* testsuite/memory_test.s: New assembler source file.
* testsuite/memory_test.t: New linker script.
Diffstat (limited to 'gold/script-sections.h')
-rw-r--r-- | gold/script-sections.h | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/gold/script-sections.h b/gold/script-sections.h index f18b06c..1a0b760 100644 --- a/gold/script-sections.h +++ b/gold/script-sections.h @@ -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; @@ -220,6 +221,27 @@ 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. + Memory_region* + find_memory_region(const char*, size_t); + + // 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 +250,7 @@ class Script_sections typedef Sections_elements::iterator Elements_iterator; private: + typedef std::vector<Memory_region*> Memory_regions; typedef std::vector<Phdrs_element*> Phdrs_elements; // Create segments. @@ -271,6 +294,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 +311,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 |