This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] gold: Fix _GLOBAL_OFFSET_TABLE_ value for large GOTs


If this looks ok, could someone with commit access commit this for me? Thanks.


    [GOLD] Fix _GLOBAL_OFFSET_TABLE_ value for large GOTs

    Gold resolves GOT-relative relocs relative to the GOT base +
0x8000 when the GOT
    is larger than 0x8000. However, previously the
_GLOBAL_OFFSET_TABLE_ symbol was
    set to GOT base + 0x8000 when the .got.plt was larger than 0x8000.
This patch
    makes both checks use the size of the .got section so that they
agree when to
    add 0x8000.


    * aarch64.cc (do_finalize_sections): Use size of .got section for
     the _GLOBAL_OFFSET_TABLE_ symbol computation.


diff --git a/gold/aarch64.cc b/gold/aarch64.cc
index 8de9a26765..67f210876d 100644
--- a/gold/aarch64.cc
+++ b/gold/aarch64.cc
@@ -6965,11 +6965,11 @@ Target_aarch64<size, big_endian>::do_finalize_sections(
     }

   // Set the size of the _GLOBAL_OFFSET_TABLE_ symbol to the size of
-  // the .got.plt section.
+  // the .got section.
   Symbol* sym = this->global_offset_table_;
   if (sym != NULL)
     {
-      uint64_t data_size = this->got_plt_->current_data_size();
+      uint64_t data_size = this->got_->current_data_size();
       symtab->get_sized_symbol<size>(sym)->set_symsize(data_size);

       // If the .got section is more than 0x8000 bytes, we add


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]