A section that can be manipulated by the section control directives is known as a user section. You can use the section control directives to change the user section in which code or data is generated. Table 3–4 lists the predefined user sections that can be named in the section control directives.
Table 3–4
Section Name |
Description |
---|---|
.bss |
Section contains uninitialized read-write data. |
.comment |
Comment section. |
.data & .data1 |
Section contains initialized read-write data. |
.debug |
Section contains debugging information. |
.fini |
Section contains runtime finalization instructions. |
.init |
Section contains runtime initialization instructions. |
.rodata & .rodata1 |
Section contains read-only data. |
.text |
Section contains executable text. |
.line |
Section contains line # info for symbolic debugging. |
.note |
Section contains note information. |
The .init sections contain codes that are to be executed before the the main program is executed. To create an .init section in an object file, use the assembler pseudo-ops shown in Example 3–1.
.section ".init" .align 4 <instructions>
At link time, the .init sections in a sequence of .o files are concatenated into an .init section in the linker output file. The code in the .init section are executed before the main program is executed.
Because the whole .init section is treated as a single function body, it is recommented that the only code added to these sections be in the following form:.
call routine_name
nop |
The called routine should be located in another section. This will prevent conflicting register and stack usage within the .init sections.
.fini sections contain codes that are to be executed after the the main program is executed. To create an .fini section in an object file, use the assembler pseudo-ops shown in Example 3–2.
.section ".fini" .align 4 <instructions>
At link time, the .fini sections in a sequence of .o files are concatenated into a .fini section in the linker output file. The codes in the .fini section are executed after the main program is executed.
Because the whole .fini section is treated as a single function body, it is recommended that the only code added to these section be in the following form:.
call routine_name
nop |
The called routine should be located in another section. This will prevent conflicting register and stack usage within the .fini sections.