diff options
author | Ian Lance Taylor <iant@google.com> | 2006-12-01 16:51:25 +0000 |
---|---|---|
committer | Ian Lance Taylor <iant@google.com> | 2006-12-01 16:51:25 +0000 |
commit | 16649710df23ad9038e0057035882a92e783f7e6 (patch) | |
tree | 7d4db6bb5578f6c90193108bc525a39f09ab379d /gold/layout.h | |
parent | 8a82f7e3921015b4cbadf29379d8af9d9f6af891 (diff) | |
download | gdb-16649710df23ad9038e0057035882a92e783f7e6.zip gdb-16649710df23ad9038e0057035882a92e783f7e6.tar.gz gdb-16649710df23ad9038e0057035882a92e783f7e6.tar.bz2 |
Can now dynamically link hello, world.
Diffstat (limited to 'gold/layout.h')
-rw-r--r-- | gold/layout.h | 50 |
1 files changed, 40 insertions, 10 deletions
diff --git a/gold/layout.h b/gold/layout.h index 26948bb..4c54e00 100644 --- a/gold/layout.h +++ b/gold/layout.h @@ -89,6 +89,12 @@ class Layout sympool() const { return &this->sympool_; } + // Return the Stringpool used for dynamic symbol names and dynamic + // tags. + const Stringpool* + dynpool() const + { return &this->dynpool_; } + // Return whether a section is a .gnu.linkonce section, given the // section name. static inline bool @@ -106,11 +112,33 @@ class Layout off_t finalize(const Input_objects*, Symbol_table*); - // Return the TLS segment. + // Return the TLS segment. This will return NULL if there isn't + // one. Output_segment* tls_segment() const { return this->tls_segment_; } + // Return the normal symbol table. + Output_section* + symtab_section() const + { + gold_assert(this->symtab_section_ != NULL); + return this->symtab_section_; + } + + // Return the dynamic symbol table. + Output_section* + dynsym_section() const + { + gold_assert(this->dynsym_section_ != NULL); + return this->dynsym_section_; + } + + // Return the dynamic tags. + Output_data_dynamic* + dynamic_data() const + { return this->dynamic_data_; } + // Write out data not associated with an input file or the symbol // table. void @@ -160,8 +188,8 @@ class Layout // Create the output sections for the symbol table. void - create_symtab_sections(int size, const Input_objects*, Symbol_table*, off_t*, - Output_section** ostrtab); + create_symtab_sections(int size, const Input_objects*, Symbol_table*, + off_t*); // Create the .shstrtab section. Output_section* @@ -173,12 +201,11 @@ class Layout // Create the dynamic symbol table. void - create_dynamic_symtab(const Target*, Output_data_dynamic*, Symbol_table*); + create_dynamic_symtab(const Target*, Symbol_table*); // Finish the .dynamic section and PT_DYNAMIC segment. void - finish_dynamic_section(const Input_objects*, const Symbol_table*, - Output_data_dynamic*); + finish_dynamic_section(const Input_objects*, const Symbol_table*); // Create the .interp section and PT_INTERP segment. void @@ -284,6 +311,8 @@ class Layout Output_section* dynsym_section_; // The SHT_DYNAMIC output section if there is one. Output_section* dynamic_section_; + // The dynamic data which goes into dynamic_section_. + Output_data_dynamic* dynamic_data_; }; // This task handles writing out data which is not part of a section @@ -324,10 +353,10 @@ class Write_symbols_task : public Task { public: Write_symbols_task(const Symbol_table* symtab, const Target* target, - const Stringpool* sympool, Output_file* of, - Task_token* final_blocker) - : symtab_(symtab), target_(target), sympool_(sympool), of_(of), - final_blocker_(final_blocker) + const Stringpool* sympool, const Stringpool* dynpool, + Output_file* of, Task_token* final_blocker) + : symtab_(symtab), target_(target), sympool_(sympool), dynpool_(dynpool), + of_(of), final_blocker_(final_blocker) { } // The standard Task methods. @@ -345,6 +374,7 @@ class Write_symbols_task : public Task const Symbol_table* symtab_; const Target* target_; const Stringpool* sympool_; + const Stringpool* dynpool_; Output_file* of_; Task_token* final_blocker_; }; |