forked from Imagelibrary/binutils-gdb
bfd
2011-05-18 Tristan Gingold <gingold@adacore.com> * libxcoff.h (struct xcoff_dwsect_name): New type. (XCOFF_DWSECT_NBR_NAMES): New macro. (xcoff_dwsect_names): Declare. * coffcode.h (sec_to_styp_flags): Handle xcoff dwarf sections. (styp_to_sec_flags): Ditto. (coff_new_section_hook): Ditto. (coff_slurp_symbol_table): Handle C_DWARF and C_INFO. * coff-rs6000.c (xcoff_dwsect_name): New variable. gas 2011-05-18 Tristan Gingold <gingold@adacore.com> * config/tc-ppc.h (ppc_tc_sy): Reorder fields. Put size into an union with dw. (OBJ_COPY_SYMBOL_ATTRIBUTES): Adjust. (ppc_xcoff_end): Declare. (md_end): Define. * config/tc-ppc.c: Add includes for xcoff. (ppc_dwsect): New function. (md_pseudo_table): Add dwsect. (struct dw_subsection): New. (dw_sections): New. (ppc_change_debug_section): New function. (ppc_xcoff_end): Ditto. (ppc_function): Adjust for ppc_tc_sy. (ppc_symbol_new_hook): Ditto. (ppc_frob_symbol): Ditto. (ppc_frob_section): Do not set vma for debug sections. (ppc_fix_adjustable): Return true for debug sections. * config/obj-coff.c: Add includes for xcoff. (coff_frob_section): Handle dwarf section. gas/testsuite 2011-05-18 Tristan Gingold <gingold@adacore.com> * gas/ppc/xcoff-dwsect-1-32.d: New test. * gas/ppc/xcoff-dwsect-1-64.d: Ditto. * gas/ppc/xcoff-dwsect-1.s: New file. * gas/ppc/aix.exp (do_align_test): Add tests.
This commit is contained in:
@@ -581,6 +581,17 @@ sec_to_styp_flags (const char *sec_name, flagword sec_flags)
|
||||
{
|
||||
styp_flags = STYP_TYPCHK;
|
||||
}
|
||||
else if (sec_flags & SEC_DEBUGGING)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < XCOFF_DWSECT_NBR_NAMES; i++)
|
||||
if (!strcmp (sec_name, xcoff_dwsect_names[i].name))
|
||||
{
|
||||
styp_flags = STYP_DWARF | xcoff_dwsect_names[i].flag;
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
/* Try and figure out what it should be */
|
||||
else if (sec_flags & SEC_CODE)
|
||||
@@ -776,6 +787,10 @@ styp_to_sec_flags (bfd *abfd ATTRIBUTE_UNUSED,
|
||||
}
|
||||
else if (styp_flags & STYP_PAD)
|
||||
sec_flags = 0;
|
||||
#ifdef RS6000COFF_C
|
||||
else if (styp_flags & STYP_DWARF)
|
||||
sec_flags |= SEC_DEBUGGING;
|
||||
#endif
|
||||
else if (strcmp (name, _TEXT) == 0)
|
||||
{
|
||||
if (sec_flags & SEC_NEVER_LOAD)
|
||||
@@ -1717,6 +1732,7 @@ coff_new_section_hook (bfd * abfd, asection * section)
|
||||
{
|
||||
combined_entry_type *native;
|
||||
bfd_size_type amt;
|
||||
unsigned char sclass = C_STAT;
|
||||
|
||||
section->alignment_power = COFF_DEFAULT_SECTION_ALIGNMENT_POWER;
|
||||
|
||||
@@ -1724,9 +1740,22 @@ coff_new_section_hook (bfd * abfd, asection * section)
|
||||
if (bfd_xcoff_text_align_power (abfd) != 0
|
||||
&& strcmp (bfd_get_section_name (abfd, section), ".text") == 0)
|
||||
section->alignment_power = bfd_xcoff_text_align_power (abfd);
|
||||
if (bfd_xcoff_data_align_power (abfd) != 0
|
||||
else if (bfd_xcoff_data_align_power (abfd) != 0
|
||||
&& strcmp (bfd_get_section_name (abfd, section), ".data") == 0)
|
||||
section->alignment_power = bfd_xcoff_data_align_power (abfd);
|
||||
else
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < XCOFF_DWSECT_NBR_NAMES; i++)
|
||||
if (strcmp (bfd_get_section_name (abfd, section),
|
||||
xcoff_dwsect_names[i].name) == 0)
|
||||
{
|
||||
section->alignment_power = 0;
|
||||
sclass = C_DWARF;
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Set up the section symbol. */
|
||||
@@ -1750,7 +1779,7 @@ coff_new_section_hook (bfd * abfd, asection * section)
|
||||
for n_numaux is already correct. */
|
||||
|
||||
native->u.syment.n_type = T_NULL;
|
||||
native->u.syment.n_sclass = C_STAT;
|
||||
native->u.syment.n_sclass = sclass;
|
||||
|
||||
coffsymbol (section->symbol)->native = native;
|
||||
|
||||
@@ -4754,6 +4783,10 @@ coff_slurp_symbol_table (bfd * abfd)
|
||||
case C_THUMBSTAT: /* Thumb static. */
|
||||
case C_THUMBLABEL: /* Thumb label. */
|
||||
case C_THUMBSTATFUNC:/* Thumb static function. */
|
||||
#endif
|
||||
#ifdef RS6000COFF_C
|
||||
case C_DWARF: /* A label in a dwarf section. */
|
||||
case C_INFO: /* A label in a comment section. */
|
||||
#endif
|
||||
case C_LABEL: /* Label. */
|
||||
if (src->u.syment.n_scnum == N_DEBUG)
|
||||
|
||||
Reference in New Issue
Block a user