mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-26 05:47:26 +08:00
Fix for gas seg fault and neg line numbers
This commit is contained in:
@ -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>
|
2001-05-24 Alan Modra <amodra@one.net.au>
|
||||||
|
|
||||||
* write.c (write_object_file): Set finalize_syms = 1 before
|
* write.c (write_object_file): Set finalize_syms = 1 before
|
||||||
|
@ -446,12 +446,17 @@ add_lineno (frag, offset, num)
|
|||||||
{
|
{
|
||||||
abort ();
|
abort ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef OBJ_XCOFF
|
||||||
|
/* The native aix assembler accepts negative line number */
|
||||||
|
|
||||||
if (num <= 0)
|
if (num <= 0)
|
||||||
{
|
{
|
||||||
/* Zero is used as an end marker in the file. */
|
/* Zero is used as an end marker in the file. */
|
||||||
as_warn (_("Line numbers must be positive integers\n"));
|
as_warn (_("Line numbers must be positive integers\n"));
|
||||||
num = 1;
|
num = 1;
|
||||||
}
|
}
|
||||||
|
#endif /* OBJ_XCOFF */
|
||||||
new_line->next = line_nos;
|
new_line->next = line_nos;
|
||||||
new_line->frag = frag;
|
new_line->frag = frag;
|
||||||
new_line->l.line_number = num;
|
new_line->l.line_number = num;
|
||||||
|
@ -2845,9 +2845,31 @@ ppc_stabx (ignore)
|
|||||||
|
|
||||||
symbol_get_tc (sym)->output = 1;
|
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;
|
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
|
if (exp.X_op != O_symbol
|
||||||
|| ! S_IS_EXTERNAL (exp.X_add_symbol)
|
|| ! S_IS_EXTERNAL (exp.X_add_symbol)
|
||||||
|| S_GET_SEGMENT (exp.X_add_symbol) != bss_section)
|
|| S_GET_SEGMENT (exp.X_add_symbol) != bss_section)
|
||||||
|
Reference in New Issue
Block a user