4b6dc23
diff -dur gcl-2.6.8.ORIG/o/plt.c gcl-2.6.8/o/plt.c
eb5d1b4
--- gcl-2.6.8.ORIG/o/plt.c	2009-12-11 09:10:05.000000000 -0700
eb5d1b4
+++ gcl-2.6.8/o/plt.c	2010-03-23 10:57:32.741972442 -0600
9f2dad2
@@ -102,6 +102,12 @@
9f2dad2
 
9f2dad2
 }
9f2dad2
 
eb5d1b4
+/* Parser states */
9f2dad2
+#define NOTHING 0 /* initial state */
9f2dad2
+#define PLT     1 /* reading plt */
9f2dad2
+#define NEWLINE 2 /* reading empty line after .iplt */
9f2dad2
+#define IPLT    3 /* reading iplt */
9f2dad2
+
9f2dad2
 int
9f2dad2
 parse_plt() {
9f2dad2
 
eb5d1b4
@@ -132,15 +138,24 @@
9f2dad2
     return 0;
9f2dad2
   if (!(f=fopen(b1,"r")))
9f2dad2
     FEerror("Cannot open map file", 0);
9f2dad2
-  for (i=j=0,li=Cnil;fgets(b,sizeof(b),f);) {
9f2dad2
+  for (i=NOTHING,j=0,li=Cnil;fgets(b,sizeof(b),f);) {
4b6dc23
     if (!memchr(b,10,sizeof(b)-1))
4b6dc23
       FEerror("plt buffer too small", 0);
eb5d1b4
-    if (!memcmp(b," .plt",4)) {
eb5d1b4
-      i=1;
9f2dad2
+    if (i == NOTHING) {
9f2dad2
+      if (memcmp(b," .plt",5) == 0)
9f2dad2
+	i = PLT;
9f2dad2
+      else if (memcmp(b," .iplt",6) == 0)
9f2dad2
+	i = NEWLINE;
4b6dc23
       continue;
eb5d1b4
     }
eb5d1b4
-    if (*b!=' ' || b[1]!=' ' || !i) {
9f2dad2
-      i=0;
eb5d1b4
+    if (*b=='\r' || *b=='\n') {
9f2dad2
+      i = (i == NEWLINE) ? PLT : NOTHING;
eb5d1b4
+      continue;
9f2dad2
+    }
9f2dad2
+    if (b[1] != ' ') {
9f2dad2
+      /* There is at least one "annotation" line before the iplt information */
9f2dad2
+      if (i != NEWLINE)
9f2dad2
+	i = NOTHING;
eb5d1b4
       continue;
eb5d1b4
     }
9f2dad2
     if (sscanf(b,"%lx%n",&u,&n)!=1)