Commit Graph

3908 Commits

Author SHA1 Message Date
H. Peter Anvin (Intel)
190e846563 errors: correct message saying -w+error= ... is in use when it is not
Correct the test for when -w+error= is the correct thing to print.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2018-12-13 21:45:59 -08:00
H. Peter Anvin (Intel)
152aadef66 NASM 2.14.01rc4 2018-12-13 16:45:08 -08:00
H. Peter Anvin (Intel)
78e39ace4b errfile.c: add file missing from previous checkin
File was missing from checkin

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2018-12-13 16:44:35 -08:00
H. Peter Anvin (Intel)
3b91f4c117 malloc: handle potential infinite loop in nasm_alloc_failed()
It is possible on memory exhaustion that nasm_fatal() might cause
another allocation error, thus calling nasm_alloc_failed() again. If
we find us in nasm_alloc_failed() for a second time, try to get a
message out and then call abort().

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2018-12-13 13:55:25 -08:00
H. Peter Anvin (Intel)
51222ab69e NASM 2.14.01rc3 2018-12-12 17:44:19 -08:00
H. Peter Anvin
e2f5edbb3a error: new flag ERR_HERE
ERR_HERE is used to mark messages of the form "... here" so that we
can emit sane output to the list file with filename and line number,
instead of a nonsensical "here" which could point almost anywhere.

This patch contains some changes from the one in the master branch to
make the code cleaner.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2018-12-12 17:43:25 -08:00
H. Peter Anvin
c0b32a3650 errors: unify nasm_verror_{gnu,vc} and remove some ERR_NOFILE
The differences between nasm_verror_{gnu,vc} are a short handful of
strings, so unify them. Remove some additional ERR_NOFILE that are not
necessary.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2018-12-12 17:16:02 -08:00
H. Peter Anvin
dea7f4733f error: remove unused ERR_TOPFILE
The flag ERR_TOPFILE was not used anywhere, remove it.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2018-12-12 17:00:19 -08:00
H. Peter Anvin (Intel)
950dee9edc BR 3392535: warning on redefine, promote define-on-pass2 to error
If we redefine consistently, make it a suppressed-by-default warning.
If we end up doing the define on pass 2, promote that to a
default-error warning; using a default-error warning allows the user
to demote it should they so wish.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
Requested-by: C. Masloch <pushbx@38.de>
2018-12-12 16:49:07 -08:00
H. Peter Anvin (Intel)
46016cb368 listing.c: handle multiple error messages on a single line
We may produce an arbitrary number of error messages on a single line;
include all of them in the list file.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2018-12-12 16:47:04 -08:00
H. Peter Anvin (Intel)
bdf017c89c warnings: WARN_OTHER is now "above", not "below"
Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2018-12-12 16:12:36 -08:00
H. Peter Anvin (Intel)
eb48c1191d warnings: make it possible for a warning to default to an error
This allows us to do soft-migration of warnings to errors; they will
now be nonfatal errors by default, but gives the user the option to
demote them.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2018-12-12 16:11:08 -08:00
H. Peter Anvin (Intel)
93367ea97b warnings; move WARN_OTHER to the end; allow non-warnings to be suppressed
Putting WARN_OTHER at the end of the list creates a number of
advantages and simplifications:

1. It is more user friendly! It is far more of a logical location for
   the default case to be at the end of the printed list.
2. The value 0 can be used in a number of places to indicate a
   non-suppressible event. By having warning_state[0] always contain
   WARN_ST_ENABLED, we can always do the table lookup, even.
3. It means non-warnings (except fatal/panic) can now be conditioned
   on warning states. In those cases, WARN_*, including WARN_OTHER,
   can be added to the mask for any category. This is especially
   useful for notes.

The only downside is that we have to explicitly detect the case where
we have ERR_WARNING but no WARN_ flag. This is a trivial test.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2018-12-12 15:58:32 -08:00
H. Peter Anvin (Intel)
64b56eaa39 configure: add -Wno-shift-negative-value
Shifting negative values is undefined in standard C, but we have tons
of dependencies that signed arithmetic is 2's-complement in the code
anyway, and on gcc-like compilers we pass the -fwrapv option to
indicate exactly that. Therefore, this is not a valid warning in our
case and should be suppressed.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2018-12-12 15:56:28 -08:00
H. Peter Anvin (Intel)
77f53ba6d4 warnings: rename ERR_WARN_* to WARN_*
The prefix ERR_WARN_ is unnecessarily long and may be a disincentive
to create new warning categories. Change it to WARN_*, it is still
plenty distinctive.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2018-12-12 14:38:50 -08:00
H. Peter Anvin
54aac9d3c1 errors: add ERR_NOTE and a default clause to error disposition
ERR_NOTE has no action. Have a default clause as well, for good
measure.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2018-12-10 21:14:57 -08:00
H. Peter Anvin
48a810fc19 NASM 2.14.01rc2 2018-12-10 13:38:11 -08:00
H. Peter Anvin
5e1d1a8edd changes.src: update list of changes since 2.14 2018-12-10 13:36:58 -08:00
H. Peter Anvin
b424ae3130 BR 3392534: error out on an inconsistently redefined label
If a label is redefined in the same pass, and the value is
inconsistent, then error out. While we are at it, give the source
location of the previous definition.

This explicitly rejects BR 3392535; there seems to be no reason to
reject duplicate definitions with the same value, as there is no
inconsistency involved.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2018-12-10 13:30:51 -08:00
H. Peter Anvin
d84f9a7153 error: add new severity level "note"
Add a new severity level "note", intended to be used to give
additional information about a previous error.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2018-12-10 13:29:35 -08:00
H. Peter Anvin
070c50fe72 nasm: clean up error messages somewhat
If warnings are errors, print [-w+error=xxxx] and prefix error:.

Use the same spacing for filename and non-filename error messages.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2018-12-10 13:06:48 -08:00
H. Peter Anvin
3475462ee8 nasm: fix the combination -E -MD, handle -MD without a filename
-E -MD should work and output a dependency file.
-MD can be used without a filename; there is a default filename or
-\c{-MF} can be used.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2018-11-28 12:40:58 -08:00
H. Peter Anvin
c06c87dbb5 changes.src: fp bug: there are probably other corner cases
There are probably other corner cases where we could at the very
least produce an incorrectly rounded result, so be a bit more cagey
about the description of the bug.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2018-11-28 09:50:14 -08:00
H. Peter Anvin
ee75ec2eed NASM 2.14.01rc1 2018-11-26 21:40:01 -08:00
H. Peter Anvin
d7498067ca BR 3392368: actually fix the documentation; add test case
Add a mimimal test case for this bug; correct the documentation.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2018-11-26 21:38:14 -08:00
H. Peter Anvin
8fa279954c Correctly document the BR 3392368 fix, add test case
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2018-11-26 14:59:35 -08:00
H. Peter Anvin
88959910d8 changes.src: document more fixes
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2018-11-26 14:38:32 -08:00
H. Peter Anvin
79a070eea9 BR 3392368: correct handling of exact limb switch
When we have an exact limb switch, we may end up with a case where the
value no longer has any remaining valid bits.  In that case, we end up
relying on the expression *mp |= v << ms shifting the bits on the
subsequent limb all the way to zero, but that is not how real hardware
works when the shift count equals the width of the type. This is
undefined behavior and does, in fact, produce the wrong result.

Instead, change the test for limb shift to (ms < 0), meaning that we
defer the advance to the next limb until we actually need it. At that
point, change the shift into the *old* limb to have a cast to
(fp_2limb) which means the shift right of LIMB_BITS is valid and
produces a zero value as expected.

Reported-by: Brooks Moses <bmoses@google.com>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2018-11-26 14:17:40 -08:00
H. Peter Anvin
da79432255 BR 3392529: remove excess printf() argument
The input file is provided by nasm_error(), we should not include it
in the printf list (compiler warning + wrong message.)

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2018-11-26 14:15:46 -08:00
H. Peter Anvin
4885cc2ba8 BR 3392532: outobj: fix forward references to the SEG of external symbols
External symbols are defined via deflabel(), but deflabel() is not
called until pass0 == 1. Until that happens, segbase has no way to
know what the proper segment base of the segment actually is.

Thus, testing for pass0 == 0 will always fail for a forward reference;
correct the test to test for pass0 < 2, i.e. the assert should fail
only for the final code-generation pass.

Reported-by: <stsp@list.ru>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2018-11-26 13:41:37 -08:00
Michael Bradshaw
fd14310469 Fix undefined behavior when shifting left by 32 bits
See https://bugzilla.nasm.us/show_bug.cgi?id=3392368

Signed-off-by: Michael Bradshaw <mjbshaw@google.com>
Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
2018-11-23 23:51:16 +03:00
H. Peter Anvin (Intel)
7b6371b9d3 BR 3392529: if the default output name is the same as input -> nasm.out
If no output filename is specified, then a default filename is used
based on the input filename. If that ends up the *same* as the input
filename, change the output filename to "nasm.out".

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2018-11-20 10:56:57 -08:00
H. Peter Anvin
bf6230baa9 preproc: command-line preproc directive after system-generated
BR 3392527: make sure that all command-line specified preprocessing
directives are processed after the system-generated ones. In
particular __OUTPUT_FORMAT__ was generated after command line pass 2,
at which point -p, -d, -u, --pragma and --before had already been
processed.

There is no reason to split up defined_macros() anymore: the right
place to execute it is simply between command line passes 1 and 2. We
can also set dfmt here, which lets us define a __DEBUG_FORMAT__ macro
as well.

Finally move some options that have no business being processed in
pass 2 to pass 1.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2018-11-11 13:36:13 -08:00
H. Peter Anvin (Intel)
9a1216a1ef NASM 2.14 2018-11-07 13:43:01 -08:00
H. Peter Anvin (Intel)
522d15c407 nasmdoc.src: fix compound word 2018-11-07 12:54:23 -08:00
Chang S. Bae
4310eb9d42 doc: Add a description for a useful case of mangling symbols
Signed-off-by: Chang S. Bae <changseok.bae@gmail.com>
2018-10-30 10:11:08 +03:00
Cyrill Gorcunov
4b5b737d49 preproc: Don't access out of bound data on malformed input
There are a number of places still where we test text
data which is potentially may be an empty string. This
is known to happen on fuzzer input but usually doesn't
take place in regular valid programs. Surely we need
to revisit preprocessor code for this kind of errors.

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

Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
2018-10-29 22:54:34 +03:00
Cyrill Gorcunov
b756372b06 rdstrnum: Make sure we dont shift out of bound
Otherwise we may hit underfined behavior.

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

Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
2018-10-29 22:25:16 +03:00
Cyrill Gorcunov
661f723d39 preproc: Fix out of bound access on malformed input
A fuzzer revealed a problem in preproc code.

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

Reported-by: ganshuitao <ganshuitao@gmail.com>
Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
2018-10-28 20:39:34 +03:00
Cyrill Gorcunov
fe2e1d469a doc: Clarify %include search directory semantics
Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
2018-10-26 01:29:52 +03:00
Cyrill Gorcunov
0e7f511151 doc: Update changes
Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
2018-10-21 15:45:02 +03:00
night199uk
fdb1a1b151 preproc: Make the preprocessor use nasm_catfile for include
All include paths to nasm must already have a trailing separator
prefix which is uncommon among tools. Change to using nasm_catfile
which gives a more normal behaviour.

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

Signed-off-by: night199uk <night199uk@hermitcrabslab.com>
Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
2018-10-19 01:00:11 +03:00
night199uk
e1bd3bc7b4 path: nasm_catfile -- Fix incorrect return of filename only
nasm_catfile returns an incorrect (already incremented) pointer.

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

Signed-off-by: night199uk <night199uk@hermitcrabslab.com>
Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
2018-10-19 00:55:54 +03:00
Cyrill Gorcunov
28b69e2a63 NASM 2.14rc16 2018-10-15 00:26:52 +03:00
Cyrill Gorcunov
1cbd48ad48 doc: Update changes
Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
2018-10-14 21:09:30 +03:00
Cyrill Gorcunov
980dd658b5 preproc: expand_smacro -- Fix nil dereference on error path
When error happened earlier we might have a.mac already
handled and set to nil.

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

Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
2018-10-14 19:25:32 +03:00
Cyrill Gorcunov
ceec0d8187 eval: Eliminate division by zero
When doing division we should detect if the value we're
divided by is not zero. Instead of is_unknown() helper
we should use is_just_unknown().

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

Reported-by: Jun <jxx13@psu.edu>
Reported-by: stuartly <situlingyun@gmail.com>
Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
2018-10-14 01:49:43 +03:00
Cyrill Gorcunov
d94402d6f7 doc: Update changes
Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
2018-10-13 23:03:24 +03:00
Cyrill Gorcunov
3c755dac88 opflags: Convert is_class and is_reg_class to helpers
So we can test for out of bound access and make
helpers safe to use.

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

Reported-by: Jun <jxx13@psu.edu>
Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
2018-10-13 22:57:30 +03:00
Cyrill Gorcunov
67f2ca2b3f preproc: Fix out of range access in expand mmacro
On specially crafetd malformed input file the params
might be zapped (say due to invalid syntax) so we might
access out of bound having nil dereference in best case.

Note the later code in this helper uses tok_isnt_ helper
which already has similar check.

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

Reported-by: Jordan Zebor <j.zebor@f5.com>
Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
2018-10-13 19:41:01 +03:00