objcopy: constrain --section-alignment to PE binaries again

PR binutils/32732

The --set-section-alignment option is what ought to be used on object
files; --section-alignment should be affecting PE binaries only, and
only the value stored in the header. Sections don't individually have
alignment recorded there; see 6f8f6017a0 ("PR27567, Linking PE files
adds alignment section flags to executables").

Undo the core part of 121a3f4b4f ("Update objcopy's
--section-alignment option so that it sets the alignment flag on..."),
which includes removing the testcase again, while leaving all secondary
changes in place. (Note that the testcase did fail anyway for
i?86-interix, with objdump saying "option -P/--private not supported by
this file".)
This commit is contained in:
Jan Beulich
2025-04-04 10:24:56 +02:00
parent cc0693d394
commit 43ea7d00a7
4 changed files with 3 additions and 54 deletions

View File

@@ -4114,29 +4114,6 @@ power_of_two (bfd_vma val)
return result;
}
static unsigned int
image_scn_align (unsigned int alignment)
{
switch (alignment)
{
case 8192: return IMAGE_SCN_ALIGN_8192BYTES;
case 4096: return IMAGE_SCN_ALIGN_4096BYTES;
case 2048: return IMAGE_SCN_ALIGN_2048BYTES;
case 1024: return IMAGE_SCN_ALIGN_1024BYTES;
case 512: return IMAGE_SCN_ALIGN_512BYTES;
case 256: return IMAGE_SCN_ALIGN_256BYTES;
case 128: return IMAGE_SCN_ALIGN_128BYTES;
case 64: return IMAGE_SCN_ALIGN_64BYTES;
case 32: return IMAGE_SCN_ALIGN_32BYTES;
case 16: return IMAGE_SCN_ALIGN_16BYTES;
case 8: return IMAGE_SCN_ALIGN_8BYTES;
case 4: return IMAGE_SCN_ALIGN_4BYTES;
case 2: return IMAGE_SCN_ALIGN_2BYTES;
case 1: return IMAGE_SCN_ALIGN_1BYTES;
default: return 0;
}
}
/* Create a section in OBFD with the same
name and attributes as ISECTION in IBFD. */
@@ -4302,24 +4279,9 @@ setup_section (bfd *ibfd, sec_ptr isection, bfd *obfd)
if (p != NULL)
alignment = p->alignment;
else if (pe_section_alignment != (bfd_vma) -1
&& bfd_get_flavour (ibfd) == bfd_target_coff_flavour
&& bfd_get_flavour (obfd) == bfd_target_coff_flavour)
{
alignment = power_of_two (pe_section_alignment);
if (coff_section_data (ibfd, isection))
{
struct pei_section_tdata * pei_data = pei_section_data (ibfd, isection);
if (pei_data != NULL)
{
/* Set the alignment flag of the input section, which will
be copied to the output section later on. */
pei_data->pe_flags &= ~IMAGE_SCN_ALIGN_POWER_BIT_MASK;
pei_data->pe_flags |= image_scn_align (pe_section_alignment);
}
}
}
&& bfd_get_flavour (obfd) == bfd_target_coff_flavour
&& bfd_pei_p (obfd))
alignment = power_of_two (pe_section_alignment);
else
alignment = bfd_section_alignment (isection);