Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/external/gpl3/binutils/dist Create references as absolute po...



details:   https://anonhg.NetBSD.org/src/rev/45f27fa7af77
branches:  trunk
changeset: 355183:45f27fa7af77
user:      joerg <joerg%NetBSD.org@localhost>
date:      Mon Jul 17 19:50:23 2017 +0000

description:
Create references as absolute pointers internally for .cfi*.
Do not warn for anonymous relocations in read-only .eh_frame,
they will be turned into relative entries afterwards.

diffstat:

 external/gpl3/binutils/dist/bfd/elfxx-mips.c     |  10 ++++++++--
 external/gpl3/binutils/dist/gas/config/tc-mips.h |   2 +-
 2 files changed, 9 insertions(+), 3 deletions(-)

diffs (36 lines):

diff -r 208f36dfb293 -r 45f27fa7af77 external/gpl3/binutils/dist/bfd/elfxx-mips.c
--- a/external/gpl3/binutils/dist/bfd/elfxx-mips.c      Mon Jul 17 18:43:45 2017 +0000
+++ b/external/gpl3/binutils/dist/bfd/elfxx-mips.c      Mon Jul 17 19:50:23 2017 +0000
@@ -8596,12 +8596,18 @@
                  /* In the N32 and 64-bit ABIs there may be multiple
                     consecutive relocations for the same offset.  If we have
                     a R_MIPS_GPREL32 followed by a R_MIPS_64 then that
-                    relocation is complete and needs no futher adjustment.  */
+                    relocation is complete and needs no futher adjustment.
+                    
+                    Silently ignore absolute relocations in the .eh_frame
+                    section, they will be dropped latter.
+                  */
                  if ((rel == relocs
                      || rel[-1].r_offset != rel->r_offset
                      || r_type != R_MIPS_64
                      || ELF_R_TYPE(abfd, rel[-1].r_info) != R_MIPS_GPREL32)
-                     && MIPS_ELF_READONLY_SECTION (sec))
+                     && MIPS_ELF_READONLY_SECTION (sec)
+                     && !((r_type == R_MIPS_32 || r_type == R_MIPS_64)
+                          && strcmp(sec->name, ".eh_frame") == 0))
                    {
                      /* We tell the dynamic linker that there are
                         relocations against the text segment.  */
diff -r 208f36dfb293 -r 45f27fa7af77 external/gpl3/binutils/dist/gas/config/tc-mips.h
--- a/external/gpl3/binutils/dist/gas/config/tc-mips.h  Mon Jul 17 18:43:45 2017 +0000
+++ b/external/gpl3/binutils/dist/gas/config/tc-mips.h  Mon Jul 17 19:50:23 2017 +0000
@@ -178,7 +178,7 @@
 #define DWARF2_ADDR_SIZE(bfd) mips_dwarf2_addr_size ()
 #define DWARF2_FDE_RELOC_SIZE (compact_eh ? 4 : mips_dwarf2_addr_size ())
 #define DWARF2_FDE_RELOC_ENCODING(enc) \
-  (enc | (compact_eh ? DW_EH_PE_pcrel : 0))
+  (compact_eh ? (enc)|DW_EH_PE_pcrel : DW_EH_PE_absptr)
 
 #define TARGET_USE_CFIPOP 1
 



Home | Main Index | Thread Index | Old Index