summaryrefslogtreecommitdiff
path: root/devel
diff options
context:
space:
mode:
authorbjs <bjs@pkgsrc.org>2008-01-28 05:38:20 +0000
committerbjs <bjs@pkgsrc.org>2008-01-28 05:38:20 +0000
commit128c05296aa7a2dcc0114b91aa706c6f081e7d1c (patch)
tree1579bdc8c736691b37f813a36977811ecaed98ac /devel
parent86b88438518e710d00d4b1626f8b5611fcec0e86 (diff)
downloadpkgsrc-128c05296aa7a2dcc0114b91aa706c6f081e7d1c.tar.gz
Update to version 2.01. There are far too many changes to include here;
please see the ChangeLog if interested. All patches except Makefile patches are no longer necessary. While here, add -Wno-signed-char to quiet these warnings. Also change INSTALLATION_DIRS to AUTO_MKDIRS, quiet pkglint by setting INFO_FILES=yes.
Diffstat (limited to 'devel')
-rw-r--r--devel/nasm/Makefile9
-rw-r--r--devel/nasm/PLIST10
-rw-r--r--devel/nasm/distinfo16
-rw-r--r--devel/nasm/patches/patch-aa21
-rw-r--r--devel/nasm/patches/patch-ab17
-rw-r--r--devel/nasm/patches/patch-ac24
-rw-r--r--devel/nasm/patches/patch-ad1324
-rw-r--r--devel/nasm/patches/patch-ae61
8 files changed, 46 insertions, 1436 deletions
diff --git a/devel/nasm/Makefile b/devel/nasm/Makefile
index 925049606c4..c1b6c69ef06 100644
--- a/devel/nasm/Makefile
+++ b/devel/nasm/Makefile
@@ -1,7 +1,6 @@
-# $NetBSD: Makefile,v 1.32 2007/02/22 19:26:22 wiz Exp $
+# $NetBSD: Makefile,v 1.33 2008/01/28 05:38:20 bjs Exp $
-DISTNAME= nasm-0.98.39
-PKGREVISION= 3
+DISTNAME= nasm-2.01
CATEGORIES= devel lang
MASTER_SITES= ${MASTER_SITE_SOURCEFORGE:=nasm/}
EXTRACT_SUFX= .tar.bz2
@@ -17,7 +16,7 @@ USE_TOOLS+= gmake makeinfo perl
GCC_REQD+= 3.0
GNU_CONFIGURE= yes
-INFO_FILES= # PLIST
+INFO_FILES= yes
BUILD_TARGET= everything
INSTALL_TARGET= install_everything
@@ -26,7 +25,7 @@ INSTALL_ENV+= INSTALLROOT=${DESTDIR}
MAKE_ENV+= PERL5=${PERL5:Q} \
INSTALL_DATA_DIR=${INSTALL_DATA_DIR:Q}
-INSTALLATION_DIRS= bin ${PKGINFODIR} ${PKGMANDIR}/man1 share/doc/html
+AUTO_MKDIRS= yes
.include "../../mk/compiler.mk"
diff --git a/devel/nasm/PLIST b/devel/nasm/PLIST
index e1751e17243..475f122b77b 100644
--- a/devel/nasm/PLIST
+++ b/devel/nasm/PLIST
@@ -1,4 +1,4 @@
-@comment $NetBSD: PLIST,v 1.5 2006/03/31 05:37:09 jlam Exp $
+@comment $NetBSD: PLIST,v 1.6 2008/01/28 05:38:20 bjs Exp $
bin/ldrdf
bin/nasm
bin/ndisasm
@@ -9,9 +9,16 @@ bin/rdfdump
bin/rdflib
bin/rdx
info/nasm.info
+man/man1/ldrdf.1
man/man1/nasm.1
man/man1/ndisasm.1
+man/man1/rdf2bin.1
+man/man1/rdf2com.1
+man/man1/rdfdump.1
+man/man1/rdflib.1
+man/man1/rdx.1
share/doc/html/nasm/nasmdo10.html
+share/doc/html/nasm/nasmdo11.html
share/doc/html/nasm/nasmdoc0.html
share/doc/html/nasm/nasmdoc1.html
share/doc/html/nasm/nasmdoc2.html
@@ -23,7 +30,6 @@ share/doc/html/nasm/nasmdoc7.html
share/doc/html/nasm/nasmdoc8.html
share/doc/html/nasm/nasmdoc9.html
share/doc/html/nasm/nasmdoca.html
-share/doc/html/nasm/nasmdocb.html
share/doc/html/nasm/nasmdoci.html
share/doc/nasm/nasmdoc.ps
share/doc/nasm/nasmdoc.txt
diff --git a/devel/nasm/distinfo b/devel/nasm/distinfo
index 3bbb2c0d3f0..3cfa681ac37 100644
--- a/devel/nasm/distinfo
+++ b/devel/nasm/distinfo
@@ -1,10 +1,8 @@
-$NetBSD: distinfo,v 1.12 2008/01/05 21:49:42 rillig Exp $
+$NetBSD: distinfo,v 1.13 2008/01/28 05:38:20 bjs Exp $
-SHA1 (nasm-0.98.39.tar.bz2) = 73d64812bb95774355f737c0fb0271382d23db67
-RMD160 (nasm-0.98.39.tar.bz2) = b5587b1b81f58cef3a50e438e8efb365945df587
-Size (nasm-0.98.39.tar.bz2) = 543976 bytes
-SHA1 (patch-aa) = 27409c3b71634dc5c3aa02b3cae49ebad2db6579
-SHA1 (patch-ab) = bbe1d7219dd2e5ade8f97a4f3070bc87d3a7d4b5
-SHA1 (patch-ac) = 7ae622ab78b1cf30ca027d652476d7d48deae182
-SHA1 (patch-ad) = 6ef567e104be9d1a16eac2a0eaf5a03398a6373c
-SHA1 (patch-ae) = f6029c8574c4e11d59d161819a379e9f687bc346
+SHA1 (nasm-2.01.tar.bz2) = e532443eb5a984c9711062d329d4ec07ec154250
+RMD160 (nasm-2.01.tar.bz2) = 9589f146fb242fa8ebc0ce2b53e6a8629022e8ca
+Size (nasm-2.01.tar.bz2) = 722479 bytes
+SHA1 (patch-aa) = 8514d241d017f0396e7ee8bfe0008d99ca29683c
+SHA1 (patch-ab) = f59ec4b8b342af6c0986cb0fb6be604675523c42
+SHA1 (patch-ac) = 35b69553570023019193c9de915913b1994dcd5b
diff --git a/devel/nasm/patches/patch-aa b/devel/nasm/patches/patch-aa
index 7a7e026813d..c4599bd9494 100644
--- a/devel/nasm/patches/patch-aa
+++ b/devel/nasm/patches/patch-aa
@@ -1,22 +1,13 @@
-$NetBSD: patch-aa,v 1.2 2007/01/06 15:11:58 jmmv Exp $
+$NetBSD: patch-aa,v 1.3 2008/01/28 05:38:20 bjs Exp $
---- Makefile.in.orig 2005-01-15 00:05:31.000000000 +0100
+--- Makefile.in.orig 2008-01-17 15:22:39.000000000 -0500
+++ Makefile.in
-@@ -18,7 +18,7 @@ CC = @CC@
- CFLAGS = @CFLAGS@ @GCCFLAGS@ @DEFS@ -I$(srcdir) -I.
+@@ -22,7 +22,7 @@ INTERNAL_CFLAGS = -I$(srcdir) -I.
+ ALL_CFLAGS = $(BUILD_CFLAGS) $(INTERNAL_CFLAGS)
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
--PERL = perl
+-PERL = perl -I$(srcdir)/perllib
+PERL = ${PERL5}
- INSTALL = @INSTALL@
- INSTALL_PROGRAM = @INSTALL_PROGRAM@
-@@ -51,7 +51,7 @@ NASM = nasm.$(O) nasmlib.$(O) float.$(O)
- labels.$(O) parser.$(O) outform.$(O) output/outbin.$(O) \
- output/outaout.$(O) output/outcoff.$(O) output/outelf.$(O) \
- output/outobj.$(O) output/outas86.$(O) output/outrdf2.$(O) \
-- output/outdbg.$(O) output/outieee.$(O) \
-+ output/outdbg.$(O) output/outieee.$(O) output/outmacho.$(O) \
- preproc.$(O) listing.$(O) eval.$(O)
+ XOBJS = @XOBJS@
- NDISASM = ndisasm.$(O) disasm.$(O) sync.$(O) nasmlib.$(O) insnsd.$(O)
diff --git a/devel/nasm/patches/patch-ab b/devel/nasm/patches/patch-ab
index 6ee5e1da311..c9cfa5e19f9 100644
--- a/devel/nasm/patches/patch-ab
+++ b/devel/nasm/patches/patch-ab
@@ -1,8 +1,8 @@
-$NetBSD: patch-ab,v 1.1 2003/09/17 16:40:14 jmmv Exp $
+$NetBSD: patch-ab,v 1.2 2008/01/28 05:38:20 bjs Exp $
---- doc/Makefile.in.orig 2002-05-18 22:17:28.000000000 +0000
+--- doc/Makefile.in.orig 2008-01-17 15:22:17.000000000 -0500
+++ doc/Makefile.in
-@@ -9,20 +9,20 @@ prefix = @prefix@
+@@ -8,7 +8,8 @@ prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
mandir = @mandir@
@@ -10,8 +10,9 @@ $NetBSD: patch-ab,v 1.1 2003/09/17 16:40:14 jmmv Exp $
+docdir = $(prefix)/share/doc/nasm
+htmldocdir = $(prefix)/share/doc/html/nasm
infodir = @infodir@
+ datarootdir = @datarootdir@
- INSTALL = @INSTALL@
+@@ -16,13 +17,12 @@ INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
@@ -19,15 +20,15 @@ $NetBSD: patch-ab,v 1.1 2003/09/17 16:40:14 jmmv Exp $
-MAKEINFO = makeinfo
+PERL = ${PERL5}
TEXI2DVI = texi2dvi
- PS2PDF = ps2pdf -dOptimize=true # Part of GhostScript
+ PS2PDF = ps2pdf # Part of GhostScript
SRCS = nasmdoc.src
-OUT = nasm.info nasmdoc.ps nasmdoc.pdf
+OUT = nasm.info nasmdoc.ps # nasmdoc.pdf
- all: $(OUT)
-
-@@ -73,6 +73,7 @@ spotless: clean
+ # exports
+ export srcdir
+@@ -77,6 +77,7 @@ spotless: clean
install: all
$(INSTALL_DATA) info/* $(INSTALLROOT)$(infodir)
diff --git a/devel/nasm/patches/patch-ac b/devel/nasm/patches/patch-ac
index 6212b7d36ff..957e0b853de 100644
--- a/devel/nasm/patches/patch-ac
+++ b/devel/nasm/patches/patch-ac
@@ -1,13 +1,13 @@
-$NetBSD: patch-ac,v 1.3 2005/05/05 20:12:46 adrianp Exp $
+$NetBSD: patch-ac,v 1.4 2008/01/28 05:38:20 bjs Exp $
---- output/outieee.c.orig 2005-05-05 21:05:26.000000000 +0100
-+++ output/outieee.c
-@@ -1120,7 +1120,7 @@ static void ieee_putascii(char *format,
- va_list ap;
-
- va_start(ap, format);
-- vsprintf(buffer, format, ap);
-+ vsnprintf(buffer, sizeof(buffer), format, ap);
- l = strlen(buffer);
- for (i = 0; i < l; i++)
- if ((buffer[i] & 0xff) > 31)
+--- configure.orig 2008-01-17 15:22:18.000000000 -0500
++++ configure
+@@ -4498,7 +4498,7 @@ rm -f core conftest.err conftest.$ac_obj
+ { echo "$as_me:$LINENO: checking if $CC accepts -Wall" >&5
+ echo $ECHO_N "checking if $CC accepts -Wall... $ECHO_C" >&6; }
+ pa_add_cflags__old_cflags="$CFLAGS"
+- CFLAGS="$CFLAGS -Wall"
++ CFLAGS="$CFLAGS -Wall -Wno-char-subscripts"
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+ _ACEOF
diff --git a/devel/nasm/patches/patch-ad b/devel/nasm/patches/patch-ad
deleted file mode 100644
index 88d0494cc52..00000000000
--- a/devel/nasm/patches/patch-ad
+++ /dev/null
@@ -1,1324 +0,0 @@
-$NetBSD: patch-ad,v 1.6 2008/01/05 21:49:42 rillig Exp $
-
---- /dev/null 2007-01-06 13:50:40.000000000 +0100
-+++ output/outmacho.c 2006-02-02 22:50:47.000000000 +0100
-@@ -0,0 +1,1319 @@
-+/* outmacho.c output routines for the Netwide Assembler to produce
-+ * NeXTstep/OpenStep/Rhapsody/Darwin/MacOS X object files
-+ *
-+ * The Netwide Assembler is copyright (C) 1996 Simon Tatham and
-+ * Julian Hall. All rights reserved. The software is
-+ * redistributable under the licence given in the file "Licence"
-+ * distributed in the NASM archive.
-+ */
-+
-+/* Most of this file is, like Mach-O itself, based on a.out. For more
-+ * guidelines see outaout.c. */
-+
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include <ctype.h>
-+
-+#include "nasm.h"
-+#include "nasmlib.h"
-+#include "outform.h"
-+
-+#if defined(OF_MACHO)
-+
-+/* Mach-O in-file header structure sizes */
-+#define MACHO_HEADER_SIZE (28)
-+#define MACHO_SEGCMD_SIZE (56)
-+#define MACHO_SECTCMD_SIZE (68)
-+#define MACHO_SYMCMD_SIZE (24)
-+#define MACHO_NLIST_SIZE (12)
-+#define MACHO_RELINFO_SIZE (8)
-+
-+/* Mach-O file header values */
-+#define MH_MAGIC (0xfeedface)
-+#define CPU_TYPE_I386 (7) /* x86 platform */
-+#define CPU_SUBTYPE_I386_ALL (3) /* all-x86 compatible */
-+#define MH_OBJECT (0x1) /* object file */
-+
-+#define LC_SEGMENT (0x1) /* segment load command */
-+#define LC_SYMTAB (0x2) /* symbol table load command */
-+
-+#define VM_PROT_NONE (0x00)
-+#define VM_PROT_READ (0x01)
-+#define VM_PROT_WRITE (0x02)
-+#define VM_PROT_EXECUTE (0x04)
-+
-+#define VM_PROT_DEFAULT (VM_PROT_READ | VM_PROT_WRITE | VM_PROT_EXECUTE)
-+#define VM_PROT_ALL (VM_PROT_READ | VM_PROT_WRITE | VM_PROT_EXECUTE)
-+
-+struct section {
-+ /* nasm internal data */
-+ struct section *next;
-+ struct SAA *data;
-+ long index;
-+ struct reloc *relocs;
-+ int align;
-+
-+ /* data that goes into the file */
-+ char sectname[16]; /* what this section is called */
-+ char segname[16]; /* segment this section will be in */
-+ unsigned long size; /* in-memory and -file size */
-+ unsigned long nreloc; /* relocation entry count */
-+ unsigned long flags; /* type and attributes (masked) */
-+};
-+
-+#define SECTION_TYPE 0x000000ff /* section type mask */
-+
-+#define S_REGULAR (0x0) /* standard section */
-+#define S_ZEROFILL (0x1) /* zerofill, in-memory only */
-+
-+#define SECTION_ATTRIBUTES_SYS 0x00ffff00 /* system setable attributes */
-+#define S_ATTR_SOME_INSTRUCTIONS 0x00000400 /* section contains some
-+ machine instructions */
-+#define S_ATTR_EXT_RELOC 0x00000200 /* section has external
-+ relocation entries */
-+#define S_ATTR_LOC_RELOC 0x00000100 /* section has local
-+ relocation entries */
-+
-+
-+static struct sectmap {
-+ const char *nasmsect;
-+ const char *segname;
-+ const char *sectname;
-+ const long flags;
-+} sectmap[] = { {
-+".text", "__TEXT", "__text", S_REGULAR|S_ATTR_SOME_INSTRUCTIONS}, {
-+".data", "__DATA", "__data", S_REGULAR}, {
-+".rodata", "__DATA", "__const", S_REGULAR}, {
-+".bss", "__DATA", "__bss", S_ZEROFILL}, {
-+NULL, NULL, NULL}};
-+
-+struct reloc {
-+ /* nasm internal data */
-+ struct reloc *next;
-+
-+ /* data that goes into the file */
-+ long addr; /* op's offset in section */
-+ unsigned int snum:24, /* contains symbol index if
-+ ** ext otherwise in-file
-+ ** section number */
-+ pcrel:1, /* relative relocation */
-+ length:2, /* 0=byte, 1=word, 2=long */
-+ ext:1, /* external symbol referenced */
-+ type:4; /* reloc type, 0 for us */
-+};
-+
-+#define R_ABS 0 /* absolute relocation */
-+#define R_SCATTERED 0x80000000 /* reloc entry is scattered if
-+ ** highest bit == 1 */
-+
-+struct symbol {
-+ /* nasm internal data */
-+ struct symbol *next; /* next symbol in the list */
-+ char *name; /* name of this symbol */
-+ long initial_snum; /* symbol number used above in
-+ reloc */
-+ long snum; /* true snum for reloc */
-+
-+ /* data that goes into the file */
-+ long strx; /* string table index */
-+ unsigned char type; /* symbol type */
-+ unsigned char sect; /* NO_SECT or section number */
-+ short desc; /* for stab debugging, 0 for us */
-+ unsigned long value; /* offset of symbol in section */
-+};
-+
-+/* symbol type bits */
-+#define N_EXT 0x01 /* global or external symbol */
-+
-+#define N_UNDF 0x0 /* undefined symbol | n_sect == */
-+#define N_ABS 0x2 /* absolute symbol | NO_SECT */
-+#define N_SECT 0xe /* defined symbol, n_sect holds
-+ ** section number */
-+
-+#define N_TYPE 0x0e /* type bit mask */
-+
-+#define DEFAULT_SECTION_ALIGNMENT 0 /* byte (i.e. no) alignment */
-+
-+/* special section number values */
-+#define NO_SECT 0 /* no section, invalid */
-+#define MAX_SECT 255 /* maximum number of sections */
-+
-+static struct section *sects, **sectstail;
-+static struct symbol *syms, **symstail;
-+static unsigned long nsyms;
-+
-+/* These variables are set by macho_layout_symbols() to organize
-+ the symbol table and string table in order the dynamic linker
-+ expects. They are then used in macho_write() to put out the
-+ symbols and strings in that order.
-+
-+ The order of the symbol table is:
-+ local symbols
-+ defined external symbols (sorted by name)
-+ undefined external symbols (sorted by name)
-+
-+ The order of the string table is:
-+ strings for external symbols
-+ strings for local symbols
-+ */
-+static unsigned long ilocalsym = 0;
-+static unsigned long iextdefsym = 0;
-+static unsigned long iundefsym = 0;
-+static unsigned long nlocalsym;
-+static unsigned long nextdefsym;
-+static unsigned long nundefsym;
-+static struct symbol **extdefsyms = NULL;
-+static struct symbol **undefsyms = NULL;
-+
-+static struct RAA *extsyms;
-+static struct SAA *strs;
-+static unsigned long strslen;
-+
-+static FILE *machofp;
-+static efunc error;
-+static evalfunc evaluate;
-+
-+extern struct ofmt of_macho;
-+
-+/* Global file information. This should be cleaned up into either
-+ a structure or as function arguments. */
-+unsigned long head_ncmds = 0;
-+unsigned long head_sizeofcmds = 0;
-+unsigned long seg_filesize = 0;
-+unsigned long seg_vmsize = 0;
-+unsigned long seg_nsects = 0;
-+unsigned long rel_padcnt = 0;
-+
-+
-+#define xstrncpy(xdst, xsrc) \
-+ memset(xdst, '\0', sizeof(xdst)); /* zero out whole buffer */ \
-+ strncpy(xdst, xsrc, sizeof(xdst)); /* copy over string */ \
-+ xdst[sizeof(xdst) - 1] = '\0'; /* proper null-termination */
-+
-+#define align(x, y) \
-+ (((x) + (y) - 1) & ~((y) - 1)) /* align x to multiple of y */
-+
-+#define alignlong(x) \
-+ align(x, sizeof(long)) /* align x to long boundary */
-+
-+static void debug_reloc (struct reloc *);
-+static void debug_section_relocs (struct section *) __attribute__ ((unused));
-+
-+static int exact_log2 (unsigned long align) {
-+ if (align != (align & -align)) {
-+ return -1;
-+ } else {
-+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GCC_MINOR__ >= 4)
-+ return (align ? __builtin_ctzl (align) : 0);
-+#else
-+ unsigned long result = 0;
-+
-+ while (align >>= 1) {
-+ ++result;
-+ }
-+
-+ return result;
-+#endif
-+ }
-+}
-+
-+static struct section *get_section_by_name(const char *segname,
-+ const char *sectname)
-+{
-+ struct section *s;
-+
-+ for (s = sects; s != NULL; s = s->next)
-+ if (!strcmp(s->segname, segname) && !strcmp(s->sectname, sectname))
-+ break;
-+
-+ return s;
-+}
-+
-+static struct section *get_section_by_index(const long index)
-+{
-+ struct section *s;
-+
-+ for (s = sects; s != NULL; s = s->next)
-+ if (index == s->index)
-+ break;
-+
-+ return s;
-+}
-+
-+static long get_section_index_by_name(const char *segname,
-+ const char *sectname)
-+{
-+ struct section *s;
-+
-+ for (s = sects; s != NULL; s = s->next)
-+ if (!strcmp(s->segname, segname) && !strcmp(s->sectname, sectname))
-+ return s->index;
-+
-+ return -1;
-+}
-+
-+static char *get_section_name_by_index(const long index)
-+{
-+ struct section *s;
-+
-+ for (s = sects; s != NULL; s = s->next)
-+ if (index == s->index)
-+ return s->sectname;
-+
-+ return NULL;
-+}
-+
-+static unsigned char get_section_fileindex_by_index(const long index)
-+{
-+ struct section *s;
-+ unsigned char i = 1;
-+
-+ for (s = sects; s != NULL && i < MAX_SECT; s = s->next, ++i)
-+ if (index == s->index)
-+ return i;
-+
-+ if (i == MAX_SECT)
-+ error(ERR_WARNING,
-+ "too many sections (>255) - clipped by fileindex");
-+
-+ return NO_SECT;
-+}
-+
-+static void macho_init(FILE * fp, efunc errfunc, ldfunc ldef,
-+ evalfunc eval)
-+{
-+ char zero = 0;
-+
-+ machofp = fp;
-+ error = errfunc;
-+ evaluate = eval;
-+
-+ (void)ldef; /* placate optimisers */
-+
-+ sects = NULL;
-+ sectstail = &sects;
-+
-+ syms = NULL;
-+ symstail = &syms;
-+ nsyms = 0;
-+ nlocalsym = 0;
-+ nextdefsym = 0;
-+ nundefsym = 0;
-+
-+ extsyms = raa_init();
-+ strs = saa_init(1L);
-+
-+ /* string table starts with a zero byte - don't ask why */
-+ saa_wbytes(strs, &zero, sizeof(char));
-+ strslen = 1;
-+}
-+
-+static int macho_setinfo(enum geninfo type, char **val)
-+{
-+ return 0;
-+}
-+
-+static void sect_write(struct section *sect,
-+ const unsigned char *data, unsigned long len)
-+{
-+ saa_wbytes(sect->data, data, len);
-+ sect->size += len;
-+}
-+
-+static void add_reloc(struct section *sect, long section,
-+ int pcrel, int bytes)
-+{
-+ struct reloc *r;
-+ long fi;
-+
-+ /* NeXT as puts relocs in reversed order (address-wise) into the
-+ ** files, so we do the same, doesn't seem to make much of a
-+ ** difference either way */
-+ r = nasm_malloc(sizeof(struct reloc));
-+ r->next = sect->relocs;
-+ sect->relocs = r;
-+
-+ /* the current end of the section will be the symbol's address for
-+ ** now, might have to be fixed by macho_fixup_relocs() later on. make
-+ ** sure we don't make the symbol scattered by setting the highest
-+ ** bit by accident */
-+ r->addr = sect->size & ~R_SCATTERED;
-+ r->ext = 0;
-+ r->pcrel = pcrel;
-+
-+ /* match byte count 1, 2, 4 to length codes 0, 1, 2 respectively */
-+ r->length = bytes >> 1;
-+
-+ /* vanilla relocation (GENERIC_RELOC_VANILLA) */
-+ r->type = 0;
-+
-+ if (section == NO_SEG) {
-+ /* absolute local symbol if no section index given */
-+ r->snum = R_ABS;
-+ } else {
-+ fi = get_section_fileindex_by_index(section);
-+
-+ if (fi == NO_SECT) {
-+ /* external symbol if no section with that index known,
-+ ** symbol number was saved in macho_symdef() */
-+ r->snum = raa_read(extsyms, section);
-+ r->ext = 1;
-+ } else {
-+ /* local symbol in section fi */
-+ r->snum = fi;
-+ }
-+ }
-+
-+ ++sect->nreloc;
-+}
-+
-+static void macho_output(long secto, const void *data, unsigned long type,
-+ long section, long wrt)
-+{
-+ struct section *s, *sbss;
-+ long realbytes = type & OUT_SIZMASK;
-+ long addr;
-+ unsigned char mydata[4], *p;
-+
-+ type &= OUT_TYPMASK;
-+
-+ if (wrt != NO_SEG) {
-+ wrt = NO_SEG;
-+ error(ERR_NONFATAL, "WRT not supported by Mach-O output format");
-+ /* continue to do _something_ */
-+ }
-+
-+ if (secto == NO_SEG) {
-+ if (type != OUT_RESERVE)
-+ error(ERR_NONFATAL, "attempt to assemble code in "
-+ "[ABSOLUTE] space");
-+
-+ return;
-+ }
-+
-+ s = get_section_by_index(secto);
-+
-+ if (s == NULL) {
-+ error(ERR_WARNING, "attempt to assemble code in"
-+ " section %d: defaulting to `.text'", secto);
-+ s = get_section_by_name("__TEXT", "__text");
-+
-+ /* should never happen */
-+ if (s == NULL)
-+ error(ERR_PANIC, "text section not found");
-+ }
-+
-+ sbss = get_section_by_name("__DATA", "__bss");
-+
-+ if (s == sbss && type != OUT_RESERVE) {
-+ error(ERR_WARNING, "attempt to initialise memory in the"
-+ " BSS section: ignored");
-+
-+ switch (type) {
-+ case OUT_REL2ADR:
-+ realbytes = 2;
-+ break;
-+
-+ case OUT_REL4ADR:
-+ realbytes = 4;
-+ break;
-+
-+ default:
-+ break;
-+ }
-+
-+ s->size += realbytes;
-+ return;
-+ }
-+
-+ switch (type) {
-+ case OUT_RESERVE:
-+ if (s != sbss) {
-+ error(ERR_WARNING, "uninitialised space declared in"
-+ " %s section: zeroing",
-+ get_section_name_by_index(secto));
-+
-+ sect_write(s, NULL, realbytes);
-+ } else
-+ s->size += realbytes;
-+
-+ break;
-+
-+ case OUT_RAWDATA:
-+ if (section != NO_SEG)
-+ error(ERR_PANIC, "OUT_RAWDATA with other than NO_SEG");
-+
-+ sect_write(s, data, realbytes);
-+ break;
-+
-+ case OUT_ADDRESS:
-+ addr = *(long *)data;
-+
-+ if (section != NO_SEG) {
-+ if (section % 2) {
-+ error(ERR_NONFATAL, "Mach-O format does not support"
-+ " section base references");
-+ } else
-+ add_reloc(s, section, 0, realbytes);
-+ }
-+
-+ p = mydata;
-+
-+ if (realbytes == 2)
-+ WRITESHORT(p, addr);
-+ else
-+ WRITELONG(p, addr);
-+
-+ sect_write(s, mydata, realbytes);
-+ break;
-+
-+ case OUT_REL2ADR:
-+ if (section == secto)
-+ error(ERR_PANIC, "intra-section OUT_REL2ADR");
-+
-+ if (section != NO_SEG && section % 2) {
-+ error(ERR_NONFATAL, "Mach-O format does not support"
-+ " section base references");
-+ } else
-+ add_reloc(s, section, 1, 2);
-+
-+ p = mydata;
-+ WRITESHORT(p, *(long *)data - (realbytes + s->size));
-+ sect_write(s, mydata, 2L);
-+ break;
-+
-+ case OUT_REL4ADR:
-+ if (section == secto)
-+ error(ERR_PANIC, "intra-section OUT_REL4ADR");
-+
-+ if (section != NO_SEG && section % 2) {
-+ error(ERR_NONFATAL, "Mach-O format does not support"
-+ " section base references");
-+ } else
-+ add_reloc(s, section, 1, 4);
-+
-+ p = mydata;
-+ WRITELONG(p, *(long *)data - (realbytes + s->size));
-+ sect_write(s, mydata, 4L);
-+ break;
-+
-+ default:
-+ error(ERR_PANIC, "unknown output type?");
-+ break;
-+ }
-+}
-+
-+static long macho_section(char *name, int pass, int *bits)
-+{
-+ long index, originalIndex;
-+ char *sectionAttributes;
-+ struct sectmap *sm;
-+ struct section *s;
-+
-+ /* Default to 32 bits. */
-+ if (!name) {
-+ *bits = 32;
-+ name = ".text";
-+ sectionAttributes = NULL;
-+ } else {
-+ sectionAttributes = name;
-+ name = strsep(&sectionAttributes, " \t");
-+ }
-+
-+ for (sm = sectmap; sm->nasmsect != NULL; ++sm) {
-+ /* make lookup into section name translation table */
-+ if (!strcmp(name, sm->nasmsect)) {
-+ char *currentAttribute;
-+
-+ /* try to find section with that name */
-+ originalIndex = index = get_section_index_by_name(sm->segname,
-+ sm->sectname);
-+
-+ /* create it if it doesn't exist yet */
-+ if (index == -1) {
-+ s = *sectstail = nasm_malloc(sizeof(struct section));
-+ s->next = NULL;
-+ sectstail = &s->next;
-+
-+ s->data = saa_init(1L);
-+ s->index = seg_alloc();
-+ s->relocs = NULL;
-+ s->align = DEFAULT_SECTION_ALIGNMENT;
-+
-+ xstrncpy(s->segname, sm->segname);
-+ xstrncpy(s->sectname, sm->sectname);
-+ s->size = 0;
-+ s->nreloc = 0;
-+ s->flags = sm->flags;
-+
-+ index = s->index;
-+ } else {
-+ s = get_section_by_index(index);
-+ }
-+
-+ while ((NULL != sectionAttributes)
-+ && (currentAttribute = strsep(&sectionAttributes, " \t"))) {
-+ if (0 != *currentAttribute) {
-+ if (0 == strncasecmp("align=", currentAttribute, 6)) {
-+ char *end;
-+ int newAlignment, value;
-+
-+ value = strtoul(currentAttribute + 6, &end, 0);
-+ newAlignment = exact_log2(value);
-+
-+ if (0 != *end) {
-+ error(ERR_PANIC,
-+ "unknown or missing alignment value \"%s\" "
-+ "specified for section \"%s\"",
-+ currentAttribute + 6,
-+ name);
-+ return NO_SEG;
-+ } else if (0 > newAlignment) {
-+ error(ERR_PANIC,
-+ "alignment of %d (for section \"%s\") is not "
-+ "a power of two",
-+ value,
-+ name);
-+ return NO_SEG;
-+ }
-+
-+ if ((-1 != originalIndex)
-+ && (s->align != newAlignment)) {
-+ error(ERR_PANIC,
-+ "section \"%s\" has already been specified "
-+ "with alignment %d, conflicts with new "
-+ "alignment of %d",
-+ name,
-+ (1 << s->align),
-+ value);
-+ return NO_SEG;
-+ }
-+
-+ s->align = newAlignment;
-+ } else if (0 == strcasecmp("data", currentAttribute)) {
-+ /* Do nothing; 'data' is implicit */
-+ } else {
-+ error(ERR_PANIC,
-+ "unknown section attribute %s for section %s",
-+ currentAttribute,
-+ name);
-+ return NO_SEG;
-+ }
-+ }
-+ }
-+
-+ return index;
-+ }
-+ }
-+
-+ error(ERR_PANIC, "invalid section name %s", name);
-+ return NO_SEG;
-+}
-+
-+static void macho_symdef(char *name, long section, long offset,
-+ int is_global, char *special)
-+{
-+ struct symbol *sym;
-+
-+ if (special) {
-+ error(ERR_NONFATAL, "The Mach-O output format does "
-+ "not support any special symbol types");
-+ return;
-+ }
-+
-+ if (is_global == 3) {
-+ error(ERR_NONFATAL, "The Mach-O format does not "
-+ "(yet) support forward reference fixups.");
-+ return;
-+ }
-+
-+ sym = *symstail = nasm_malloc(sizeof(struct symbol));
-+ sym->next = NULL;
-+ symstail = &sym->next;
-+
-+ sym->name = name;
-+ sym->strx = strslen;
-+ sym->type = 0;
-+ sym->desc = 0;
-+ sym->value = offset;
-+ sym->initial_snum = -1;
-+
-+ /* external and common symbols get N_EXT */
-+ if (is_global != 0)
-+ sym->type |= N_EXT;
-+
-+ if (section == NO_SEG) {
-+ /* symbols in no section get absolute */
-+ sym->type |= N_ABS;
-+ sym->sect = NO_SECT;
-+ } else {
-+ sym->type |= N_SECT;
-+
-+ /* get the in-file index of the section the symbol was defined in */
-+ sym->sect = get_section_fileindex_by_index(section);
-+
-+ if (sym->sect == NO_SECT) {
-+ /* remember symbol number of references to external
-+ ** symbols, this works because every external symbol gets
-+ ** its own section number allocated internally by nasm and
-+ ** can so be used as a key */
-+ extsyms = raa_write(extsyms, section, nsyms);
-+ sym->initial_snum = nsyms;
-+
-+ switch (is_global) {
-+ case 1:
-+ case 2:
-+ /* there isn't actually a difference between global
-+ ** and common symbols, both even have their size in
-+ ** sym->value */
-+ sym->type = N_EXT;
-+ break;
-+
-+ default:
-+ /* give an error on unfound section if it's not an
-+ ** external or common symbol (assemble_file() does a
-+ ** seg_alloc() on every call for them) */
-+ error(ERR_PANIC, "in-file index for section %d not found",
-+ section);
-+ }
-+ }
-+ }
-+
-+ ++nsyms;
-+}
-+
-+static long macho_segbase(long section)
-+{
-+ return section;
-+}
-+
-+static int macho_directive(char *directive, char *value, int pass)
-+{
-+ return 0;
-+}
-+
-+static void macho_filename(char *inname, char *outname, efunc error)
-+{
-+ standard_extension(inname, outname, ".o", error);
-+}
-+
-+static const char *macho_stdmac[] = {
-+ "%define __SECT__ [section .text]",
-+ "%macro __NASM_CDecl__ 1",
-+ "%endmacro",
-+ NULL
-+};
-+
-+/* Comparison function for qsort symbol layout. */
-+static int layout_compare (const struct symbol **s1,
-+ const struct symbol **s2)
-+{
-+ return (strcmp ((*s1)->name, (*s2)->name));
-+}
-+
-+/* The native assembler does a few things in a similar function
-+
-+ * Remove temporary labels
-+ * Sort symbols according to local, external, undefined (by name)
-+ * Order the string table
-+
-+ We do not remove temporary labels right now.
-+
-+ numsyms is the total number of symbols we have. strtabsize is the
-+ number entries in the string table. */
-+
-+static void macho_layout_symbols (unsigned long *numsyms,
-+ unsigned long *strtabsize)
-+{
-+ struct symbol *sym, **symp;
-+ unsigned long i,j;
-+
-+ *numsyms = 0;
-+ *strtabsize = sizeof (char);
-+
-+ symp = &syms;
-+
-+ while ((sym = *symp)) {
-+ /* Undefined symbols are now external. */
-+ if (sym->type == N_UNDF)
-+ sym->type |= N_EXT;
-+
-+ if ((sym->type & N_EXT) == 0) {
-+ sym->snum = *numsyms;
-+ *numsyms = *numsyms + 1;
-+ nlocalsym++;
-+ }
-+ else {
-+ if ((sym->type & N_TYPE) != N_UNDF)
-+ nextdefsym++;
-+ else
-+ nundefsym++;
-+
-+ /* If we handle debug info we'll want
-+ to check for it here instead of just
-+ adding the symbol to the string table. */
-+ sym->strx = *strtabsize;
-+ saa_wbytes (strs, sym->name, (long)(strlen(sym->name) + 1));
-+ *strtabsize += strlen(sym->name) + 1;
-+ }
-+ symp = &(sym->next);
-+ }
-+
-+ /* Next, sort the symbols. Most of this code is a direct translation from
-+ the Apple cctools symbol layout. We need to keep compatibility with that. */
-+ /* Set the indexes for symbol groups into the symbol table */
-+ ilocalsym = 0;
-+ iextdefsym = nlocalsym;
-+ iundefsym = nlocalsym + nextdefsym;
-+
-+ /* allocate arrays for sorting externals by name */
-+ extdefsyms = nasm_malloc(nextdefsym * sizeof(struct symbol *));
-+ undefsyms = nasm_malloc(nundefsym * sizeof(struct symbol *));
-+
-+ i = 0;
-+ j = 0;
-+
-+ symp = &syms;
-+
-+ while ((sym = *symp)) {
-+
-+ if((sym->type & N_EXT) == 0) {
-+ sym->strx = *strtabsize;
-+ saa_wbytes (strs, sym->name, (long)(strlen (sym->name) + 1));
-+ *strtabsize += strlen(sym->name) + 1;
-+ }
-+ else {
-+ if((sym->type & N_TYPE) != N_UNDF)
-+ extdefsyms[i++] = sym;
-+ else
-+ undefsyms[j++] = sym;
-+ }
-+ symp = &(sym->next);
-+ }
-+
-+ qsort(extdefsyms, nextdefsym, sizeof(struct symbol *),
-+ (int (*)(const void *, const void *))layout_compare);
-+ qsort(undefsyms, nundefsym, sizeof(struct symbol *),
-+ (int (*)(const void *, const void *))layout_compare);
-+
-+ for(i = 0; i < nextdefsym; i++) {
-+ extdefsyms[i]->snum = *numsyms;
-+ *numsyms += 1;
-+ }
-+ for(j = 0; j < nundefsym; j++) {
-+ undefsyms[j]->snum = *numsyms;
-+ *numsyms += 1;
-+ }
-+}
-+
-+/* Calculate some values we'll need for writing later. */
-+
-+static void macho_calculate_sizes (void)
-+{
-+ struct section *s;
-+
-+ /* count sections and calculate in-memory and in-file offsets */
-+ for (s = sects; s != NULL; s = s->next) {
-+ /* zerofill sections aren't actually written to the file */
-+ if ((s->flags & SECTION_TYPE) != S_ZEROFILL)
-+ seg_filesize += s->size;
-+
-+ seg_vmsize += s->size;
-+ ++seg_nsects;
-+ }
-+
-+ /* calculate size of all headers, load commands and sections to
-+ ** get a pointer to the start of all the raw data */
-+ if (seg_nsects > 0) {
-+ ++head_ncmds;
-+ head_sizeofcmds +=
-+ MACHO_SEGCMD_SIZE + seg_nsects * MACHO_SECTCMD_SIZE;
-+ }
-+
-+ if (nsyms > 0) {
-+ ++head_ncmds;
-+ head_sizeofcmds += MACHO_SYMCMD_SIZE;
-+ }
-+}
-+
-+/* Write out the header information for the file. */
-+
-+static void macho_write_header (void)
-+{
-+ fwritelong(MH_MAGIC, machofp); /* magic */
-+ fwritelong(CPU_TYPE_I386, machofp); /* CPU type */
-+ fwritelong(CPU_SUBTYPE_I386_ALL, machofp); /* CPU subtype */
-+ fwritelong(MH_OBJECT, machofp); /* Mach-O file type */
-+ fwritelong(head_ncmds, machofp); /* number of load commands */
-+ fwritelong(head_sizeofcmds, machofp); /* size of load commands */
-+ fwritelong(0, machofp); /* no flags */
-+}
-+
-+/* Write out the segment load command at offset. */
-+
-+static unsigned long macho_write_segment (unsigned long offset)
-+{
-+ unsigned long s_addr = 0;
-+ unsigned long rel_base = alignlong (offset + seg_filesize);
-+ unsigned long s_reloff = 0;
-+ struct section *s;
-+
-+ fwritelong(LC_SEGMENT, machofp); /* cmd == LC_SEGMENT */
-+
-+ /* size of load command including section load commands */
-+ fwritelong(MACHO_SEGCMD_SIZE + seg_nsects *
-+ MACHO_SECTCMD_SIZE, machofp);
-+
-+ /* in an MH_OBJECT file all sections are in one unnamed (name
-+ ** all zeros) segment */
-+ fwrite("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 16, 1, machofp);
-+ fwritelong(0, machofp); /* in-memory offset */
-+ fwritelong(seg_vmsize, machofp); /* in-memory size */
-+ fwritelong(offset, machofp); /* in-file offset to data */
-+ fwritelong(seg_filesize, machofp); /* in-file size */
-+ fwritelong(VM_PROT_DEFAULT, machofp); /* maximum vm protection */
-+ fwritelong(VM_PROT_DEFAULT, machofp); /* initial vm protection */
-+ fwritelong(seg_nsects, machofp); /* number of sections */
-+ fwritelong(0, machofp); /* no flags */
-+
-+ /* emit section headers */
-+ for (s = sects; s != NULL; s = s->next) {
-+ fwrite(s->sectname, sizeof(s->sectname), 1, machofp);
-+ fwrite(s->segname, sizeof(s->segname), 1, machofp);
-+ fwritelong(s_addr, machofp);
-+ fwritelong(s->size, machofp);
-+
-+ /* dummy data for zerofill sections or proper values */
-+ if ((s->flags & SECTION_TYPE) != S_ZEROFILL) {
-+ fwritelong(offset, machofp);
-+ /* Write out section alignment, as a power of two.
-+ e.g. 32-bit word alignment would be 2 (2^^2 = 4). */
-+ fwritelong(s->align, machofp);
-+ /* To be compatible with cctools as we emit
-+ a zero reloff if we have no relocations. */
-+ fwritelong(s->nreloc ? rel_base + s_reloff : 0, machofp);
-+ fwritelong(s->nreloc, machofp);
-+
-+ offset += s->size;
-+ s_reloff += s->nreloc * MACHO_RELINFO_SIZE;
-+ } else {
-+ fwritelong(0, machofp);
-+ fwritelong(0, machofp);
-+ fwritelong(0, machofp);
-+ fwritelong(0, machofp);
-+ }
-+
-+ fwritelong(s->flags, machofp); /* flags */
-+ fwritelong(0, machofp); /* reserved */
-+ fwritelong(0, machofp); /* reserved */
-+
-+ s_addr += s->size;
-+ }
-+
-+ rel_padcnt = rel_base - offset;
-+ offset = rel_base + s_reloff;
-+
-+ return offset;
-+}
-+
-+/* For a given chain of relocs r, write out the entire relocation
-+ chain to the object file. */
-+
-+static void macho_write_relocs (struct reloc *r)
-+{
-+ while (r) {
-+ unsigned long word2;
-+
-+ fwritelong(r->addr, machofp); /* reloc offset */
-+
-+ word2 = r->snum;
-+ word2 |= r->pcrel << 24;
-+ word2 |= r->length << 25;
-+ word2 |= r->ext << 27;
-+ word2 |= r->type << 28;
-+ fwritelong(word2, machofp); /* reloc data */
-+
-+ r = r->next;
-+ }
-+}
-+
-+/* Write out the section data. */
-+static void macho_write_section (void)
-+{
-+ struct section *s, *s2;
-+ struct reloc *r;
-+ char *rel_paddata = "\0\0\0";
-+ unsigned char fi, *p, *q, blk[4];
-+ long l;
-+
-+ for (s = sects; s != NULL; s = s->next) {
-+ if ((s->flags & SECTION_TYPE) == S_ZEROFILL)
-+ continue;
-+
-+ /* no padding needs to be done to the sections */
-+
-+ /* Like a.out Mach-O references things in the data or bss
-+ * sections by addresses which are actually relative to the
-+ * start of the _text_ section, in the _file_. See outaout.c
-+ * for more information. */
-+ saa_rewind(s->data);
-+ for (r = s->relocs; r != NULL; r = r->next) {
-+ saa_fread(s->data, r->addr, blk, (long)r->length << 1);
-+ p = q = blk;
-+ l = *p++;
-+
-+ /* get offset based on relocation type */
-+ if (r->length > 0) {
-+ l += ((long)*p++) << 8;
-+
-+ if (r->length == 2) {
-+ l += ((long)*p++) << 16;
-+ l += ((long)*p++) << 24;
-+ }
-+ }
-+
-+ /* If the relocation is internal add to the current section
-+ offset. Otherwise the only value we need is the symbol
-+ offset which we already have. The linker takes care
-+ of the rest of the address. */
-+ if (!r->ext) {
-+ /* add sizes of previous sections to current offset */
-+ for (s2 = sects, fi = 1;
-+ s2 != NULL && fi < r->snum; s2 = s2->next, fi++)
-+ if ((s2->flags & SECTION_TYPE) != S_ZEROFILL)
-+ l += s2->size;
-+ }
-+
-+ /* write new offset back */
-+ if (r->length == 2)
-+ WRITELONG(q, l);
-+ else if (r->length == 1)
-+ WRITESHORT(q, l);
-+ else
-+ *q++ = l & 0xFF;
-+
-+ saa_fwrite(s->data, r->addr, blk, (long)r->length << 1);
-+ }
-+
-+ /* dump the section data to file */
-+ saa_fpwrite(s->data, machofp);
-+ }
-+
-+ /* pad last section up to reloc entries on long boundary */
-+ fwrite(rel_paddata, rel_padcnt, 1, machofp);
-+
-+ /* emit relocation entries */
-+ for (s = sects; s != NULL; s = s->next)
-+ macho_write_relocs (s->relocs);
-+}
-+
-+/* Write out the symbol table. We should already have sorted this
-+ before now. */
-+static void macho_write_symtab (void)
-+{
-+ struct symbol *sym;
-+ struct section *s;
-+ long fi;
-+ long i;
-+
-+ /* we don't need to pad here since MACHO_RELINFO_SIZE == 8 */
-+
-+ for (sym = syms; sym != NULL; sym = sym->next) {
-+ if ((sym->type & N_EXT) == 0) {
-+ fwritelong(sym->strx, machofp); /* string table entry number */
-+ fwrite(&sym->type, 1, 1, machofp); /* symbol type */
-+ fwrite(&sym->sect, 1, 1, machofp); /* section */
-+ fwriteshort(sym->desc, machofp); /* description */
-+
-+ /* Fix up the symbol value now that we know the final section
-+ sizes. */
-+ if (((sym->type & N_TYPE) == N_SECT) && (sym->sect != NO_SECT)) {
-+ for (s = sects, fi = 1;
-+ s != NULL && fi < sym->sect; s = s->next, ++fi)
-+ sym->value += s->size;
-+ }
-+
-+ fwritelong(sym->value, machofp); /* value (i.e. offset) */
-+ }
-+ }
-+
-+ for (i = 0; i < nextdefsym; i++) {
-+ sym = extdefsyms[i];
-+ fwritelong(sym->strx, machofp);
-+ fwrite(&sym->type, 1, 1, machofp); /* symbol type */
-+ fwrite(&sym->sect, 1, 1, machofp); /* section */
-+ fwriteshort(sym->desc, machofp); /* description */
-+
-+ /* Fix up the symbol value now that we know the final section
-+ sizes. */
-+ if (((sym->type & N_TYPE) == N_SECT) && (sym->sect != NO_SECT)) {
-+ for (s = sects, fi = 1;
-+ s != NULL && fi < sym->sect; s = s->next, ++fi)
-+ sym->value += s->size;
-+ }
-+
-+ fwritelong(sym->value, machofp); /* value (i.e. offset) */
-+ }
-+
-+ for (i = 0; i < nundefsym; i++) {
-+ sym = undefsyms[i];
-+ fwritelong(sym->strx, machofp);
-+ fwrite(&sym->type, 1, 1, machofp); /* symbol type */
-+ fwrite(&sym->sect, 1, 1, machofp); /* section */
-+ fwriteshort(sym->desc, machofp); /* description */
-+
-+ /* Fix up the symbol value now that we know the final section
-+ sizes. */
-+ if (((sym->type & N_TYPE) == N_SECT) && (sym->sect != NO_SECT)) {
-+ for (s = sects, fi = 1;
-+ s != NULL && fi < sym->sect; s = s->next, ++fi)
-+ sym->value += s->size;
-+ }
-+
-+ fwritelong(sym->value, machofp); /* value (i.e. offset) */
-+ }
-+}
-+
-+/* Fixup the snum in the relocation entries, we should be
-+ doing this only for externally undefined symbols. */
-+static void macho_fixup_relocs (struct reloc *r)
-+{
-+ struct symbol *sym;
-+ int i;
-+
-+ while (r != NULL) {
-+ if (r->ext) {
-+ for (i = 0; i < nundefsym; i++) {
-+ sym = undefsyms[i];
-+ if (sym->initial_snum == r->snum) {
-+ r->snum = sym->snum;
-+ }
-+ }
-+ }
-+ r = r->next;
-+ }
-+}
-+
-+/* Write out the object file. */
-+
-+static void macho_write (void)
-+{
-+ unsigned long offset = 0;
-+
-+ /* mach-o object file structure:
-+ **
-+ ** mach header
-+ ** ulong magic
-+ ** int cpu type
-+ ** int cpu subtype
-+ ** ulong mach file type
-+ ** ulong number of load commands
-+ ** ulong size of all load commands
-+ ** (includes section struct size of segment command)
-+ ** ulong flags
-+ **
-+ ** segment command
-+ ** ulong command type == LC_SEGMENT
-+ ** ulong size of load command
-+ ** (including section load commands)
-+ ** char[16] segment name
-+ ** ulong in-memory offset
-+ ** ulong in-memory size
-+ ** ulong in-file offset to data area
-+ ** ulong in-file size
-+ ** (in-memory size excluding zerofill sections)
-+ ** int maximum vm protection
-+ ** int initial vm protection
-+ ** ulong number of sections
-+ ** ulong flags
-+ **
-+ ** section commands
-+ ** char[16] section name
-+ ** char[16] segment name
-+ ** ulong in-memory offset
-+ ** ulong in-memory size
-+ ** ulong in-file offset
-+ ** ulong alignment
-+ ** (irrelevant in MH_OBJECT)
-+ ** ulong in-file offset of relocation entires
-+ ** ulong number of relocations
-+ ** ulong flags
-+ ** ulong reserved
-+ ** ulong reserved
-+ **
-+ ** symbol table command
-+ ** ulong command type == LC_SYMTAB
-+ ** ulong size of load command
-+ ** ulong symbol table offset
-+ ** ulong number of symbol table entries
-+ ** ulong string table offset
-+ ** ulong string table size
-+ **
-+ ** raw section data
-+ **
-+ ** padding to long boundary
-+ **
-+ ** relocation data (struct reloc)
-+ ** long offset
-+ ** uint data (symbolnum, pcrel, length, extern, type)
-+ **
-+ ** symbol table data (struct nlist)
-+ ** long string table entry number
-+ ** uchar type
-+ ** (extern, absolute, defined in section)
-+ ** uchar section
-+ ** (0 for global symbols, section number of definition (>= 1, <=
-+ ** 254) for local symbols, size of variable for common symbols
-+ ** [type == extern])
-+ ** short description
-+ ** (for stab debugging format)
-+ ** ulong value (i.e. file offset) of symbol or stab offset
-+ **
-+ ** string table data
-+ ** list of null-terminated strings
-+ */
-+
-+ /* Emit the Mach-O header. */
-+ macho_write_header();
-+
-+ offset = MACHO_HEADER_SIZE + head_sizeofcmds;
-+
-+ /* emit the segment load command */
-+ if (seg_nsects > 0)
-+ offset = macho_write_segment (offset);
-+ else
-+ error(ERR_WARNING, "no sections?");
-+
-+ if (nsyms > 0) {
-+ /* write out symbol command */
-+ fwritelong(LC_SYMTAB, machofp); /* cmd == LC_SYMTAB */
-+ fwritelong(MACHO_SYMCMD_SIZE, machofp); /* size of load command */
-+ fwritelong(offset, machofp); /* symbol table offset */
-+ fwritelong(nsyms, machofp); /* number of symbol
-+ ** table entries */
-+
-+ offset += nsyms * MACHO_NLIST_SIZE;
-+ fwritelong(offset, machofp); /* string table offset */
-+ fwritelong(strslen, machofp); /* string table size */
-+ }
-+
-+ /* emit section data */
-+ if (seg_nsects > 0)
-+ macho_write_section ();
-+
-+ /* emit symbol table if we have symbols */
-+ if (nsyms > 0)
-+ macho_write_symtab ();
-+
-+ /* we don't need to pad here since MACHO_NLIST_SIZE == 12 */
-+
-+ /* emit string table */
-+ saa_fpwrite(strs, machofp);
-+}
-+/* We do quite a bit here, starting with finalizing all of the data
-+ for the object file, writing, and then freeing all of the data from
-+ the file. */
-+
-+static void macho_cleanup(int debuginfo)
-+{
-+ struct section *s;
-+ struct reloc *r;
-+ struct symbol *sym;
-+
-+ (void)debuginfo;
-+
-+ /* Sort all symbols. */
-+ macho_layout_symbols (&nsyms, &strslen);
-+
-+ /* Fixup relocation entries */
-+ for (s = sects; s != NULL; s = s->next) {
-+ macho_fixup_relocs (s->relocs);
-+ }
-+
-+ /* First calculate and finalize needed values. */
-+ macho_calculate_sizes();
-+ macho_write();
-+
-+ /* done - yay! */
-+ fclose(machofp);
-+
-+ /* free up everything */
-+ while (sects->next) {
-+ s = sects;
-+ sects = sects->next;
-+
-+ saa_free(s->data);
-+ while (s->relocs != NULL) {
-+ r = s->relocs;
-+ s->relocs = s->relocs->next;
-+ nasm_free(r);
-+ }
-+
-+ nasm_free(s);
-+ }
-+
-+ saa_free(strs);
-+ raa_free(extsyms);
-+
-+ if (syms) {
-+ while (syms->next) {
-+ sym = syms;
-+ syms = syms->next;
-+
-+ nasm_free (sym);
-+ }
-+ }
-+}
-+
-+/* Debugging routines. */
-+static void debug_reloc (struct reloc *r)
-+{
-+ fprintf (stdout, "reloc:\n");
-+ fprintf (stdout, "\taddr: %ld\n", r->addr);
-+ fprintf (stdout, "\tsnum: %d\n", r->snum);
-+ fprintf (stdout, "\tpcrel: %d\n", r->pcrel);
-+ fprintf (stdout, "\tlength: %d\n", r->length);
-+ fprintf (stdout, "\text: %d\n", r->ext);
-+ fprintf (stdout, "\ttype: %d\n", r->type);
-+}
-+
-+static void debug_section_relocs (struct section *s)
-+{
-+ struct reloc *r = s->relocs;
-+
-+ fprintf (stdout, "relocs for section %s:\n\n", s->sectname);
-+
-+ while (r != NULL) {
-+ debug_reloc (r);
-+ r = r->next;
-+ }
-+}
-+
-+struct ofmt of_macho = {
-+ "NeXTstep/OpenStep/Rhapsody/Darwin/MacOS X object files",
-+ "macho",
-+ NULL,
-+ null_debug_arr,
-+ &null_debug_form,
-+ macho_stdmac,
-+ macho_init,
-+ macho_setinfo,
-+ macho_output,
-+ macho_symdef,
-+ macho_section,
-+ macho_segbase,
-+ macho_directive,
-+ macho_filename,
-+ macho_cleanup
-+};
-+
-+#endif
-+
-+/*
-+ * Local Variables:
-+ * mode:c
-+ * c-basic-offset:4
-+ * End:
-+ *
-+ * end of file */
diff --git a/devel/nasm/patches/patch-ae b/devel/nasm/patches/patch-ae
deleted file mode 100644
index 2046e5058ca..00000000000
--- a/devel/nasm/patches/patch-ae
+++ /dev/null
@@ -1,61 +0,0 @@
-$NetBSD: patch-ae,v 1.3 2007/01/06 15:11:58 jmmv Exp $
-
---- outform.h.orig 2005-01-15 23:15:51.000000000 +0100
-+++ outform.h
-@@ -57,7 +57,7 @@
-
- /* ====configurable info begins here==== */
- /* formats configurable:
-- * bin,obj,elf,aout,aoutb,coff,win32,as86,rdf2 */
-+ * bin,obj,elf,aout,aoutb,coff,win32,as86,rdf2,macho */
-
- /* process options... */
-
-@@ -98,6 +98,9 @@
- #ifndef OF_IEEE
- #define OF_IEEE
- #endif
-+#ifndef OF_MACHO
-+#define OF_MACHO
-+#endif
- #endif /* OF_ALL */
-
- /* turn on groups of formats specified.... */
-@@ -141,6 +144,9 @@
- #ifndef OF_IEEE
- #define OF_IEEE
- #endif
-+#ifndef OF_MACHO
-+#define OF_MACHO
-+#endif
- #endif
-
- /* finally... override any format specifically specified to be off */
-@@ -174,6 +180,9 @@
- #ifdef OF_NO_IEEE
- #undef OF_IEEE
- #endif
-+#ifdef OF_NO_MACHO
-+#undef OF_MACHO
-+#endif
-
- #ifndef OF_DEFAULT
- #define OF_DEFAULT of_bin
-@@ -194,6 +203,7 @@ extern struct ofmt of_obj;
- extern struct ofmt of_win32;
- extern struct ofmt of_rdf2;
- extern struct ofmt of_ieee;
-+extern struct ofmt of_macho;
- extern struct ofmt of_dbg;
-
- struct ofmt *drivers[] = {
-@@ -227,6 +237,9 @@ struct ofmt *drivers[] = {
- #ifdef OF_IEEE
- &of_ieee,
- #endif
-+#ifdef OF_MACHO
-+ &of_macho,
-+#endif
- #ifdef OF_DBG
- &of_dbg,
- #endif