aboutsummaryrefslogtreecommitdiff
path: root/gas/config
diff options
context:
space:
mode:
authorKen Raeburn <raeburn@cygnus>1993-07-08 18:40:50 +0000
committerKen Raeburn <raeburn@cygnus>1993-07-08 18:40:50 +0000
commitff4cac38543b2a2c910f7267fa49a448d98a559f (patch)
tree03cd0108023c28050a5a401044100e345440ae4e /gas/config
parentde87cdb4663ad545eaa9629db7be4485584f0054 (diff)
downloadfsf-binutils-gdb-ff4cac38543b2a2c910f7267fa49a448d98a559f.zip
fsf-binutils-gdb-ff4cac38543b2a2c910f7267fa49a448d98a559f.tar.gz
fsf-binutils-gdb-ff4cac38543b2a2c910f7267fa49a448d98a559f.tar.bz2
config/tc-sparc.c (s_common): Revamp to handle both syntaxes, and not be
target-specific.
Diffstat (limited to 'gas/config')
-rw-r--r--gas/config/tc-sparc.c56
1 files changed, 32 insertions, 24 deletions
diff --git a/gas/config/tc-sparc.c b/gas/config/tc-sparc.c
index b42e365..62c242c 100644
--- a/gas/config/tc-sparc.c
+++ b/gas/config/tc-sparc.c
@@ -387,7 +387,6 @@ s_common ()
#endif
}
know (symbolP->sy_frag == &zero_address_frag);
-#ifdef OBJ_ELF
if (*input_line_pointer != ',')
{
as_bad ("Expected comma after common length");
@@ -411,11 +410,15 @@ s_common ()
}
if (symbolP->local)
{
- segT old_sec = now_seg;
- int old_subsec = now_subseg;
+ segT old_sec;
+ int old_subsec;
char *p;
- int align = temp;
+ int align;
+ allocate_bss:
+ old_sec = now_seg;
+ old_subsec = now_subseg;
+ align = temp;
record_alignment (bss_section, align);
subseg_set (bss_section, 0);
if (align)
@@ -432,6 +435,7 @@ s_common ()
}
else
{
+ allocate_common:
S_SET_VALUE (symbolP, size);
S_SET_EXTERNAL (symbolP);
/* should be common, but this is how gas does it for now */
@@ -441,35 +445,39 @@ s_common ()
else
{
input_line_pointer++;
+ /* @@ Some use the dot, some don't. Can we get some consistency?? */
+ if (*input_line_pointer == '.')
+ input_line_pointer++;
+ /* @@ Some say data, some say bss. */
if (strncmp (input_line_pointer, "bss\"", 4)
- && strncmp (input_line_pointer, ".bss\"", 5))
+ && strncmp (input_line_pointer, "data\"", 5))
{
- input_line_pointer -= 2;
+ while (*--input_line_pointer != '"')
+ ;
+ input_line_pointer--;
goto bad_common_segment;
}
while (*input_line_pointer++ != '"')
;
- demand_empty_rest_of_line ();
- return;
- }
-#endif
- if (strncmp (input_line_pointer, ",\"bss\"", 6) != 0
- && strncmp (input_line_pointer, ",\"data\"", 7) != 0)
- {
- bad_common_segment:
- p = input_line_pointer;
- while (*p && *p != '\n')
- p++;
- c = *p;
- *p = '\0';
- as_bad ("bad .common segment %s", input_line_pointer + 1);
- *p = c;
- return;
+ goto allocate_common;
}
- input_line_pointer += 6 + (input_line_pointer[2] == 'd'); /* Skip either */
demand_empty_rest_of_line ();
return;
-} /* s_common() */
+
+ {
+ bad_common_segment:
+ p = input_line_pointer;
+ while (*p && *p != '\n')
+ p++;
+ c = *p;
+ *p = '\0';
+ as_bad ("bad .common segment %s", input_line_pointer + 1);
+ *p = c;
+ input_line_pointer = p;
+ ignore_rest_of_line ();
+ return;
+ }
+}
static void
s_seg ()