This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

ia64 ltoffx support


Assembler support.  The linker already has trivial non-relaxing
support for ltoff22x and ldxmov.  Relaxing support to come next.


r~


        * 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.

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

Index: config/tc-ia64.c
===================================================================
RCS file: /cvs/src/src/gas/config/tc-ia64.c,v
retrieving revision 1.75
diff -u -p -r1.75 tc-ia64.c
--- config/tc-ia64.c	5 Dec 2002 02:08:01 -0000	1.75
+++ config/tc-ia64.c	5 Dec 2002 23:13:42 -0000
@@ -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:
@@ -10156,6 +10165,14 @@ ia64_gen_real_reloc_type (sym, r_type)
 	{
 	case BFD_RELOC_IA64_IMM22:	new = BFD_RELOC_IA64_LTOFF22; break;
 	case BFD_RELOC_IA64_IMM64:	new = BFD_RELOC_IA64_LTOFF64I; break;
+	default:			break;
+	}
+      break;
+
+    case FUNC_LT_RELATIVE_X:
+      switch (r_type)
+	{
+	case BFD_RELOC_IA64_IMM22:	new = BFD_RELOC_IA64_LTOFF22X; break;
 	default:			break;
 	}
       break;
Index: testsuite/gas/ia64/ia64.exp
===================================================================
RCS file: /cvs/src/src/gas/testsuite/gas/ia64/ia64.exp,v
retrieving revision 1.3
diff -u -p -r1.3 ia64.exp
--- testsuite/gas/ia64/ia64.exp	3 Dec 2002 18:15:46 -0000	1.3
+++ testsuite/gas/ia64/ia64.exp	5 Dec 2002 23:13:44 -0000
@@ -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"
 }
Index: testsuite/gas/ia64/ltoff22x-1.d
===================================================================
RCS file: testsuite/gas/ia64/ltoff22x-1.d
diff -N testsuite/gas/ia64/ltoff22x-1.d
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ testsuite/gas/ia64/ltoff22x-1.d	5 Dec 2002 23:13:44 -0000
@@ -0,0 +1,10 @@
+# objdump: -r
+# name: ia64 ltoff22x-1
+
+.*: +file format .*
+
+RELOCATION RECORDS FOR \[\.text\]:
+OFFSET           TYPE              VALUE 
+0000000000000000 LTOFF22X          foo
+
+
Index: testsuite/gas/ia64/ltoff22x-1.s
===================================================================
RCS file: testsuite/gas/ia64/ltoff22x-1.s
diff -N testsuite/gas/ia64/ltoff22x-1.s
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ testsuite/gas/ia64/ltoff22x-1.s	5 Dec 2002 23:13:44 -0000
@@ -0,0 +1,4 @@
+	.text
+	addl	r3 = @ltoffx(foo#), gp
+	nop.i	0
+	nop.i	0


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]