diff options
author | Tom Rix <trix@redhat.com> | 2001-05-24 21:39:09 +0000 |
---|---|---|
committer | Tom Rix <trix@redhat.com> | 2001-05-24 21:39:09 +0000 |
commit | 6877bb43e568ec434f3ade26c8f0be850ac03083 (patch) | |
tree | 9f4b2331fd7ac77e3b7fd0f0b296cb8cbf8ae6e4 | |
parent | 11a383ba1714b896b7a547d2ce2436e821d92aa0 (diff) | |
download | gdb-6877bb43e568ec434f3ade26c8f0be850ac03083.zip gdb-6877bb43e568ec434f3ade26c8f0be850ac03083.tar.gz gdb-6877bb43e568ec434f3ade26c8f0be850ac03083.tar.bz2 |
Fix for gas seg fault and neg line numbers
-rw-r--r-- | gas/ChangeLog | 6 | ||||
-rw-r--r-- | gas/config/obj-coff.c | 5 | ||||
-rw-r--r-- | gas/config/tc-ppc.c | 24 |
3 files changed, 34 insertions, 1 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 01cc017..6ae3422 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,9 @@ +2000-05-24 Tom Rix <trix@redhat.com> + + * config/obj-coff.c : (add_lineno) xcoff allows negative line + numbers + * config/tc-ppc.c (ppc_stabx) : fix generated symbol + 2001-05-24 Alan Modra <amodra@one.net.au> * write.c (write_object_file): Set finalize_syms = 1 before diff --git a/gas/config/obj-coff.c b/gas/config/obj-coff.c index 1961fec..da07960 100644 --- a/gas/config/obj-coff.c +++ b/gas/config/obj-coff.c @@ -446,12 +446,17 @@ add_lineno (frag, offset, num) { abort (); } + +#ifndef OBJ_XCOFF + /* The native aix assembler accepts negative line number */ + if (num <= 0) { /* Zero is used as an end marker in the file. */ as_warn (_("Line numbers must be positive integers\n")); num = 1; } +#endif /* OBJ_XCOFF */ new_line->next = line_nos; new_line->frag = frag; new_line->l.line_number = num; diff --git a/gas/config/tc-ppc.c b/gas/config/tc-ppc.c index 0860645..73a0db9 100644 --- a/gas/config/tc-ppc.c +++ b/gas/config/tc-ppc.c @@ -2845,9 +2845,31 @@ ppc_stabx (ignore) symbol_get_tc (sym)->output = 1; - if (S_GET_STORAGE_CLASS (sym) == C_STSYM) + if (S_GET_STORAGE_CLASS (sym) == C_STSYM) { + symbol_get_tc (sym)->within = ppc_current_block; + /* + In this case : + + .bs name + .stabx "z",arrays_,133,0 + .es + + .comm arrays_,13768,3 + + resolve_symbol_value will copy the exp's "within" into sym's when the + offset is 0. Since this seems to be corner case problem, + only do the correction for storage class C_STSYM. A better solution + would be to have the tc field updated in ppc_symbol_new_hook. + + */ + + if (exp.X_op == O_symbol) { + symbol_get_tc (exp.X_add_symbol)->within = ppc_current_block; + } + } + if (exp.X_op != O_symbol || ! S_IS_EXTERNAL (exp.X_add_symbol) || S_GET_SEGMENT (exp.X_add_symbol) != bss_section) |