sectalign: Implement on/off mode
authorCyrill Gorcunov <gorcunov@gmail.com>
Thu, 12 Aug 2010 15:09:28 +0000 (19:09 +0400)
committerCyrill Gorcunov <gorcunov@gmail.com>
Thu, 12 Aug 2010 15:09:28 +0000 (19:09 +0400)
And describe it in documentation. We've introduced
sectalign in 2.09rc series and have to provide an
ability to steer this feature.

Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
doc/nasmdoc.src
standard.mac

index e797329..d6771cf 100644 (file)
@@ -4099,26 +4099,35 @@ boundary, for example, is a waste of effort. Again, NASM does not
 check that the section's alignment characteristics are sensible for
 the use of \c{ALIGN} or \c{ALIGNB}.
 
+Both \c{ALIGN} and \c{ALIGNB} do call \c{SECTALIGN} macro implicitly.
+See \k{sectalign} for details.
+
 See also the \c{smartalign} standard macro package, \k{pkg_smartalign}.
 
 
 \S{sectalign} \i\c{SECTALIGN}: Section Alignment
 
 The \c{SECTALIGN} macros provides a way to modify alignment attribute
-of output file section. Unlike the \c{align=} attribute allowed at section
-definition only the \c{SECTALIGN} macro may be used any time you need it.
+of output file section. Unlike the \c{align=} attribute (which is allowed
+at section definition only) the \c{SECTALIGN} macro may be used at any time.
 
-For example the statement
+For example the directive
 
-\c
 \c SECTALIGN 16
-\c
 
-sets a section alignment requirement to 16 bytes. Note that once increased
-the section alignment can not be decreased, the magnitude can grow only.
+sets the section alignment requirements to 16 bytes. Once increased it can
+not be decreased, the magnitude may grow only.
+
+Note that \c{ALIGN} (see \k{align}) calls the \c{SECTALIGN} macro implicitly
+so the active section alignment requirements may be updated. This is by default
+behaviour, if for some reason you want the \c{ALIGN} do not call \c{SECTALIGN}
+at all use the directive
+
+\c SECTALIGN OFF
+
+It is still possible to turn in on again by
 
-It must be also noted that \c{SECTALIGN} gets called implicitly inside \c{ALIGN}
-handler and as result \c{ALIGN} may update section alignment.
+\c SECTALIGN ON
 
 
 \C{macropkg} \i{Standard Macro Packages}
index 0b79896..b2dff8d 100644 (file)
     __SECT__
 %endmacro
 
+%define __SECTALIGN_ALIGN_UPDATES_SECTION__ 1
 %imacro sectalign 1.nolist
-    [sectalign %1]
+    %ifnum %1
+        %if __SECTALIGN_ALIGN_UPDATES_SECTION__ = 1
+            [sectalign %1]
+        %endif
+    %else
+        %ifidni %1,off
+            %define __SECTALIGN_ALIGN_UPDATES_SECTION__ 0
+        %elifidni %1,on
+            %define __SECTALIGN_ALIGN_UPDATES_SECTION__ 1
+        %endif
+    %endif
 %endmacro
 
 %imacro absolute 1+.nolist