New Ticket     Wiki     Browse Source     Timeline     Roadmap     Ticket Reports     Search

Ticket #9053: avoid-crash.diff

File avoid-crash.diff, 5.4 KB (added by vinc17@…, 3 years ago)

patch to avoid the crash in config.guess on PowerPC: keep the Mac OS X test only

  • files/patch-config.guess.diff

     
     1--- config.guess.old    2008-08-12 00:49:38.000000000 +0200 
     2+++ config.guess        2009-03-06 23:55:14.000000000 +0100 
     3@@ -325,144 +325,6 @@ 
     4   # (as noted below).  But the man page says the command is still "under 
     5   # development", so it doesn't seem wise to use it just yet, not while 
     6   # there's an alternative. 
     7-  # 
     8-  # Try to read the PVR.  mfpvr is a protected instruction, NetBSD, MacOS 
     9-  # and AIX don't allow it in user mode, but the Linux kernel does. 
     10-  # 
     11-  # Using explicit bytes for mfpvr avoids worrying about assembler syntax 
     12-  # and underscores.  "char"s are used instead of "int"s to avoid worrying 
     13-  # whether sizeof(int)==4 or if it's the right endianness. 
     14-  # 
     15-  # Note this is no good on AIX, since a C function there is the address of 
     16-  # a function descriptor, not actual code.  But this doesn't matter since 
     17-  # AIX doesn't allow mfpvr anyway. 
     18-  # 
     19-  cat >$dummy.c <<\EOF 
     20-#include <stdio.h> 
     21-struct { 
     22-  int   n;  /* force 4-byte alignment */ 
     23-  char  a[8]; 
     24-} getpvr = { 
     25-  0, 
     26-  { 
     27-    0x7c, 0x7f, 0x42, 0xa6,  /* mfpvr r3 */ 
     28-    0x4e, 0x80, 0x00, 0x20,  /* blr      */ 
     29-  } 
     30-}; 
     31-int 
     32-main () 
     33-{ 
     34-  unsigned  (*fun)(); 
     35-  unsigned  pvr; 
     36- 
     37-  /* a separate "fun" variable is necessary for gcc 2.95.2 on MacOS, 
     38-     it gets a compiler error on a combined cast and call */ 
     39-  fun = (unsigned (*)()) getpvr.a; 
     40-  pvr = (*fun) (); 
     41- 
     42-  switch (pvr >> 16) { 
     43-  case 0x0001: puts ("powerpc601");  break; 
     44-  case 0x0003: puts ("powerpc603");  break; 
     45-  case 0x0004: puts ("powerpc604");  break; 
     46-  case 0x0006: puts ("powerpc603e"); break; 
     47-  case 0x0007: puts ("powerpc603e"); break;  /* 603ev */ 
     48-  case 0x0008: puts ("powerpc750");  break; 
     49-  case 0x0009: puts ("powerpc604e"); break; 
     50-  case 0x000a: puts ("powerpc604e"); break;  /* 604ev5 */ 
     51-  case 0x000c: puts ("powerpc7400"); break; 
     52-  case 0x0041: puts ("powerpc630");  break; 
     53-  case 0x0050: puts ("powerpc860");  break; 
     54-  case 0x8000: puts ("powerpc7450"); break; 
     55-  case 0x8001: puts ("powerpc7455"); break; 
     56-  case 0x8002: puts ("powerpc7457"); break; 
     57-  case 0x8003: puts ("powerpc7447"); break; /* really 7447A */ 
     58-  case 0x800c: puts ("powerpc7410"); break; 
     59-  } 
     60-  return 0; 
     61-} 
     62-EOF 
     63-  if ($CC_FOR_BUILD $dummy.c -o $dummy) >/dev/null 2>&1; then 
     64-    # This style construct is needed on AIX 4.3 to suppress the SIGILL error 
     65-    # from (*fun)().  Using $SHELL -c ./$dummy 2>/dev/null doesn't work. 
     66-    { x=`./$dummy`; } 2>/dev/null 
     67-    if test -n "$x"; then 
     68-      exact_cpu=$x 
     69-    fi 
     70-  fi 
     71-  rm -f $dummy.c $dummy.o $dummy $dummy.core 
     72- 
     73-  # Grep the linux kernel /proc/cpuinfo pseudo-file. 
     74-  # Anything unrecognised is ignored, since of course we mustn't spit out 
     75-  # a cpu type config.sub doesn't know. 
     76-  if test -z "$exact_cpu" && test -f /proc/cpuinfo; then 
     77-    x=`grep "^cpu[     ]" /proc/cpuinfo | head -n 1` 
     78-    x=`echo $x | sed -n 's/^cpu[       ]*:[    ]*\([A-Za-z0-9]*\).*/\1/p'` 
     79-    x=`echo $x | sed 's/PPC//'` 
     80-    case $x in 
     81-      601)     exact_cpu="power" ;; 
     82-      603ev)   exact_cpu="powerpc603e" ;; 
     83-      604ev5)  exact_cpu="powerpc604e" ;; 
     84-      603 | 603e | 604 | 604e | 750 | 821 | 860 | 970) 
     85-        exact_cpu="powerpc$x" ;; 
     86-      POWER[4-9]) 
     87-        exact_cpu=`echo $x | sed "s;POWER;power;"` ;; 
     88-    esac 
     89-  fi 
     90- 
     91-  if test -z "$exact_cpu"; then 
     92-    # On AIX, try looking at _system_configuration.  This is present in 
     93-    # version 4 at least. 
     94-    cat >$dummy.c <<EOF 
     95-#include <stdio.h> 
     96-#include <sys/systemcfg.h> 
     97-int 
     98-main () 
     99-{ 
     100-  switch (_system_configuration.implementation) { 
     101-  /* Old versions of AIX don't have all these constants, 
     102-     use ifdef for safety. */ 
     103-#ifdef POWER_RS2 
     104-  case POWER_RS2:    puts ("power2");     break; 
     105-#endif 
     106-#ifdef POWER_601 
     107-  case POWER_601:    puts ("power");      break; 
     108-#endif 
     109-#ifdef POWER_603 
     110-  case POWER_603:    puts ("powerpc603"); break; 
     111-#endif 
     112-#ifdef POWER_604 
     113-  case POWER_604:    puts ("powerpc604"); break; 
     114-#endif 
     115-#ifdef POWER_620 
     116-  case POWER_620:    puts ("powerpc620"); break; 
     117-#endif 
     118-#ifdef POWER_630 
     119-  case POWER_630:    puts ("powerpc630"); break; 
     120-#endif 
     121-  /* Dunno what this is, leave it out for now. 
     122-  case POWER_A35:    puts ("powerpca35"); break; 
     123-  */ 
     124-  /* This is waiting for a bit more info. 
     125-  case POWER_RS64II: puts ("powerpcrs64ii"); break; 
     126-  */ 
     127-  default: 
     128-    if (_system_configuration.architecture == POWER_RS) 
     129-      puts ("power"); 
     130-    else if (_system_configuration.width == 64) 
     131-      puts ("powerpc64"); 
     132-  } 
     133-  return 0; 
     134-} 
     135-EOF 
     136-    if ($CC_FOR_BUILD $dummy.c -o $dummy) >/dev/null 2>&1; then 
     137-      x=`./$dummy` 
     138-      if test -n "$x"; then 
     139-        exact_cpu=$x 
     140-      fi 
     141-    fi 
     142-    rm -f $dummy.c $dummy.o $dummy 
     143-  fi 
     144- 
     145   if test -z "$exact_cpu"; then 
     146     # On MacOS X (or any Mach-O presumably), NXGetLocalArchInfo cpusubtype 
     147     # can tell us the exact cpu. 
  • Portfile

     
    3232use_bzip2       yes 
    3333use_parallel_build yes 
    3434 
     35patchfiles      patch-config.guess.diff 
     36 
    3537configure.args  --infodir=${prefix}/share/info \ 
    3638                --enable-cxx 
    3739