[binutils-gdb] gas symbol_remove
Alan Modra
amodra@sourceware.org
Fri May 30 00:46:55 GMT 2025
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=da79d62c379874467d6cf2e634b40e1eb2d825f9
commit da79d62c379874467d6cf2e634b40e1eb2d825f9
Author: Alan Modra <amodra@gmail.com>
Date: Thu May 29 12:50:45 2025 +0930
gas symbol_remove
If a symbol is at the start of the symbol chain then symbol_rootP
points at the symbol and symbol->x->previous is NULL. Testing either
condition is sufficient, there is no need to test both. Similarly for
the symbol at the end of the symbol chain.
I'm testing the previous/next pointer because it's most likely that
the symbol is not at the start/finish of the chain and thus we need to
use that pointer.
* symbols.c (symbol_remove): Tidy list handling.
(symbol_append, symbol_clone, symbol_insert): Likewise.
Diff:
---
gas/symbols.c | 59 ++++++++++++++++++-----------------------------------------
1 file changed, 18 insertions(+), 41 deletions(-)
diff --git a/gas/symbols.c b/gas/symbols.c
index 14e6018b0cc..45b7d9b95e6 100644
--- a/gas/symbols.c
+++ b/gas/symbols.c
@@ -812,17 +812,14 @@ symbol_clone (symbolS *orgsymP, int replace)
if (replace)
{
- if (symbol_rootP == orgsymP)
+ if (orgsymP->x->previous != NULL)
+ orgsymP->x->previous->x->next = newsymP;
+ else
symbol_rootP = newsymP;
- else if (orgsymP->x->previous)
- {
- orgsymP->x->previous->x->next = newsymP;
- orgsymP->x->previous = NULL;
- }
- if (symbol_lastP == orgsymP)
- symbol_lastP = newsymP;
- else if (orgsymP->x->next)
+ if (orgsymP->x->next != NULL)
orgsymP->x->next->x->previous = newsymP;
+ else
+ symbol_lastP = newsymP;
/* Symbols that won't be output can't be external. */
S_CLEAR_EXTERNAL (orgsymP);
@@ -1033,17 +1030,12 @@ symbol_append (symbolS *addme, symbolS *target,
*rootPP = addme;
*lastPP = addme;
return;
- } /* if the list is empty */
+ }
if (target->x->next != NULL)
- {
- target->x->next->x->previous = addme;
- }
+ target->x->next->x->previous = addme;
else
- {
- know (*lastPP == target);
- *lastPP = addme;
- } /* if we have a next */
+ *lastPP = addme;
addme->x->next = target->x->next;
target->x->next = addme;
@@ -1071,25 +1063,15 @@ symbol_remove (symbolS *symbolP, symbolS **rootPP, symbolS **lastPP)
if (symbolP->flags.local_symbol)
abort ();
- if (symbolP == *rootPP)
- {
- *rootPP = symbolP->x->next;
- } /* if it was the root */
-
- if (symbolP == *lastPP)
- {
- *lastPP = symbolP->x->previous;
- } /* if it was the tail */
+ if (symbolP->x->previous != NULL)
+ symbolP->x->previous->x->next = symbolP->x->next;
+ else
+ *rootPP = symbolP->x->next;
if (symbolP->x->next != NULL)
- {
- symbolP->x->next->x->previous = symbolP->x->previous;
- } /* if not last */
-
- if (symbolP->x->previous != NULL)
- {
- symbolP->x->previous->x->next = symbolP->x->next;
- } /* if not first */
+ symbolP->x->next->x->previous = symbolP->x->previous;
+ else
+ *lastPP = symbolP->x->previous;
debug_verify_symchain (*rootPP, *lastPP);
}
@@ -1109,14 +1091,9 @@ symbol_insert (symbolS *addme, symbolS *target,
abort ();
if (target->x->previous != NULL)
- {
- target->x->previous->x->next = addme;
- }
+ target->x->previous->x->next = addme;
else
- {
- know (*rootPP == target);
- *rootPP = addme;
- } /* if not first */
+ *rootPP = addme;
addme->x->previous = target->x->previous;
target->x->previous = addme;
More information about the Binutils-cvs
mailing list