Now all the FORM linkages are in place.
[dwarf-doc.git] / dwarf5 / latexdoc / compression.tex
index c5b6503..dec3358 100644 (file)
@@ -130,7 +130,7 @@ facilities such as simple relocations) are:
 
 \item A means of referencing from inside one .debug\_info
 compilation unit to another .debug\_info compilation unit
-(DW\-\_FORM\-\_ref\-\_addr provides this).
+(\livelink{chap:DWFORMrefaddr}{DW\-\_FORM\-\_ref\-\_addr} provides this).
 
 \item A means of having multiple contributions to specific sections
 (for example, .debug\_info, and so on) in a single object file.
@@ -289,16 +289,16 @@ relocations).
 (This is a consequence of separate compilation, not a rule
 imposed by this document.)
 
-\textit{Local labels use references with form DW\-\_FORM\-\_ref4
+\textit{Local labels use references with form \livelink{chap:DWFORMref4}{DW\-\_FORM\-\_ref4}
 or 
-DW\-\_FORM\-\_ref8
+\livelink{chap:DWFORMref8}{DW\-\_FORM\-\_ref8}
 (These are affected by relocations
 so 
-DW\-\_FORM\-\_ref\-\_udata
-DW\-\_FORM\-\_ref1 and 
-DW\-\_FORM\-\_ref2 are
+\livelink{chap:DWFORMrefudata}{DW\-\_FORM\-\_ref\-\_udata}
+\livelink{chap:DWFORMref1}{DW\-\_FORM\-\_ref1} and 
+\livelink{chap:DWFORMref2}{DW\-\_FORM\-\_ref2} are
 normally not usable and 
-DW\-\_FORM\-\_ref\-\_addr is not necessary
+\livelink{chap:DWFORMrefaddr}{DW\-\_FORM\-\_ref\-\_addr} is not necessary
 for a local label.)}
 
 \textbf{Use of \livelink{chap:DWTAGcompileunit}{DW\-\_TAG\-\_compile\-\_unit} versus 
@@ -353,10 +353,10 @@ of the
 \livelink{chap:DWTAGimportedunit}{DW\-\_TAG\-\_imported\-\_unit} entry.
 
 
-\textbf{Use of DW\-\_FORM\-\_ref\-\_addr}
+\textbf{Use of \livelink{chap:DWFORMrefaddr}{DW\-\_FORM\-\_ref\-\_addr}}
 
 Use 
-DW\-\_FORM\-\_ref\-\_addr to reference from one compilation
+\livelink{chap:DWFORMrefaddr}{DW\-\_FORM\-\_ref\-\_addr} to reference from one compilation
 unit's debugging information entries to those of another
 compilation unit.
 
@@ -370,7 +370,7 @@ generated based on that name.
 
 When referencing into a non-section group .debug\_info,
 from another .debug\_info (from anywhere) 
-DW\-\_FORM\-\_ref\-\_addr is
+\livelink{chap:DWFORMrefaddr}{DW\-\_FORM\-\_ref\-\_addr} is
 still the form to be used, but a section\dash relative relocation
 generated by use of a non-exported name (often called an
 ``internal name'') may be used for references within the
@@ -432,7 +432,7 @@ wa.h.
 \paragraph{Duplicate elimination example 1: DWARF section group} 
 
 \label{app:duplicateeliminationexample1dwarfsectiongroup}
-
+% FIXME: the DWFORMrefn could use rethinking
 \begin{alltt}
 ==== Section group name:
     my.compiler.company.cpp.wa.h.123456
@@ -450,9 +450,10 @@ DW.cpp.wa.h.123456.3: ! linker global symbol
 DW.cpp.wa.h.123456.4: ! linker global symbol
         \livelink{chap:DWTAGmember}{DW\-\_TAG\-\_member}
         \livelink{chap:DWATname}{DW\-\_AT\-\_name}("i")
-        \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(DW\-\_FORM\-\_refn to DW.cpp.wa.h.123456.2)
+        \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(\livelink{chap:DWFORMrefn}{DW\-\_FORM\-\_refn} to DW.cpp.wa.h.123456.2)
             ! (This is a local reference, so the more
-            ! compact form DW\-\_FORM\-\_refn can be used)
+            ! compact form \livetarg{chap:DWFORMrefn}{DW\-\_FORM\-\_refn} 
+            ! for n 1,2,4, or 8 can be used)
 \end{alltt}
 
 
@@ -789,26 +790,26 @@ Section \refersec{app:typesignaturecomputation1flattenedbytestream}.
 0x43 0x39 0x4e 0x00
 // Step 3: 'D' \livelink{chap:DWTAGstructuretype}{DW\-\_TAG\-\_structure\-\_type}
 0x44 0x13
-// Step 4: 'A' \livelink{chap:DWATname}{DW\-\_AT\-\_name} DW\-\_FORM\-\_string "C"
+// Step 4: 'A' \livelink{chap:DWATname}{DW\-\_AT\-\_name} \livelink{chap:DWFORMstring}{DW\-\_FORM\-\_string} "C"
 0x41 0x03 0x08 0x43 0x00
-// Step 4: 'A' \livelink{chap:DWATbytesize}{DW\-\_AT\-\_byte\-\_size} DW\-\_FORM\-\_sdata 8
+// Step 4: 'A' \livelink{chap:DWATbytesize}{DW\-\_AT\-\_byte\-\_size} \livelink{chap:DWFORMsdata}{DW\-\_FORM\-\_sdata} 8
 0x41 0x0b 0x0d 0x08
 // Step 7: First child ("x")
     // Step 3: 'D' \livelink{chap:DWTAGmember}{DW\-\_TAG\-\_member}
     0x44 0x0d
-    // Step 4: 'A' \livelink{chap:DWATname}{DW\-\_AT\-\_name} DW\-\_FORM\-\_string "x"
+    // Step 4: 'A' \livelink{chap:DWATname}{DW\-\_AT\-\_name} \livelink{chap:DWFORMstring}{DW\-\_FORM\-\_string} "x"
     0x41 0x03 0x08 0x78 0x00
-    // Step 4: 'A' \livelink{chap:DWATdatamemberlocation}{DW\-\_AT\-\_data\-\_member\-\_location} DW\-\_FORM\-\_sdata 0
+    // Step 4: 'A' \livelink{chap:DWATdatamemberlocation}{DW\-\_AT\-\_data\-\_member\-\_location} \livelink{chap:DWFORMsdata}{DW\-\_FORM\-\_sdata} 0
     0x41 0x38 0x0d 0x00
     // Step 6: 'T' \livelink{chap:DWATtype}{DW\-\_AT\-\_type} (type \#2)
     0x54 0x49
         // Step 3: 'D' \livelink{chap:DWTAGbasetype}{DW\-\_TAG\-\_base\-\_type}
         0x44 0x24
-        // Step 4: 'A' \livelink{chap:DWATname}{DW\-\_AT\-\_name} DW\-\_FORM\-\_string "int"
+        // Step 4: 'A' \livelink{chap:DWATname}{DW\-\_AT\-\_name} \livelink{chap:DWFORMstring}{DW\-\_FORM\-\_string} "int"
         0x41 0x03 0x08 0x69 0x6e 0x74 0x00
-        // Step 4: 'A' \livelink{chap:DWATbytesize}{DW\-\_AT\-\_byte\-\_size} DW\-\_FORM\-\_sdata 4
+        // Step 4: 'A' \livelink{chap:DWATbytesize}{DW\-\_AT\-\_byte\-\_size} \livelink{chap:DWFORMsdata}{DW\-\_FORM\-\_sdata} 4
         0x41 0x0b 0x0d 0x04
-        // Step 4: 'A' \livelink{chap:DWATencoding}{DW\-\_AT\-\_encoding} DW\-\_FORM\-\_sdata DW\-\_ATE\-\_signed
+        // Step 4: 'A' \livelink{chap:DWATencoding}{DW\-\_AT\-\_encoding} \livelink{chap:DWFORMsdata}{DW\-\_FORM\-\_sdata} DW\-\_ATE\-\_signed
         0x41 0x3e 0x0d 0x05
         // Step 7: End of \livelink{chap:DWTAGbasetype}{DW\-\_TAG\-\_base\-\_type} "int"
         0x00
@@ -817,9 +818,9 @@ Section \refersec{app:typesignaturecomputation1flattenedbytestream}.
 // Step 7: Second child ("y")
     // Step 3: 'D' \livelink{chap:DWTAGmember}{DW\-\_TAG\-\_member}
     0x44 0x0d
-    // Step 4: 'A' \livelink{chap:DWATname}{DW\-\_AT\-\_name} DW\-\_FORM\-\_string "y"
+    // Step 4: 'A' \livelink{chap:DWATname}{DW\-\_AT\-\_name} \livelink{chap:DWFORMstring}{DW\-\_FORM\-\_string} "y"
     0x41 0x03 0x08 0x78 0x00
-    // Step 4: 'A' \livelink{chap:DWATdatamemberlocation}{DW\-\_AT\-\_data\-\_member\-\_location} DW\-\_FORM\-\_sdata 4
+    // Step 4: 'A' \livelink{chap:DWATdatamemberlocation}{DW\-\_AT\-\_data\-\_member\-\_location} \livelink{chap:DWFORMsdata}{DW\-\_FORM\-\_sdata} 4
     0x41 0x38 0x0d 0x04
     // Step 6: 'R' \livelink{chap:DWATtype}{DW\-\_AT\-\_type} (type \#2)
     0x52 0x49 0x02
@@ -931,7 +932,8 @@ separate type unit. The last pointer type contains a reference
 to an incomplete type N::B, which is also included here as
 a declaration, since the complete type is unknown and its
 signature is therefore unavailable. There is also a reference
-to N::C, using DW\-\_FORM\-\_sig8 to refer to the type signature
+to N::C, using 
+\livelink{chap:DWFORMrefsig8}{DW\-\_FORM\-\_ref\-\_sig8} to refer to the type signature
 for that type.
 
 In computing a signature for the type N::A, flatten the type
@@ -950,28 +952,28 @@ Section \refersec{app:typesignatureexample2flattenedbytestream}.
 0x43 0x39 0x4e 0x00
 // Step 3: 'D' \livelink{chap:DWTAGclasstype}{DW\-\_TAG\-\_class\-\_type}
 0x44 0x02
-// Step 4: 'A' \livelink{chap:DWATname}{DW\-\_AT\-\_name} DW\-\_FORM\-\_string "A"
+// Step 4: 'A' \livelink{chap:DWATname}{DW\-\_AT\-\_name} \livelink{chap:DWFORMstring}{DW\-\_FORM\-\_string} "A"
 0x41 0x03 0x08 0x41 0x00
-// Step 4: 'A' \livelink{chap:DWATbytesize}{DW\-\_AT\-\_byte\-\_size} DW\-\_FORM\-\_sdata 20
+// Step 4: 'A' \livelink{chap:DWATbytesize}{DW\-\_AT\-\_byte\-\_size} \livelink{chap:DWFORMsdata}{DW\-\_FORM\-\_sdata} 20
 0x41 0x0b 0x0d 0x14
 // Step 7: First child ("v\_")
     // Step 3: 'D' \livelink{chap:DWTAGmember}{DW\-\_TAG\-\_member}
     0x44 0x0d
-    // Step 4: 'A' \livelink{chap:DWATname}{DW\-\_AT\-\_name} DW\-\_FORM\-\_string "v\_"
+    // Step 4: 'A' \livelink{chap:DWATname}{DW\-\_AT\-\_name} \livelink{chap:DWFORMstring}{DW\-\_FORM\-\_string} "v\_"
     0x41 0x03 0x08 0x76 0x5f 0x00
-    // Step 4: 'A' \livelink{chap:DWATaccessibility}{DW\-\_AT\-\_accessibility} DW\-\_FORM\-\_sdata DW\-\_ACCESS\-\_private
+    // Step 4: 'A' \livelink{chap:DWATaccessibility}{DW\-\_AT\-\_accessibility} \livelink{chap:DWFORMsdata}{DW\-\_FORM\-\_sdata} DW\-\_ACCESS\-\_private
     0x41 0x32 0x0d 0x03
-    // Step 4: 'A' \livelink{chap:DWATdatamemberlocation}{DW\-\_AT\-\_data\-\_member\-\_location} DW\-\_FORM\-\_sdata 0
+    // Step 4: 'A' \livelink{chap:DWATdatamemberlocation}{DW\-\_AT\-\_data\-\_member\-\_location} \livelink{chap:DWFORMsdata}{DW\-\_FORM\-\_sdata} 0
     0x41 0x38 0x0d 0x00
     // Step 6: 'T' \livelink{chap:DWATtype}{DW\-\_AT\-\_type} (type \#2)
     0x54 0x49
         // Step 3: 'D' \livelink{chap:DWTAGbasetype}{DW\-\_TAG\-\_base\-\_type}
         0x44 0x24
-        // Step 4: 'A' \livelink{chap:DWATname}{DW\-\_AT\-\_name} DW\-\_FORM\-\_string "int"
+        // Step 4: 'A' \livelink{chap:DWATname}{DW\-\_AT\-\_name} \livelink{chap:DWFORMstring}{DW\-\_FORM\-\_string} "int"
         0x41 0x03 0x08 0x69 0x6e 0x74 0x00
-        // Step 4: 'A' \livelink{chap:DWATbytesize}{DW\-\_AT\-\_byte\-\_size} DW\-\_FORM\-\_sdata 4
+        // Step 4: 'A' \livelink{chap:DWATbytesize}{DW\-\_AT\-\_byte\-\_size} \livelink{chap:DWFORMsdata}{DW\-\_FORM\-\_sdata} 4
         0x41 0x0b 0x0d 0x04
-        // Step 4: 'A' \livelink{chap:DWATencoding}{DW\-\_AT\-\_encoding} DW\-\_FORM\-\_sdata DW\-\_ATE\-\_signed
+        // Step 4: 'A' \livelink{chap:DWATencoding}{DW\-\_AT\-\_encoding} \livelink{chap:DWFORMsdata}{DW\-\_FORM\-\_sdata} DW\-\_ATE\-\_signed
         0x41 0x3e 0x0d 0x05
         // Step 7: End of \livelink{chap:DWTAGbasetype}{DW\-\_TAG\-\_base\-\_type} "int"
         0x00
@@ -980,11 +982,11 @@ Section \refersec{app:typesignatureexample2flattenedbytestream}.
 // Step 7: Second child ("next")
     // Step 3: 'D' \livelink{chap:DWTAGmember}{DW\-\_TAG\-\_member}
     0x44 0x0d
-    // Step 4: 'A' \livelink{chap:DWATname}{DW\-\_AT\-\_name} DW\-\_FORM\-\_string "next"
+    // Step 4: 'A' \livelink{chap:DWATname}{DW\-\_AT\-\_name} \livelink{chap:DWFORMstring}{DW\-\_FORM\-\_string} "next"
     0x41 0x03 0x08 0x6e 0x65 0x78 0x74 0x00
-    // Step 4: 'A' \livelink{chap:DWATaccessibility}{DW\-\_AT\-\_accessibility} DW\-\_FORM\-\_sdata DW\-\_ACCESS\-\_private
+    // Step 4: 'A' \livelink{chap:DWATaccessibility}{DW\-\_AT\-\_accessibility} \livelink{chap:DWFORMsdata}{DW\-\_FORM\-\_sdata} DW\-\_ACCESS\-\_private
     0x41 0x32 0x0d 0x03
-    // Step 4: 'A' \livelink{chap:DWATdatamemberlocation}{DW\-\_AT\-\_data\-\_member\-\_location} DW\-\_FORM\-\_sdata 4
+    // Step 4: 'A' \livelink{chap:DWATdatamemberlocation}{DW\-\_AT\-\_data\-\_member\-\_location} \livelink{chap:DWFORMsdata}{DW\-\_FORM\-\_sdata} 4
     0x41 0x38 0x0d 0x04
     // Step 6: 'T' \livelink{chap:DWATtype}{DW\-\_AT\-\_type} (type \#3)
     0x54 0x49
@@ -1003,11 +1005,11 @@ Section \refersec{app:typesignatureexample2flattenedbytestream}.
 // Step 7: Third child ("bp")
     // Step 3: 'D' \livelink{chap:DWTAGmember}{DW\-\_TAG\-\_member}
     0x44 0x0d
-    // Step 4: 'A' \livelink{chap:DWATname}{DW\-\_AT\-\_name} DW\-\_FORM\-\_string "bp"
+    // Step 4: 'A' \livelink{chap:DWATname}{DW\-\_AT\-\_name} \livelink{chap:DWFORMstring}{DW\-\_FORM\-\_string} "bp"
     0x41 0x03 0x08 0x62 0x70 0x00
-    // Step 4: 'A' \livelink{chap:DWATaccessibility}{DW\-\_AT\-\_accessibility} DW\-\_FORM\-\_sdata DW\-\_ACCESS\-\_private
+    // Step 4: 'A' \livelink{chap:DWATaccessibility}{DW\-\_AT\-\_accessibility} \livelink{chap:DWFORMsdata}{DW\-\_FORM\-\_sdata} DW\-\_ACCESS\-\_private
     0x41 0x32 0x0d 0x03
-    // Step 4: 'A' \livelink{chap:DWATdatamemberlocation}{DW\-\_AT\-\_data\-\_member\-\_location} DW\-\_FORM\-\_sdata 8
+    // Step 4: 'A' \livelink{chap:DWATdatamemberlocation}{DW\-\_AT\-\_data\-\_member\-\_location} \livelink{chap:DWFORMsdata}{DW\-\_FORM\-\_sdata} 8
     0x41 0x38 0x0d 0x08
     // Step 6: 'T' \livelink{chap:DWATtype}{DW\-\_AT\-\_type} (type \#4)
     0x54 0x49
@@ -1026,11 +1028,11 @@ Section \refersec{app:typesignatureexample2flattenedbytestream}.
 // Step 7: Fourth child ("c")
     // Step 3: 'D' \livelink{chap:DWTAGmember}{DW\-\_TAG\-\_member}
     0x44 0x0d
-    // Step 4: 'A' \livelink{chap:DWATname}{DW\-\_AT\-\_name} DW\-\_FORM\-\_string "c"
+    // Step 4: 'A' \livelink{chap:DWATname}{DW\-\_AT\-\_name} \livelink{chap:DWFORMstring}{DW\-\_FORM\-\_string} "c"
     0x41 0x03 0x08 0x63 0x00
-    // Step 4: 'A' \livelink{chap:DWATaccessibility}{DW\-\_AT\-\_accessibility} DW\-\_FORM\-\_sdata DW\-\_ACCESS\-\_private
+    // Step 4: 'A' \livelink{chap:DWATaccessibility}{DW\-\_AT\-\_accessibility} \livelink{chap:DWFORMsdata}{DW\-\_FORM\-\_sdata} DW\-\_ACCESS\-\_private
     0x41 0x32 0x0d 0x03
-    // Step 4: 'A' \livelink{chap:DWATdatamemberlocation}{DW\-\_AT\-\_data\-\_member\-\_location} DW\-\_FORM\-\_sdata 12
+    // Step 4: 'A' \livelink{chap:DWATdatamemberlocation}{DW\-\_AT\-\_data\-\_member\-\_location} \livelink{chap:DWFORMsdata}{DW\-\_FORM\-\_sdata} 12
     0x41 0x38 0x0d 0x0c
     // Step 6: 'T' \livelink{chap:DWATtype}{DW\-\_AT\-\_type} (type \#5)
     0x54 0x49
@@ -1038,16 +1040,16 @@ Section \refersec{app:typesignatureexample2flattenedbytestream}.
         0x43 0x39 0x4e 0x00
         // Step 3: 'D' \livelink{chap:DWTAGstructuretype}{DW\-\_TAG\-\_structure\-\_type}
         0x44 0x13
-        // Step 4: 'A' \livelink{chap:DWATname}{DW\-\_AT\-\_name} DW\-\_FORM\-\_string "C"
+        // Step 4: 'A' \livelink{chap:DWATname}{DW\-\_AT\-\_name} \livelink{chap:DWFORMstring}{DW\-\_FORM\-\_string} "C"
         0x41 0x03 0x08 0x43 0x00
-        // Step 4: 'A' \livelink{chap:DWATbytesize}{DW\-\_AT\-\_byte\-\_size} DW\-\_FORM\-\_sdata 8
+        // Step 4: 'A' \livelink{chap:DWATbytesize}{DW\-\_AT\-\_byte\-\_size} \livelink{chap:DWFORMsdata}{DW\-\_FORM\-\_sdata} 8
         0x41 0x0b 0x0d 0x08
         // Step 7: First child ("x")
             // Step 3: 'D' \livelink{chap:DWTAGmember}{DW\-\_TAG\-\_member}
             0x44 0x0d
-            // Step 4: 'A' \livelink{chap:DWATname}{DW\-\_AT\-\_name} DW\-\_FORM\-\_string "x"
+            // Step 4: 'A' \livelink{chap:DWATname}{DW\-\_AT\-\_name} \livelink{chap:DWFORMstring}{DW\-\_FORM\-\_string} "x"
             0x41 0x03 0x08 0x78 0x00
-            // Step 4: 'A' \livelink{chap:DWATdatamemberlocation}{DW\-\_AT\-\_data\-\_member\-\_location} DW\-\_FORM\-\_sdata 0
+            // Step 4: 'A' \livelink{chap:DWATdatamemberlocation}{DW\-\_AT\-\_data\-\_member\-\_location} \livelink{chap:DWFORMsdata}{DW\-\_FORM\-\_sdata} 0
             0x41 0x38 0x0d 0x00
             // Step 6: 'R' \livelink{chap:DWATtype}{DW\-\_AT\-\_type} (type \#2)
             0x52 0x49 0x02
@@ -1056,9 +1058,9 @@ Section \refersec{app:typesignatureexample2flattenedbytestream}.
         // Step 7: Second child ("y")
             // Step 3: 'D' \livelink{chap:DWTAGmember}{DW\-\_TAG\-\_member}
             0x44 0x0d
-            // Step 4: 'A' \livelink{chap:DWATname}{DW\-\_AT\-\_name} DW\-\_FORM\-\_string "y"
+            // Step 4: 'A' \livelink{chap:DWATname}{DW\-\_AT\-\_name} \livelink{chap:DWFORMstring}{DW\-\_FORM\-\_string} "y"
             0x41 0x03 0x08 0x79 0x00
-            // Step 4: 'A' \livelink{chap:DWATdatamemberlocation}{DW\-\_AT\-\_data\-\_member\-\_location} DW\-\_FORM\-\_sdata 4
+            // Step 4: 'A' \livelink{chap:DWATdatamemberlocation}{DW\-\_AT\-\_data\-\_member\-\_location} \livelink{chap:DWFORMsdata}{DW\-\_FORM\-\_sdata} 4
             0x41 0x38 0x0d 0x04
             // Step 6: 'R' \livelink{chap:DWATtype}{DW\-\_AT\-\_type} (type \#2)
             0x52 0x49 0x02
@@ -1148,17 +1150,17 @@ tag-code
 at-code
     : <ULEB128>
 form-encoded-value
-    : DW\-\_FORM\-\_sdata value
-    : DW\-\_FORM\-\_flag value
-    : DW\-\_FORM\-\_string string
-    : DW\-\_FORM\-\_block block
-DW\-\_FORM\-\_string
+    : \livelink{chap:DWFORMsdata}{DW\-\_FORM\-\_sdata} value
+    : \livelink{chap:DWFORMflag}{DW\-\_FORM\-\_flag} value
+    : \livelink{chap:DWFORMstring}{DW\-\_FORM\-\_string} string
+    : \livelink{chap:DWFORMblock}{DW\-\_FORM\-\_block} block
+\livelink{chap:DWFORMstring}{DW\-\_FORM\-\_string}
     : '\\x08'
-DW\-\_FORM\-\_block
+\livelink{chap:DWFORMblock}{DW\-\_FORM\-\_block}
     : '\\x09'
-DW\-\_FORM\-\_flag
+\livelink{chap:DWFORMflag}{DW\-\_FORM\-\_flag}
     : '\\x0c'
-DW\-\_FORM\-\_sdata
+\livelink{chap:DWFORMsdata}{DW\-\_FORM\-\_sdata}
     : '\\x0d'
 value
     : <SLEB128>
@@ -1242,7 +1244,7 @@ declarations and definitions. Other per\dash function compilation
 unit DWARF information (.debug\_info) points to this common
 file\dash level compilation unit using \livelink{chap:DWTAGimportedunit}{DW\-\_TAG\-\_imported\-\_unit}.
 
-Section groups can use DW\-\_FORM\-\_ref\-\_addr and internal labels
+Section groups can use \livelink{chap:DWFORMrefaddr}{DW\-\_FORM\-\_ref\-\_addr} and internal labels
 (section\dash relative relocations) to refer to the main object
 file sections, as the section groups here are either deleted
 as unused or kept. There is no possibility (aside from error)