[binutils-gdb/binutils-2_37-branch] [GOLD] PowerPC64 relocation overflow for -Os register save/restore funcs

Alan Modra amodra@sourceware.org
Thu Aug 19 06:13:00 GMT 2021


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=1e9d14eb5814e86fbe146e7632d1b818ab087e2e

commit 1e9d14eb5814e86fbe146e7632d1b818ab087e2e
Author: Alan Modra <amodra@gmail.com>
Date:   Wed Aug 18 12:43:46 2021 +0930

    [GOLD] PowerPC64 relocation overflow for -Os register save/restore funcs
    
    Fixes a silly mistake in calculating the address of -Os out-of-line
    register save/restore function copies.  Copies of these linker defined
    functions are added to stub sections when the original (in
    target->savres_section) can't be reached.
    
            * powerpc.cc (Target_powerpc::Relocate::relocate): Correct address
            calculation of out-of-line save/restore function copies.
    
    (cherry picked from commit 89c905a342d2cb35ebc4d66ad7cdca581b5134c3)

Diff:
---
 gold/powerpc.cc | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/gold/powerpc.cc b/gold/powerpc.cc
index 6b12ed8869b..11b98695e64 100644
--- a/gold/powerpc.cc
+++ b/gold/powerpc.cc
@@ -11201,6 +11201,8 @@ Target_powerpc<size, big_endian>::Relocate::relocate(
 		{
 		  if (ent->save_res_)
 		    value = (value - target->savres_section()->address()
+			     + stub_table->stub_address()
+			     + stub_table->plt_size()
 			     + stub_table->branch_size());
 		  else
 		    {


More information about the Binutils-cvs mailing list