aboutsummaryrefslogtreecommitdiff
path: root/gas/write.c
diff options
context:
space:
mode:
authorDan Gisselquist <dgisselq@verizon.net>2016-02-18 09:47:31 +0000
committerNick Clifton <nickc@redhat.com>2016-02-18 09:49:04 +0000
commit9136aa49abcb3f23171e01ebd16ee03cc1032943 (patch)
treee1267f52546b36fca957fdba4bae52e55a5d15f2 /gas/write.c
parent0748bf3e5804e9a93c788ffba95473168a4397f6 (diff)
downloadgdb-9136aa49abcb3f23171e01ebd16ee03cc1032943.zip
gdb-9136aa49abcb3f23171e01ebd16ee03cc1032943.tar.gz
gdb-9136aa49abcb3f23171e01ebd16ee03cc1032943.tar.bz2
Avoid setting or recording negative alignments when the target stores multiple octets in a single byte.
gas * read.c (finish_bundle): Avoid recording a negative alignment. (do_align): Use unsigned values for n, len and max. Only create a frag if the alignment requirement is greater than the minimum byte alignment. Avoid recording a negative alignment. (s_align): Use unsigned values where appropriate. (bss_alloc): Use an unsigned value for the alignment. (sizeof_sleb128): Add a comment noting that we encode one octet per byte, regardless of the value of OCTETS_PER_BYTE_POWER. (emit_leb129_expr): Abort if the emitted encoding was longer than expected. * read.h (output_leb128): Update prototype. (sizeof_leb128): Update prototype. (bss_alloc): Update prototype. * write.c (record_alignment): Use an unsigned value for the alignment. Do not record alignments less than the minimum alignment for a byte. * write.h (record_alignment): Update prototype.
Diffstat (limited to 'gas/write.c')
-rw-r--r--gas/write.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/gas/write.c b/gas/write.c
index f9d5da9..46d8d96 100644
--- a/gas/write.c
+++ b/gas/write.c
@@ -355,12 +355,15 @@ record_alignment (/* Segment to which alignment pertains. */
segT seg,
/* Alignment, as a power of 2 (e.g., 1 => 2-byte
boundary, 2 => 4-byte boundary, etc.) */
- int align)
+ unsigned int align)
{
if (seg == absolute_section)
return;
- if ((unsigned int) align > bfd_get_section_alignment (stdoutput, seg))
+ if (align <= OCTETS_PER_BYTE_POWER)
+ return;
+
+ if (align > bfd_get_section_alignment (stdoutput, seg))
bfd_set_section_alignment (stdoutput, seg, align);
}