Merge branch 'nasm-2.09.xx'
authorCyrill Gorcunov <gorcunov@gmail.com>
Wed, 6 Apr 2011 15:12:17 +0000 (19:12 +0400)
committerCyrill Gorcunov <gorcunov@gmail.com>
Wed, 6 Apr 2011 15:12:17 +0000 (19:12 +0400)
Conflicts:
nasm.h
version

Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
doc/changes.src
doc/nasmdoc.src
nasm.c
nasm.h
output/outform.c
output/outform.h

index 302e9d1..a3ba18c 100644 (file)
@@ -19,6 +19,15 @@ since 2007.
 To force a specific form, use the \c{STRICT} keyword, see \k{strict}.
 
 
+\S{cl-2.09.08} Version 2.09.08
+
+\b Fix \c{__OUTPUT_FORMAT__} assignment when output driver alias
+   is used. For example when \c{-f elf} is used \c{__OUTPUT_FORMAT__}
+   must be set to \c{elf}, if \c{-f elf32} is used \c{__OUTPUT_FORMAT__}
+   must be assigned accordingly, i.e. to \c{elf32}. The rule applies to
+   all output driver aliases. See \k{ofmtm}.
+
+
 \S{cl-2.09.07} Version 2.09.07
 
 \b Fix attempts to close same file several times
index 515a8bb..34e8386 100644 (file)
@@ -1,6 +1,6 @@
 \# --------------------------------------------------------------------------
 \#
-\#   Copyright 1996-2010 The NASM Authors - All Rights Reserved
+\#   Copyright 1996-2011 The NASM Authors - All Rights Reserved
 \#   See the file AUTHORS included with the NASM distribution for
 \#   the specific copyright holders.
 \#
@@ -35,7 +35,7 @@
 \#
 \M{category}{Programming}
 \M{title}{NASM - The Netwide Assembler}
-\M{year}{1996-2010}
+\M{year}{1996-2011}
 \M{author}{The NASM Development Team}
 \M{copyright_tail}{-- All Rights Reserved}
 \M{license}{This document is redistributable under the license given in the file "LICENSE" distributed in the NASM archive.}
@@ -334,7 +334,7 @@ distribution archive, for the license conditions under which you may
 use NASM.  NASM is now under the so-called 2-clause BSD license, also
 known as the simplified BSD license.
 
-Copyright 1996-2010 the NASM Authors - All rights reserved.
+Copyright 1996-2011 the NASM Authors - All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are
diff --git a/nasm.c b/nasm.c
index c0a105b..36be46e 100644 (file)
--- a/nasm.c
+++ b/nasm.c
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------- *
  *
- *   Copyright 1996-2010 The NASM Authors - All Rights Reserved
+ *   Copyright 1996-2011 The NASM Authors - All Rights Reserved
  *   See the file AUTHORS included with the NASM distribution for
  *   the specific copyright holders.
  *
@@ -98,6 +98,7 @@ static char errname[FILENAME_MAX];
 static int globallineno;        /* for forward-reference tracking */
 /* static int pass = 0; */
 struct ofmt *ofmt = &OF_DEFAULT;
+struct ofmt_alias *ofmt_alias = NULL;
 const struct dfmt *dfmt;
 
 static FILE *error_file;        /* Where to write error messages */
@@ -268,8 +269,13 @@ static void define_macros_late(void)
 {
     char temp[128];
 
+    /*
+     * In case if output format is defined by alias
+     * we have to put shortname of the alias itself here
+     * otherwise ABI backward compatibility gets broken.
+     */
     snprintf(temp, sizeof(temp), "__OUTPUT_FORMAT__=%s",
-            ofmt->shortname);
+             ofmt_alias ? ofmt_alias->shortname : ofmt->shortname);
     pp_pre_define(temp);
 }
 
@@ -652,7 +658,7 @@ static bool process_arg(char *p, char *q)
            break;
 
        case 'f':               /* output format */
-           ofmt = ofmt_find(param);
+        ofmt = ofmt_find(param, &ofmt_alias);
            if (!ofmt) {
                nasm_error(ERR_FATAL | ERR_NOFILE | ERR_USAGE,
                             "unrecognised output format `%s' - "
diff --git a/nasm.h b/nasm.h
index 069584b..ff77553 100644 (file)
--- a/nasm.h
+++ b/nasm.h
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------- *
  *   
- *   Copyright 1996-2010 The NASM Authors - All Rights Reserved
+ *   Copyright 1996-2011 The NASM Authors - All Rights Reserved
  *   See the file AUTHORS included with the NASM distribution for
  *   the specific copyright holders.
  *
@@ -754,6 +754,15 @@ struct ofmt {
     void (*cleanup) (int debuginfo);
 };
 
+/*
+ * Output format driver alias
+ */
+struct ofmt_alias {
+    const char  *shortname;
+    const char  *fullname;
+    struct ofmt *ofmt;
+};
+
 extern struct ofmt *ofmt;
 extern FILE *ofile;
 
index e386343..0c8ae53 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------- *
  *   
- *   Copyright 1996-2009 The NASM Authors - All Rights Reserved
+ *   Copyright 1996-2011 The NASM Authors - All Rights Reserved
  *   See the file AUTHORS included with the NASM distribution for
  *   the specific copyright holders.
  *
 #define BUILD_DRIVERS_ARRAY
 #include "output/outform.h"
 
-struct ofmt *ofmt_find(char *name)
+struct ofmt *ofmt_find(char *name, struct ofmt_alias **ofmt_alias)
 {
     struct ofmt **ofp, *of;
     unsigned int i;
 
+    *ofmt_alias = NULL;
+
     /* primary targets first */
     for (ofp = drivers; (of = *ofp); ofp++) {
         if (!nasm_stricmp(name, of->shortname))
@@ -61,8 +63,10 @@ struct ofmt *ofmt_find(char *name)
     /* lets walk thru aliases then */
     for (i = 0; i < ARRAY_SIZE(ofmt_aliases); i++) {
         if (ofmt_aliases[i].shortname &&
-            !nasm_stricmp(name, ofmt_aliases[i].shortname))
+            !nasm_stricmp(name, ofmt_aliases[i].shortname)) {
+            *ofmt_alias = &ofmt_aliases[i];
             return ofmt_aliases[i].ofmt;
+        }
     }
 
     return NULL;
index e703d99..4b809b7 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------- *
  *
- *   Copyright 1996-2009 The NASM Authors - All Rights Reserved
+ *   Copyright 1996-2011 The NASM Authors - All Rights Reserved
  *   See the file AUTHORS included with the NASM distribution for
  *   the specific copyright holders.
  *
@@ -330,11 +330,7 @@ static struct ofmt *drivers[] = {
     NULL
 };
 
-static struct ofmt_alias {
-    const char *shortname;
-    const char *fullname;
-    struct ofmt *ofmt;
-} ofmt_aliases[] = {
+static struct ofmt_alias ofmt_aliases[] = {
 #ifdef OF_ELF32
     {
         "elf",
@@ -361,7 +357,7 @@ static struct ofmt_alias {
 
 #endif /* BUILD_DRIVERS_ARRAY */
 
-struct ofmt *ofmt_find(char *);
+struct ofmt *ofmt_find(char *name, struct ofmt_alias **ofmt_alias);
 struct dfmt *dfmt_find(struct ofmt *, char *);
 void ofmt_list(struct ofmt *, FILE *);
 void dfmt_list(struct ofmt *ofmt, FILE * fp);