@@ -1,6 +1,6 @@
[Main]
Title=__ld_bss_end
-See Also=symbols_ld_bss_start: __ld_bss_start, symbols_ld_bss_size: __ld_bss_size
+See Also=symbols_ld_bss_start: __ld_bss_start, symbols_ld_bss_size: __ld_bss_size, symbols_ld_bss_even_end: __ld_bss_even_end
[Top]
This built-in symbol represents the end of the BSS section. It points to the
@@ -0,0 +1,10 @@
+[Main]
+Title=__ld_bss_even_end
+See Also=symbols_ld_bss_end: __ld_bss_end, symbols_ld_bss_start: __ld_bss_start, symbols_ld_bss_size: __ld_bss_size
+
+[Top]
+This built-in symbol points to the first even location behind the last item
+in the BSS section. In other words, it is equal to
+<A HREF="$$LINK(symbols_ld_bss_end)">__ld_bss_end</A>
+rounded up to the next multiple of 2.
+If the program does not contain a BSS section, an error is reported.
Title=__ld_bss_size
-See Also=symbols_ld_bss_start: __ld_bss_start, symbols_ld_bss_end: __ld_bss_end
+See Also=symbols_ld_bss_start: __ld_bss_start, symbols_ld_bss_end: __ld_bss_end, symbols_ld_bss_even_end: __ld_bss_even_end
This built-in symbol represents the size of the BSS section in bytes. If the
Title=__ld_bss_start
-See Also=symbols_ld_bss_end: __ld_bss_end, symbols_ld_bss_size: __ld_bss_size
+See Also=symbols_ld_bss_end: __ld_bss_end, symbols_ld_bss_even_end: __ld_bss_even_end, symbols_ld_bss_size: __ld_bss_size
This built-in symbol represents the starting address of the BSS section. If
@@ -739,6 +739,16 @@ BOOLEAN ResolveSpecialSymbolLocation (SECTION *Section, LOCATION *Location, BOOL
else
return TRUE;
}
+ else if (SymNameMatches ("bss_even_end"))
+ {
+ if (Program->BSSSection)
+ NewSymbol = Program->BSSSection->SectionSymbol;
+ NewTargetOffset = (OFFSET) ((unsigned long) (Program->BSSSection->Size + 1) & ~1UL);
+ }
+ else
+ return TRUE;
else if (SymNameMatches ("bss_size"))
{
if (Program->BSSSection)