0
0
mirror of https://github.com/netwide-assembler/nasm.git synced 2025-07-24 10:25:42 -04:00

Merge nasm-2.14

* commit '9a1216a1efa0ccb48e5df97acc763ea3de71e0ce':
  NASM 2.14
  nasmdoc.src: fix compound word
  doc: Add a description for a useful case of mangling symbols
  preproc: Don't access out of bound data on malformed input
  rdstrnum: Make sure we dont shift out of bound
  preproc: Fix out of bound access on malformed input
  doc: Clarify %include search directory semantics

Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
This commit is contained in:
Cyrill Gorcunov 2018-11-12 23:21:43 +03:00
commit 0135a8147e
4 changed files with 29 additions and 18 deletions

View File

@ -2231,8 +2231,9 @@ static int do_directive(Token *tline, char **output)
skip_white_(tline); skip_white_(tline);
if (!tline || !tok_type_(tline, TOK_PREPROC_ID) || if (!tline || !tok_type_(tline, TOK_PREPROC_ID) ||
(tline->text[1] == '%' || tline->text[1] == '$' (tline->text[0] && (tline->text[1] == '%' ||
|| tline->text[1] == '!')) tline->text[1] == '$' ||
tline->text[1] == '!')))
return NO_DIRECTIVE_FOUND; return NO_DIRECTIVE_FOUND;
i = pp_token_hash(tline->text); i = pp_token_hash(tline->text);
@ -3962,7 +3963,7 @@ static Token *expand_mmac_params(Token * tline)
thead = NULL; thead = NULL;
while (tline) { while (tline) {
if (tline->type == TOK_PREPROC_ID && if (tline->type == TOK_PREPROC_ID && tline->text && tline->text[0] &&
(((tline->text[1] == '+' || tline->text[1] == '-') && tline->text[2]) || (((tline->text[1] == '+' || tline->text[1] == '-') && tline->text[2]) ||
(tline->text[1] >= '0' && tline->text[1] <= '9') || (tline->text[1] >= '0' && tline->text[1] <= '9') ||
tline->text[1] == '%')) { tline->text[1] == '%')) {

View File

@ -55,12 +55,14 @@ int64_t readstrnum(char *str, int length, bool *warn)
for (i = 0; i < length; i++) { for (i = 0; i < length; i++) {
if (charconst & UINT64_C(0xFF00000000000000)) if (charconst & UINT64_C(0xFF00000000000000))
*warn = true; *warn = true;
charconst &= ~UINT64_C(0xFF00000000000000);
charconst = (charconst << 8) + (uint8_t)*--str; charconst = (charconst << 8) + (uint8_t)*--str;
} }
} else { } else {
for (i = 0; i < length; i++) { for (i = 0; i < length; i++) {
if (charconst & 0xFF000000UL) if (charconst & UINT32_C(0xFF000000))
*warn = true; *warn = true;
charconst &= ~UINT32_C(0xFF000000);
charconst = (charconst << 8) + (uint8_t)*--str; charconst = (charconst << 8) + (uint8_t)*--str;
} }
} }

View File

@ -9,7 +9,7 @@ since 2007.
\S{cl-2.14} Version 2.14 \S{cl-2.14} Version 2.14
\b Fixed \c{-I} option handling when ending slash is not present. \b Changed \c{-I} option semantics by adding a trailing path separator unconditionally.
\b Fixed null dereference in corrupted invalid single line macros. \b Fixed null dereference in corrupted invalid single line macros.

View File

@ -628,16 +628,12 @@ library}, for example, by typing
(As usual, a space between \c{-i} and the path name is allowed, and (As usual, a space between \c{-i} and the path name is allowed, and
optional). optional).
NASM, in the interests of complete source-code portability, does not Prior NASM 2.14 a path provided in the option has been considered as
understand the file naming conventions of the OS it is running on; a verbatim copy and providing a path separator been up to a caller.
the string you provide as an argument to the \c{-i} option will be One could implicitly concatenate a search path together with a filename.
prepended exactly as written to the name of the include file. Still this was rather a trick than something useful. Now the trailing
Therefore the trailing backslash in the above example is necessary. path separator is made to always present, thus \c{-ifoo} will be
Under Unix, a trailing forward slash is similarly necessary. considered as the \c{-ifoo/} directory.
(You can use this to your advantage, if you're really \i{perverse},
by noting that the option \c{-ifoo} will cause \c{%include "bar.i"}
to search for the file \c{foobar.i}...)
If you want to define a \e{standard} \i{include search path}, If you want to define a \e{standard} \i{include search path},
similar to \c{/usr/include} on Unix systems, you should place one or similar to \c{/usr/include} on Unix systems, you should place one or
@ -4711,6 +4707,18 @@ This is a macro implemented as a \c{%pragma}:
Commandline option is also possible. See also \k{opt-pfix}. Commandline option is also possible. See also \k{opt-pfix}.
Some toolchains is aware of a particular prefix for its own optimization
options, such as code elimination. For instance, Mach-O backend has a
linker that uses a simplistic naming scheme to chunk up sections into a
meta section. When the \c{subsections_via_symbols} directive
(\k{macho-ssvs}) is declared, each symbol is the start of a
separate block. The meta section is, then, defined to include sections
before the one that starts with a 'L'. \c{LPREFIX} is useful here to mark
all local symbols with the 'L' prefix to be excluded to the meta section.
It converts local symbols compatible with the particular toolchain.
Note that local symbols declared with \c{STATIC} (\k{static})
are excluded from the symbol mangling and also not marked as global.
\H{gen-namespace} \i\c{OUTPUT}, \i\c{DEBUG}: Generic Namespaces \H{gen-namespace} \i\c{OUTPUT}, \i\c{DEBUG}: Generic Namespaces
@ -5827,9 +5835,9 @@ right-hand side of the \c{WRT} operator:
\S{macho-ssvs} \c{macho} specfic directive \i\c{subsections_via_symbols} \S{macho-ssvs} \c{macho} specfic directive \i\c{subsections_via_symbols}
The directive \c{subsections_via_symbols} sets the The directive \c{subsections_via_symbols} sets the
\c{MH_SUBSECTIONS_VIA_SYMBOLS} flag in the Mach-O header, which tells \c{MH_SUBSECTIONS_VIA_SYMBOLS} flag in the Mach-O header, that effectively
the linker that the symbols in the file matches the conventions separates a block (or a subsection) based on a symbol. It is often used
required to allow for link-time dead code elimination. for eliminating dead codes by a linker.
This directive takes no arguments. This directive takes no arguments.