0
0
mirror of https://github.com/netwide-assembler/nasm.git synced 2025-08-23 10:33:50 -04:00

5024 Commits

Author SHA1 Message Date
H. Peter Anvin
ada267ec8c preproc: let %ifdef test for existence of macro functions
It is good to have a way to test for the existence of macro functions,
and since they are really just a special case of single-line macros,
allow %ifdef to test for them instead of coming up with something
entirely new.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2025-08-16 19:15:00 -07:00
H. Peter Anvin
06f7ce2dba preproc: actually use uleb128 format for encoding macros
The format wasn't actually uleb128 because it was accidentally
bigendian (like UTF-8). That is just begging for confusion in the
future, if and when the uleb128 code gets librarized.

Fix it now.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2025-08-15 17:07:15 -07:00
H. Peter Anvin
2bf3585547 mkdep: disable some debug messages
A handful of debug messages in mkdep.pl were not guarded with
if ( $debug ), resulting in really annoying unnecessary verbosity.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2025-08-15 16:54:17 -07:00
H. Peter Anvin
df4555d68b preproc: compress standard macros with zlib
The very simple compression scheme used for the builtin macro sets no
longer works adequately, and in fact it generates incorrect output
now.

Drop the whole idea of an ad hoc compression scheme and just use
zlib. For the case where there is no system zlib available, include a
(subset of) the zlib distribution. The configure script can be set to
force this included zlib if desired (e.g. for testing.)

Unfortunately this turned out to be a pretty painful can of worms in
terms of complexity. On the other hand having zlib available might be
useful at some point in the future.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2025-08-15 16:51:39 -07:00
H. Peter Anvin
0c533873f0 preproc: add %iffile|%isfile() and %realpath()
Add a function to test for the existence of a file, and a function
query the real operating system path, if available.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2025-08-15 00:32:33 -07:00
H. Peter Anvin
0843052f05 preproc: implement %pathsearch() and %depend() as functions
Implement preprocessor function equivalents of the %pathsearch and
%depend directives.

Simplify the incbin standard macro by using these functions.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2025-08-14 21:46:55 -07:00
H. Peter Anvin
8ecb5d817a doc: cross-link %if and %is()
Link from %if to %is(), not just the other way.

Clarify that %is() is valid everywhere, not just in an %if expression
(unlike defined() in C.)

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2025-08-14 19:34:43 -07:00
H. Peter Anvin
23dffbd57a doc: highlight %unimacro a bit more
The %unimacro directive is almost a footnote, but it is really
important to use the correct directive.  Put it on equal footing with
%unmacro.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2025-08-14 19:28:33 -07:00
H. Peter Anvin
af3cbc7633 doc: tidy up the section about REQUIRED versus EXTERN
It is not great to have the documentation of a behavior change in
EXTERN under REQUIRED.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2025-08-14 19:16:56 -07:00
H. Peter Anvin
9f24de1034 parser: improve the "instruction expected" error messages
When throwing one of the "instruction expected" error messages, print
what was encountered instead.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2025-08-14 18:43:02 -07:00
H. Peter Anvin
161b64f485 Merge remote-tracking branch 'github/nasm-2.16.xx' 2025-08-13 13:58:34 -07:00
H. Peter Anvin
e2ccd5de26 travis: remove obsolete error message about %unmacro
%unmacro now *is* permitted on a macro being expanded; the entire
expansion is strictly performed when the macro is invoked, and the
lifetime issue related to %unmacro and %exitrep has been hacked
around.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2025-08-13 13:57:59 -07:00
H. Peter Anvin
2726aefb06 output: remove the legacy output entry point
Remove the legacy output entry point. It has proven impossible to find
the time to completely port the backends all at once.

Instead, always generate the legacy output data, but put them into the
out_data structure. Then add a macro to explode these arguments into
separate variables, equivalent to the old function arguments. This
also centralizes the type definitions for these variables.

Most importantly, it means that the entire struct out_data is now
always available, which means that backends that need the additional
information available in that structure, such as the specific
instruction template, can access that information without needing to
revamp the entire backend code all at once.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2025-08-13 13:51:25 -07:00
H. Peter Anvin
33eda43042 autoconf: update m4 macros and config/unconfig.h
(Does unconfig.h really need to be in the git tree?)

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2025-08-11 18:54:17 -07:00
H. Peter Anvin
1da646aeba Merge remote-tracking branch 'origin/nasm-2.16.xx'
Resolved Conflicts:
	asm/preproc.c

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2025-08-11 18:52:20 -07:00
H. Peter Anvin
9e6a4dd028 preproc: inc_fopen(): use the correct path for hashing the fullpath
This code incorrectly would try to use "path" as the hash key instead
of full->path, causing the key in struct hash_insert to diverge from
the one used in hash_add(). Fix that.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2025-08-11 14:42:47 -07:00
H. Peter Anvin
f49e9f1bea preproc: hack around mmacro lifetime problems by deferring free
Under some circumstances, such as:

- Certain uses of %exitrep in syntactically invalid code;
- %unmacro of a *alias* to a macro currently being expanded;

... it is possible for an mmacro to get freed while it is still in
use. Although inefficient, the easiest way to avoid this is to not
free mmacros until the end of pass cleanup, when named mmacros are
also freed.

To support this, use the existing ->next field in the MMacro structure
to keep a list of anonymous or removed MMacros. Don't free ->name at
this point, though, since that is currently used to distinguish
between %rep's and %macro's.  (This needs to be cleaned up to support
constructs such as %while or %for, but that is for later.)

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2025-08-11 14:02:12 -07:00
H. Peter Anvin
5457220e55 Merge remote-tracking branch 'origin/nasm-2.16.xx' 2025-08-11 11:23:39 -07:00
H. Peter Anvin
3ed10eccf1 insns.dat: avoid obsolete-removed warning on UD0
UD0 without a modr/m is obsolete in terms of syntax, but not as an
instruction per se. Match UD1 and assemble it without warnings, but
disassemble it with operands.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2025-08-11 11:10:38 -07:00
H. Peter Anvin
df1c055b5e insns.dat: add "UDB" opcode (permanent official #UD in 64-bit mode)
The opcode D6 has been officially reserved as a single-byte permanent
undefined (#UD) opcode in 64-bit mode with the mnemonic UDB.  This is
already the behavior of all known 64-bit implementations; this is thus
merely an official statement of forward compatibility and the
assignment of a mnemonic.

This will be documented in the next version of the Intel Software
Developer's Manual; in the meantime I DO speak officially for Intel on
this issue.

The x86 Advisory Council has ratified this decision, and so it is
expected to be honored across vendors, but I obviously cannot make any
official statement on any other vendor's behalf.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2025-08-11 11:01:34 -07:00
H. Peter Anvin
af0430fab3 path: tidy up syntax selection, add Haiku to Unix syntax list
Tidy up the way path syntax selection is handled, and make it possible
to specify it outside this file (e.g. in a Makefile) if need be.

Haiku, like BeOS, uses Unix syntax.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2025-05-02 22:40:22 -07:00
H. Peter Anvin
888d9ab550 configure.ac: enable some -Werror= warnings not included in -W -Wall -pedantic
For some reason, these warnings are not included in -W -Wall -pedantic, at least
not on gcc 14.2.1:

	-Wstrict-prototypes
	-Wmissing-prototypes
	-Wmissing-declarations

This caused a missing prototype error (because nasm_note[f]()
prototypes were missing from include/error.h) to get missed when
compiling with --enable-werror, which is ironic at best.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-11-04 10:30:14 -08:00
H. Peter Anvin
25757f83c5 autoconf: update some of the m4 library
Update some files in the m4 library. This also updates
config/unconfig.h to match.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-11-04 10:19:43 -08:00
H. Peter Anvin
ef5fd5391c error.h: add prototypes for nasm_note[f]()
Apparently -Wall -W doesn't enable -Wmissing-prototypes for some
bizarre reason.

This allowed this to slink through unnoticed.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-11-04 10:17:06 -08:00
H. Peter Anvin
8d62e99e14 Add %note directive to add a note in the list file
This differs from a plain old comment in the following ways:

1. It is optionally macro-expanded;
2. It has a dash prefix;
3. It can be used inside .nolist macros.

Suggested-by: <pushbx@ulukai.org>
Resolves: https://bugzilla.nasm.us/show_bug.cgi?id=3392915
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-09-19 13:21:30 +02:00
H. Peter Anvin
6ad3bab7fe doc: break the documentation into chapters
Make the source code for the documentation a little easier to deal
with by breaking it into individual chapter files. Add support to
rdsrc.pl for auto-generating dependencies.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-08-13 15:55:37 -07:00
H. Peter Anvin
7c47273c45 struct insn: remove unused forw_ref flag
The forw_ref flag in struct insn was being set but never actually read
anywhere.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-08-10 15:01:43 -07:00
H. Peter Anvin
86142b00e1 assemble: limit-check operand references
Don't do an out-of-range check for the operands, even
temporarily. Setting the operand pointer to NULL will help catch
errors when accessing non-operands, too.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-08-04 23:45:20 -07:00
H. Peter Anvin
699684bf17 Merge remote-tracking branch 'github/nasm-2.16.xx' 2024-07-27 17:45:53 -07:00
H. Peter Anvin
8ef2fa22a2 mkdep: handle breakage from srcdir changes
The handling of "path" and "fullpath" was inconsistent, resulting in a
lot of missing dependencies regardless if a separate build directory
was in use.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-07-27 17:43:34 -07:00
H. Peter Anvin
49640ed315 x86: move the bytecode defintion into a separate file in x86/
At least three files (asm/assemble.c, disasm/disasm.c, and
x86/insns.pl) depend on the bytecode defintions. It makes a lot more
sense for them to live in an explicit documentation file in the x86/
directory.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-07-23 12:47:25 -07:00
H. Peter Anvin
77df155c70 .editorconfig: hard tabs are still 8 spaces
The hard tab character is 8 spaces, that's just how it is.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-06-10 21:12:52 -07:00
H. Peter Anvin
a1e3140808 doc: fix the equivalent description for %cond()
%cond(x,y,z) == %sel(1+!(x),y,z), not %sel(2-!(x),y,z).

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-06-01 17:30:27 -07:00
Yegor Yefremov
9d38bed4d2 Add EditorConfig support
Provide common indentation configuration for the source files.

For more information, visit https://editorconfig.org/.

Signed-off-by: Yegor Yefremov <yegorslists@googlemail.com>
2024-05-31 11:11:41 -07:00
H. Peter Anvin
aa03a95edd doc: improve the build from source documentation
Update and improve the build from source documentation, including add
an auto-generated list of Perl build dependencies.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2024-05-20 10:54:26 -07:00
H. Peter Anvin
2e0212bcd3 doc/rdsrc.pl: add \w{...} to reduce the verbosity of web links
Create a shorthand for a web link where the URL itself is also the text.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2024-05-20 10:31:57 -07:00
Cyrill Gorcunov
0421148e33 doc/nasmdoc.src: fix typo in web link
Reported-by: Danny Cohen <dannycoh@gmail.com>
Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
2024-05-01 21:54:17 +03:00
H. Peter Anvin
68999937f3 doc/nasmdoc.css: @media only print -> @media print
There is no point in using "only" unless there is another
qualifier. The "only" is specifically to prevent older parsers from
unconditionally applying a section with qualifiers.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-04-25 15:42:25 -07:00
H. Peter Anvin
6165d6c014 Merge remote-tracking branch 'github/nasm-2.16.xx'
Resolved Conflicts:
	doc/changes.src
2024-04-25 15:37:36 -07:00
H. Peter Anvin
68d59933f7 doc/changes.src: begin release notes for 2.16.04.
Better to keep up with it now...

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-04-25 15:36:25 -07:00
H. Peter Anvin
cd1fd8ac8e nasm.c: tidy up the help text and break it into topics
The help output has gotten way too long to be shown on a single
command line. It can of course be piped to a pager, but to be a little
nicer to the user, break it up into subtopics that can be individually
displayed. --help all (-h all) can still show all the help information
as a single data dump.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-04-25 15:14:20 -07:00
H. Peter Anvin
3334c3c2dc Merge remote-tracking branch 'github/nasm-2.16.xx' 2024-04-18 15:32:59 -07:00
H. Peter Anvin
2553833cc1 nasm.spec.in: fix mistakes in previous checkin
Fix small mistakes in previous nasm.spec.in patch.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-04-18 15:31:51 -07:00
H. Peter Anvin
0537b16fdc doc: fix tag label for cl-2.16.03
cl-2.16.03 was incorrectly marked as a dup of cl-2.16.02.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-04-18 15:30:31 -07:00
H. Peter Anvin
843976d343 Merge remote-tracking branch 'github/nasm-2.16.xx'
Resolved Conflicts:
	autoconf/m4/pa_add_langflags.m4
	autoconf/m4/pa_option_lto.m4
	autogen.sh
	configure.ac
	doc/changes.src
2024-04-18 15:25:48 -07:00
H. Peter Anvin
0346e58b6e nasm.spec.in: add Obsoletes tags where applicable; fix License tag
Add Obsoletes tags: nasm-rdoff; old nasm-doc.

Add a few BuildRequires: tags.

Update License: tag to match SPDX.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2024-04-18 14:01:40 -07:00
H. Peter Anvin
cd37b81b32 NASM 2.16.03 nasm-2.16.03 2024-04-17 09:48:27 -07:00
H. Peter Anvin
e699956758 Mkfiles/README: recommend MSYS2 on Windows
Even Microsoft seems to recommend MSYS2 for autoconf compatibility
now.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-04-17 09:41:47 -07:00
H. Peter Anvin
c56472f6ad autoconf: updated pa_cross_compile
Probably unnecessary, but be more aggressive in defanging WINE.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-04-16 17:18:07 -07:00
H. Peter Anvin
2d710ad334 NASM 2.16.03rc3 nasm-2.16.03rc3 2024-04-16 16:43:16 -07:00