aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Wilson <wilson@tuliptree.org>2001-02-14 01:46:10 +0000
committerJim Wilson <wilson@tuliptree.org>2001-02-14 01:46:10 +0000
commitfa1cb89ccc52f3e55a7de0d94b100cf3694f273e (patch)
tree904524812bcc43e4aa22817516b11155388789b6
parent6757257fb58bd0b5bd75e2d9230aae7da4559618 (diff)
downloadgdb-fa1cb89ccc52f3e55a7de0d94b100cf3694f273e.zip
gdb-fa1cb89ccc52f3e55a7de0d94b100cf3694f273e.tar.gz
gdb-fa1cb89ccc52f3e55a7de0d94b100cf3694f273e.tar.bz2
Address comment from Richard about relocs always needing a type.
* config/tc-ia64.c (operand_match, case TAG13): Make a BFD_RELOC_UNUSED reloc instead of a 0 reloc. (md_apply_fix3): Check for BFD_RELOC_UNUSED instead of 0, and mark it as done. * config/tc-ia64.h (TC_RELOC_RTSYM_LOC_FIXUP): Likewise.
-rw-r--r--gas/ChangeLog8
-rw-r--r--gas/config/tc-ia64.c16
-rw-r--r--gas/config/tc-ia64.h5
3 files changed, 21 insertions, 8 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index a2e30b1..3b3c450 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,11 @@
+2001-02-13 Jim Wilson <wilson@redhat.com>
+
+ * config/tc-ia64.c (operand_match, case TAG13): Make a BFD_RELOC_UNUSED
+ reloc instead of a 0 reloc.
+ (md_apply_fix3): Check for BFD_RELOC_UNUSED instead of 0, and mark it
+ as done.
+ * config/tc-ia64.h (TC_RELOC_RTSYM_LOC_FIXUP): Likewise.
+
2001-02-13 Ian Lance Taylor <ian@zembu.com>
* write.c (is_dnrange): Stop as soon as the address becomes
diff --git a/gas/config/tc-ia64.c b/gas/config/tc-ia64.c
index 8f82739..df566e2 100644
--- a/gas/config/tc-ia64.c
+++ b/gas/config/tc-ia64.c
@@ -5165,7 +5165,10 @@ operand_match (idesc, index, e)
case O_symbol:
fix = CURR_SLOT.fixup + CURR_SLOT.num_fixups;
- fix->code = ia64_gen_real_reloc_type (e->X_op_symbol, 0);
+ /* There are no external relocs for TAG13/TAG13b fields, so we
+ create a dummy reloc. This will not live past md_apply_fix3. */
+ fix->code = BFD_RELOC_UNUSED;
+ fix->code = ia64_gen_real_reloc_type (e->X_op_symbol, fix->code);
fix->opnd = idesc->operands[index];
fix->expr = *e;
fix->is_pcrel = 1;
@@ -9804,16 +9807,15 @@ md_apply_fix3 (fix, valuep, seg)
}
if (fix->fx_addsy)
{
- switch (fix->fx_r_type)
+ if (fix->fx_r_type == (int) BFD_RELOC_UNUSED)
{
- case 0:
+ /* This must be a TAG13 or TAG13b operand. There are no external
+ relocs defined for them, so we must give an error. */
as_bad_where (fix->fx_file, fix->fx_line,
"%s must have a constant value",
elf64_ia64_operands[fix->tc_fix_data.opnd].desc);
- break;
-
- default:
- break;
+ fix->fx_done = 1;
+ return 1;
}
/* ??? This is a hack copied from tc-i386.c to make PCREL relocs
diff --git a/gas/config/tc-ia64.h b/gas/config/tc-ia64.h
index f2b9fe4..ee4c749 100644
--- a/gas/config/tc-ia64.h
+++ b/gas/config/tc-ia64.h
@@ -252,9 +252,12 @@ typedef struct unwind_record
True if we are willing to perform this relocation while building
the .o file. This is only used for pcrel relocations. */
+/* If the reloc type is BFD_RELOC_UNUSED, then this is for a TAG13/TAG13b field
+ which has no external reloc, so we must resolve the value now. */
+
#define TC_RELOC_RTSYM_LOC_FIXUP(FIX) \
((FIX)->fx_addsy == NULL \
- || (FIX)->fx_r_type == 0 \
+ || (FIX)->fx_r_type == BFD_RELOC_UNUSED \
|| (! S_IS_EXTERNAL ((FIX)->fx_addsy) \
&& ! S_IS_WEAK ((FIX)->fx_addsy) \
&& S_IS_DEFINED ((FIX)->fx_addsy) \