| From a35d5e823fdfe8a6e7e05ca8e3fb8bb5697335b1 Mon Sep 17 00:00:00 2001 |
| From: Max Filippov <jcmvbkbc@gmail.com> |
| Date: Tue, 15 Apr 2014 19:12:46 +0400 |
| Subject: [PATCH] Fix alignment for the first section frag on xtensa |
| |
| Linking object files produced by partial linking with link-time |
| relaxation enabled sometimes fails with the following error message: |
| |
| dangerous relocation: call8: misaligned call target: (.text.unlikely+0x63) |
| |
| This happens because no basic block with an XTENSA_PROP_ALIGN flag in the |
| property table is generated for the first basic block, even if the |
| .align directive is present. |
| It was believed that the first frag alignment could be derived from the |
| section alignment, but this was not implemented for the partial linking |
| case: after partial linking first frag of a section may become not |
| first, but no additional alignment frag is inserted before it. |
| Basic block for such frag may be merged with previous basic block into |
| extended basic block during relaxation pass losing its alignment |
| restrictions. |
| |
| Fix this by always recording alignment for the first section frag. |
| |
| 2014-04-22 Max Filippov <jcmvbkbc@gmail.com> |
| |
| gas/ |
| * config/tc-xtensa.c (xtensa_handle_align): record alignment for the |
| first section frag. |
| |
| --- |
| Backported from: a35d5e823fdfe8a6e7e05ca8e3fb8bb5697335b1 |
| Changes to Changelog files and tests are dropped. |
| |
| gas/config/tc-xtensa.c | 1 - |
| 1 file changed, 1 deletion(-) |
| |
| diff --git a/gas/config/tc-xtensa.c b/gas/config/tc-xtensa.c |
| index ea23c96..58ace38 100644 |
| --- a/gas/config/tc-xtensa.c |
| +++ b/gas/config/tc-xtensa.c |
| @@ -5609,7 +5609,6 @@ xtensa_handle_align (fragS *fragP) |
| && ! fragP->tc_frag_data.is_literal |
| && (fragP->fr_type == rs_align |
| || fragP->fr_type == rs_align_code) |
| - && fragP->fr_address + fragP->fr_fix > 0 |
| && fragP->fr_offset > 0 |
| && now_seg != bss_section) |
| { |
| -- |
| 1.8.1.4 |
| |