Better error reporting on missing local labels.

This commit is contained in:
K. Richard Pixley 1991-08-28 21:38:48 +00:00
parent feb4df71a5
commit dae50edd99

View file

@ -5,7 +5,7 @@ This file is part of GAS, the GNU Assembler.
GAS is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 1, or (at your option)
the Free Software Foundation; either version 2, or (at your option)
any later version.
GAS is distributed in the hope that it will be useful,
@ -133,6 +133,32 @@ local_label_name(n, augend)
return(symbol_name_build);
} /* local_label_name() */
/*
* decode name that may have been generated by local_label_name() above. If
* the name wasn't generated by local_label_name(), then return it unaltered.
* This is used for error messages.
*/
char *decode_local_label_name(s)
char *s;
{
char *symbol_decode;
int label_number;
int label_version;
char *message_format = "\"%d\" (instance number %s of a local label)";
if (s[0] != 'L'
|| s[2] != 1) {
return(s);
} /* not a local_label_name() generated name. */
label_number = s[1] - '0';
(void) sprintf(symbol_decode = obstack_alloc(&notes, strlen(s + 3) + strlen(message_format) + 10),
message_format, label_number, s + 3);
return(symbol_decode);
} /* decode_local_label_name() */
void local_colon (n)
int n; /* just saw "n:" */
@ -175,7 +201,10 @@ fragS *frag; /* Associated fragment */
obstack_grow(&notes, name, name_length);
preserved_copy_of_name = obstack_finish(&notes);
symbolP = (symbolS *)obstack_alloc(&notes, sizeof(symbolS));
/* symbol must be born in some fixed state. This seems as good as any. */
memset(symbolP, 0, sizeof(symbolS));
#if STRIP_UNDERSCORE
S_SET_NAME(symbolP, (*preserved_copy_of_name == '_'
? preserved_copy_of_name + 1
@ -186,10 +215,11 @@ fragS *frag; /* Associated fragment */
S_SET_SEGMENT(symbolP, segment);
S_SET_VALUE(symbolP, value);
symbol_clear_list_pointers(symbolP);
/* symbol_clear_list_pointers(symbolP); uneeded if symbol is born zeroed. */
symbolP->sy_frag = frag;
symbolP->sy_forward = NULL; /* JF */
/* krm: uneeded if symbol is born zeroed.
symbolP->sy_forward = NULL; */ /* JF */
symbolP->sy_number = ~0;
symbolP->sy_name_offset = ~0;
@ -309,7 +339,7 @@ void colon(sym_name) /* just seen "x:" - rattle symbols & frags */
* This only used to be allowed on VMS gas, but Sun cc
* on the sparc also depends on it.
*/
char New_Type = SEGMENT_TO_SYMBOL_TYPE((int) now_seg);
/* char New_Type = SEGMENT_TO_SYMBOL_TYPE((int) now_seg); */
if (((!S_IS_DEBUG(symbolP) && !S_IS_DEFINED(symbolP) && S_IS_EXTERNAL(symbolP))
|| (S_GET_SEGMENT(symbolP) == SEG_BSS))