Opened 3 months ago

Closed 3 months ago

#23527 closed enhancement (fixed)

nasm-3.02

Reported by: Bruce Dubbs Owned by: Bruce Dubbs
Priority: normal Milestone: 13.1
Component: BOOK Version: git
Severity: medium Keywords:
Cc:

Description

New minor version.

Change History (3)

comment:1 by Bruce Dubbs, 3 months ago

Owner: changed from blfs-book to Bruce Dubbs
Status: new → assigned

comment:2 by Bruce Dubbs, 3 months ago

Version 3.02

  • Fix build problems on C23 compilers using a pre-C23 version of <stdbool.h> which defines bool as a macro in violation of the C23 specification.
  • The immediate form of the JMPE instruction (opcode 0F B8) has been changed to an absolute address, as in the Itanium Architecture Software Developer's Manual, version 2.3, Volume 4, page 4:249. Hopefully this won't break whatever virtual environments use JMPE, but it is the closest thing there is to an official specification for this opcode.
    • Being an absolute address, treat it equivalent to a FAR jump and do not default to 64 bits in 64-bit mode.
    • That JMPE has apparently been wrong all these years is probably as good of a hint as any how much it has been actually used, but it does have the possibility of breaking virtual environments. In that case, please file a bug report to ​https://bugs.nasm.us/ with details about the virtual environment, and we will figure out a suitable solution.

Various build fixes.

Fix the documentation not building on MacOS because of the cp utility lacking -u there. Also fix not building generally due to wrong link formatting. Another fix was a typo in compiler.h related to a C++ check.

Corrections to assembling encodings:

  • Fix CMP allowing LOCK which is illegal.
  • Correct multiple AVX512 instructions such as VCVTSD2SI, VCVTSD2USI, VCVTSS2SI, VCVTSS2USI, VCVTTSD2SI, VCVTTSD2USI, VCVTTSS2SI, VCVTTSS2USI, VGETEXPSH, VGETMANTSH, MOVDDUP, VMOVDDUP.
  • Fixed other encodings or instruction formats for instructions UWRMSR, CMPSD, VCMPSS, V4FMADDSS, V4FNMADDSS, VCVTDQ2PH, VCVTPD2PH, VCVTPH2UDQ, VCVTQQ2PH, VCVTUDQ2PH, VCVTUQQ2PH, VGETEXPSH, VGETMANTSH, VRCPPH, VRSQRTPH, VCVTPH2BF8, VCVTPH2BF8S, VCVTPH2HF8, VCVTPH2HF8S.
  • Fixed typos in VP4DPWSSD mnemonic.
  • Fixed BYTE and WORD operands getting the same encoding on arithmetic instructions such as CMP.
  • Fixed PUSH not assembling when used with a DWORD in 64-bit mode. This is not a recommended syntax as the operand size is still 64 bits, but was permitted by earlier versions of NASM.
  • Fix parsing of $-escaped symbols in directives (GLOBAL, STATIC, EXTERN, REQUIRED, COMMON).

Corrections to disassembling:

  • Shift instructions with the unity operand were getting disassembled to a zero operand instead of one.
  • JMP, CALL and JMPE disassembled incorrectly with the register operands.

Whole bunch of minor fixes to operand sizes, operand size prefixes. Changes mostly return the behavior known from 2.16.03.

  • MOV [mem], label would be accepted without size specifiers which could cause unintended consequences. Raise an error if no size was specified and one of the operands is a memory reference and another operands is a label.
  • JMP NEAR is now the same as JMP STRICT NEAR as the STRICT is redundant here. JMP WORD on the other hand is up for optimization as NEAR and WORD relate to different things - jump lengths and operation sizes respectively.
  • Using redundant (or not) but valid operands size prefixes was fixed on instructions such as IRET, PUSHF, POPF, PUSH and POP.
  • Using an operand size prefix on a JMP or CALL instruction could generate an invalid instruction. This appears to have been a long-standing bug. Specifying the operand size by specifying the size of the immediate explicitly (e.g. JMP DWORD label) has always worked correctly, however.

Add support for C2y-style
o escape sequences, braced escape sequences, and as NASM extensions, decimal escape sequences (\d) and control-character escape sequences (\). See strings.

Fix generation of the short opcodes for ADD, OR, ADC, SBB, AND, SUB, XOR, and CMP AL,imm8.

Fix truncation of the generated constant to 63 bits when invoking a single-line macro when an argument is defined as =/b or =/ub.

Add an %env() preprocessor function as a more robust and flexible alternative to the %! construct. See \k{f_env.

The maximum number of multi-line macro parameters is now a configurable limit. See opt-limit.

The --limit- options and %pragma limit now accept the keywords default, maximum, and reset. See opt-limit.

Fix parsing of seg:offs-style FAR pointers in EQU.

Fix the %clear preprocessor directive hanging when given parameters.

The never properly implemented (or documented) preprocessor directives %rmacro and %irmacro are now properly disabled; to avoid breaking existing code, they fall back to %macro and %imacro with a suitable warning.

  • Programmers should not rely on this behavior: in the future, these directives might actually be (properly) implemented.

Fix a crash when -M directives were used in response files.

New listing option -Lc to include the contents of INCBIN files, see opt-L.

New listing option -Lt to include the output from every iteration of TIMES and ALIGN directives, see opt-L.

The %pragma list options directive now support resetting options to their command-line default, see opt-L.

New predefined macros ?LIST_OPTIONS?__ and __?LIST_OPTIONS_DEFAULT?__ to query the active and command-line default listing options. See opt-L.

comment:3 by Bruce Dubbs, 3 months ago

Resolution: → fixed
Status: assigned → closed

Fixed at commits

19e2eb299b Update to vim-9.2.0752 (Security Update).
bdbe75cba6 Update to systemd-261.1.
c5b1b96572 Update to nasm-3.02.
51481588d0 Update to xarchiver-0.5.4.27.

The security advisory for vim-9.2.0752 will be made when the LFS advisories are added.

Note: See TracTickets for help on using tickets.