Package: nasm
Version: 2.13.03-1

Hi,
  when I tried to switch to new nasm for one of our projects,
nasm started panicking;

nasm: panic: rdf segment numbers not allocated as expected (0,0,0)

nasm code in question calls seg_alloc 3 times:

    segtext = seg_alloc();
    segdata = seg_alloc();
    segbss = seg_alloc();
    if (segtext != 0 || segdata != 2 || segbss != 4)
        nasm_panic(0,
              "rdf segment numbers not allocated as expected (%d,%d,%d)",
              segtext, segdata, segbss);

and seg_alloc returns consecutive even integers, so it should never
happen that all three would be zeroes.

Except that seg_alloc() is marked as pure_func, and so new gcc figures
out that seg_alloc() returns constant, and so it can call it just once,
and then assign returned value to all three variables :-(

Simple fix below solves the problem.

Petr

Signed-off-by: Petr Vandrovec <p...@vandrovec.name>

--- nasm-2.13.03/include/nasmlib.h      2018-02-07 13:40:15.000000000 -0800
+++ nasm-2.13.03.patched/include/nasmlib.h      2018-07-06 22:59:37.595561715 
-0700
@@ -192,7 +192,7 @@
  * seg_alloc: allocate a hitherto unused segment number.
  */
 void pure_func seg_init(void);
-int32_t pure_func seg_alloc(void);
+int32_t seg_alloc(void);
 
 /*
  * many output formats will be able to make use of this: a standard

Reply via email to