Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(71)

Side by Side Diff: gold/output.h

Issue 10252012: [MIPS] Initial checkin for MIPS changes for GOLD. (Closed)
Patch Set: Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // output.h -- manage the output file for gold -*- C++ -*- 1 // output.h -- manage the output file for gold -*- C++ -*-
2 2
3 // Copyright 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. 3 // Copyright 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
4 // Written by Ian Lance Taylor <iant@google.com>. 4 // Written by Ian Lance Taylor <iant@google.com>.
5 5
6 // This file is part of gold. 6 // This file is part of gold.
7 7
8 // This program is free software; you can redistribute it and/or modify 8 // This program is free software; you can redistribute it and/or modify
9 // it under the terms of the GNU General Public License as published by 9 // it under the terms of the GNU General Public License as published by
10 // the Free Software Foundation; either version 3 of the License, or 10 // the Free Software Foundation; either version 3 of the License, or
(...skipping 1758 matching lines...) Expand 10 before | Expand all | Expand 10 after
1769 gold_assert(addend == 0); 1769 gold_assert(addend == 0);
1770 Sized_relobj<size, big_endian>* sized_relobj = 1770 Sized_relobj<size, big_endian>* sized_relobj =
1771 static_cast<Sized_relobj<size, big_endian>*>(relobj); 1771 static_cast<Sized_relobj<size, big_endian>*>(relobj);
1772 this->add(od, Output_reloc_type(os, type, sized_relobj, shndx, 1772 this->add(od, Output_reloc_type(os, type, sized_relobj, shndx,
1773 convert_types<Address, uint64_t>(address))); 1773 convert_types<Address, uint64_t>(address)));
1774 } 1774 }
1775 1775
1776 // Add an absolute relocation. 1776 // Add an absolute relocation.
1777 1777
1778 void 1778 void
1779 add_absolute_null(unsigned int type, Output_data* od, Address address)
robertm 2012/04/27 19:46:15 in the spirit of keeping the deltas small - can th
Aleksandar Simeonov 2012/05/08 15:21:42 Since R_MIPS_NONE entry with address 0 has to be f
1780 { this->add(od, Output_reloc_type(type, NULL, address)); }
1781
1782 void
1779 add_absolute(unsigned int type, Output_data* od, Address address) 1783 add_absolute(unsigned int type, Output_data* od, Address address)
1780 { this->add(od, Output_reloc_type(type, od, address)); } 1784 { this->add(od, Output_reloc_type(type, od, address)); }
1781 1785
1782 void 1786 void
1783 add_absolute(unsigned int type, Output_data* od, 1787 add_absolute(unsigned int type, Output_data* od,
1784 Sized_relobj<size, big_endian>* relobj, 1788 Sized_relobj<size, big_endian>* relobj,
1785 unsigned int shndx, Address address) 1789 unsigned int shndx, Address address)
1786 { this->add(od, Output_reloc_type(type, relobj, shndx, address)); } 1790 { this->add(od, Output_reloc_type(type, relobj, shndx, address)); }
1787 1791
1788 // Add a target specific relocation. A target which calls this must 1792 // Add a target specific relocation. A target which calls this must
(...skipping 628 matching lines...) Expand 10 before | Expand all | Expand 10 after
2417 2421
2418 // Add a new dynamic entry with a string. 2422 // Add a new dynamic entry with a string.
2419 void 2423 void
2420 add_string(elfcpp::DT tag, const char* str) 2424 add_string(elfcpp::DT tag, const char* str)
2421 { this->add_entry(Dynamic_entry(tag, this->pool_->add(str, true, NULL))); } 2425 { this->add_entry(Dynamic_entry(tag, this->pool_->add(str, true, NULL))); }
2422 2426
2423 void 2427 void
2424 add_string(elfcpp::DT tag, const std::string& str) 2428 add_string(elfcpp::DT tag, const std::string& str)
2425 { this->add_string(tag, str.c_str()); } 2429 { this->add_string(tag, str.c_str()); }
2426 2430
2431 // Add a new dynamic entry with target specific value.
2432 void
2433 add_target_specific(elfcpp::DT tag)
2434 { this->add_entry(Dynamic_entry(tag)); }
2435
2427 protected: 2436 protected:
2428 // Adjust the output section to set the entry size. 2437 // Adjust the output section to set the entry size.
2429 void 2438 void
2430 do_adjust_output_section(Output_section*); 2439 do_adjust_output_section(Output_section*);
2431 2440
2432 // Set the final data size. 2441 // Set the final data size.
2433 void 2442 void
2434 set_final_data_size(); 2443 set_final_data_size();
2435 2444
2436 // Write out the dynamic entries. 2445 // Write out the dynamic entries.
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
2481 // Create an entry with the address of a symbol. 2490 // Create an entry with the address of a symbol.
2482 Dynamic_entry(elfcpp::DT tag, const Symbol* sym) 2491 Dynamic_entry(elfcpp::DT tag, const Symbol* sym)
2483 : tag_(tag), offset_(DYNAMIC_SYMBOL) 2492 : tag_(tag), offset_(DYNAMIC_SYMBOL)
2484 { this->u_.sym = sym; } 2493 { this->u_.sym = sym; }
2485 2494
2486 // Create an entry with a string. 2495 // Create an entry with a string.
2487 Dynamic_entry(elfcpp::DT tag, const char* str) 2496 Dynamic_entry(elfcpp::DT tag, const char* str)
2488 : tag_(tag), offset_(DYNAMIC_STRING) 2497 : tag_(tag), offset_(DYNAMIC_STRING)
2489 { this->u_.str = str; } 2498 { this->u_.str = str; }
2490 2499
2500 // Create an entry with a target specific value.
2501 Dynamic_entry(elfcpp::DT tag)
2502 : tag_(tag), offset_(DYNAMIC_TARGET)
2503 { };
2504
2491 // Return the tag of this entry. 2505 // Return the tag of this entry.
2492 elfcpp::DT 2506 elfcpp::DT
2493 tag() const 2507 tag() const
2494 { return this->tag_; } 2508 { return this->tag_; }
2495 2509
2496 // Write the dynamic entry to an output view. 2510 // Write the dynamic entry to an output view.
2497 template<int size, bool big_endian> 2511 template<int size, bool big_endian>
2498 void 2512 void
2499 write(unsigned char* pov, const Stringpool*) const; 2513 write(unsigned char* pov, const Stringpool*) const;
2500 2514
2501 private: 2515 private:
2502 // Classification is encoded in the OFFSET field. 2516 // Classification is encoded in the OFFSET field.
2503 enum Classification 2517 enum Classification
2504 { 2518 {
2505 // Section address. 2519 // Section address.
2506 DYNAMIC_SECTION_ADDRESS = 0, 2520 DYNAMIC_SECTION_ADDRESS = 0,
2507 // Number. 2521 // Number.
2508 DYNAMIC_NUMBER = -1U, 2522 DYNAMIC_NUMBER = -1U,
2509 // Section size. 2523 // Section size.
2510 DYNAMIC_SECTION_SIZE = -2U, 2524 DYNAMIC_SECTION_SIZE = -2U,
2511 // Symbol adress. 2525 // Symbol adress.
2512 DYNAMIC_SYMBOL = -3U, 2526 DYNAMIC_SYMBOL = -3U,
2513 // String. 2527 // String.
2514 DYNAMIC_STRING = -4U 2528 DYNAMIC_STRING = -4U,
2529 // Target specific value.
2530 DYNAMIC_TARGET = -5U
2515 // Any other value indicates a section address plus OFFSET. 2531 // Any other value indicates a section address plus OFFSET.
2516 }; 2532 };
2517 2533
2518 union 2534 union
2519 { 2535 {
2520 // For DYNAMIC_NUMBER. 2536 // For DYNAMIC_NUMBER.
2521 unsigned int val; 2537 unsigned int val;
2522 // For DYNAMIC_SECTION_SIZE and section address plus OFFSET. 2538 // For DYNAMIC_SECTION_SIZE and section address plus OFFSET.
2523 const Output_data* od; 2539 const Output_data* od;
2524 // For DYNAMIC_SYMBOL. 2540 // For DYNAMIC_SYMBOL.
(...skipping 2078 matching lines...) Expand 10 before | Expand all | Expand 10 after
4603 bool map_is_anonymous_; 4619 bool map_is_anonymous_;
4604 // True if base_ was allocated using new rather than mmap. 4620 // True if base_ was allocated using new rather than mmap.
4605 bool map_is_allocated_; 4621 bool map_is_allocated_;
4606 // True if this is a temporary file which should not be output. 4622 // True if this is a temporary file which should not be output.
4607 bool is_temporary_; 4623 bool is_temporary_;
4608 }; 4624 };
4609 4625
4610 } // End namespace gold. 4626 } // End namespace gold.
4611 4627
4612 #endif // !defined(GOLD_OUTPUT_H) 4628 #endif // !defined(GOLD_OUTPUT_H)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698