This patch implements a more robust parsing of the
AVR_MCU lines in genmultlib.awk.

The generated t-multilib-avr is the same.

Ok for trunk?

Johann

AVR: genmultilib.awk - Use more robust parsing of spaces.

gcc/
        * config/avr/genmultilib.awk: Parse the AVR_MCU lines in
        a more robust way w.r.t. white spaces.
diff --git a/gcc/config/avr/genmultilib.awk b/gcc/config/avr/genmultilib.awk
index 71099e80fbb..a69f31bd640 100644
--- a/gcc/config/avr/genmultilib.awk
+++ b/gcc/config/avr/genmultilib.awk
@@ -31,6 +31,7 @@ BEGIN {
     FS ="[(, \t]+"
     option[""] = ""
     comment = 1
+    cols_expected = -1
 
     dir_tiny = "tiny-stack"
     opt_tiny = "msp8"
@@ -136,10 +137,35 @@ BEGIN {
 ##################################################################
 
 /^AVR_MCU/ {
-    name = $2
-    gsub ("\"", "", name)
+    line = $0
+    gsub (/[ \t"]/, "", line)
+    n_cols = split (line, col, ",")
+    # Now we have col[] something like:
+    # col[1] = AVR_MCU(avr2      # Device name
+    # col[2] = ARCH_AVR2         # Core
+    # col[3] = AVR_ERRATA_SKIP   # Device Attributes
+    # col[4] = NULL              # Device Macro like __AVR_ATtiny22__
+    # col[5] = 0x0060            # Tdata
+    # col[6] = 0x0               # Ttext
+    # col[7] = 0x60000           # Flash Size
+    # col[8] = 0)                # PM Offset
+
+    # Sanity check the number of columns.
+    if (cols_expected == -1)
+	cols_expected = n_cols
+    else if (n_cols != cols_expected)
+    {
+	msg = "genmultilib.awk: error: wrong number of columns"
+	print msg | "cat 1>&2"
+	print $0 | "cat 1>&2"
+	exit 1
+    }
+
+    # col[1] is something like AVR_MCU(avr2
+    split (col[1], col1, "(")
+    name = col1[2]
 
-    if ($5 == "NULL")
+    if (col[4] == "NULL")
     {
 	core = name
 
@@ -169,7 +195,7 @@ BEGIN {
     opts = option[core]
 
     # split device specific feature list
-    n = split($4,dev_attribute,"|")
+    n = split (col[3], dev_attribute, "|")
 
     for (i=1; i <= n; i++)
     {

Reply via email to