OSDN Git Service

รจ
authorlaw <law>
Thu, 15 Jul 1999 02:06:03 +0000 (02:06 +0000)
committerlaw <law>
Thu, 15 Jul 1999 02:06:03 +0000 (02:06 +0000)
        * elf-hppa.h (_bfd_elf_hppa_gen_reloc_type, case R_HPPA): Handle
        64bit format.
        (_bfd_elf_hppa_gen_reloc_type, case R_GOTOFF): Use base reloc type
        to derive final type instead of hardwiring a selection.

bfd/elf-hppa.h

index e692c0f..26c863b 100644 (file)
@@ -292,6 +292,9 @@ static reloc_howto_type elf_hppa_howto_table[ELF_HOWTO_TABLE_SIZE] =
   {R_PARISC_LTOFF_TP16DF, 0, 0, 0, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_PARISC_LTOFF_TP16DF", false, 0, 0, false},
 };
 
+#define OFFSET_14R_FROM_21L 4
+#define OFFSET_14F_FROM_21L 5
+
 /* Return one (or more) BFD relocations which implement the base
    relocation with modifications based on format and field.  */
 
@@ -404,6 +407,18 @@ _bfd_elf_hppa_gen_reloc_type (abfd, base_type, format, field, ignore, sym)
            }
          break;
 
+       case 64:
+         switch (field)
+           {
+           case e_fsel:
+             final_type = R_PARISC_DIR64;
+             break;
+           case e_psel:
+           default:
+             return NULL;
+           }
+         break;
+
        default:
          return NULL;
        }
@@ -418,10 +433,10 @@ _bfd_elf_hppa_gen_reloc_type (abfd, base_type, format, field, ignore, sym)
            {
            case e_rsel:
            case e_rrsel:
-             final_type = R_PARISC_DPREL14R;
+             final_type = base_type + OFFSET_14R_FROM_21L;
              break;
            case e_fsel:
-             final_type = R_PARISC_DPREL14F;
+             final_type = base_type + OFFSET_14F_FROM_21L;
              break;
            default:
              return NULL;
@@ -433,7 +448,7 @@ _bfd_elf_hppa_gen_reloc_type (abfd, base_type, format, field, ignore, sym)
            {
            case e_lrsel:
            case e_lsel:
-             final_type = R_PARISC_DPREL21L;
+             final_type = base_type;
              break;
            default:
              return NULL;