+2021-04-16 Alan Modra <amodra@gmail.com>
+
+ PR 27567
+ * coffcode.h (styp_to_sec_flags): Use an unsigned long styp_flags.
+ (coff_write_object_contents): Pass bfd to COFF_ENCODE_ALIGNMENT,
+ ignore alignment checks when return is false. Formatting.
+
2021-04-15 Nelson Chu <nelson.chu@sifive.com>
PR27584
flagword *flags_ptr)
{
struct internal_scnhdr *internal_s = (struct internal_scnhdr *) hdr;
- long styp_flags = internal_s->s_flags;
+ unsigned long styp_flags = internal_s->s_flags;
flagword sec_flags = 0;
#ifdef STYP_BLOCK
#ifdef COFF_ENCODE_ALIGNMENT
- COFF_ENCODE_ALIGNMENT(section, current->alignment_power);
- if ((unsigned int)COFF_DECODE_ALIGNMENT(section.s_flags)
- != current->alignment_power)
+ if (COFF_ENCODE_ALIGNMENT (abfd, section, current->alignment_power)
+ && (COFF_DECODE_ALIGNMENT (section.s_flags)
+ != current->alignment_power))
{
- bool warn = coff_data (abfd)->link_info
- && !bfd_link_relocatable (coff_data (abfd)->link_info);
+ bool warn = (coff_data (abfd)->link_info
+ && !bfd_link_relocatable (coff_data (abfd)->link_info));
_bfd_error_handler
/* xgettext:c-format */
(_("%pB:%s section %s: alignment 2**%u not representable"),
- abfd, warn ? " warning:" : "", current->name,
- current->alignment_power);
+ abfd, warn ? " warning:" : "", current->name,
+ current->alignment_power);
if (!warn)
{
bfd_set_error (bfd_error_nonrepresentable_section);
+2021-04-16 Alan Modra <amodra@gmail.com>
+
+ PR 27567
+ * coff/internal.h (struct internal_scnhdr): Make s_flags unsigned long.
+ * coff/pe.h (COFF_ENCODE_ALIGNMENT): Don't set align flags for an
+ executable and return false. Do so for a relocatable object and
+ evaluate to true.
+ * coff/ti.h (COFF_ENCODE_ALIGNMENT): Add bfd arg and evaluate to true.
+ (COFF_DECODE_ALIGNMENT): Formatting.
+ * coff/z80.h (COFF_ENCODE_ALIGNMENT): Similarly.
+ (COFF_DECODE_ALIGNMENT): Similarly.
+
2021-04-09 Alan Modra <amodra@gmail.com>
* dis-asm.h (struct disassemble_info): Add dynrelbuf and dynrelcount.
bfd_vma s_lnnoptr; /* file ptr to line numbers */
unsigned long s_nreloc; /* number of relocation entries */
unsigned long s_nlnno; /* number of line number entries*/
- long s_flags; /* flags */
+ unsigned long s_flags; /* flags */
unsigned char s_page; /* TI COFF load page */
};
#define IMAGE_SCN_ALIGN_8192BYTES IMAGE_SCN_ALIGN_POWER_CONST (13)
/* Encode alignment power into IMAGE_SCN_ALIGN bits of s_flags. */
-#define COFF_ENCODE_ALIGNMENT(SECTION, ALIGNMENT_POWER) \
- ((SECTION).s_flags |= IMAGE_SCN_ALIGN_POWER_CONST ((ALIGNMENT_POWER) <= 13 \
- ? (ALIGNMENT_POWER) : 13))
+#define COFF_ENCODE_ALIGNMENT(ABFD, SECTION, ALIGNMENT_POWER) \
+ (((ABFD)->flags & (EXEC_P | DYNAMIC)) != 0 ? false \
+ : ((SECTION).s_flags \
+ |= IMAGE_SCN_ALIGN_POWER_CONST ((ALIGNMENT_POWER) < 13 \
+ ? (ALIGNMENT_POWER) : 13), \
+ true))
#define COFF_DECODE_ALIGNMENT(X) \
IMAGE_SCN_ALIGN_POWER_NUM ((X) & IMAGE_SCN_ALIGN_POWER_BIT_MASK)
#define COFF_ALIGN_IN_SECTION_HEADER 1
#define COFF_ALIGN_IN_S_FLAGS 1
/* requires a power-of-two argument */
-#define COFF_ENCODE_ALIGNMENT(S,X) ((S).s_flags |= (((unsigned)(X)&0xF)<<8))
+#define COFF_ENCODE_ALIGNMENT(B,S,X) \
+ ((S).s_flags |= (((unsigned) (X) & 0xF) << 8), true)
/* result is a power of two */
-#define COFF_DECODE_ALIGNMENT(X) (((X)>>8)&0xF)
+#define COFF_DECODE_ALIGNMENT(X) (((X) >> 8) & 0xF)
#define COFF0_P(ABFD) (bfd_coff_filhsz(ABFD) == FILHSZ_V0)
#define COFF2_P(ABFD) (bfd_coff_scnhsz(ABFD) != SCNHSZ_V01)
#define COFF_ALIGN_IN_S_FLAGS 1
#define F_ALGNMASK 0x0F00
/* requires a power-of-two argument */
-#define COFF_ENCODE_ALIGNMENT(S,X) ((S).s_flags |= (((unsigned)(X)&0xF)<<8))
+#define COFF_ENCODE_ALIGNMENT(B,S,X) \
+ ((S).s_flags |= (((unsigned) (X) & 0xF) << 8), true)
/* result is a power of two */
-#define COFF_DECODE_ALIGNMENT(X) (((X)>>8)&0xF)
+#define COFF_DECODE_ALIGNMENT(X) (((X) >> 8) & 0xF)
#define Z80MAGIC 0x805A