about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2006-11-14T15·36+0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2006-11-14T15·36+0000
commitbce9ff7ece912d18f1d92e6759b82ef5b8ad20aa (patch)
treeb7a1b6118ffbb7c34e5e63c9785942ba81e0c1be
parent745e354b19a00dba9fd6d058036ce412ba30e23a (diff)
* Use the patched ATerm library.
-rw-r--r--externals/Makefile.am12
-rw-r--r--externals/aterm-64-bit.patch661
-rw-r--r--externals/aterm-aliasing.patch224
3 files changed, 5 insertions, 892 deletions
diff --git a/externals/Makefile.am b/externals/Makefile.am
index 0eb229954195..937e095a312e 100644
--- a/externals/Makefile.am
+++ b/externals/Makefile.am
@@ -35,19 +35,17 @@ endif
 
 # CWI ATerm
 
-ATERM = aterm-2.4.2
+ATERM = aterm-2.4.2-fixes
 
 $(ATERM).tar.gz:
 	@echo "Nix requires the CWI ATerm library to build."
-	@echo "Please download version 2.4.2 from"
-	@echo "  http://www.cwi.nl/projects/MetaEnv/aterm/aterm-2.4.2.tar.gz"
+	@echo "Please download version 2.4.2-fixes from"
+	@echo "  http://losser.st-lab.cs.uu.nl/~eelco/dist/aterm-2.4.2-fixes.tar.bz2"
 	@echo "and place it in the externals/ directory."
 	false
 
-$(ATERM): $(ATERM).tar.gz
-	gunzip < $(srcdir)/$(ATERM).tar.gz | tar xvf -
-	(cd $(ATERM) && $(patch) -p1) < $(srcdir)/aterm-aliasing.patch
-#	(cd $(ATERM) && $(patch) -p1) < $(srcdir)/aterm-64-bit.patch
+$(ATERM): $(ATERM).tar.bz2
+	bunzip2 < $(srcdir)/$(ATERM).tar.bz2 | tar xvf -
 
 have-aterm:
 	$(MAKE) $(ATERM)
diff --git a/externals/aterm-64-bit.patch b/externals/aterm-64-bit.patch
deleted file mode 100644
index 4618d0883ca3..000000000000
--- a/externals/aterm-64-bit.patch
+++ /dev/null
@@ -1,661 +0,0 @@
-diff -rc aterm-2.4.2-orig/aterm/bafio.c aterm-2.4.2/aterm/bafio.c
-*** aterm-2.4.2-orig/aterm/bafio.c	2004-02-02 12:24:34.000000000 +0100
---- aterm-2.4.2/aterm/bafio.c	2006-09-22 13:39:07.000000000 +0200
-***************
-*** 222,227 ****
---- 222,229 ----
-      }
-    }
-  
-+   if (val) return -1;
-+ 
-    /* Ok */
-    return 0;
-  }
-***************
-*** 544,551 ****
-    * terms have been sorted by symbol.
-  	*/
-  
-! void gather_top_symbols(sym_entry *cur_entry, int cur_arg, 
-! 			int total_top_symbols)
-  {
-    int index;
-    unsigned int hnr;
---- 546,553 ----
-    * terms have been sorted by symbol.
-  	*/
-  
-! static void gather_top_symbols(sym_entry *cur_entry, int cur_arg, 
-! 			       int total_top_symbols)
-  {
-    int index;
-    unsigned int hnr;
-***************
-*** 899,905 ****
-    } else {
-      switch(ATgetType(t)) {
-      case AT_INT:
-!       if(writeBits(ATgetInt((ATermInt)t), HEADER_BITS, writer) < 0) {
-  	return ATfalse;
-        }
-  #if 0
---- 901,908 ----
-    } else {
-      switch(ATgetType(t)) {
-      case AT_INT:
-!       /* If ATerm integers are > 32 bits, then this can fail. */
-!       if(writeBits(ATgetInt((ATermInt)t), INT_SIZE_IN_BAF, writer) < 0) {
-  	return ATfalse;
-        }
-  #if 0
-***************
-*** 1033,1039 ****
-  /*}}}  */
-  /*{{{  ATbool write_baf(ATerm t, byte_writer *writer) */
-  
-! ATbool
-  write_baf(ATerm t, byte_writer *writer)
-  {
-    int nr_unique_terms = 0;
---- 1036,1042 ----
-  /*}}}  */
-  /*{{{  ATbool write_baf(ATerm t, byte_writer *writer) */
-  
-! static ATbool
-  write_baf(ATerm t, byte_writer *writer)
-  {
-    int nr_unique_terms = 0;
-***************
-*** 1233,1239 ****
-  	* Read a single symbol from file.
-  	*/
-  
-! Symbol read_symbol(byte_reader *reader)
-  {
-    unsigned int arity, quoted;
-    int len;
---- 1236,1242 ----
-  	* Read a single symbol from file.
-  	*/
-  
-! static Symbol read_symbol(byte_reader *reader)
-  {
-    unsigned int arity, quoted;
-    int len;
-***************
-*** 1260,1266 ****
-   * Read all symbols from file.
-   */
-  
-! ATbool read_all_symbols(byte_reader *reader)
-  {
-    unsigned int val;
-    int i, j, k, arity;
---- 1263,1269 ----
-   * Read all symbols from file.
-   */
-  
-! static ATbool read_all_symbols(byte_reader *reader)
-  {
-    unsigned int val;
-    int i, j, k, arity;
-***************
-*** 1280,1293 ****
-      /*}}}  */
-      /*{{{  Read term count and allocate space */
-  
-!     if(readInt(&val, reader) < 0)
-        return ATfalse;
-      read_symbols[i].nr_terms = val;
-      read_symbols[i].term_width = bit_width(val);
-!     if(val == 0)
-!       read_symbols[i].terms = NULL;
-!     else
-!       read_symbols[i].terms = (ATerm *)calloc(val, sizeof(ATerm));
-      if(!read_symbols[i].terms)
-        ATerror("read_symbols: could not allocate space for %d terms.\n", val);
-      ATprotectArray(read_symbols[i].terms, val);
---- 1283,1293 ----
-      /*}}}  */
-      /*{{{  Read term count and allocate space */
-  
-!     if(readInt(&val, reader) < 0 || val == 0)
-        return ATfalse;
-      read_symbols[i].nr_terms = val;
-      read_symbols[i].term_width = bit_width(val);
-!     read_symbols[i].terms = (ATerm *)calloc(val, sizeof(ATerm));
-      if(!read_symbols[i].terms)
-        ATerror("read_symbols: could not allocate space for %d terms.\n", val);
-      ATprotectArray(read_symbols[i].terms, val);
-***************
-*** 1351,1357 ****
-  /*}}}  */
-  /*{{{  ATerm read_term(sym_read_entry *sym, byte_reader *reader) */
-  
-! ATerm read_term(sym_read_entry *sym, byte_reader *reader)
-  {
-    unsigned int val;
-    int i, arity = sym->arity;
---- 1351,1357 ----
-  /*}}}  */
-  /*{{{  ATerm read_term(sym_read_entry *sym, byte_reader *reader) */
-  
-! static ATerm read_term(sym_read_entry *sym, byte_reader *reader)
-  {
-    unsigned int val;
-    int i, arity = sym->arity;
-***************
-*** 1365,1370 ****
---- 1365,1371 ----
-      ATprotectArray(args, arity);
-      if(!args)
-        ATerror("could not allocate space for %d arguments.\n", arity);
-+     /* !!! leaks memory on the "return NULL" paths */
-    }
-  
-    /*ATfprintf(stderr, "reading term over symbol %y\n", sym->sym);*/
-***************
-*** 1372,1377 ****
---- 1373,1380 ----
-      /*ATfprintf(stderr, "  reading argument %d (%d)", i, sym->sym_width[i]);*/
-      if(readBits(&val, sym->sym_width[i], reader) < 0)
-        return NULL;
-+     if(val >= sym->nr_topsyms[i])
-+       return NULL;
-      arg_sym = &read_symbols[sym->topsyms[i][val]];
-      /*		ATfprintf(stderr, "argument %d, symbol index = %d, symbol = %y\n", 
-  		i, val, arg_sym->sym);*/
-***************
-*** 1381,1386 ****
---- 1384,1391 ----
-      if(readBits(&val, arg_sym->term_width, reader) < 0)
-        return NULL;
-      /*		ATfprintf(stderr, "arg term index = %d\n", val);*/
-+     if(val >= arg_sym->nr_terms)
-+       return NULL;
-      if(!arg_sym->terms[val]) {
-        arg_sym->terms[val] = read_term(arg_sym, reader);
-        if(!arg_sym->terms[val])
-***************
-*** 1396,1402 ****
-    case AS_INT:
-      /*{{{  Read an integer */
-  
-!     if(readBits(&val, HEADER_BITS, reader) < 0)
-        return NULL;
-  
-      result = (ATerm)ATmakeInt((int)val);
---- 1401,1407 ----
-    case AS_INT:
-      /*{{{  Read an integer */
-  
-!     if(readBits(&val, INT_SIZE_IN_BAF, reader) < 0)
-        return NULL;
-  
-      result = (ATerm)ATmakeInt((int)val);
-***************
-*** 1494,1502 ****
-    for(i=0; i<nr_unique_symbols; i++) {
-      sym_read_entry *entry = &read_symbols[i];
-  
-!     ATunprotectArray(entry->terms);
-!     if(entry->terms)
-        free(entry->terms);
-      if(entry->nr_topsyms)
-        free(entry->nr_topsyms);
-      if(entry->sym_width)
---- 1499,1508 ----
-    for(i=0; i<nr_unique_symbols; i++) {
-      sym_read_entry *entry = &read_symbols[i];
-  
-!     if(entry->terms) {
-!       ATunprotectArray(entry->terms);
-        free(entry->terms);
-+     }
-      if(entry->nr_topsyms)
-        free(entry->nr_topsyms);
-      if(entry->sym_width)
-Only in aterm-2.4.2/aterm: config.h.in
-diff -rc aterm-2.4.2-orig/aterm/encoding.h aterm-2.4.2/aterm/encoding.h
-*** aterm-2.4.2-orig/aterm/encoding.h	2004-06-01 10:29:02.000000000 +0200
---- aterm-2.4.2/aterm/encoding.h	2006-09-22 13:39:07.000000000 +0200
-***************
-*** 10,15 ****
---- 10,17 ----
-  {
-  #endif/* __cplusplus */
-  
-+ #include "config.h"
-+ 
-  /*
-   |--------------------------------|
-   |info|type |arity|quoted|mark|age|
-***************
-*** 31,37 ****
-  #define SHIFT_REMOVE_MARK_AGE 3
-  #define MASK_AGE_MARK   (MASK_AGE|MASK_MARK)
-  
-! #if AT_64BIT
-  #define SHIFT_LENGTH  34
-  #define HEADER_BITS 64
-  typedef unsigned long header_type;
---- 33,39 ----
-  #define SHIFT_REMOVE_MARK_AGE 3
-  #define MASK_AGE_MARK   (MASK_AGE|MASK_MARK)
-  
-! #ifdef AT_64BIT
-  #define SHIFT_LENGTH  34
-  #define HEADER_BITS 64
-  typedef unsigned long header_type;
-***************
-*** 137,142 ****
---- 139,150 ----
-  #define AT_TABLE_SIZE(table_class)  (1<<(table_class))
-  #define AT_TABLE_MASK(table_class)  (AT_TABLE_SIZE(table_class)-1)
-  
-+ 
-+ /* Integers in BAF are always exactly 32 bits.  The size must be fixed so that
-+  * BAF terms can be exchanged between platforms. */
-+ #define INT_SIZE_IN_BAF 32
-+ 
-+ 
-  #ifdef __cplusplus
-  }
-  #endif/* __cplusplus */ 
-diff -rc aterm-2.4.2-orig/aterm/gc.c aterm-2.4.2/aterm/gc.c
-*** aterm-2.4.2-orig/aterm/gc.c	2004-06-01 10:29:02.000000000 +0200
---- aterm-2.4.2/aterm/gc.c	2006-09-22 13:39:07.000000000 +0200
-***************
-*** 154,166 ****
-      }
-  
-  #ifdef AT_64BIT
-!     odd_term = *((ATerm *)((MachineWord)cur)+4);
-      real_term = AT_isInsideValidTerm(odd_term);
-      if (real_term != NULL) {
-        AT_markTerm(odd_term);
-      }
-  
-!     odd_sym = *((AFun *)((MachineWord)cur)+4);
-      if (AT_isValidSymbol(odd_sym)) {
-          /*fprintf(stderr,"mark_memory: AT_markSymbol(%d)\n",odd_sym);*/
-        AT_markSymbol(odd_sym);
---- 154,166 ----
-      }
-  
-  #ifdef AT_64BIT
-!     odd_term = *((ATerm *)(((MachineWord)cur)+4));
-      real_term = AT_isInsideValidTerm(odd_term);
-      if (real_term != NULL) {
-        AT_markTerm(odd_term);
-      }
-  
-!     odd_sym = *((AFun *)(((MachineWord)cur)+4));
-      if (AT_isValidSymbol(odd_sym)) {
-          /*fprintf(stderr,"mark_memory: AT_markSymbol(%d)\n",odd_sym);*/
-        AT_markSymbol(odd_sym);
-***************
-*** 198,210 ****
-      }
-  
-  #ifdef AT_64BIT
-!     odd_term = *((ATerm *)((MachineWord)cur)+4);
-      real_term = AT_isInsideValidTerm(odd_term);
-      if (real_term != NULL) {
-        AT_markTerm_young(odd_term);
-      }
-  
-!     odd_sym = *((AFun *)((MachineWord)cur)+4);
-      if (AT_isValidSymbol(odd_sym)) {
-          /*fprintf(stderr,"mark_memory_young: AT_markSymbol_young(%d)\n",odd_sym);*/
-        AT_markSymbol_young(odd_sym);
---- 198,210 ----
-      }
-  
-  #ifdef AT_64BIT
-!     odd_term = *((ATerm *)(((MachineWord)cur)+4));
-      real_term = AT_isInsideValidTerm(odd_term);
-      if (real_term != NULL) {
-        AT_markTerm_young(odd_term);
-      }
-  
-!     odd_sym = *((AFun *)(((MachineWord)cur)+4));
-      if (AT_isValidSymbol(odd_sym)) {
-          /*fprintf(stderr,"mark_memory_young: AT_markSymbol_young(%d)\n",odd_sym);*/
-        AT_markSymbol_young(odd_sym);
-***************
-*** 225,235 ****
-    ATerm *start, *stop;
-    ProtEntry *prot;
-  
-- #ifdef AT_64BIT
--   ATerm oddTerm;
--   AFun oddSym;
-- #endif
-- 
-  #ifdef WIN32
-  
-    unsigned int r_eax, r_ebx, r_ecx, r_edx, \
---- 225,230 ----
-***************
-*** 287,293 ****
-    /* Traverse possible register variables */
-    sigsetjmp(env,0);
-  
-!   start = (ATerm *)env;
-    stop  = ((ATerm *)(((char *)env) + sizeof(sigjmp_buf)));
-    mark_memory(start, stop);
-  #endif
---- 282,288 ----
-    /* Traverse possible register variables */
-    sigsetjmp(env,0);
-  
-!   start = (ATerm *)env; /* !!! illegal aliasing  */
-    stop  = ((ATerm *)(((char *)env) + sizeof(sigjmp_buf)));
-    mark_memory(start, stop);
-  #endif
-***************
-*** 338,348 ****
-    ATerm *start, *stop;
-    ProtEntry *prot;
-  
-- #ifdef AT_64BIT
--   ATerm oddTerm;
--   AFun oddSym;
-- #endif
-- 
-  #ifdef WIN32
-  
-    unsigned int r_eax, r_ebx, r_ecx, r_edx, \
---- 333,338 ----
-***************
-*** 400,406 ****
-      /* Traverse possible register variables */
-    sigsetjmp(env,0);
-  
-!   start = (ATerm *)env;
-    stop  = ((ATerm *)(((char *)env) + sizeof(sigjmp_buf)));
-    mark_memory_young(start, stop);
-  #endif
---- 390,396 ----
-      /* Traverse possible register variables */
-    sigsetjmp(env,0);
-  
-!   start = (ATerm *)env; /* !!! illegal aliasing  */
-    stop  = ((ATerm *)(((char *)env) + sizeof(sigjmp_buf)));
-    mark_memory_young(start, stop);
-  #endif
-***************
-*** 1047,1053 ****
-        /*fprintf(stderr,"minor_sweep_phase_young: ensure empty freelist[%d]\n",size);*/
-        for(data = at_freelist[size] ; data ; data=data->next) {
-          if(!EQUAL_HEADER(data->header,FREE_HEADER)) {
-!           fprintf(stderr,"data = %x header = %x\n",(unsigned int)data,data->header);
-          }
-          assert(EQUAL_HEADER(data->header,FREE_HEADER)); 
-          assert(ATgetType(data) == AT_FREE);   
---- 1037,1043 ----
-        /*fprintf(stderr,"minor_sweep_phase_young: ensure empty freelist[%d]\n",size);*/
-        for(data = at_freelist[size] ; data ; data=data->next) {
-          if(!EQUAL_HEADER(data->header,FREE_HEADER)) {
-!           fprintf(stderr,"data = %p header = %x\n",data,(unsigned int) data->header);
-          }
-          assert(EQUAL_HEADER(data->header,FREE_HEADER)); 
-          assert(ATgetType(data) == AT_FREE);   
-diff -rc aterm-2.4.2-orig/aterm/Makefile.am aterm-2.4.2/aterm/Makefile.am
-*** aterm-2.4.2-orig/aterm/Makefile.am	2005-08-03 11:45:19.000000000 +0200
---- aterm-2.4.2/aterm/Makefile.am	2006-09-22 13:39:07.000000000 +0200
-***************
-*** 37,43 ****
-    aterm2.h \
-    atypes.h \
-    deprecated.h \
-!   encoding.h
-  
-  PRIVATE_INCL = \
-    _afun.h \
---- 37,44 ----
-    aterm2.h \
-    atypes.h \
-    deprecated.h \
-!   encoding.h \
-!   config.h
-  
-  PRIVATE_INCL = \
-    _afun.h \
-diff -rc aterm-2.4.2-orig/aterm/md5.h aterm-2.4.2/aterm/md5.h
-*** aterm-2.4.2-orig/aterm/md5.h	2003-09-02 15:32:46.000000000 +0200
---- aterm-2.4.2/aterm/md5.h	2006-09-22 13:39:07.000000000 +0200
-***************
-*** 24,29 ****
---- 24,31 ----
-  documentation and/or software.
-   */
-  
-+ #include <stdint.h>
-+ 
-  /* GLOBAL.H - RSAREF types and constants
-   */
-  
-***************
-*** 46,55 ****
-  typedef unsigned char *POINTER;
-  
-  /* UINT2 defines a two byte word */
-! typedef unsigned short int UINT2;
-  
-  /* UINT4 defines a four byte word */
-! typedef unsigned long int UINT4;
-  
-  /* PROTO_LIST is defined depending on how PROTOTYPES is defined above.
-  If using PROTOTYPES, then PROTO_LIST returns the list, otherwise it
---- 48,57 ----
-  typedef unsigned char *POINTER;
-  
-  /* UINT2 defines a two byte word */
-! typedef uint16_t UINT2;
-  
-  /* UINT4 defines a four byte word */
-! typedef uint32_t UINT4;
-  
-  /* PROTO_LIST is defined depending on how PROTOTYPES is defined above.
-  If using PROTOTYPES, then PROTO_LIST returns the list, otherwise it
-diff -rc aterm-2.4.2-orig/aterm/memory.c aterm-2.4.2/aterm/memory.c
-*** aterm-2.4.2-orig/aterm/memory.c	2005-10-11 13:19:25.000000000 +0200
---- aterm-2.4.2/aterm/memory.c	2006-09-22 13:39:16.000000000 +0200
-***************
-*** 96,102 ****
-  #define HASHNUMBER4(t) hash_number(t,4)
-  #define HASHINT(val)   (tmp[0]=(MachineWord)(AT_INT<<SHIFT_TYPE),\
-                          tmp[1]=(MachineWord)0,\
-!                         tmp[2]=(MachineWord)val,\
-                          hash_number(tmp,3)) 
-  
-  #else
---- 96,102 ----
-  #define HASHNUMBER4(t) hash_number(t,4)
-  #define HASHINT(val)   (tmp[0]=(MachineWord)(AT_INT<<SHIFT_TYPE),\
-                          tmp[1]=(MachineWord)0,\
-!                         tmp[2]=(MachineWord)((unsigned int) val),\
-                          hash_number(tmp,3)) 
-  
-  #else
-***************
-*** 127,133 ****
-  		       ((MachineWord*)t)[2]),((MachineWord*)t)[3]))
-  
-  #define HASHINT(val) \
-! FINISH(COMBINE(START( (AT_INT<<SHIFT_TYPE) ), val))
-  
-  
-  #endif /* HASHPEM */
---- 127,133 ----
-  		       ((MachineWord*)t)[2]),((MachineWord*)t)[3]))
-  
-  #define HASHINT(val) \
-! FINISH(COMBINE(START( (AT_INT<<SHIFT_TYPE) ), (unsigned int) val))
-  
-  
-  #endif /* HASHPEM */
-***************
-*** 708,714 ****
-    at_blocks[size] = newblock;
-    top_at_blocks[size] = newblock->data;
-    assert(at_blocks[size] != NULL);
-!   assert(((int)top_at_blocks[size] % MAX(sizeof(double), sizeof(void *))) == 0);
-    
-      /* [pem: Feb 14 02] TODO: fast allocation */
-    assert(at_freelist[size] == NULL);
---- 708,714 ----
-    at_blocks[size] = newblock;
-    top_at_blocks[size] = newblock->data;
-    assert(at_blocks[size] != NULL);
-!   assert(((long)top_at_blocks[size] % MAX(sizeof(double), sizeof(void *))) == 0);
-    
-      /* [pem: Feb 14 02] TODO: fast allocation */
-    assert(at_freelist[size] == NULL);
-***************
-*** 1009,1018 ****
-    do {
-      if(!cur) {
-          /*printf("freeterm = %d\n",t);*/
-!       fprintf(stderr,"### cannot find term %x in hashtable at pos %d header = %x\n", (unsigned int)t, hnr, t->header);
-! 
-!       ATabort("### cannot find term %n at %p in hashtable at pos %d"
-! 	      ", header = %d\n", t, t, hnr, t->header);
-      }
-      if (cur == t) {
-        if(prev)
---- 1009,1016 ----
-    do {
-      if(!cur) {
-          /*printf("freeterm = %d\n",t);*/
-!       ATabort("### cannot find term %p in hashtable at pos %d"
-! 	      ", header = %x\n", t, hnr, t->header);
-      }
-      if (cur == t) {
-        if(prev)
-***************
-*** 1728,1733 ****
---- 1726,1733 ----
-      hashtable[hnr] = cur;
-    }
-  
-+   assert((hnr & table_mask) == (hash_number(cur, TERM_SIZE_INT) & table_mask));
-+ 
-    return (ATermInt)cur;  
-  }
-  
-diff -rc aterm-2.4.2-orig/aterm.m4 aterm-2.4.2/aterm.m4
-*** aterm-2.4.2-orig/aterm.m4	2005-08-03 11:45:19.000000000 +0200
---- aterm-2.4.2/aterm.m4	2006-09-22 13:39:07.000000000 +0200
-***************
-*** 8,15 ****
-      [AS_HELP_STRING([--with-sharing],[create libraries that do term sharing @<:@yes@:>@])],
-      [if test "$withval" = "no"; then
-         AC_MSG_RESULT([no])
-!        AC_DEFINE([NO_SHARING])
-!        AC_DEFINE([WITH_STATS])
-       else
-         if test "$withval" != "yes"; then
-           AC_MSG_RESULT([unknown value specified for --with-sharing.])
---- 8,15 ----
-      [AS_HELP_STRING([--with-sharing],[create libraries that do term sharing @<:@yes@:>@])],
-      [if test "$withval" = "no"; then
-         AC_MSG_RESULT([no])
-!        AC_DEFINE([NO_SHARING], [], [Whether terms are shared.])
-!        AC_DEFINE([WITH_STATS], [], [Whether to keep statistics.])
-       else
-         if test "$withval" != "yes"; then
-           AC_MSG_RESULT([unknown value specified for --with-sharing.])
-***************
-*** 73,78 ****
---- 73,102 ----
-    AC_SUBST([OPTIMIZECFLAGS])
-  ])
-  
-+ # ATERM_64_BIT
-+ # ------------
-+ # Enable 64-bit mode if pointers are 8 bytes large.
-+ AC_DEFUN([ATERM_64_BIT], [
-+   AC_CHECK_SIZEOF(void *)
-+   AC_CHECK_SIZEOF(int)
-+   AC_CHECK_SIZEOF(long)
-+ 
-+   AC_MSG_CHECKING([what kind of platform this is])
-+ 
-+   AC_SUBST([AT_64BIT], [0])
-+   if test "$ac_cv_sizeof_void_p" = "8" -a "$ac_cv_sizeof_int" = "4" -a "$ac_cv_sizeof_long" = "8"; then
-+     AC_MSG_RESULT([LP64])
-+     AC_SUBST([AT_64BIT], [1])
-+   elif test "$ac_cv_sizeof_void_p" = "8" -a "$ac_cv_sizeof_int" = "8" -a "$ac_cv_sizeof_long" = "8"; then
-+     AC_MSG_RESULT([ILP64 - warning, untested])
-+     AC_SUBST([AT_64BIT], [1])
-+   elif test "$ac_cv_sizeof_void_p" = "4" -a "$ac_cv_sizeof_int" = "4" -a "$ac_cv_sizeof_long" = "4"; then
-+     AC_MSG_RESULT([32 bits])
-+   else
-+     AC_MSG_RESULT([something weird - warning, untested])
-+   fi
-+ ])
-+ 
-  # XT_SVN_REVISION
-  # ---------------
-  AC_DEFUN([XT_SVN_REVISION],
-diff -rc aterm-2.4.2-orig/configure.ac aterm-2.4.2/configure.ac
-*** aterm-2.4.2-orig/configure.ac	2005-08-03 11:45:19.000000000 +0200
---- aterm-2.4.2/configure.ac	2006-09-22 13:39:07.000000000 +0200
-***************
-*** 30,35 ****
---- 30,38 ----
-  # Add a configuration option to allow users to control sharing.
-  ATERM_WITH_SHARING
-  
-+ # Enable 64-bit mode if pointers are 8 bytes large.
-+ ATERM_64_BIT
-+ 
-  CURDATE=`date`
-  AC_SUBST([CURDATE])
-  
-***************
-*** 45,49 ****
---- 48,53 ----
-    doc/spec/Makefile
-    aterm.spec
-    aterm.pc
-+   aterm/config.h
-  ])
-  AC_OUTPUT
-diff -rc aterm-2.4.2-orig/utils/dicttoc.c aterm-2.4.2/utils/dicttoc.c
-*** aterm-2.4.2-orig/utils/dicttoc.c	2003-10-07 13:57:40.000000000 +0200
---- aterm-2.4.2/utils/dicttoc.c	2006-09-22 13:39:07.000000000 +0200
-***************
-*** 69,74 ****
---- 69,75 ----
-    fprintf(file, "#ifndef __%s_H\n", code_prefix);
-    fprintf(file, "#define __%s_H\n\n", code_prefix);
-    fprintf(file, "#include <aterm2.h>\n\n");
-+   fprintf(file, "#include <assert.h>\n\n");
-  
-    while (!ATisEmpty(afuns)) {
-      ATerm afun, alias, pair = ATgetFirst(afuns);
-***************
-*** 244,251 ****
-    ATfprintf(file, "{\n");
-    ATfprintf(file, "  ATermList afuns, terms;\n\n");
-  
-!   ATfprintf(file, "  _%s = ATreadFromBinaryString(_%s_baf, _%s_LEN);\n\n", 
-  	    code_prefix, code_prefix, code_prefix);
-    ATfprintf(file, "  ATprotect(&_%s);\n\n", code_prefix);
-  
-    ATfprintf(file, "  afuns = (ATermList)ATelementAt((ATermList)_%s, 0);\n\n", code_prefix);
---- 245,253 ----
-    ATfprintf(file, "{\n");
-    ATfprintf(file, "  ATermList afuns, terms;\n\n");
-  
-!   ATfprintf(file, "  _%s = ATreadFromBinaryString(_%s_baf, _%s_LEN);\n", 
-  	    code_prefix, code_prefix, code_prefix);
-+   ATfprintf(file, "  assert(_%s);\n\n", code_prefix);
-    ATfprintf(file, "  ATprotect(&_%s);\n\n", code_prefix);
-  
-    ATfprintf(file, "  afuns = (ATermList)ATelementAt((ATermList)_%s, 0);\n\n", code_prefix);
diff --git a/externals/aterm-aliasing.patch b/externals/aterm-aliasing.patch
deleted file mode 100644
index c1dfc3e0e737..000000000000
--- a/externals/aterm-aliasing.patch
+++ /dev/null
@@ -1,224 +0,0 @@
-diff -rc aterm-1142707243.10633/aterm/aterm.c aterm/aterm/aterm.c
-*** aterm-1142707243.10633/aterm/aterm.c	2006-02-08 11:35:28.000000000 +0100
---- aterm/aterm/aterm.c	2006-04-25 17:10:52.000000000 +0200
-***************
-*** 193,198 ****
---- 193,199 ----
-    /* that have char == 2 bytes, and sizeof(header_type) == 2 */
-    assert(sizeof(header_type) == sizeof(ATerm *));
-    assert(sizeof(header_type) >= 4);
-+   assert(sizeof(ATerm) == sizeof(MachineWord));
-  
-    /*}}}  */
-    /*{{{  Initialize buffer */
-diff -rc aterm-1142707243.10633/aterm/memory.c aterm/aterm/memory.c
-*** aterm-1142707243.10633/aterm/memory.c	2006-03-09 15:02:56.000000000 +0100
---- aterm/aterm/memory.c	2006-04-25 18:22:00.000000000 +0200
-***************
-*** 119,130 ****
-                          hash_number(tmp,3)) 
-  */
-  
-  #define HASHNUMBER3(t)\
-! FINISH(COMBINE(START(((MachineWord*)t)[0]), ((MachineWord*)t)[2]))
-  
-  #define HASHNUMBER4(t)\
-! FINISH(COMBINE(COMBINE(START(((MachineWord*)t)[0]), \
-! 		       ((MachineWord*)t)[2]),((MachineWord*)t)[3]))
-  
-  #define HASHINT(val) \
-  FINISH(COMBINE(START( (AT_INT<<SHIFT_TYPE) ), val))
---- 119,171 ----
-                          hash_number(tmp,3)) 
-  */
-  
-+ /* The ATerm library use some heavy aliasing.  For instance, the
-+    various ATermXXX structures are referenced through MachineWord
-+    arrays.  This is not generally allowed by the C standard --- see
-+    C99, section 6.5, clause 7.  In particular, this means that you
-+    cannot assign something through an ATermXXX pointer, e.g.,
-+ 
-+      protoAppl->header = header;
-+ 
-+    and then read it through a MachineWord*, e.g.,
-+ 
-+      hnr = hash_number((ATerm) protoAppl, 2);
-+ 
-+    (hash_number walks over the term by casting it to a MachineWord*).
-+ 
-+    However, the same clause of the C standard also specifies that you
-+    *can* read the memory location through a union type that contains
-+    both the original type (e.g. ATermAppl) and the type used to read
-+    the memory location (e.g. MachineWord).  That's what we do
-+    below: we have a union of all the types that occur in the various
-+    ATerm types.  We then read the "w" element of the union.  The
-+    compiler is not allowed to assume absence of aliasing with the
-+    other types in the union.
-+ 
-+    A better solution would be to hash the term through a character
-+    pointer (since *any* memory location can be legally read as a
-+    character), but I'm too lazy right now.  Performance might also
-+    suffer if we do that. */
-+ 
-+ typedef union 
-+ {
-+     MachineWord w;
-+     header_type header;
-+     ATerm term;
-+     ATermList list;
-+     int i;
-+     double d;
-+     void* p;
-+ } Aliaser;
-+ 
-+ #define GET_WORD(t, n) (((Aliaser*) (((MachineWord*) t) + n))->w)
-+ 
-  #define HASHNUMBER3(t)\
-! FINISH(COMBINE(START(GET_WORD(t, 0)), GET_WORD(t, 2)))
-  
-  #define HASHNUMBER4(t)\
-! FINISH(COMBINE(COMBINE(START(GET_WORD(t, 0)), \
-! 		       GET_WORD(t, 2)), GET_WORD(t, 3)))
-  
-  #define HASHINT(val) \
-  FINISH(COMBINE(START( (AT_INT<<SHIFT_TYPE) ), val))
-***************
-*** 132,144 ****
-  
-  #endif /* HASHPEM */
-  
-! #define PROTO_APPL_ARGS ((ATerm *) (protoTerm + ARG_OFFSET))
-  
-  #define SET_PROTO_APPL_ARG(i, a) \
-!   (PROTO_APPL_ARGS[(i)] = (a))
-  
-  #define GET_PROTO_APPL_ARG(i) \
-!   (PROTO_APPL_ARGS[(i)])
-  
-  #define CHECK_TERM(t) \
-    assert((t) != NULL \
---- 173,185 ----
-  
-  #endif /* HASHPEM */
-  
-! #define PROTO_APPL_ARGS (protoTerm + ARG_OFFSET)
-  
-  #define SET_PROTO_APPL_ARG(i, a) \
-!   (PROTO_APPL_ARGS[(i)] = (MachineWord) (a))
-  
-  #define GET_PROTO_APPL_ARG(i) \
-!   ((ATerm) PROTO_APPL_ARGS[(i)])
-  
-  #define CHECK_TERM(t) \
-    assert((t) != NULL \
-***************
-*** 323,336 ****
-  #else
-  static HashNumber hash_number(ATerm t, int size)
-  {
--   MachineWord *words = (MachineWord *) t;
-    int i;
-    HashNumber hnr;
-  
-!   hnr = START(HIDE_AGE_MARK(words[0]));
-    
-    for (i=2; i<size; i++) {
-!     hnr = COMBINE(hnr, words[i]);
-    }
-  
-    return FINISH(hnr);
---- 364,376 ----
-  #else
-  static HashNumber hash_number(ATerm t, int size)
-  {
-    int i;
-    HashNumber hnr;
-  
-!   hnr = START(HIDE_AGE_MARK(GET_WORD(t, 0)));
-    
-    for (i=2; i<size; i++) {
-!     hnr = COMBINE(hnr, GET_WORD(t, i));
-    }
-  
-    return FINISH(hnr);
-***************
-*** 338,351 ****
-  
-  static HashNumber hash_number_anno(ATerm t, int size, ATerm anno)
-  {
--   MachineWord *words = (MachineWord *) t;
-    int i;
-    HashNumber hnr;
-  
-!   hnr = START(HIDE_AGE_MARK(words[0]));
-    
-    for (i=2; i<size; i++) {
-!     hnr = COMBINE(hnr, words[i]);
-    }
-    hnr = COMBINE(hnr, (MachineWord)anno);
-  
---- 378,390 ----
-  
-  static HashNumber hash_number_anno(ATerm t, int size, ATerm anno)
-  {
-    int i;
-    HashNumber hnr;
-  
-!   hnr = START(HIDE_AGE_MARK(GET_WORD(t, 0)));
-    
-    for (i=2; i<size; i++) {
-!     hnr = COMBINE(hnr, GET_WORD(t, i));
-    }
-    hnr = COMBINE(hnr, (MachineWord)anno);
-  
-***************
-*** 1639,1645 ****
-    protoAppl->header = header;
-    CHECK_HEADER(protoAppl->header);
-  
-!   if (args != PROTO_APPL_ARGS) {
-      for (i=0; i<arity; i++) {
-        CHECK_TERM(args[i]);
-        SET_PROTO_APPL_ARG(i, args[i]);
---- 1678,1684 ----
-    protoAppl->header = header;
-    CHECK_HEADER(protoAppl->header);
-  
-!   if (args != (ATerm *) PROTO_APPL_ARGS) {
-      for (i=0; i<arity; i++) {
-        CHECK_TERM(args[i]);
-        SET_PROTO_APPL_ARG(i, args[i]);
-***************
-*** 1680,1686 ****
-      hashtable[hnr] = cur;
-    }
-  
-!   if (args != PROTO_APPL_ARGS) {
-      for (i=0; i<arity; i++) {
-        protected_buffer[i] = NULL;
-      }
---- 1719,1725 ----
-      hashtable[hnr] = cur;
-    }
-  
-!   if (args != (ATerm *) PROTO_APPL_ARGS) {
-      for (i=0; i<arity; i++) {
-        protected_buffer[i] = NULL;
-      }
-***************
-*** 2144,2150 ****
-    }
-    SET_PROTO_APPL_ARG(n, arg);
-  
-!   result = ATmakeApplArray(sym, PROTO_APPL_ARGS);
-    annos = AT_getAnnotations((ATerm)appl);
-    if (annos != NULL) {
-      result = (ATermAppl)AT_setAnnotations((ATerm)result, annos);
---- 2183,2189 ----
-    }
-    SET_PROTO_APPL_ARG(n, arg);
-  
-!   result = ATmakeApplArray(sym, (ATerm *) PROTO_APPL_ARGS);
-    annos = AT_getAnnotations((ATerm)appl);
-    if (annos != NULL) {
-      result = (ATermAppl)AT_setAnnotations((ATerm)result, annos);