gdb: add target_ops::supports_displaced_step
[deliverable/binutils-gdb.git] / bfd / elf32-s12z.c
index d2ea4ecaf2f6fb05935d201e4ebdcedb501672bf..3bd828804f17d5b2918838d2ff496c7487299e19 100644 (file)
@@ -1,5 +1,5 @@
 /* Freescale S12Z-specific support for 32-bit ELF
-   Copyright (C) 1999-2018 Free Software Foundation, Inc.
+   Copyright (C) 1999-2020 Free Software Foundation, Inc.
    (Heavily copied from the D10V port by Martin Hunt (hunt@cygnus.com))
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -27,6 +27,9 @@
 
 #include "elf/s12z.h"
 
+/* All users of this file have bfd_octets_per_byte (abfd, sec) == 1.  */
+#define OCTETS_PER_BYTE(ABFD, SEC) 1
+
 /* Relocation functions.  */
 static reloc_howto_type *bfd_elf32_bfd_reloc_type_lookup
   (bfd *, bfd_reloc_code_real_type);
@@ -43,7 +46,8 @@ opru18_reloc (bfd *abfd, arelent *reloc_entry, struct bfd_symbol *symbol,
      is shifted one place to the left of where it would normally be.  See
      Appendix A.4 of the S12Z reference manual.  */
 
-  bfd_size_type octets = reloc_entry->address * bfd_octets_per_byte (abfd);
+  bfd_size_type octets = (reloc_entry->address
+                         * OCTETS_PER_BYTE (abfd, input_section));
   bfd_vma result = bfd_get_24 (abfd, (unsigned char *) data + octets);
   bfd_vma val = bfd_asymbol_value (symbol);
 
@@ -119,7 +123,7 @@ static reloc_howto_type elf_s12z_howto_table[] =
         shift_addend_reloc,
         "R_S12Z_OPR",  /* name */
         FALSE,                 /* partial_inplace */
-        0x00000000,            /* src_mask */
+        0x00ffffff,            /* src_mask */
         0x00ffffff,            /* dst_mask */
         FALSE),                /* pcrel_offset */
 
@@ -183,6 +187,29 @@ static reloc_howto_type elf_s12z_howto_table[] =
         0x0005ffff,            /* dst_mask */
         FALSE),                /* pcrel_offset */
 
+  /* A 32 bit absolute relocation.   This kind of relocation is
+     schizophrenic - Although they appear in sections named .rela.debug.*
+     in some sections they behave as RELA relocs, but in others they have
+     an added of zero and behave as REL.
+
+     It is not recommended that new code  emits this reloc.   It is here
+     only to support existing elf files generated by third party
+     applications.  */
+
+  HOWTO (R_S12Z_CW32,        /* type */
+        0,                     /* rightshift */
+        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        32,                    /* bitsize */
+        FALSE,                 /* pc_relative */
+        0,                     /* bitpos */
+        complain_overflow_bitfield,    /* complain_on_overflow */
+        bfd_elf_generic_reloc, /* special_function */
+        "R_S12Z_CW32", /* name */
+        FALSE,                 /* partial_inplace */
+        0xffffffff,            /* src_mask */
+        0xffffffff,            /* dst_mask */
+        FALSE),                /* pcrel_offset */
+
   /* A 32 bit absolute relocation  */
   HOWTO (R_S12Z_EXT32,        /* type */
         0,                     /* rightshift */
@@ -209,11 +236,12 @@ struct s12z_reloc_map
 
 static const struct s12z_reloc_map s12z_reloc_map[] =
 {
-  /* bfd reloc val */ /* elf reloc val */
-  {BFD_RELOC_NONE, R_S12Z_NONE},
-  {BFD_RELOC_32, R_S12Z_EXT32},
-  {BFD_RELOC_24, R_S12Z_EXT24},
-  {BFD_RELOC_16_PCREL, R_S12Z_PCREL_7_15}
+  /* bfd reloc val */  /* elf reloc val */
+  {BFD_RELOC_NONE,     R_S12Z_NONE},
+  {BFD_RELOC_32,       R_S12Z_EXT32},
+  {BFD_RELOC_24,       R_S12Z_EXT24},
+  {BFD_RELOC_16_PCREL, R_S12Z_PCREL_7_15},
+  {BFD_RELOC_S12Z_OPR, R_S12Z_OPR}
 };
 
 static reloc_howto_type *
@@ -293,7 +321,5 @@ s12z_elf_set_mach_from_flags (bfd *abfd)
 #define elf_info_to_howto                      NULL
 #define elf_info_to_howto_rel                  s12z_info_to_howto_rel
 #define elf_backend_object_p                   s12z_elf_set_mach_from_flags
-#define elf_backend_final_write_processing     NULL
-#define elf_backend_can_gc_sections            1
 
 #include "elf32-target.h"
This page took 0.024879 seconds and 4 git commands to generate.