Commit Graph

3910 Commits

Author SHA1 Message Date
H. Peter Anvin
2c57d0a5ca RAA: make pointer vs integer RAAs type safe
Use pseudo-types to make it impossible to confuse RAAs made of
integers and RAAs made of pointers.

Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
2018-06-18 17:11:54 -07:00
H. Peter Anvin
a5992a4c41 outmacho: don't use raa_read() for pointer values
If we write pointers, we have to read pointers.  This unbreaks
non-64-bit bigendian systems.

Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
2018-06-18 16:00:48 -07:00
H. Peter Anvin
a7c8e39686 labels: pass the mangled name to the backend for fixups
ofmt->symdef() always takes the mangled label name, make sure we
actually do the correct thing even for forward fixups.

Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
2018-06-18 14:17:26 -07:00
H. Peter Anvin
84ca80abd7 NASM 2.14rc6 2018-06-18 14:04:40 -07:00
H. Peter Anvin
50bbafbffb Makefile.in: fix building RDOFF
Apparently it isn't just NMAKE which is sensitive to the ordering of
.SUFFIXES, it apparently applies just as well to Unix make.

Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
2018-06-18 14:02:29 -07:00
H. Peter Anvin
5d8193367e MSVC: fix dependency generation and building RDOFF under MSVC
1. The mkdep.pl program didn't handle excluded dependencies correctly,
   causing it to error out due to config/config.h not existing.
2. NMAKE is sensitive to the order suffixes appear in .SUFFIXES,
   causing it to try to use the builtin rule .c.exe instead of
   .c.obj -> .obj.exe.
3. NMAKE doesn't handle the && operator between commands.
4. The !ifdef jungle around dependency generation was wrong.

Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
2018-06-18 13:54:43 -07:00
H. Peter Anvin
ef4e5e209f .gitignore: add asm/directbl.h
asm/directbl.h was missing from .gitignore, making this generated file
show up as a file not checked in.

Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
2018-06-18 11:38:47 -07:00
H. Peter Anvin
1bcc1e012a test: test for ELF symbol visibility
Add test for declaring ELF visibility.

Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
2018-06-18 11:37:17 -07:00
H. Peter Anvin
f7be8b3253 pragma: define a hander for generic output (and debug) pragmas
There are cases where we may want to implement generic pragmas, while
still make them selective based on output and/or debug formats.
Initially, use this for the prefix/suffix options.

Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Cc: Chang Seok Bae <chang.seok.bae@intel.com>
2018-06-18 11:34:33 -07:00
H. Peter Anvin
41103ab431 test/Makefile: qualify the names of list files with output format
It is quite likely we may want to build the same input with multiple
output formats; make it so we don't lose the list file.

Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
2018-06-18 11:30:48 -07:00
H. Peter Anvin
8eb3096f7a nasm.h: remove unused constants
Remove unused constants for prefix and suffix, long since obsolete.

Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
2018-06-18 11:12:49 -07:00
H. Peter Anvin
fee097f724 NASM 2.14rc5 2018-06-16 00:16:12 -07:00
H. Peter Anvin
854730bf62 insns.dat: update with instructions from ISE 319433-034
Add instructions from the Intel Instruction Set Extensions and Future
Features Programming Reference, document 319433-034, May 2018.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2018-06-16 00:13:58 -07:00
H. Peter Anvin
94adf7d765 eval: add support for signed shift operators <<< and >>>
Add support for signed shifts.  The operators are <<< and >>>,
although the former is (inherently) idntical to <<.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2018-06-15 18:37:32 -07:00
H. Peter Anvin
c51369067c errors: simplify nasm_fatal() and nasm_panic()
Nearly all instances of nasm_fatal() and nasm_panic() take a flags
argument of zero. Simplify the code by making nasm_fatal and
nasm_panic default to no flags, and add an alternate version if flags
really are desired. This also means that every call site doesn't have
to initialize a zero argument.

Furthermore, ERR_NOFILE is now often not necessary, as the error code
will no longer cause a null reference if there is no current
file. Therefore, we can remove many instances of ERR_NOFILE which only
deprives the user of information.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2018-06-15 18:20:17 -07:00
H. Peter Anvin
d3b1832c04 outbin: remove ERR_NOFILE
The current error interface fully supports the case where there is no
current filename, so specifying ERR_NOFILE just deprives the user of
information.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2018-06-15 18:04:54 -07:00
H. Peter Anvin
8f3a62f154 outelf: remove additional tests for [ABSOLUTE]
This test is now centralized, no reason to duplicate everywhere.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2018-06-15 18:02:08 -07:00
H. Peter Anvin
a9b596476b Mark this branch as 2.15rc0
This branch now targets a 2.15 release.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2018-06-15 17:59:34 -07:00
H. Peter Anvin
79561027a0 Make limits 64 bits, add globallines limit to configurable limits
Make all limit counters 64 bits, in case someone really has a usage
for an insanely large program. The globallines limit was omitted, add
it to the list of configurable limits.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2018-06-15 17:57:15 -07:00
H. Peter Anvin
a3d96d02b0 Make limits 64 bits, add globallines limit to configurable limits
Make all limit counters 64 bits, in case someone really has a usage
for an insanely large program. The globallines limit was omitted, add
it to the list of configurable limits.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2018-06-15 17:56:25 -07:00
H. Peter Anvin
cd133a6f2d Merge remote-tracking branch 'origin/nasm-2.14.xx'
Fixes for various build problems.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2018-06-15 17:44:30 -07:00
H. Peter Anvin
675618c5dd Makefile.in: remove duplicated $(ALL_CFLAGS)
We really don't need every C compiler flag repeated twice.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2018-06-15 17:41:46 -07:00
H. Peter Anvin
14a10935f7 Merge commit '7daa26f9ba3ca45813d16ce540564448c13b16fa' into nasm-2.14.xx
Merge in some warning workarounds/possible bugs discovered by a recent
gcc.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2018-06-15 17:25:57 -07:00
H. Peter Anvin
ed859f72a1 output: remove ABSOLUTE handling, OUT_RAWDATA asserts
ABSOLUTE handling can be done centrally, and shouldn't need to be in
every backend.  Simply drop the call to ofmt->output().

Many backends have an assert for OUT_RAWDATA not having a target
segment; this doesn't make any sense as output/legacy.c will not allow
that to happen.

Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
2018-06-15 00:03:53 -07:00
H. Peter Anvin
0125c446dd output: centralize the null definition of ofmt->segbase
Only two output formats (obj and ieee) actually need ofmt->segbase, so
move the common dummy definion into nullout.c.

Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
2018-06-14 22:41:00 -07:00
H. Peter Anvin
e803010163 nasm.h: remove unused constants
Remove unused constants for prefix and suffix, long since obsolete.

Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
2018-06-14 20:28:57 -07:00
H. Peter Anvin
155bc4cfbf Merge remote-tracking branch 'origin/nasm-2.14.xx' 2018-06-14 20:24:21 -07:00
H. Peter Anvin
903ea54857 RAA: clean up the RAA infrastructure, make it support larger indicies
Make the RAA infrastructure a bit cleaner, make it support 64-bit
indicies, and reduce the memory overhead of a sparse or small RAA --
the old code would allocate a *minimum* of 256K for each RAA.  The new
code reduces that to 16K, and will not mandatorily allocate an entry
in the zero position.

The new shift, 11, was chosen so that a 32-bit RAA value will need 3
layers and a 64-bit value 6 layers, without excessive waste.

Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
2018-06-14 20:23:49 -07:00
H. Peter Anvin
430d41ede8 NASM 2.14rc4 2018-06-14 20:01:22 -07:00
H. Peter Anvin
46c839a03d labels: allocation of a segment number counts as a change
If we allocate a new segment number, that has to cause
global_offset_changed to be incremented.  Thus, we should not update
lptr->defn.segment until that would ordinarily be done.

Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
2018-06-14 20:00:07 -07:00
H. Peter Anvin
af5f918a92 Don't keep assigning segment numbers to EXTERN or COMMON
If a symbol is EXTERN or COMMON, then we should not keep assigning it
new segment numbers over and over. Instead, change the label code so
that it assignes a new segment value if and only if one has not been
assigned before.

Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
2018-06-14 19:53:45 -07:00
H. Peter Anvin
9401f81416 ilog2: return unsigned int for applicable routines
For the routines where we can't return a negative value, return an
unsigned value.

Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
2018-06-14 19:20:08 -07:00
H. Peter Anvin
48fd154d1c configure.ac: drop -O3; it is excessive and produces huge code
There is no reason to use -O3; it causes code to be insanely
duplicated. Simplify the configure.ac file too.

Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
2018-06-14 19:19:09 -07:00
H. Peter Anvin
58ab877402 NASM 2.14rc3 2018-06-14 17:16:05 -07:00
H. Peter Anvin
b91b63d164 outmacho: don't do encoding magic in the segment index
Encoding magic (in this case, subsection number) by bitfields in the
segment index has several problems:

1. It limits the number of *external symbols* as well as
   segments/subsections.
2. It is inefficient for the assembler (creates a very large RAA).

This is also a really good opportunity for removing linear lookups in
the MachO backend. We now use an RAA to do look up segment by index,
and a hash table to look up segment by name. Subsections are simply
handled by allocating a new index using seg_alloc() but still point it
to the same section structure in the index RAA.

Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
2018-06-14 17:14:36 -07:00
H. Peter Anvin
29695c85fb labels: add a subsection field available for backend use
Allow the subsection to store a subsection value directly in the
label, rather than having to do strange encoding hacks.

Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
2018-06-14 17:04:32 -07:00
H. Peter Anvin
13587802fe segalloc: DO NOT reset segment numbers
We are not supposed to reset the segment numbers; this was an
attempted fix for a convergence bug that didn't actually exist. The
backend is required to return the same segment number for the same
segment; if it does not, the front end will not converge, but that is
in fact the correct behavior.

Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
2018-06-14 16:42:03 -07:00
H. Peter Anvin
e39202c96a RAA: add functions for storing pointers in RAA's
RAAs can, and should be, usable for storing pointers as well as
integers. In reality it is exactly the same code, but make it explicit
by having different entry points.  In the actual RAA the data is
stored as a union, which in practice will not occupy any more space
than the existing code.

Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
2018-06-14 16:05:34 -07:00
H. Peter Anvin
2ef5400ee1 NASM 2.14rc2 2018-06-12 14:24:30 -07:00
H. Peter Anvin
c805fd774d Fix parsing of long options; actually warn on bad limit
Fix the parsing of long options (arguments with = broke things.)

Actually issue a warning if we specify a wrong limit on the command
line.

Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
2018-06-12 14:23:05 -07:00
H. Peter Anvin
987dc9c9db Make any execution limit configurable, add eval limit
Make any "deadman"-style execution limit configurable on the command
line (--limit-foo) or via a pragma (%pragma limit foo).

Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
2018-06-12 13:54:42 -07:00
H. Peter Anvin
d49e6dc08e NASM 2.14rc1 2018-06-11 14:56:25 -07:00
H. Peter Anvin
734824823e Unbreak special segment symbols, unbreak COMMON
Recent changes broke:

1. Backend-provided special segments, due to seg_alloc() getting
   reset.
2. COMMON; the old code would pass size in the "offset" *without*
   setting it in the label structure. Containing all this information
   in the label structure requires another field.

Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
2018-06-11 14:54:14 -07:00
H. Peter Anvin
0599034321 Add --pragma and --before option; make --include = -P
Add --pragma to add pragmas on the command line; --before option to
add *any* statement on the command line, and add --include as an alias
for -P for familiarity with other toolchains.

Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
2018-06-11 13:32:42 -07:00
Cyrill Gorcunov
a7f318c307 directive: Make cpu directive case insensitive back again
During code suffle we occasionally made cpu directive to
take letter case into account despite the documentation.

https://bugzilla.nasm.us/show_bug.cgi?id=3392491

Reported-by: Rebecca Cran <rebecca@bluestop.org>
Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
2018-06-07 00:06:58 +03:00
H. Peter Anvin
7daa26f9ba gcc: fix mistakes discovered by recent gcc
Recent versions of gcc issue a couple of warnings, which may be real
bugs.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2018-06-02 23:48:16 -07:00
H. Peter Anvin
c4e16f7e7c gcc: newer gcc trip on -Wstringop-truncation for valid uses of strncpy()
strncpy() is correctly used to fill in a zero-*padded* (not
zero-terminated) field in several places.  Make gcc not complain about
those uses.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2018-06-02 23:47:57 -07:00
H. Peter Anvin
3cb9068ee0 asm/directiv.c: fix bug in perm_alloc()
Fix dumb thinko in perm_alloc().

Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
2018-06-01 21:05:45 -07:00
H. Peter Anvin
69f0551f6f macho: Turn off OFMT_KEEP_ADDR
OFMT_KEEP_ADDR seems to not work properly. Now when we have proper
subsections, there is no need for that anymore.

This reverts commit 69ed82447a.

Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
2018-06-01 18:14:16 -07:00
H. Peter Anvin
98578071b9 Cleanup of label renaming infrastructure, add subsection support
In order to support Mach-O better, add support for subsections, as
used by Mach-O "subsections_via_symbols". We also want to add
infrastructure to support this by downcalling to the backend to
indicate if a new subsection is needed.

Currently this supports a maximum of 2^14 subsections per section for
Mach-O; this can be addressed by adding a level of indirection (or
cleaning up the handling of sections so we have an actual data
structure.)

Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
2018-06-01 18:06:25 -07:00