projects
/
deliverable
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Don't use vec_disp8 encoding with the .d32 suffix
[deliverable/binutils-gdb.git]
/
gas
/
symbols.c
diff --git
a/gas/symbols.c
b/gas/symbols.c
index 12b2f8fe27ae89913547b5df8c38db8c8ca79e71..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.
@@
-68,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);
@@
-103,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. */
@@
-134,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);
@@
-192,7
+190,7
@@
static unsigned long local_symbol_conversion_count;
struct local_symbol *
local_symbol_make (const char *name, segT section, valueT val, fragS *frag)
{
struct local_symbol *
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;
@@
-267,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. */
@@
-317,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);
@@
-480,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));
@@
-508,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);
@@
-741,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
@@
-949,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))
@@
-959,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;
}
@@
-970,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);
@@
-1113,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;
@@
-1254,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:
@@
-1377,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))
@@
-1626,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;
@@
-1635,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 */
@@
-1660,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);
@@
-1698,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;
@@
-1745,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;
@@
-1768,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;
@@
-1777,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;
@@
-1793,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]);
}
@@
-1833,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);
@@
-1869,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);
@@
-1886,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;
@@
-2220,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
@@
-2774,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;
@@
-3090,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);
@@
-3106,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;
@@
-3116,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. */
@@
-3134,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;
@@
-3163,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) \
{ \
@@
-3220,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.033746 seconds
and
4
git commands to generate.