diff options
author | Ian Lance Taylor <ian@airs.com> | 1992-12-30 20:34:14 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@airs.com> | 1992-12-30 20:34:14 +0000 |
commit | 85825401dc523061be3cb0df3a281a2be31e3402 (patch) | |
tree | 80e47588b15b22a3740fd6fce77f4d1bfcd63151 /gas/read.c | |
parent | 70834409a7f523ab5baddfdee98d85d16a587411 (diff) | |
download | gdb-85825401dc523061be3cb0df3a281a2be31e3402.zip gdb-85825401dc523061be3cb0df3a281a2be31e3402.tar.gz gdb-85825401dc523061be3cb0df3a281a2be31e3402.tar.bz2 |
Wed Dec 30 10:18:57 1992 Ian Lance Taylor (ian@cygnus.com)
* app.c, config/tc-*.c: Don't include read.h, since it is already
included by as.h.
* These are based on patches from Minh Tran-le
<mtranle@paris.intellicorp.com>.
* configure.in (i[34]86-ibm-aix*): Accept i486 for host. Use
obj_format coffbfd and gas_target i386coff for target.
(i[34]86-*-isc*): New host (uses sysv).
* config/i386aix.mt: Removed (no longer used).
* config/mh-i386aix (RANLIB): Use true rather than /bin/true.
(MINUS_G): Removed.
(LDFLAGS): Added, defined as -shlib.
* config/te-i386aix.h (REVERSE_SORT_RELOCS): Undefine.
* config/te-sco386.h (LOCAL_LABEL): Don't define.
(DOT_LABEL_PREFIX): Define.
* expr.c (operand): If DOT_LABEL_PREFIX, use .L0\001 as a label
name rather than L0\001.
* read.c (s_lcomm): Make a frag in SEG_BSS rather than using
local_bss_counter.
* symbols.c, symbols.h (local_bss_counter): Removed.
* write.c (write_object_file): bss no longer uses
local_bss_counter. Pass correct data and bss size to
VMS_write_object_file.
* config/obj-vms.c (VMS_write_object_file): Accept bss size as
argument, rather than using local_bss_counter.
* config/tc-m88k.c (s_bss): Don't use local_bss_counter.
* config/tc-sparc.c (s_reserve): Don't use local_bss_counter.
* config/obj-coffbfd.c (had_lineno, had_reloc): Removed.
(size_section): Restored sanity check.
(do_relocs_for): Base section address on s_paddr rather than
computing it. Adjust a29k R_IHIHALF special case to account for
section paddr (used to require paddr to be zero). If there are no
reclos, set s_relptr to 0. Set relocation size in object_headers.
(fill_section): Always set s_vaddr here, removing
ZERO_BASED_SEGMENTS case. Force s_scnptr for bss to 0. Don't set
NOLOAD for i386 .bss, because it confuses the SVR3 native linker.
Set STYP_INFO for .comment.
(coff_header_append): Use object headers and H_{SET,GET}_* macros.
Make aouthdr writing depend on OBJ_COFF_OMIT_OPTIONAL_HEADER.
(crawl_symbols): Handle 8 character section name correctly. Use
H_{SET,GET}_* macros.
(do_linenos_for): Set lineno size in object_headers.
(write_object_file): Use H_{SET,GET}_* macros. Don't bother to
set s_vaddr here. If string_byte_count remains 4, set it back to
0, and only write strings out if there are some. Call
fill_section before do_relocs_for and do_linenos_for.
(obj_coff_section): Handle optional quoted second argument giving
section characteristics.
(obj_coff_bss): Added to handle .bss.
(obj_coff_ident): Added to handle .ident (puts string in .comment
section).
(obj_coff_lcomm): Put common symbols in .bss, not .data.
(fixup_mdeps): Change to segment. Call frag_wane after
md_convert_frag.
(fixup_segment): Explicitly check S_IS_COMMON before making 386
adjustment (already happened only for common symbols, but this is
clearer).
* config/obj-coffbfd.h (OBJ_COFF_OMIT_OPTIONAL_HEADER): Define.
* config/tc-i386.c (s_bss): Don't use if I386COFF.
(md_pseudo_table): Ignore .optim and .noopt.
(tc_coff_sizemachdep): New function.
* config/tc-i386.h (REVERSE_SORT_RELOCS): Undef, for SVR3
compatibility.
(LOCAL_LABEL): Removed definition.
(DOT_LABEL_PREFIX): Defined.
Diffstat (limited to 'gas/read.c')
-rw-r--r-- | gas/read.c | 35 |
1 files changed, 21 insertions, 14 deletions
@@ -587,7 +587,7 @@ read_a_source_file (name) that goes with this #APP There is one. The specs guarentee it. . . */ tmp_len = buffer_limit - s; - tmp_buf = xmalloc (tmp_len); + tmp_buf = xmalloc (tmp_len + 1); bcopy (s, tmp_buf, tmp_len); do { @@ -1147,19 +1147,28 @@ s_lcomm (needs_align) S_GET_OTHER (symbolP) == 0 && S_GET_DESC (symbolP) == 0 && #endif /* OBJ_AOUT or OBJ_BOUT */ - (((S_GET_SEGMENT (symbolP) == SEG_BSS) && (S_GET_VALUE (symbolP) == local_bss_counter)) + (S_GET_SEGMENT (symbolP) == SEG_BSS || (!S_IS_DEFINED (symbolP) && S_GET_VALUE (symbolP) == 0))) { - if (needs_align) - { - /* Align */ - align = ~((~0) << align); /* Convert to a mask */ - local_bss_counter = - (local_bss_counter + align) & (~align); - } + char *p; + segT current_seg = now_seg; + subsegT current_subseg = now_subseg; + + subseg_new (SEG_BSS, 1); + + if (align) + frag_align (align, 0); + /* detach from old frag */ + if (S_GET_SEGMENT (symbolP) == SEG_BSS) + symbolP->sy_frag->fr_symbol = NULL; + + symbolP->sy_frag = frag_now; + p = frag_var (rs_org, 1, 1, (relax_substateT)0, symbolP, + temp, (char *)0); + *p = 0; - S_SET_VALUE (symbolP, local_bss_counter); S_SET_SEGMENT (symbolP, SEG_BSS); + #ifdef OBJ_COFF /* The symbol may already have been created with a preceding * ".globl" directive -- be careful not to step on storage @@ -1170,13 +1179,11 @@ s_lcomm (needs_align) S_SET_STORAGE_CLASS (symbolP, C_STAT); } #endif /* OBJ_COFF */ - symbolP->sy_frag = &bss_address_frag; - local_bss_counter += temp; + subseg_new (current_seg, current_subseg); } else { - as_bad ("Ignoring attempt to re-define symbol from %d. to %d.", - S_GET_VALUE (symbolP), local_bss_counter); + as_bad ("Ignoring attempt to re-define symbol %s.", name); } demand_empty_rest_of_line (); |