diff options
Diffstat (limited to 'contrib/binutils/gas/config/tc-ppc.c')
-rw-r--r-- | contrib/binutils/gas/config/tc-ppc.c | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/contrib/binutils/gas/config/tc-ppc.c b/contrib/binutils/gas/config/tc-ppc.c index 2b826cb..a893209 100644 --- a/contrib/binutils/gas/config/tc-ppc.c +++ b/contrib/binutils/gas/config/tc-ppc.c @@ -1,5 +1,5 @@ /* tc-ppc.c -- Assemble for the PowerPC or POWER (RS/6000) - Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000 + Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Support. @@ -2845,9 +2845,29 @@ 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) |