[PATCH] gas/symbols: do not panic upon resolving O_md

Dmitry Selyutin ghostmansd@gmail.com
Thu Jul 14 21:26:52 GMT 2022


Assuming GMSD is a special operand, marked as O_md1, the code:

    .set VREG, GMSD
    .set REG, VREG
    extsw REG, 2

...fails upon attempts to resolve the value of the symbol. This happens
since machine-dependent values are not handled in the giant op switch.

Machine-dependent expressions don't really need to be resolved, since
the resolving process is really machine-dependent. We could have marked
such symbols as resolving in port. However, we don't want to access
the field which seems to be internal, and we especially don't want
to perform this for each and every port.
---
 gas/symbols.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/gas/symbols.c b/gas/symbols.c
index 6904a3102c..fd2117f7da 100644
--- a/gas/symbols.c
+++ b/gas/symbols.c
@@ -1408,6 +1408,16 @@ resolve_symbol_value (symbolS *symp)
 	  BAD_CASE (op);
 	  break;
 
+	case O_md1...O_md32:
+	  /* Machine-dependent expressions don't really need
+	   * to be resolved, since the resolving process is
+	   * really machine-dependent. We could have marked
+	   * such symbols as resolving in port. However, we
+	   * don't want to access the field which seems to be
+	   * internal, and we especially don't want to perform
+	   * this for each and every port. */
+	  break;
+
 	case O_absent:
 	  final_val = 0;
 	  /* Fall through.  */
-- 
2.37.0



More information about the Binutils mailing list