From fa2c7effe700e9bd50092557403e118c702ffde8 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Thu, 5 Dec 2002 23:20:40 +0000 Subject: [PATCH] * 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 .. (ia64_force_relocation): True for LTOFF22X and LDXMOV. * gas/ia64/ltoff22x-1.[ds]: New. * gas/ia64/ia64.exp: Run it. --- gas/ChangeLog | 8 ++++++++ gas/config/tc-ia64.c | 17 +++++++++++++++++ gas/testsuite/ChangeLog | 5 +++++ gas/testsuite/gas/ia64/ia64.exp | 1 + gas/testsuite/gas/ia64/ltoff22x-1.d | 10 ++++++++++ gas/testsuite/gas/ia64/ltoff22x-1.s | 4 ++++ 6 files changed, 45 insertions(+) create mode 100644 gas/testsuite/gas/ia64/ltoff22x-1.d create mode 100644 gas/testsuite/gas/ia64/ltoff22x-1.s diff --git a/gas/ChangeLog b/gas/ChangeLog index 4283fea5bfe..fbc9ba0af19 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,11 @@ +2002-12-05 Richard Henderson + + * 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 .. + (ia64_force_relocation): True for LTOFF22X and LDXMOV. + 2002-12-05 Alan Modra * config/tc-arm.c (arm_force_relocation): Move out of #if OBJ_ELF. diff --git a/gas/config/tc-ia64.c b/gas/config/tc-ia64.c index cd14e3129bd..1feedf56375 100644 --- a/gas/config/tc-ia64.c +++ b/gas/config/tc-ia64.c @@ -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 (".", undefined_section, FUNC_LT_RELATIVE, &zero_address_frag); + pseudo_func[FUNC_LT_RELATIVE_X].u.sym = + symbol_new (".", undefined_section, FUNC_LT_RELATIVE_X, + &zero_address_frag); + pseudo_func[FUNC_PC_RELATIVE].u.sym = symbol_new (".", 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) { diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index d28d9613c2f..61ad4c20577 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2002-12-05 Richard Henderson + + * gas/ia64/ltoff22x-1.[ds]: New. + * gas/ia64/ia64.exp: Run it. + 2002-12-05 Jim Wilson * gas/ia64/opc-x.d: Regenerate. diff --git a/gas/testsuite/gas/ia64/ia64.exp b/gas/testsuite/gas/ia64/ia64.exp index 6c44468b6f6..3a672a76403 100644 --- a/gas/testsuite/gas/ia64/ia64.exp +++ b/gas/testsuite/gas/ia64/ia64.exp @@ -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 index 00000000000..6eef416b423 --- /dev/null +++ b/gas/testsuite/gas/ia64/ltoff22x-1.d @@ -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 index 00000000000..d7be940c7bd --- /dev/null +++ b/gas/testsuite/gas/ia64/ltoff22x-1.s @@ -0,0 +1,4 @@ + .text + addl r3 = @ltoffx(foo#), gp + nop.i 0 + nop.i 0 -- 2.30.2