summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@bigpond.net.au>2002-12-12 21:52:06 +0000
committerAlan Modra <amodra@bigpond.net.au>2002-12-12 21:52:06 +0000
commit0276cb3089d777b71434cb3bfff12fcfa8b28488 (patch)
tree8cc5d4407911266e05fc62c46ac17f98fd7217fd
parent37d7687900acd172c294f2a2999b89ee8518cc4e (diff)
downloadbinutils-redhat-0276cb3089d777b71434cb3bfff12fcfa8b28488.tar.gz
* pj.h (pj_opc_info_t): Add union.
* pj-dis.c (print_insn_pj): Adjust for pj_opc_info_t change. * config/tc-pj.c (little, big, parse_exp_save_ilp): Prototype. (c_to_r, ipush_code, fake_opcode, alias): Likewise. (fake_opcode): Adjust for pj_opc_int_t change. (md_begin): Likewise. (md_assemble): Likewise. (ipush_code): Correct parse_exp_save_ilp call. Test pending_reloc instead of non-existent third arg of parse_exp_save_ilp. (md_parse_option): Correct "little" and "big" calls.
-rw-r--r--gas/ChangeLog8
-rw-r--r--gas/config/tc-pj.c39
-rw-r--r--include/opcode/ChangeLog4
-rw-r--r--include/opcode/pj.h7
-rw-r--r--opcodes/ChangeLog1
-rw-r--r--opcodes/pj-dis.c8
6 files changed, 50 insertions, 17 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 1ec063c1f8..7cddfbb647 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,5 +1,13 @@
2002-12-13 Alan Modra <amodra@bigpond.net.au>
+ * config/tc-pj.c (little, big, parse_exp_save_ilp): Prototype.
+ (c_to_r, ipush_code, fake_opcode, alias): Likewise.
+ (fake_opcode): Adjust for pj_opc_int_t change.
+ (md_begin): Likewise.
+ (md_assemble): Likewise.
+ (ipush_code): Correct parse_exp_save_ilp call. Test pending_reloc
+ instead of non-existent third arg of parse_exp_save_ilp.
+ (md_parse_option): Correct "little" and "big" calls.
* config/tc-sparc.c (s_register): Only declare #ifdef OBJ_ELF.
(md_apply_fix3 <segment>): Add ATTRIBUTE_UNUSED.
(tc_gen_reloc <section>): Likewise.
diff --git a/gas/config/tc-pj.c b/gas/config/tc-pj.c
index a16971d140..e27dae02ab 100644
--- a/gas/config/tc-pj.c
+++ b/gas/config/tc-pj.c
@@ -34,6 +34,21 @@ const char line_comment_chars[] = "/!#";
static int pending_reloc;
static struct hash_control *opcode_hash_control;
+static void little
+ PARAMS ((int));
+static void big
+ PARAMS ((int));
+static char *parse_exp_save_ilp
+ PARAMS ((char *, expressionS *));
+static int c_to_r
+ PARAMS ((char));
+static void ipush_code
+ PARAMS ((pj_opc_info_t *, char *));
+static void fake_opcode
+ PARAMS ((const char *, void (*) (struct pj_opc_info_t *, char *)));
+static void alias
+ PARAMS ((const char *, const char *));
+
static void
little (ignore)
int ignore ATTRIBUTE_UNUSED;
@@ -155,15 +170,17 @@ ipush_code (opcode, str)
pj_opc_info_t *opcode ATTRIBUTE_UNUSED;
char *str;
{
- int mod = 0;
char *b = frag_more (6);
expressionS arg;
b[0] = 0x11;
b[3] = 0xed;
- parse_exp_save_ilp (str + 1, &arg, &mod);
- if (mod)
- as_bad (_("can't have relocation for ipush"));
+ parse_exp_save_ilp (str + 1, &arg);
+ if (pending_reloc)
+ {
+ as_bad (_("can't have relocation for ipush"));
+ pending_reloc = 0;
+ }
fix_new_exp (frag_now, b - frag_now->fr_literal + 1, 2,
&arg, 0, BFD_RELOC_PJ_CODE_DIR16);
@@ -177,13 +194,13 @@ ipush_code (opcode, str)
static void
fake_opcode (name, func)
const char *name;
- void (*func) ();
+ void (*func) PARAMS ((struct pj_opc_info_t *, char *));
{
pj_opc_info_t *fake = (pj_opc_info_t *) xmalloc (sizeof (pj_opc_info_t));
fake->opcode = -1;
fake->opcode_next = -1;
- fake->name = (const char *) func;
+ fake->u.func = func;
hash_insert (opcode_hash_control, name, (char *) fake);
}
@@ -210,8 +227,8 @@ md_begin ()
opcode_hash_control = hash_new ();
/* Insert names into hash table. */
- for (opcode = pj_opc_info; opcode->name; opcode++)
- hash_insert (opcode_hash_control, opcode->name, (char *) opcode);
+ for (opcode = pj_opc_info; opcode->u.name; opcode++)
+ hash_insert (opcode_hash_control, opcode->u.name, (char *) opcode);
/* Insert the only fake opcode. */
fake_opcode ("ipush", ipush_code);
@@ -278,7 +295,7 @@ md_assemble (str)
{
/* It's a fake opcode. Dig out the args and pretend that was
what we were passed. */
- ((void (*) ()) opcode->name) (opcode, op_end);
+ (*opcode->u.func) (opcode, op_end);
}
else
{
@@ -404,10 +421,10 @@ md_parse_option (c, arg)
switch (c)
{
case OPTION_LITTLE:
- little ();
+ little (0);
break;
case OPTION_BIG:
- big ();
+ big (0);
break;
default:
return 0;
diff --git a/include/opcode/ChangeLog b/include/opcode/ChangeLog
index 79771d8fcc..2fe2f99c7b 100644
--- a/include/opcode/ChangeLog
+++ b/include/opcode/ChangeLog
@@ -1,3 +1,7 @@
+2002-12-13 Alan Modra <amodra@bigpond.net.au>
+
+ * pj.h (pj_opc_info_t): Add union.
+
2002-12-04 David Mosberger <davidm@hpl.hp.com>
* ia64.h: Fix copyright message.
diff --git a/include/opcode/pj.h b/include/opcode/pj.h
index b768f11bdb..5779507be8 100644
--- a/include/opcode/pj.h
+++ b/include/opcode/pj.h
@@ -36,11 +36,14 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#define UNS(x) (!!((x) & (1<<3)))
-typedef struct
+typedef struct pj_opc_info_t
{
short opcode;
short opcode_next;
char len;
unsigned char arg[2];
- const char *name;
+ union {
+ const char *name;
+ void (*func) PARAMS ((struct pj_opc_info_t *, char *));
+ } u;
} pj_opc_info_t;
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index a6ff9abf0b..2cca6e02a2 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,5 +1,6 @@
2002-12-13 Alan Modra <amodra@bigpond.net.au>
+ * pj-dis.c (print_insn_pj): Adjust for pj_opc_info_t change.
* z8kgen.c: Include "libiberty.h".
(opt, args, toks): Fix initializer warnings.
(chewname): Make "name" a char **. Return mnemonic trimmed of
diff --git a/opcodes/pj-dis.c b/opcodes/pj-dis.c
index b8b81a96a7..50d1750f25 100644
--- a/opcodes/pj-dis.c
+++ b/opcodes/pj-dis.c
@@ -62,7 +62,7 @@ print_insn_pj (addr, info)
unsigned char byte_2;
if ((status = info->read_memory_func (addr + 1, &byte_2, 1, info)))
goto fail;
- fprintf_fn (stream, "%s\t", pj_opc_info[opcode + byte_2].name);
+ fprintf_fn (stream, "%s\t", pj_opc_info[opcode + byte_2].u.name);
return 2;
}
else
@@ -72,12 +72,12 @@ print_insn_pj (addr, info)
const pj_opc_info_t *op = &pj_opc_info[opcode];
int a;
addr++;
- fprintf_fn (stream, "%s", op->name);
+ fprintf_fn (stream, "%s", op->u.name);
/* The tableswitch instruction is followed by the default
address, low value, high value and the destinations. */
- if (strcmp (op->name, "tableswitch") == 0)
+ if (strcmp (op->u.name, "tableswitch") == 0)
{
int lowval;
int highval;
@@ -116,7 +116,7 @@ print_insn_pj (addr, info)
address, element count and pairs of values and
addresses. */
- if (strcmp (op->name, "lookupswitch") == 0)
+ if (strcmp (op->u.name, "lookupswitch") == 0)
{
int count;
int val;