diff options
author | Ken Raeburn <raeburn@cygnus> | 1993-07-08 18:40:50 +0000 |
---|---|---|
committer | Ken Raeburn <raeburn@cygnus> | 1993-07-08 18:40:50 +0000 |
commit | ff4cac38543b2a2c910f7267fa49a448d98a559f (patch) | |
tree | 03cd0108023c28050a5a401044100e345440ae4e /gas | |
parent | de87cdb4663ad545eaa9629db7be4485584f0054 (diff) | |
download | fsf-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')
-rw-r--r-- | gas/ChangeLog | 5 | ||||
-rw-r--r-- | gas/config/tc-sparc.c | 56 |
2 files changed, 37 insertions, 24 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index d0cc9d2..28b262d 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +Thu Jul 8 14:15:05 1993 Ken Raeburn (raeburn@cambridge.cygnus.com) + + * config/tc-sparc.c (s_common): Revamp to handle both syntaxes, + and not be target-specific. + Thu Jul 8 07:25:25 1993 Doug Evans (dje@canuck.cygnus.com) * config/tc-h8300.h (TC_CONS_RELOC): Use R_RELLONG if h8/300h. 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 () |