* config/ia64.c (enum reloc_func): Add FUNC_LT_RELATIVE_X.
authorRichard Henderson <rth@redhat.com>
Thu, 5 Dec 2002 23:20:40 +0000 (23:20 +0000)
committerRichard Henderson <rth@redhat.com>
Thu, 5 Dec 2002 23:20:40 +0000 (23:20 +0000)
        (ia64_gen_real_reloc_type): Handle it.
        (pseudo_func): Add @ltoffx.
        (md_begin): Build .<ltoffx>.
        (ia64_force_relocation): True for LTOFF22X and LDXMOV.

        * gas/ia64/ltoff22x-1.[ds]: New.
        * gas/ia64/ia64.exp: Run it.

gas/ChangeLog
gas/config/tc-ia64.c
gas/testsuite/ChangeLog
gas/testsuite/gas/ia64/ia64.exp
gas/testsuite/gas/ia64/ltoff22x-1.d [new file with mode: 0644]
gas/testsuite/gas/ia64/ltoff22x-1.s [new file with mode: 0644]

index 4283fea..fbc9ba0 100644 (file)
@@ -1,3 +1,11 @@
+2002-12-05  Richard Henderson  <rth@redhat.com>
+
+       * config/ia64.c (enum reloc_func): Add FUNC_LT_RELATIVE_X.
+       (ia64_gen_real_reloc_type): Handle it.
+       (pseudo_func): Add @ltoffx.
+       (md_begin): Build .<ltoffx>.
+       (ia64_force_relocation): True for LTOFF22X and LDXMOV.
+
 2002-12-05  Alan Modra  <amodra@bigpond.net.au>
 
        * config/tc-arm.c (arm_force_relocation): Move out of #if OBJ_ELF.
index cd14e31..1feedf5 100644 (file)
@@ -82,6 +82,7 @@ enum reloc_func
     FUNC_FPTR_RELATIVE,
     FUNC_GP_RELATIVE,
     FUNC_LT_RELATIVE,
+    FUNC_LT_RELATIVE_X,
     FUNC_PC_RELATIVE,
     FUNC_PLT_RELATIVE,
     FUNC_SEC_RELATIVE,
@@ -487,6 +488,7 @@ pseudo_func[] =
     { "fptr",  PSEUDO_FUNC_RELOC, { 0 } },
     { "gprel", PSEUDO_FUNC_RELOC, { 0 } },
     { "ltoff", PSEUDO_FUNC_RELOC, { 0 } },
+    { "ltoffx",        PSEUDO_FUNC_RELOC, { 0 } },
     { "pcrel", PSEUDO_FUNC_RELOC, { 0 } },
     { "pltoff",        PSEUDO_FUNC_RELOC, { 0 } },
     { "secrel",        PSEUDO_FUNC_RELOC, { 0 } },
@@ -6544,6 +6546,10 @@ md_begin ()
     symbol_new (".<ltoff>", undefined_section, FUNC_LT_RELATIVE,
                &zero_address_frag);
 
+  pseudo_func[FUNC_LT_RELATIVE_X].u.sym =
+    symbol_new (".<ltoffx>", undefined_section, FUNC_LT_RELATIVE_X,
+               &zero_address_frag);
+
   pseudo_func[FUNC_PC_RELATIVE].u.sym =
     symbol_new (".<pcrel>", undefined_section, FUNC_PC_RELATIVE,
                &zero_address_frag);
@@ -10000,6 +10006,9 @@ ia64_force_relocation (fix)
     case BFD_RELOC_IA64_PLTOFF64I:
     case BFD_RELOC_IA64_PLTOFF64MSB:
     case BFD_RELOC_IA64_PLTOFF64LSB:
+
+    case BFD_RELOC_IA64_LTOFF22X:
+    case BFD_RELOC_IA64_LDXMOV:
       return 1;
 
     default:
@@ -10160,6 +10169,14 @@ ia64_gen_real_reloc_type (sym, r_type)
        }
       break;
 
+    case FUNC_LT_RELATIVE_X:
+      switch (r_type)
+       {
+       case BFD_RELOC_IA64_IMM22:      new = BFD_RELOC_IA64_LTOFF22X; break;
+       default:                        break;
+       }
+      break;
+
     case FUNC_PC_RELATIVE:
       switch (r_type)
        {
index d28d961..61ad4c2 100644 (file)
@@ -1,3 +1,8 @@
+2002-12-05  Richard Henderson  <rth@redhat.com>
+
+       * gas/ia64/ltoff22x-1.[ds]: New.
+       * gas/ia64/ia64.exp: Run it.
+
 2002-12-05  Jim Wilson  <wilson@redhat.com>
 
        * gas/ia64/opc-x.d: Regenerate. 
index 6c44468..3a672a7 100644 (file)
@@ -38,4 +38,5 @@ if [istarget "ia64-*"] then {
     run_dump_test "tls"
     run_dump_test "ldxmov-1"
     run_list_test "ldxmov-2" ""
+    run_dump_test "ltoff22x-1"
 }
diff --git a/gas/testsuite/gas/ia64/ltoff22x-1.d b/gas/testsuite/gas/ia64/ltoff22x-1.d
new file mode 100644 (file)
index 0000000..6eef416
--- /dev/null
@@ -0,0 +1,10 @@
+# objdump: -r
+# name: ia64 ltoff22x-1
+
+.*: +file format .*
+
+RELOCATION RECORDS FOR \[\.text\]:
+OFFSET           TYPE              VALUE 
+0000000000000000 LTOFF22X          foo
+
+
diff --git a/gas/testsuite/gas/ia64/ltoff22x-1.s b/gas/testsuite/gas/ia64/ltoff22x-1.s
new file mode 100644 (file)
index 0000000..d7be940
--- /dev/null
@@ -0,0 +1,4 @@
+       .text
+       addl    r3 = @ltoffx(foo#), gp
+       nop.i   0
+       nop.i   0