[GOLD] Re: PowerPC64: Don't pretend to support multi-toc
authorAlan Modra <amodra@gmail.com>
Thu, 14 Oct 2021 06:31:06 +0000 (17:01 +1030)
committerAlan Modra <amodra@gmail.com>
Thu, 14 Oct 2021 09:32:32 +0000 (20:02 +1030)
We can't get at section->address() until everything is laid out, so
trying to generalise the offset calculation rather than using a value
of 0x8000 (the old object->toc_base_offset()) was bound to fail.
got->g_o_t() is a little better than a hard-coded 0x8000.

* powerpc.cc (Target_powerpc::Scan::local, global): Don't use
toc_pointer() here.

gold/powerpc.cc

index d10b11e003b1bce6cb3307b7854da1027e0d4523..4266268d639cc8117c536142670e25b56ab46abe 100644 (file)
@@ -8013,8 +8013,7 @@ Target_powerpc<size, big_endian>::Scan::local(
              break;
 
            Reloc_section* rela_dyn = target->rela_dyn_section(layout);
-           Address got_off = (target->toc_pointer()
-                              - got->output_section()->address());
+           Address got_off = got->g_o_t();
            rela_dyn->add_output_section_relative(got->output_section(),
                                                  elfcpp::R_POWERPC_RELATIVE,
                                                  output_section,
@@ -8740,8 +8739,7 @@ Target_powerpc<size, big_endian>::Scan::global(
              break;
 
            Reloc_section* rela_dyn = target->rela_dyn_section(layout);
-           Address got_off = (target->toc_pointer()
-                              - got->output_section()->address());
+           Address got_off = got->g_o_t();
            rela_dyn->add_output_section_relative(got->output_section(),
                                                  elfcpp::R_POWERPC_RELATIVE,
                                                  output_section,