[nasm:master] Display warning for invalid RIP-relative addressing

nasm-bot for Liam Bowen liambowen at gmail.com
Mon Nov 7 17:12:26 PST 2022


Commit-ID:  f4e7a636a85bab02e7ac0067c5c58768779900a0
Gitweb:     http://repo.or.cz/w/nasm.git?a=commitdiff;h=f4e7a636a85bab02e7ac0067c5c58768779900a0
Author:     Liam Bowen <liambowen at gmail.com>
AuthorDate: Mon, 18 Apr 2022 18:50:23 +0000
Committer:  Liam Bowen <liambowen at gmail.com>
CommitDate: Mon, 18 Apr 2022 20:43:53 +0000

Display warning for invalid RIP-relative addressing



---
 asm/assemble.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/asm/assemble.c b/asm/assemble.c
index cd3f4693..dc5ee023 100644
--- a/asm/assemble.c
+++ b/asm/assemble.c
@@ -2264,6 +2264,17 @@ static void gencode(struct out_data *data, insn *ins)
                                rfield, rflags, ins, eat, &errmsg))
                     nasm_nonfatal("%s", errmsg);
 
+                /* If RIP-relative, indexreg and scale must not be present:
+                 * [basereg + indexreg*scale + displacement]
+                 * https://bugzilla.nasm.us/show_bug.cgi?id=3392797
+                 */
+                if (bits == 64 && (opy->eaflags & EAF_REL) &&
+                    ((opy->indexreg != -1) || (opy->scale != -1))) {
+                  nasm_warn(WARN_OTHER | ERR_PASS2,
+                            "invalid addressing mode: RIP-relative address "
+                            "cannot contain index register or scale");
+                }
+
                 p = bytes;
                 *p++ = ea_data.modrm;
                 if (ea_data.sib_present)


More information about the Nasm-commits mailing list