diff options
-rw-r--r-- | ld/ChangeLog | 8 | ||||
-rw-r--r-- | ld/ld.texinfo | 14 | ||||
-rw-r--r-- | ld/ldgram.y | 12 |
3 files changed, 29 insertions, 5 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index 0aedf6b..85fc35a 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,11 @@ +2005-09-27 H.J. Lu <hongjiu.lu@intel.com> + + * ld.texinfo (ALIGN): Document it as forcing output section + alignment. + + * ldgram.y (ALIGN): Support it for forcing output section + alignment. + 2005-09-20 Alan Modra <amodra@bigpond.net.au> * ldlang.h (lang_output_section_statement_struct): Change type of diff --git a/ld/ld.texinfo b/ld/ld.texinfo index 2099971..a95a329 100644 --- a/ld/ld.texinfo +++ b/ld/ld.texinfo @@ -3065,7 +3065,7 @@ The full description of an output section looks like this: @smallexample @group @var{section} [@var{address}] [(@var{type})] : - [AT(@var{lma})] [SUBALIGN(@var{subsection_align})] + [AT(@var{lma})] [ALIGN(@var{section_align})] [SUBALIGN(@var{subsection_align})] @{ @var{output-section-command} @var{output-section-command} @@ -3641,7 +3641,7 @@ like this: @smallexample @group @var{section} [@var{address}] [(@var{type})] : - [AT(@var{lma})] [SUBALIGN(@var{subsection_align})] + [AT(@var{lma})] [ALIGN(@var{section_align})] [SUBALIGN(@var{subsection_align})] @{ @var{output-section-command} @var{output-section-command} @@ -3656,6 +3656,7 @@ remaining section attributes. @menu * Output Section Type:: Output section type * Output Section LMA:: Output section LMA +* Forced Output Alignment:: Forced Output Alignment * Forced Input Alignment:: Forced Input Alignment * Output Section Region:: Output section region * Output Section Phdr:: Output section phdr @@ -3769,6 +3770,15 @@ for (dst = &_bstart; dst< &_bend; dst++) @end group @end smallexample +@node Forced Output Alignment +@subsubsection Forced Output Alignment +@kindex ALIGN(@var{section_align}) +@cindex forcing output section alignment +@cindex output section alignment +You can force an output section alignment by using ALIGN. The value +specified overrides any alignment given by input sections, whether +larger or smaller. + @node Forced Input Alignment @subsubsection Forced Input Alignment @kindex SUBALIGN(@var{subsection_align}) diff --git a/ld/ldgram.y b/ld/ldgram.y index c8cf6c1..f6e2aa2 100644 --- a/ld/ldgram.y +++ b/ld/ldgram.y @@ -92,7 +92,7 @@ static int error_index; } %type <etree> exp opt_exp_with_type mustbe_exp opt_at phdr_type phdr_val -%type <etree> opt_exp_without_type opt_subalign +%type <etree> opt_exp_without_type opt_subalign opt_align %type <fill> fill_opt fill_exp %type <name_list> exclude_name_list %type <wildcard_list> file_NAME_list @@ -889,6 +889,11 @@ opt_at: | { $$ = 0; } ; +opt_align: + ALIGN_K '(' exp ')' { $$ = $3; } + | { $$ = 0; } + ; + opt_subalign: SUBALIGN '(' exp ')' { $$ = $3; } | { $$ = 0; } @@ -904,20 +909,21 @@ sect_constraint: section: NAME { ldlex_expression(); } opt_exp_with_type opt_at + opt_align opt_subalign { ldlex_popstate (); ldlex_script (); } sect_constraint '{' { lang_enter_output_section_statement($1, $3, sectype, - 0, $5, $4, $7); + $5, $6, $4, $8); } statement_list_opt '}' { ldlex_popstate (); ldlex_expression (); } memspec_opt memspec_at_opt phdr_opt fill_opt { ldlex_popstate (); - lang_leave_output_section_statement ($16, $13, $15, $14); + lang_leave_output_section_statement ($17, $14, $16, $15); } opt_comma {} |