From 6e0080dd37a13129b04c34c7aa18ec2bee85b731 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Tue, 9 May 2006 15:13:22 +0000 Subject: [PATCH] Revised test (that is not O(n2)) for checking for orphaned cloned symbols --- gas/config/tc-arm.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c index fe24ab277ae..5ccbfc1f134 100644 --- a/gas/config/tc-arm.c +++ b/gas/config/tc-arm.c @@ -17016,21 +17016,16 @@ arm_fix_adjustable (fixS * fixP) /* This is a hack for the gas/all/redef2.s test. This test causes symbols to be cloned, and without this test relocs would still be generated - against the original pre-cloned symbol. Such symbols would not appear + against the original, pre-cloned symbol. Such symbols would not appear in the symbol table however, and so a valid reloc could not be generated. So check to see if the fixup is against a symbol which has been removed from the symbol chain, and if it is, then allow it to be adjusted into a reloc against a section symbol. */ - if (fixP->fx_addsy != NULL) - { - symbolS * sym; - - for (sym = symbol_rootP; sym != NULL; sym = symbol_next (sym)) - if (sym == fixP->fx_addsy) - break; - if (sym == NULL) - return 1; - } + if (fixP->fx_addsy != NULL + && ! S_IS_LOCAL (fixP->fx_addsy) + && symbol_next (fixP->fx_addsy) == NULL + && symbol_next (fixP->fx_addsy) == symbol_previous (fixP->fx_addsy)) + return 1; return 0; } -- 2.30.2