mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-26 05:47:26 +08:00
gas: handle csect in bss section for XCOFF
Latest gcc versions are now generating csects instead of .lcomm for bss symbols. Some adjustements are needed in order to handle them. * config/tc-ppc.c (md_begin): Create bss section with dummy symbol. (ppc_frob_symbol): Output XTY_CM for bss csects. (ppc_fix_adjustable): Adjust condition to avoid bss csects.
This commit is contained in:

committed by
Alan Modra

parent
18263be756
commit
bcf8470303
@ -1,3 +1,10 @@
|
|||||||
|
2021-06-17 Clément Chigot <clement.chigot@atos.net>
|
||||||
|
|
||||||
|
* config/tc-ppc.c (md_begin): Create bss section with dummy
|
||||||
|
symbol.
|
||||||
|
(ppc_frob_symbol): Output XTY_CM for bss csects.
|
||||||
|
(ppc_fix_adjustable): Adjust condition to avoid bss csects.
|
||||||
|
|
||||||
2021-06-17 Clément Chigot <clement.chigot@atos.net>
|
2021-06-17 Clément Chigot <clement.chigot@atos.net>
|
||||||
|
|
||||||
* config/tc-ppc.c (md_apply_fix): Adjust addend to nullify
|
* config/tc-ppc.c (md_apply_fix): Adjust addend to nullify
|
||||||
|
@ -1883,7 +1883,7 @@ md_begin (void)
|
|||||||
data csects. These symbols will not be output. */
|
data csects. These symbols will not be output. */
|
||||||
ppc_init_xcoff_section (&ppc_xcoff_text_section, text_section, true);
|
ppc_init_xcoff_section (&ppc_xcoff_text_section, text_section, true);
|
||||||
ppc_init_xcoff_section (&ppc_xcoff_data_section, data_section, true);
|
ppc_init_xcoff_section (&ppc_xcoff_data_section, data_section, true);
|
||||||
ppc_init_xcoff_section (&ppc_xcoff_bss_section, bss_section, false);
|
ppc_init_xcoff_section (&ppc_xcoff_bss_section, bss_section, true);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5986,6 +5986,9 @@ ppc_frob_symbol (symbolS *sym)
|
|||||||
a->x_csect.x_scnlen.l = (S_GET_VALUE (symbol_get_tc (sym)->next)
|
a->x_csect.x_scnlen.l = (S_GET_VALUE (symbol_get_tc (sym)->next)
|
||||||
- S_GET_VALUE (sym));
|
- S_GET_VALUE (sym));
|
||||||
}
|
}
|
||||||
|
if (symbol_get_tc (sym)->symbol_class == XMC_BS)
|
||||||
|
a->x_csect.x_smtyp = (symbol_get_tc (sym)->align << 3) | XTY_CM;
|
||||||
|
else
|
||||||
a->x_csect.x_smtyp = (symbol_get_tc (sym)->align << 3) | XTY_SD;
|
a->x_csect.x_smtyp = (symbol_get_tc (sym)->align << 3) | XTY_SD;
|
||||||
}
|
}
|
||||||
else if (S_GET_SEGMENT (sym) == bss_section
|
else if (S_GET_SEGMENT (sym) == bss_section
|
||||||
@ -6415,7 +6418,8 @@ ppc_fix_adjustable (fixS *fix)
|
|||||||
/* Adjust a reloc against a .lcomm symbol to be against the base
|
/* Adjust a reloc against a .lcomm symbol to be against the base
|
||||||
.lcomm. */
|
.lcomm. */
|
||||||
if (symseg == bss_section
|
if (symseg == bss_section
|
||||||
&& ! S_IS_EXTERNAL (fix->fx_addsy))
|
&& ! S_IS_EXTERNAL (fix->fx_addsy)
|
||||||
|
&& symbol_get_tc (fix->fx_addsy)->subseg == 0)
|
||||||
{
|
{
|
||||||
symbolS *sy = symbol_get_frag (fix->fx_addsy)->fr_symbol;
|
symbolS *sy = symbol_get_frag (fix->fx_addsy)->fr_symbol;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user