#define KEEPIT flags
#define KEEPITTYPE int
-#include <assert.h>
#include <string.h> /* For strchr and friends */
#include "bfd.h"
#include <sysdep.h>
{ -1 },
HOWTO( 9, 0, 1, 16, false, 0, complain_overflow_bitfield,0,"BASE16", false,0xffffffff,0xffffffff, false),
HOWTO(10, 0, 2, 32, false, 0, complain_overflow_bitfield,0,"BASE32", false,0xffffffff,0xffffffff, false),
+{ -1 },
+{ -1 },
+{ -1 },
+{ -1 },
+{ -1 },
+ HOWTO(16, 0, 2, 0, false, 0, complain_overflow_bitfield,0,"JMP_TABLE", false, 0,0x00000000, false),
+{ -1 },
+{ -1 },
+{ -1 },
+{ -1 },
+{ -1 },
+{ -1 },
+{ -1 },
+{ -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 },
+ HOWTO(32, 0, 2, 0, false, 0, complain_overflow_bitfield,0,"RELATIVE", false, 0,0x00000000, false),
+{ -1 },
+{ -1 },
+{ -1 },
+{ -1 },
+{ -1 },
+{ -1 },
+{ -1 },
+ HOWTO(40, 0, 2, 0, false, 0, complain_overflow_bitfield,0,"BASEREL", false, 0,0x00000000, false),
};
#define TABLE_SIZE(TABLE) (sizeof(TABLE)/sizeof(TABLE[0]))
entry->count = 1;
#endif
- assert (*tab->end == 0);
+ BFD_ASSERT (*tab->end == 0);
*(tab->end) = entry;
tab->end = &entry->next_to_output;
- assert (*tab->end == 0);
+ BFD_ASSERT (*tab->end == 0);
{
tab->index += len + 1;
if (len == 0)
tab->empty_string_index = entry->index;
}
- assert (*ep == 0);
+ BFD_ASSERT (*ep == 0);
*ep = entry;
return entry->index;
}
r_pcrel = (int) g->howto->pc_relative; /* Relative to PC? */
/* XXX This relies on relocs coming from a.out files. */
r_baserel = (g->howto->type & 8) != 0;
- /* r_jmptable, r_relative??? FIXME-soon */
- r_jmptable = 0;
- r_relative = 0;
+ r_jmptable = (g->howto->type & 16) != 0;
+ r_relative = (g->howto->type & 32) != 0;
#if 0
/* For a standard reloc, the addend is in the object file. */
>> RELOC_STD_BITS_LENGTH_SH_LITTLE;
}
- howto_idx = r_length + 4 * r_pcrel + 8 * r_baserel;
+ howto_idx = r_length + 4 * r_pcrel + 8 * r_baserel
+ + 16 * r_jmptable + 32 * r_relative;
BFD_ASSERT (howto_idx < TABLE_SIZE (howto_table_std));
cache_ptr->howto = howto_table_std + howto_idx;
BFD_ASSERT (cache_ptr->howto->type != -1);
- BFD_ASSERT (r_jmptable == 0);
- BFD_ASSERT (r_relative == 0);
- /* FIXME-soon: Roll jmptable, relative bits into howto setting */
MOVE_ADDRESS(0);
}
>> RELOC_STD_BITS_LENGTH_SH_LITTLE);
}
- howto_idx = r_length + 4 * r_pcrel + 8 * r_baserel;
+ howto_idx = r_length + 4 * r_pcrel + 8 * r_baserel
+ + 16 * r_jmptable + 32 * r_relative;
BFD_ASSERT (howto_idx < TABLE_SIZE (howto_table_std));
- BFD_ASSERT (r_jmptable == 0);
- BFD_ASSERT (r_relative == 0);
if (relocateable)
{
r_pcrel = howto->pc_relative;
r_baserel = (howto->type & 8) != 0;
- r_jmptable = 0;
- r_relative = 0;
+ r_jmptable = (howto->type & 16) != 0;
+ r_relative = (howto->type & 32) != 0;
r_length = howto->size;
PUT_WORD (finfo->output_bfd, p->offset, srel.r_address);