projects
/
deliverable
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add support for .extInstruction pseudo-op.
[deliverable/binutils-gdb.git]
/
gas
/
symbols.c
diff --git
a/gas/symbols.c
b/gas/symbols.c
index 7dc9812a1226d45a6d6e62f6ff22432fbd9883e4..4c3137a12786f0da059195e6c81bcbf2f2952e05 100644
(file)
--- a/
gas/symbols.c
+++ b/
gas/symbols.c
@@
-1,7
+1,5
@@
/* symbols.c -symbol table-
/* symbols.c -symbol table-
- Copyright 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
- 2011 Free Software Foundation, Inc.
+ Copyright (C) 1987-2016 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
This file is part of GAS, the GNU Assembler.
@@
-23,11
+21,9
@@
/* #define DEBUG_SYMS / * to debug symbol list maintenance. */
#include "as.h"
/* #define DEBUG_SYMS / * to debug symbol list maintenance. */
#include "as.h"
-
#include "safe-ctype.h"
#include "obstack.h" /* For "symbols.h" */
#include "subsegs.h"
#include "safe-ctype.h"
#include "obstack.h" /* For "symbols.h" */
#include "subsegs.h"
-
#include "struc-symbol.h"
/* This is non-zero if symbols are case sensitive, which is the
#include "struc-symbol.h"
/* This is non-zero if symbols are case sensitive, which is the
@@
-59,6
+55,10
@@
symbolS dot_symbol;
#define DOLLAR_LABEL_CHAR '\001'
#define LOCAL_LABEL_CHAR '\002'
#define DOLLAR_LABEL_CHAR '\001'
#define LOCAL_LABEL_CHAR '\002'
+#ifndef TC_LABEL_IS_LOCAL
+#define TC_LABEL_IS_LOCAL(name) 0
+#endif
+
struct obstack notes;
#ifdef TE_PE
/* The name of an external symbol which is
struct obstack notes;
#ifdef TE_PE
/* The name of an external symbol which is
@@
-66,7
+66,7
@@
struct obstack notes;
const char * an_external_name;
#endif
const char * an_external_name;
#endif
-static char *save_symbol_name (const char *);
+static c
onst c
har *save_symbol_name (const char *);
static void fb_label_init (void);
static long dollar_label_instance (long);
static long fb_label_instance (long);
static void fb_label_init (void);
static long dollar_label_instance (long);
static long fb_label_instance (long);
@@
-101,10
+101,10
@@
symbol_new (const char *name, segT segment, valueT valu, fragS *frag)
/* Save a symbol name on a permanent obstack, and convert it according
to the object file format. */
/* Save a symbol name on a permanent obstack, and convert it according
to the object file format. */
-static char *
+static c
onst c
har *
save_symbol_name (const char *name)
{
save_symbol_name (const char *name)
{
-
unsigned in
t name_length;
+
size_
t name_length;
char *ret;
name_length = strlen (name) + 1; /* +1 for \0. */
char *ret;
name_length = strlen (name) + 1; /* +1 for \0. */
@@
-132,7
+132,7
@@
symbol_create (const char *name, /* It is copied, the caller can destroy/modify.
valueT valu, /* Symbol value. */
fragS *frag /* Associated fragment. */)
{
valueT valu, /* Symbol value. */
fragS *frag /* Associated fragment. */)
{
- char *preserved_copy_of_name;
+ c
onst c
har *preserved_copy_of_name;
symbolS *symbolP;
preserved_copy_of_name = save_symbol_name (name);
symbolS *symbolP;
preserved_copy_of_name = save_symbol_name (name);
@@
-178,7
+178,7
@@
static unsigned long local_symbol_conversion_count;
changes its argument to the real symbol. */
#define LOCAL_SYMBOL_CHECK(s) \
changes its argument to the real symbol. */
#define LOCAL_SYMBOL_CHECK(s) \
- (s->
bsym == NULL
\
+ (s->
sy_flags.sy_local_symbol
\
? (local_symbol_converted_p ((struct local_symbol *) s) \
? (s = local_symbol_get_real_symbol ((struct local_symbol *) s), \
0) \
? (local_symbol_converted_p ((struct local_symbol *) s) \
? (s = local_symbol_get_real_symbol ((struct local_symbol *) s), \
0) \
@@
-187,10
+187,10
@@
static unsigned long local_symbol_conversion_count;
/* Create a local symbol and insert it into the local hash table. */
/* Create a local symbol and insert it into the local hash table. */
-st
atic st
ruct local_symbol *
+struct local_symbol *
local_symbol_make (const char *name, segT section, valueT val, fragS *frag)
{
local_symbol_make (const char *name, segT section, valueT val, fragS *frag)
{
- char *name_copy;
+ c
onst c
har *name_copy;
struct local_symbol *ret;
++local_symbol_count;
struct local_symbol *ret;
++local_symbol_count;
@@
-198,7
+198,8
@@
local_symbol_make (const char *name, segT section, valueT val, fragS *frag)
name_copy = save_symbol_name (name);
ret = (struct local_symbol *) obstack_alloc (¬es, sizeof *ret);
name_copy = save_symbol_name (name);
ret = (struct local_symbol *) obstack_alloc (¬es, sizeof *ret);
- ret->lsy_marker = NULL;
+ ret->lsy_flags.sy_local_symbol = 1;
+ ret->lsy_flags.sy_resolved = 0;
ret->lsy_name = name_copy;
ret->lsy_section = section;
local_symbol_set_frag (ret, frag);
ret->lsy_name = name_copy;
ret->lsy_section = section;
local_symbol_set_frag (ret, frag);
@@
-217,7
+218,7
@@
local_symbol_convert (struct local_symbol *locsym)
{
symbolS *ret;
{
symbolS *ret;
- gas_assert (locsym->lsy_
marker == NULL
);
+ gas_assert (locsym->lsy_
flags.sy_local_symbol
);
if (local_symbol_converted_p (locsym))
return local_symbol_get_real_symbol (locsym);
if (local_symbol_converted_p (locsym))
return local_symbol_get_real_symbol (locsym);
@@
-227,10
+228,10
@@
local_symbol_convert (struct local_symbol *locsym)
local_symbol_get_frag (locsym));
if (local_symbol_resolved_p (locsym))
local_symbol_get_frag (locsym));
if (local_symbol_resolved_p (locsym))
- ret->sy_resolved = 1;
+ ret->sy_
flags.sy_
resolved = 1;
/* Local symbols are always either defined or used. */
/* Local symbols are always either defined or used. */
- ret->sy_used = 1;
+ ret->sy_
flags.sy_
used = 1;
#ifdef TC_LOCAL_SYMFIELD_CONVERT
TC_LOCAL_SYMFIELD_CONVERT (locsym, ret);
#ifdef TC_LOCAL_SYMFIELD_CONVERT
TC_LOCAL_SYMFIELD_CONVERT (locsym, ret);
@@
-264,7
+265,7
@@
colon (/* Just seen "x:" - rattle symbols & frags. */
const char *sym_name /* Symbol name, as a cannonical string. */
/* We copy this string: OK to alter later. */)
{
const char *sym_name /* Symbol name, as a cannonical string. */
/* We copy this string: OK to alter later. */)
{
-
register symbolS *symbolP;
/* Symbol we are working with. */
+
symbolS *symbolP;
/* Symbol we are working with. */
/* Sun local labels go out of scope whenever a non-local symbol is
defined. */
/* Sun local labels go out of scope whenever a non-local symbol is
defined. */
@@
-314,6
+315,10
@@
colon (/* Just seen "x:" - rattle symbols & frags. */
}
#endif /* WORKING_DOT_WORD */
}
#endif /* WORKING_DOT_WORD */
+#ifdef obj_frob_colon
+ obj_frob_colon (sym_name);
+#endif
+
if ((symbolP = symbol_find (sym_name)) != 0)
{
S_CLEAR_WEAKREFR (symbolP);
if ((symbolP = symbol_find (sym_name)) != 0)
{
S_CLEAR_WEAKREFR (symbolP);
@@
-459,7
+464,7
@@
colon (/* Just seen "x:" - rattle symbols & frags. */
symbolP->sy_value.X_add_number = S_GET_VALUE (mri_common_symbol);
symbolP->sy_frag = &zero_address_frag;
S_SET_SEGMENT (symbolP, expr_section);
symbolP->sy_value.X_add_number = S_GET_VALUE (mri_common_symbol);
symbolP->sy_frag = &zero_address_frag;
S_SET_SEGMENT (symbolP, expr_section);
- symbolP->sy_mri_common = 1;
+ symbolP->sy_
flags.sy_
mri_common = 1;
}
#ifdef tc_frob_label
}
#ifdef tc_frob_label
@@
-477,7
+482,7
@@
colon (/* Just seen "x:" - rattle symbols & frags. */
void
symbol_table_insert (symbolS *symbolP)
{
void
symbol_table_insert (symbolS *symbolP)
{
-
register
const char *error_string;
+ const char *error_string;
know (symbolP);
know (S_GET_NAME (symbolP));
know (symbolP);
know (S_GET_NAME (symbolP));
@@
-505,7
+510,7
@@
symbol_table_insert (symbolS *symbolP)
symbolS *
symbol_find_or_make (const char *name)
{
symbolS *
symbol_find_or_make (const char *name)
{
-
register
symbolS *symbolP;
+ symbolS *symbolP;
symbolP = symbol_find (name);
symbolP = symbol_find (name);
@@
-626,7
+631,7
@@
symbol_clone_if_forward_ref (symbolS *symbolP, int is_forward)
symbolS *add_symbol = symbolP->sy_value.X_add_symbol;
symbolS *op_symbol = symbolP->sy_value.X_op_symbol;
symbolS *add_symbol = symbolP->sy_value.X_add_symbol;
symbolS *op_symbol = symbolP->sy_value.X_op_symbol;
- if (symbolP->sy_forward_ref)
+ if (symbolP->sy_f
lags.sy_f
orward_ref)
is_forward = 1;
if (is_forward)
is_forward = 1;
if (is_forward)
@@
-642,23
+647,24
@@
symbol_clone_if_forward_ref (symbolS *symbolP, int is_forward)
/* Re-using sy_resolving here, as this routine cannot get called from
symbol resolution code. */
/* Re-using sy_resolving here, as this routine cannot get called from
symbol resolution code. */
- if ((symbolP->bsym->section == expr_section || symbolP->sy_forward_ref)
- && !symbolP->sy_resolving)
+ if ((symbolP->bsym->section == expr_section
+ || symbolP->sy_flags.sy_forward_ref)
+ && !symbolP->sy_flags.sy_resolving)
{
{
- symbolP->sy_resolving = 1;
+ symbolP->sy_
flags.sy_
resolving = 1;
add_symbol = symbol_clone_if_forward_ref (add_symbol, is_forward);
op_symbol = symbol_clone_if_forward_ref (op_symbol, is_forward);
add_symbol = symbol_clone_if_forward_ref (add_symbol, is_forward);
op_symbol = symbol_clone_if_forward_ref (op_symbol, is_forward);
- symbolP->sy_resolving = 0;
+ symbolP->sy_
flags.sy_
resolving = 0;
}
}
- if (symbolP->sy_forward_ref
+ if (symbolP->sy_f
lags.sy_f
orward_ref
|| add_symbol != symbolP->sy_value.X_add_symbol
|| op_symbol != symbolP->sy_value.X_op_symbol)
{
if (symbolP != &dot_symbol)
{
symbolP = symbol_clone (symbolP, 0);
|| add_symbol != symbolP->sy_value.X_add_symbol
|| op_symbol != symbolP->sy_value.X_op_symbol)
{
if (symbolP != &dot_symbol)
{
symbolP = symbol_clone (symbolP, 0);
- symbolP->sy_resolving = 0;
+ symbolP->sy_
flags.sy_
resolving = 0;
}
else
{
}
else
{
@@
-737,34
+743,40
@@
symbol_find (const char *name)
symbolS *
symbol_find_noref (const char *name, int noref)
{
symbolS *
symbol_find_noref (const char *name, int noref)
{
+ symbolS * result;
+ char * copy = NULL;
+
#ifdef tc_canonicalize_symbol_name
{
#ifdef tc_canonicalize_symbol_name
{
- char *copy;
- size_t len = strlen (name) + 1;
-
- copy = (char *) alloca (len);
- memcpy (copy, name, len);
+ copy = xstrdup (name);
name = tc_canonicalize_symbol_name (copy);
}
#endif
if (! symbols_case_sensitive)
{
name = tc_canonicalize_symbol_name (copy);
}
#endif
if (! symbols_case_sensitive)
{
- char *copy;
const char *orig;
const char *orig;
+ char *copy2 = NULL;
unsigned char c;
orig = name;
unsigned char c;
orig = name;
- name = copy = (char *) alloca (strlen (name) + 1);
+ if (copy != NULL)
+ copy2 = copy;
+ name = copy = XNEWVEC (char, strlen (name) + 1);
while ((c = *orig++) != '\0')
while ((c = *orig++) != '\0')
- {
- *copy++ = TOUPPER (c);
- }
+ *copy++ = TOUPPER (c);
*copy = '\0';
*copy = '\0';
+
+ if (copy2 != NULL)
+ free (copy2);
+ copy = (char *) name;
}
}
- return symbol_find_exact_noref (name, noref);
+ result = symbol_find_exact_noref (name, noref);
+ if (copy != NULL)
+ free (copy);
+ return result;
}
/* Once upon a time, symbols were kept in a singly linked list. At
}
/* Once upon a time, symbols were kept in a singly linked list. At
@@
-893,6
+905,7
@@
verify_symbol_chain (symbolS *rootP, symbolS *lastP)
for (; symbol_next (symbolP) != NULL; symbolP = symbol_next (symbolP))
{
gas_assert (symbolP->bsym != NULL);
for (; symbol_next (symbolP) != NULL; symbolP = symbol_next (symbolP))
{
gas_assert (symbolP->bsym != NULL);
+ gas_assert (symbolP->sy_flags.sy_local_symbol == 0);
gas_assert (symbolP->sy_next->sy_previous == symbolP);
}
gas_assert (symbolP->sy_next->sy_previous == symbolP);
}
@@
-944,7
+957,7
@@
use_complex_relocs_for (symbolS * symp)
if ( (S_IS_COMMON (symp->sy_value.X_add_symbol)
|| S_IS_LOCAL (symp->sy_value.X_add_symbol))
if ( (S_IS_COMMON (symp->sy_value.X_add_symbol)
|| S_IS_LOCAL (symp->sy_value.X_add_symbol))
- &&
+ &&
(S_IS_COMMON (symp->sy_value.X_op_symbol)
|| S_IS_LOCAL (symp->sy_value.X_op_symbol))
(S_IS_COMMON (symp->sy_value.X_op_symbol)
|| S_IS_LOCAL (symp->sy_value.X_op_symbol))
@@
-954,7
+967,7
@@
use_complex_relocs_for (symbolS * symp)
&& S_GET_SEGMENT (symp->sy_value.X_op_symbol) != expr_section)
return 0;
break;
&& S_GET_SEGMENT (symp->sy_value.X_op_symbol) != expr_section)
return 0;
break;
-
+
default:
break;
}
default:
break;
}
@@
-965,7
+978,7
@@
use_complex_relocs_for (symbolS * symp)
static void
report_op_error (symbolS *symp, symbolS *left, operatorT op, symbolS *right)
{
static void
report_op_error (symbolS *symp, symbolS *left, operatorT op, symbolS *right)
{
- char *file;
+ c
onst c
har *file;
unsigned int line;
segT seg_left = left ? S_GET_SEGMENT (left) : 0;
segT seg_right = S_GET_SEGMENT (right);
unsigned int line;
segT seg_left = left ? S_GET_SEGMENT (left) : 0;
segT seg_right = S_GET_SEGMENT (right);
@@
-1055,7
+1068,7
@@
resolve_symbol_value (symbolS *symp)
return final_val;
}
return final_val;
}
- if (symp->sy_resolved)
+ if (symp->sy_
flags.sy_
resolved)
{
if (symp->sy_value.X_op == O_constant)
return (valueT) symp->sy_value.X_add_number;
{
if (symp->sy_value.X_op == O_constant)
return (valueT) symp->sy_value.X_add_number;
@@
-1066,7
+1079,7
@@
resolve_symbol_value (symbolS *symp)
resolved = 0;
final_seg = S_GET_SEGMENT (symp);
resolved = 0;
final_seg = S_GET_SEGMENT (symp);
- if (symp->sy_resolving)
+ if (symp->sy_
flags.sy_
resolving)
{
if (finalize_syms)
as_bad (_("symbol definition loop encountered at `%s'"),
{
if (finalize_syms)
as_bad (_("symbol definition loop encountered at `%s'"),
@@
-1108,7
+1121,7
@@
resolve_symbol_value (symbolS *symp)
if (symp->bsym->flags & BSF_SRELC)
relc_symbol->bsym->flags |= BSF_SRELC;
else
if (symp->bsym->flags & BSF_SRELC)
relc_symbol->bsym->flags |= BSF_SRELC;
else
- relc_symbol->bsym->flags |= BSF_RELC;
+ relc_symbol->bsym->flags |= BSF_RELC;
/* symp->bsym->flags |= BSF_RELC; */
copy_symbol_attributes (symp, relc_symbol);
symp->sy_value.X_op = O_symbol;
/* symp->bsym->flags |= BSF_RELC; */
copy_symbol_attributes (symp, relc_symbol);
symp->sy_value.X_op = O_symbol;
@@
-1129,7
+1142,7
@@
resolve_symbol_value (symbolS *symp)
operatorT op;
int move_seg_ok;
operatorT op;
int move_seg_ok;
- symp->sy_resolving = 1;
+ symp->sy_
flags.sy_
resolving = 1;
/* Help out with CSE. */
add_symbol = symp->sy_value.X_add_symbol;
/* Help out with CSE. */
add_symbol = symp->sy_value.X_add_symbol;
@@
-1178,7
+1191,7
@@
resolve_symbol_value (symbolS *symp)
}
}
}
}
- if (symp->sy_mri_common)
+ if (symp->sy_
flags.sy_
mri_common)
{
/* This is a symbol inside an MRI common section. The
relocation routines are going to handle it specially.
{
/* This is a symbol inside an MRI common section. The
relocation routines are going to handle it specially.
@@
-1218,7
+1231,7
@@
resolve_symbol_value (symbolS *symp)
final_seg = seg_left;
final_val = 0;
resolved = symbol_resolved_p (add_symbol);
final_seg = seg_left;
final_val = 0;
resolved = symbol_resolved_p (add_symbol);
- symp->sy_resolving = 0;
+ symp->sy_
flags.sy_
resolving = 0;
goto exit_dont_set_value;
}
else if (finalize_syms
goto exit_dont_set_value;
}
else if (finalize_syms
@@
-1237,7
+1250,7
@@
resolve_symbol_value (symbolS *symp)
final_seg = seg_left;
final_val += symp->sy_frag->fr_address + left;
resolved = symbol_resolved_p (add_symbol);
final_seg = seg_left;
final_val += symp->sy_frag->fr_address + left;
resolved = symbol_resolved_p (add_symbol);
- symp->sy_resolving = 0;
+ symp->sy_
flags.sy_
resolving = 0;
goto exit_dont_set_value;
}
else
goto exit_dont_set_value;
}
else
@@
-1249,7
+1262,10
@@
resolve_symbol_value (symbolS *symp)
resolved = symbol_resolved_p (add_symbol);
if (S_IS_WEAKREFR (symp))
resolved = symbol_resolved_p (add_symbol);
if (S_IS_WEAKREFR (symp))
- goto exit_dont_set_value;
+ {
+ symp->sy_flags.sy_resolving = 0;
+ goto exit_dont_set_value;
+ }
break;
case O_uminus:
break;
case O_uminus:
@@
-1372,7
+1388,7
@@
resolve_symbol_value (symbolS *symp)
already issued a warning about using a bad symbol. */
if (seg_right == absolute_section && finalize_syms)
{
already issued a warning about using a bad symbol. */
if (seg_right == absolute_section && finalize_syms)
{
- char *file;
+ c
onst c
har *file;
unsigned int line;
if (expr_symbol_where (symp, &file, &line))
unsigned int line;
if (expr_symbol_where (symp, &file, &line))
@@
-1441,7
+1457,7
@@
resolve_symbol_value (symbolS *symp)
break;
}
break;
}
- symp->sy_resolving = 0;
+ symp->sy_
flags.sy_
resolving = 0;
}
if (finalize_syms)
}
if (finalize_syms)
@@
-1456,12
+1472,12
@@
exit_dont_set_value:
if (finalize_syms)
{
if (resolved)
if (finalize_syms)
{
if (resolved)
- symp->sy_resolved = 1;
+ symp->sy_
flags.sy_
resolved = 1;
else if (S_GET_SEGMENT (symp) != expr_section)
{
as_bad (_("can't resolve value for symbol `%s'"),
S_GET_NAME (symp));
else if (S_GET_SEGMENT (symp) != expr_section)
{
as_bad (_("can't resolve value for symbol `%s'"),
S_GET_NAME (symp));
- symp->sy_resolved = 1;
+ symp->sy_
flags.sy_
resolved = 1;
}
}
}
}
@@
-1507,15
+1523,15
@@
snapshot_symbol (symbolS **symbolPP, valueT *valueP, segT *segP, fragS **fragPP)
{
expressionS exp = symbolP->sy_value;
{
expressionS exp = symbolP->sy_value;
- if (!symbolP->sy_resolved && exp.X_op != O_illegal)
+ if (!symbolP->sy_
flags.sy_
resolved && exp.X_op != O_illegal)
{
int resolved;
{
int resolved;
- if (symbolP->sy_resolving)
+ if (symbolP->sy_
flags.sy_
resolving)
return 0;
return 0;
- symbolP->sy_resolving = 1;
+ symbolP->sy_
flags.sy_
resolving = 1;
resolved = resolve_expression (&exp);
resolved = resolve_expression (&exp);
- symbolP->sy_resolving = 0;
+ symbolP->sy_
flags.sy_
resolving = 0;
if (!resolved)
return 0;
if (!resolved)
return 0;
@@
-1621,8
+1637,8
@@
define_dollar_label (long label)
if (dollar_labels == NULL)
{
if (dollar_labels == NULL)
{
- dollar_labels =
(long *) xmalloc (DOLLAR_LABEL_BUMP_BY * sizeof (long)
);
- dollar_label_instances =
(long *) xmalloc (DOLLAR_LABEL_BUMP_BY * sizeof (long)
);
+ dollar_labels =
XNEWVEC (long, DOLLAR_LABEL_BUMP_BY
);
+ dollar_label_instances =
XNEWVEC (long, DOLLAR_LABEL_BUMP_BY
);
dollar_label_defines = (char *) xmalloc (DOLLAR_LABEL_BUMP_BY);
dollar_label_max = DOLLAR_LABEL_BUMP_BY;
dollar_label_count = 0;
dollar_label_defines = (char *) xmalloc (DOLLAR_LABEL_BUMP_BY);
dollar_label_max = DOLLAR_LABEL_BUMP_BY;
dollar_label_count = 0;
@@
-1630,10
+1646,9
@@
define_dollar_label (long label)
else if (dollar_label_count == dollar_label_max)
{
dollar_label_max += DOLLAR_LABEL_BUMP_BY;
else if (dollar_label_count == dollar_label_max)
{
dollar_label_max += DOLLAR_LABEL_BUMP_BY;
- dollar_labels = (long *) xrealloc ((char *) dollar_labels,
- dollar_label_max * sizeof (long));
- dollar_label_instances = (long *) xrealloc ((char *) dollar_label_instances,
- dollar_label_max * sizeof (long));
+ dollar_labels = XRESIZEVEC (long, dollar_labels, dollar_label_max);
+ dollar_label_instances = XRESIZEVEC (long, dollar_label_instances,
+ dollar_label_max);
dollar_label_defines = (char *) xrealloc (dollar_label_defines, dollar_label_max);
} /* if we needed to grow */
dollar_label_defines = (char *) xrealloc (dollar_label_defines, dollar_label_max);
} /* if we needed to grow */
@@
-1655,14
+1670,14
@@
define_dollar_label (long label)
of ^A. */
char * /* Return local label name. */
of ^A. */
char * /* Return local label name. */
-dollar_label_name (
register long n,
/* we just saw "n$:" : n a number. */
-
register int augend
/* 0 for current instance, 1 for new instance. */)
+dollar_label_name (
long n,
/* we just saw "n$:" : n a number. */
+
int augend
/* 0 for current instance, 1 for new instance. */)
{
long i;
/* Returned to caller, then copied. Used for created names ("4f"). */
static char symbol_name_build[24];
{
long i;
/* Returned to caller, then copied. Used for created names ("4f"). */
static char symbol_name_build[24];
-
register
char *p;
-
register
char *q;
+ char *p;
+ char *q;
char symbol_name_temporary[20]; /* Build up a number, BACKWARDS. */
know (n >= 0);
char symbol_name_temporary[20]; /* Build up a number, BACKWARDS. */
know (n >= 0);
@@
-1693,7
+1708,7
@@
dollar_label_name (register long n, /* we just saw "n$:" : n a number. */
*q = i % 10 + '0';
i /= 10;
}
*q = i % 10 + '0';
i /= 10;
}
- while ((*p++ = *--q) != '\0');
;
+ while ((*p++ = *--q) != '\0');
/* The label, as a '\0' ended string, starts at symbol_name_build. */
return symbol_name_build;
/* The label, as a '\0' ended string, starts at symbol_name_build. */
return symbol_name_build;
@@
-1740,7
+1755,7
@@
fb_label_instance_inc (long label)
{
long *i;
{
long *i;
- if (label < FB_LABEL_SPECIAL)
+ if (
(unsigned long)
label < FB_LABEL_SPECIAL)
{
++fb_low_counter[label];
return;
{
++fb_low_counter[label];
return;
@@
-1763,8
+1778,8
@@
fb_label_instance_inc (long label)
if (fb_labels == NULL)
{
if (fb_labels == NULL)
{
- fb_labels =
(long *) xmalloc (FB_LABEL_BUMP_BY * sizeof (long)
);
- fb_label_instances =
(long *) xmalloc (FB_LABEL_BUMP_BY * sizeof (long)
);
+ fb_labels =
XNEWVEC (long, FB_LABEL_BUMP_BY
);
+ fb_label_instances =
XNEWVEC (long, FB_LABEL_BUMP_BY
);
fb_label_max = FB_LABEL_BUMP_BY;
fb_label_count = FB_LABEL_SPECIAL;
fb_label_max = FB_LABEL_BUMP_BY;
fb_label_count = FB_LABEL_SPECIAL;
@@
-1772,10
+1787,8
@@
fb_label_instance_inc (long label)
else if (fb_label_count == fb_label_max)
{
fb_label_max += FB_LABEL_BUMP_BY;
else if (fb_label_count == fb_label_max)
{
fb_label_max += FB_LABEL_BUMP_BY;
- fb_labels = (long *) xrealloc ((char *) fb_labels,
- fb_label_max * sizeof (long));
- fb_label_instances = (long *) xrealloc ((char *) fb_label_instances,
- fb_label_max * sizeof (long));
+ fb_labels = XRESIZEVEC (long, fb_labels, fb_label_max);
+ fb_label_instances = XRESIZEVEC (long, fb_label_instances, fb_label_max);
} /* if we needed to grow */
fb_labels[fb_label_count] = label;
} /* if we needed to grow */
fb_labels[fb_label_count] = label;
@@
-1788,7
+1801,7
@@
fb_label_instance (long label)
{
long *i;
{
long *i;
- if (label < FB_LABEL_SPECIAL)
+ if (
(unsigned long)
label < FB_LABEL_SPECIAL)
{
return (fb_low_counter[label]);
}
{
return (fb_low_counter[label]);
}
@@
-1828,8
+1841,8
@@
fb_label_name (long n, /* We just saw "n:", "nf" or "nb" : n a number. */
long i;
/* Returned to caller, then copied. Used for created names ("4f"). */
static char symbol_name_build[24];
long i;
/* Returned to caller, then copied. Used for created names ("4f"). */
static char symbol_name_build[24];
-
register
char *p;
-
register
char *q;
+ char *p;
+ char *q;
char symbol_name_temporary[20]; /* Build up a number, BACKWARDS. */
know (n >= 0);
char symbol_name_temporary[20]; /* Build up a number, BACKWARDS. */
know (n >= 0);
@@
-1864,7
+1877,7
@@
fb_label_name (long n, /* We just saw "n:", "nf" or "nb" : n a number. */
*q = i % 10 + '0';
i /= 10;
}
*q = i % 10 + '0';
i /= 10;
}
- while ((*p++ = *--q) != '\0');
;
+ while ((*p++ = *--q) != '\0');
/* The label, as a '\0' ended string, starts at symbol_name_build. */
return (symbol_name_build);
/* The label, as a '\0' ended string, starts at symbol_name_build. */
return (symbol_name_build);
@@
-1881,7
+1894,7
@@
decode_local_label_name (char *s)
char *symbol_decode;
int label_number;
int instance_number;
char *symbol_decode;
int label_number;
int instance_number;
- char *type;
+ c
onst c
har *type;
const char *message_format;
int lindex = 0;
const char *message_format;
int lindex = 0;
@@
-1921,7
+1934,7
@@
S_GET_VALUE (symbolS *s)
if (LOCAL_SYMBOL_CHECK (s))
return resolve_symbol_value (s);
if (LOCAL_SYMBOL_CHECK (s))
return resolve_symbol_value (s);
- if (!s->sy_resolved)
+ if (!s->sy_
flags.sy_
resolved)
{
valueT val = resolve_symbol_value (s);
if (!finalize_syms)
{
valueT val = resolve_symbol_value (s);
if (!finalize_syms)
@@
-1932,7
+1945,7
@@
S_GET_VALUE (symbolS *s)
if (s->sy_value.X_op != O_constant)
{
if (s->sy_value.X_op != O_constant)
{
- if (! s->sy_resolved
+ if (! s->sy_
flags.sy_
resolved
|| s->sy_value.X_op != O_symbol
|| (S_IS_DEFINED (s) && ! S_IS_COMMON (s)))
as_bad (_("attempt to get value of unresolved symbol `%s'"),
|| s->sy_value.X_op != O_symbol
|| (S_IS_DEFINED (s) && ! S_IS_COMMON (s)))
as_bad (_("attempt to get value of unresolved symbol `%s'"),
@@
-2030,7
+2043,7
@@
S_IS_WEAKREFR (symbolS *s)
{
if (LOCAL_SYMBOL_CHECK (s))
return 0;
{
if (LOCAL_SYMBOL_CHECK (s))
return 0;
- return s->sy_weakrefr != 0;
+ return s->sy_
flags.sy_
weakrefr != 0;
}
int
}
int
@@
-2038,7
+2051,7
@@
S_IS_WEAKREFD (symbolS *s)
{
if (LOCAL_SYMBOL_CHECK (s))
return 0;
{
if (LOCAL_SYMBOL_CHECK (s))
return 0;
- return s->sy_weakrefd != 0;
+ return s->sy_
flags.sy_
weakrefd != 0;
}
int
}
int
@@
-2120,6
+2133,7
@@
S_IS_LOCAL (symbolS *s)
&& ! S_IS_DEBUG (s)
&& (strchr (name, DOLLAR_LABEL_CHAR)
|| strchr (name, LOCAL_LABEL_CHAR)
&& ! S_IS_DEBUG (s)
&& (strchr (name, DOLLAR_LABEL_CHAR)
|| strchr (name, LOCAL_LABEL_CHAR)
+ || TC_LABEL_IS_LOCAL (name)
|| (! flag_keep_locals
&& (bfd_is_local_label (stdoutput, s->bsym)
|| (flag_mri
|| (! flag_keep_locals
&& (bfd_is_local_label (stdoutput, s->bsym)
|| (flag_mri
@@
-2133,12
+2147,22
@@
S_IS_STABD (symbolS *s)
return S_GET_NAME (s) == 0;
}
return S_GET_NAME (s) == 0;
}
+int
+S_CAN_BE_REDEFINED (const symbolS *s)
+{
+ if (LOCAL_SYMBOL_CHECK (s))
+ return (local_symbol_get_frag ((struct local_symbol *) s)
+ == &predefined_address_frag);
+ /* Permit register names to be redefined. */
+ return s->bsym->section == reg_section;
+}
+
int
S_IS_VOLATILE (const symbolS *s)
{
if (LOCAL_SYMBOL_CHECK (s))
return 0;
int
S_IS_VOLATILE (const symbolS *s)
{
if (LOCAL_SYMBOL_CHECK (s))
return 0;
- return s->sy_volatile;
+ return s->sy_
flags.sy_
volatile;
}
int
}
int
@@
-2146,7
+2170,7
@@
S_IS_FORWARD_REF (const symbolS *s)
{
if (LOCAL_SYMBOL_CHECK (s))
return 0;
{
if (LOCAL_SYMBOL_CHECK (s))
return 0;
- return s->sy_forward_ref;
+ return s->sy_f
lags.sy_f
orward_ref;
}
const char *
}
const char *
@@
-2204,13
+2228,8
@@
S_SET_EXTERNAL (symbolS *s)
}
if (s->bsym->flags & BSF_SECTION_SYM)
{
}
if (s->bsym->flags & BSF_SECTION_SYM)
{
- char * file;
- unsigned int line;
-
/* Do not reassign section symbols. */
/* Do not reassign section symbols. */
- as_where (& file, & line);
- as_warn_where (file, line,
- _("section symbols are already global"));
+ as_warn (_("section symbols are already global"));
return;
}
#ifndef TC_GLOBAL_REGISTER_SYMBOL_OK
return;
}
#ifndef TC_GLOBAL_REGISTER_SYMBOL_OK
@@
-2261,14
+2280,14
@@
S_SET_WEAKREFR (symbolS *s)
{
if (LOCAL_SYMBOL_CHECK (s))
s = local_symbol_convert ((struct local_symbol *) s);
{
if (LOCAL_SYMBOL_CHECK (s))
s = local_symbol_convert ((struct local_symbol *) s);
- s->sy_weakrefr = 1;
+ s->sy_
flags.sy_
weakrefr = 1;
/* If the alias was already used, make sure we mark the target as
used as well, otherwise it might be dropped from the symbol
table. This may have unintended side effects if the alias is
later redirected to another symbol, such as keeping the unused
previous target in the symbol table. Since it will be weak, it's
not a big deal. */
/* If the alias was already used, make sure we mark the target as
used as well, otherwise it might be dropped from the symbol
table. This may have unintended side effects if the alias is
later redirected to another symbol, such as keeping the unused
previous target in the symbol table. Since it will be weak, it's
not a big deal. */
- if (s->sy_used)
+ if (s->sy_
flags.sy_
used)
symbol_mark_used (s->sy_value.X_add_symbol);
}
symbol_mark_used (s->sy_value.X_add_symbol);
}
@@
-2277,7
+2296,7
@@
S_CLEAR_WEAKREFR (symbolS *s)
{
if (LOCAL_SYMBOL_CHECK (s))
return;
{
if (LOCAL_SYMBOL_CHECK (s))
return;
- s->sy_weakrefr = 0;
+ s->sy_
flags.sy_
weakrefr = 0;
}
void
}
void
@@
-2285,7
+2304,7
@@
S_SET_WEAKREFD (symbolS *s)
{
if (LOCAL_SYMBOL_CHECK (s))
s = local_symbol_convert ((struct local_symbol *) s);
{
if (LOCAL_SYMBOL_CHECK (s))
s = local_symbol_convert ((struct local_symbol *) s);
- s->sy_weakrefd = 1;
+ s->sy_
flags.sy_
weakrefd = 1;
S_SET_WEAK (s);
}
S_SET_WEAK (s);
}
@@
-2294,9
+2313,9
@@
S_CLEAR_WEAKREFD (symbolS *s)
{
if (LOCAL_SYMBOL_CHECK (s))
return;
{
if (LOCAL_SYMBOL_CHECK (s))
return;
- if (s->sy_weakrefd)
+ if (s->sy_
flags.sy_
weakrefd)
{
{
- s->sy_weakrefd = 0;
+ s->sy_
flags.sy_
weakrefd = 0;
/* If a weakref target symbol is weak, then it was never
referenced directly before, not even in a .global directive,
so decay it to local. If it remains undefined, it will be
/* If a weakref target symbol is weak, then it was never
referenced directly before, not even in a .global directive,
so decay it to local. If it remains undefined, it will be
@@
-2347,14
+2366,14
@@
S_SET_VOLATILE (symbolS *s)
{
if (LOCAL_SYMBOL_CHECK (s))
s = local_symbol_convert ((struct local_symbol *) s);
{
if (LOCAL_SYMBOL_CHECK (s))
s = local_symbol_convert ((struct local_symbol *) s);
- s->sy_volatile = 1;
+ s->sy_
flags.sy_
volatile = 1;
}
void
S_CLEAR_VOLATILE (symbolS *s)
{
if (!LOCAL_SYMBOL_CHECK (s))
}
void
S_CLEAR_VOLATILE (symbolS *s)
{
if (!LOCAL_SYMBOL_CHECK (s))
- s->sy_volatile = 0;
+ s->sy_
flags.sy_
volatile = 0;
}
void
}
void
@@
-2362,7
+2381,7
@@
S_SET_FORWARD_REF (symbolS *s)
{
if (LOCAL_SYMBOL_CHECK (s))
s = local_symbol_convert ((struct local_symbol *) s);
{
if (LOCAL_SYMBOL_CHECK (s))
s = local_symbol_convert ((struct local_symbol *) s);
- s->sy_forward_ref = 1;
+ s->sy_f
lags.sy_f
orward_ref = 1;
}
/* Return the previous symbol in a chain. */
}
/* Return the previous symbol in a chain. */
@@
-2411,10
+2430,10
@@
symbol_set_value_expression (symbolS *s, const expressionS *exp)
int
symbol_same_p (symbolS *s1, symbolS *s2)
{
int
symbol_same_p (symbolS *s1, symbolS *s2)
{
- if (s1->
bsym == NULL
+ if (s1->
sy_flags.sy_local_symbol
&& local_symbol_converted_p ((struct local_symbol *) s1))
s1 = local_symbol_get_real_symbol ((struct local_symbol *) s1);
&& local_symbol_converted_p ((struct local_symbol *) s1))
s1 = local_symbol_get_real_symbol ((struct local_symbol *) s1);
- if (s2->
bsym == NULL
+ if (s2->
sy_flags.sy_local_symbol
&& local_symbol_converted_p ((struct local_symbol *) s2))
s2 = local_symbol_get_real_symbol ((struct local_symbol *) s2);
return s1 == s2;
&& local_symbol_converted_p ((struct local_symbol *) s2))
s2 = local_symbol_get_real_symbol ((struct local_symbol *) s2);
return s1 == s2;
@@
-2472,7
+2491,7
@@
symbol_mark_used (symbolS *s)
{
if (LOCAL_SYMBOL_CHECK (s))
return;
{
if (LOCAL_SYMBOL_CHECK (s))
return;
- s->sy_used = 1;
+ s->sy_
flags.sy_
used = 1;
if (S_IS_WEAKREFR (s))
symbol_mark_used (s->sy_value.X_add_symbol);
}
if (S_IS_WEAKREFR (s))
symbol_mark_used (s->sy_value.X_add_symbol);
}
@@
-2484,7
+2503,7
@@
symbol_clear_used (symbolS *s)
{
if (LOCAL_SYMBOL_CHECK (s))
s = local_symbol_convert ((struct local_symbol *) s);
{
if (LOCAL_SYMBOL_CHECK (s))
s = local_symbol_convert ((struct local_symbol *) s);
- s->sy_used = 0;
+ s->sy_
flags.sy_
used = 0;
}
/* Return whether a symbol has been used. */
}
/* Return whether a symbol has been used. */
@@
-2494,7
+2513,7
@@
symbol_used_p (symbolS *s)
{
if (LOCAL_SYMBOL_CHECK (s))
return 1;
{
if (LOCAL_SYMBOL_CHECK (s))
return 1;
- return s->sy_used;
+ return s->sy_
flags.sy_
used;
}
/* Mark a symbol as having been used in a reloc. */
}
/* Mark a symbol as having been used in a reloc. */
@@
-2504,7
+2523,7
@@
symbol_mark_used_in_reloc (symbolS *s)
{
if (LOCAL_SYMBOL_CHECK (s))
s = local_symbol_convert ((struct local_symbol *) s);
{
if (LOCAL_SYMBOL_CHECK (s))
s = local_symbol_convert ((struct local_symbol *) s);
- s->sy_used_in_reloc = 1;
+ s->sy_
flags.sy_
used_in_reloc = 1;
}
/* Clear the mark of whether a symbol has been used in a reloc. */
}
/* Clear the mark of whether a symbol has been used in a reloc. */
@@
-2514,7
+2533,7
@@
symbol_clear_used_in_reloc (symbolS *s)
{
if (LOCAL_SYMBOL_CHECK (s))
return;
{
if (LOCAL_SYMBOL_CHECK (s))
return;
- s->sy_used_in_reloc = 0;
+ s->sy_
flags.sy_
used_in_reloc = 0;
}
/* Return whether a symbol has been used in a reloc. */
}
/* Return whether a symbol has been used in a reloc. */
@@
-2524,7
+2543,7
@@
symbol_used_in_reloc_p (symbolS *s)
{
if (LOCAL_SYMBOL_CHECK (s))
return 0;
{
if (LOCAL_SYMBOL_CHECK (s))
return 0;
- return s->sy_used_in_reloc;
+ return s->sy_
flags.sy_
used_in_reloc;
}
/* Mark a symbol as an MRI common symbol. */
}
/* Mark a symbol as an MRI common symbol. */
@@
-2534,7
+2553,7
@@
symbol_mark_mri_common (symbolS *s)
{
if (LOCAL_SYMBOL_CHECK (s))
s = local_symbol_convert ((struct local_symbol *) s);
{
if (LOCAL_SYMBOL_CHECK (s))
s = local_symbol_convert ((struct local_symbol *) s);
- s->sy_mri_common = 1;
+ s->sy_
flags.sy_
mri_common = 1;
}
/* Clear the mark of whether a symbol is an MRI common symbol. */
}
/* Clear the mark of whether a symbol is an MRI common symbol. */
@@
-2544,7
+2563,7
@@
symbol_clear_mri_common (symbolS *s)
{
if (LOCAL_SYMBOL_CHECK (s))
return;
{
if (LOCAL_SYMBOL_CHECK (s))
return;
- s->sy_mri_common = 0;
+ s->sy_
flags.sy_
mri_common = 0;
}
/* Return whether a symbol is an MRI common symbol. */
}
/* Return whether a symbol is an MRI common symbol. */
@@
-2554,7
+2573,7
@@
symbol_mri_common_p (symbolS *s)
{
if (LOCAL_SYMBOL_CHECK (s))
return 0;
{
if (LOCAL_SYMBOL_CHECK (s))
return 0;
- return s->sy_mri_common;
+ return s->sy_
flags.sy_
mri_common;
}
/* Mark a symbol as having been written. */
}
/* Mark a symbol as having been written. */
@@
-2564,7
+2583,7
@@
symbol_mark_written (symbolS *s)
{
if (LOCAL_SYMBOL_CHECK (s))
return;
{
if (LOCAL_SYMBOL_CHECK (s))
return;
- s->written = 1;
+ s->
sy_flags.sy_
written = 1;
}
/* Clear the mark of whether a symbol has been written. */
}
/* Clear the mark of whether a symbol has been written. */
@@
-2574,7
+2593,7
@@
symbol_clear_written (symbolS *s)
{
if (LOCAL_SYMBOL_CHECK (s))
return;
{
if (LOCAL_SYMBOL_CHECK (s))
return;
- s->written = 0;
+ s->
sy_flags.sy_
written = 0;
}
/* Return whether a symbol has been written. */
}
/* Return whether a symbol has been written. */
@@
-2584,7
+2603,7
@@
symbol_written_p (symbolS *s)
{
if (LOCAL_SYMBOL_CHECK (s))
return 0;
{
if (LOCAL_SYMBOL_CHECK (s))
return 0;
- return s->written;
+ return s->
sy_flags.sy_
written;
}
/* Mark a symbol has having been resolved. */
}
/* Mark a symbol has having been resolved. */
@@
-2597,7
+2616,7
@@
symbol_mark_resolved (symbolS *s)
local_symbol_mark_resolved ((struct local_symbol *) s);
return;
}
local_symbol_mark_resolved ((struct local_symbol *) s);
return;
}
- s->sy_resolved = 1;
+ s->sy_
flags.sy_
resolved = 1;
}
/* Return whether a symbol has been resolved. */
}
/* Return whether a symbol has been resolved. */
@@
-2607,7
+2626,7
@@
symbol_resolved_p (symbolS *s)
{
if (LOCAL_SYMBOL_CHECK (s))
return local_symbol_resolved_p ((struct local_symbol *) s);
{
if (LOCAL_SYMBOL_CHECK (s))
return local_symbol_resolved_p ((struct local_symbol *) s);
- return s->sy_resolved;
+ return s->sy_
flags.sy_
resolved;
}
/* Return whether a symbol is a section symbol. */
}
/* Return whether a symbol is a section symbol. */
@@
-2645,7
+2664,7
@@
symbol_equated_reloc_p (symbolS *s)
#if defined (OBJ_COFF) && defined (TE_PE)
&& ! S_IS_WEAK (s)
#endif
#if defined (OBJ_COFF) && defined (TE_PE)
&& ! S_IS_WEAK (s)
#endif
- && ((s->sy_resolved && s->sy_value.X_op_symbol != NULL)
+ && ((s->sy_
flags.sy_
resolved && s->sy_value.X_op_symbol != NULL)
|| ! S_IS_DEFINED (s)
|| S_IS_COMMON (s)));
}
|| ! S_IS_DEFINED (s)
|| S_IS_COMMON (s)));
}
@@
-2758,7
+2777,7
@@
symbol_begin (void)
memset ((char *) (&abs_symbol), '\0', sizeof (abs_symbol));
#if defined (EMIT_SECTION_SYMBOLS) || !defined (RELOC_REQUIRES_SYMBOL)
memset ((char *) (&abs_symbol), '\0', sizeof (abs_symbol));
#if defined (EMIT_SECTION_SYMBOLS) || !defined (RELOC_REQUIRES_SYMBOL)
- abs_symbol.bsym = bfd_abs_section
.
symbol;
+ abs_symbol.bsym = bfd_abs_section
_ptr->
symbol;
#endif
abs_symbol.sy_value.X_op = O_constant;
abs_symbol.sy_frag = &zero_address_frag;
#endif
abs_symbol.sy_value.X_op = O_constant;
abs_symbol.sy_frag = &zero_address_frag;
@@
-2774,7
+2793,7
@@
dot_symbol_init (void)
if (dot_symbol.bsym == NULL)
as_fatal ("bfd_make_empty_symbol: %s", bfd_errmsg (bfd_get_error ()));
dot_symbol.bsym->name = ".";
if (dot_symbol.bsym == NULL)
as_fatal ("bfd_make_empty_symbol: %s", bfd_errmsg (bfd_get_error ()));
dot_symbol.bsym->name = ".";
- dot_symbol.sy_forward_ref = 1;
+ dot_symbol.sy_f
lags.sy_f
orward_ref = 1;
dot_symbol.sy_value.X_op = O_constant;
}
\f
dot_symbol.sy_value.X_op = O_constant;
}
\f
@@
-2815,15
+2834,15
@@
print_symbol_value_1 (FILE *file, symbolS *sym)
fprintf (file, " frag ");
fprintf_vma (file, (bfd_vma) ((bfd_hostptr_t) sym->sy_frag));
}
fprintf (file, " frag ");
fprintf_vma (file, (bfd_vma) ((bfd_hostptr_t) sym->sy_frag));
}
- if (sym->written)
+ if (sym->
sy_flags.sy_
written)
fprintf (file, " written");
fprintf (file, " written");
- if (sym->sy_resolved)
+ if (sym->sy_
flags.sy_
resolved)
fprintf (file, " resolved");
fprintf (file, " resolved");
- else if (sym->sy_resolving)
+ else if (sym->sy_
flags.sy_
resolving)
fprintf (file, " resolving");
fprintf (file, " resolving");
- if (sym->sy_used_in_reloc)
+ if (sym->sy_
flags.sy_
used_in_reloc)
fprintf (file, " used-in-reloc");
fprintf (file, " used-in-reloc");
- if (sym->sy_used)
+ if (sym->sy_
flags.sy_
used)
fprintf (file, " used");
if (S_IS_LOCAL (sym))
fprintf (file, " local");
fprintf (file, " used");
if (S_IS_LOCAL (sym))
fprintf (file, " local");
@@
-3074,7
+3093,7
@@
symbol_relc_make_sym (symbolS * sym)
char *
symbol_relc_make_value (offsetT val)
{
char *
symbol_relc_make_value (offsetT val)
{
- char * terminal =
xmalloc (
28); /* Enough for long long. */
+ char * terminal =
XNEWVEC (char,
28); /* Enough for long long. */
terminal[0] = '#';
bfd_sprintf_vma (stdoutput, terminal + 1, val);
terminal[0] = '#';
bfd_sprintf_vma (stdoutput, terminal + 1, val);
@@
-3090,7
+3109,7
@@
symbol_relc_make_value (offsetT val)
char *
symbol_relc_make_expr (expressionS * exp)
{
char *
symbol_relc_make_expr (expressionS * exp)
{
- char * opstr = NULL; /* Operator prefix string. */
+ c
onst c
har * opstr = NULL; /* Operator prefix string. */
int arity = 0; /* Arity of this operator. */
char * operands[3]; /* Up to three operands. */
char * concat_string = NULL;
int arity = 0; /* Arity of this operator. */
char * operands[3]; /* Up to three operands. */
char * concat_string = NULL;
@@
-3100,10
+3119,10
@@
symbol_relc_make_expr (expressionS * exp)
gas_assert (exp != NULL);
/* Match known operators -> fill in opstr, arity, operands[] and fall
gas_assert (exp != NULL);
/* Match known operators -> fill in opstr, arity, operands[] and fall
- through to construct subexpression fragments; may instead return
+ through to construct subexpression fragments; may instead return
string directly for leaf nodes. */
string directly for leaf nodes. */
- /* See expr.h for the meaning of all these enums. Many operators
+ /* See expr.h for the meaning of all these enums. Many operators
have an unnatural arity (X_add_number implicitly added). The
conversion logic expands them to explicit "+" subexpressions. */
have an unnatural arity (X_add_number implicitly added). The
conversion logic expands them to explicit "+" subexpressions. */
@@
-3118,10
+3137,10
@@
symbol_relc_make_expr (expressionS * exp)
return symbol_relc_make_value (exp->X_add_number);
case O_symbol:
return symbol_relc_make_value (exp->X_add_number);
case O_symbol:
- if (exp->X_add_number)
- {
- arity = 2;
- opstr = "+";
+ if (exp->X_add_number)
+ {
+ arity = 2;
+ opstr = "+";
operands[0] = symbol_relc_make_sym (exp->X_add_symbol);
operands[1] = symbol_relc_make_value (exp->X_add_number);
break;
operands[0] = symbol_relc_make_sym (exp->X_add_symbol);
operands[1] = symbol_relc_make_value (exp->X_add_number);
break;
@@
-3147,7
+3166,7
@@
symbol_relc_make_expr (expressionS * exp)
operands[0] = symbol_relc_make_sym (exp->X_add_symbol); \
} \
break
operands[0] = symbol_relc_make_sym (exp->X_add_symbol); \
} \
break
-
+
#define HANDLE_XADD_OPT2(str_) \
if (exp->X_add_number) \
{ \
#define HANDLE_XADD_OPT2(str_) \
if (exp->X_add_number) \
{ \
@@
-3204,16
+3223,16
@@
symbol_relc_make_expr (expressionS * exp)
else
{
/* Allocate new string; include inter-operand padding gaps etc. */
else
{
/* Allocate new string; include inter-operand padding gaps etc. */
- concat_string = xmalloc (strlen (opstr)
+ concat_string = xmalloc (strlen (opstr)
+ 1
+ (arity >= 1 ? (strlen (operands[0]) + 1 ) : 0)
+ (arity >= 2 ? (strlen (operands[1]) + 1 ) : 0)
+ (arity >= 3 ? (strlen (operands[2]) + 0 ) : 0)
+ 1);
gas_assert (concat_string != NULL);
+ 1
+ (arity >= 1 ? (strlen (operands[0]) + 1 ) : 0)
+ (arity >= 2 ? (strlen (operands[1]) + 1 ) : 0)
+ (arity >= 3 ? (strlen (operands[2]) + 0 ) : 0)
+ 1);
gas_assert (concat_string != NULL);
-
+
/* Format the thing. */
/* Format the thing. */
- sprintf (concat_string,
+ sprintf (concat_string,
(arity == 0 ? "%s" :
arity == 1 ? "%s:%s" :
arity == 2 ? "%s:%s:%s" :
(arity == 0 ? "%s" :
arity == 1 ? "%s:%s" :
arity == 2 ? "%s:%s:%s" :
This page took
0.039947 seconds
and
4
git commands to generate.