From: Alan Modra Date: Tue, 8 Jul 2025 23:43:14 +0000 (+0930) Subject: gas standardise md_section_align X-Git-Tag: binutils-2_45~113 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a093ef7af443b36d57f4aa0cb76eca677208d7bf;p=thirdparty%2Fbinutils-gdb.git gas standardise md_section_align The point here is that when valueT is 64 bits and int is 32 bits, 1 << align doesn't work for shifts larger than the size of int. (Not that anyone is likely to use such large alignments in real code.) --- diff --git a/gas/config/tc-avr.c b/gas/config/tc-avr.c index 6b78966d80a..671df820ede 100644 --- a/gas/config/tc-avr.c +++ b/gas/config/tc-avr.c @@ -1440,7 +1440,7 @@ valueT md_section_align (asection *seg, valueT addr) { int align = bfd_section_alignment (seg); - return ((addr + (1 << align) - 1) & (-1UL << align)); + return (addr + ((valueT) 1 << align) - 1) & -((valueT) 1 << align); } /* If you define this macro, it should return the offset between the diff --git a/gas/config/tc-epiphany.c b/gas/config/tc-epiphany.c index 55b74277cd1..be23d15c7d2 100644 --- a/gas/config/tc-epiphany.c +++ b/gas/config/tc-epiphany.c @@ -154,7 +154,7 @@ md_section_align (segT segment, valueT size) { int align = bfd_section_alignment (segment); - return ((size + (1 << align) - 1) & -(1 << align)); + return (size + ((valueT) 1 << align) - 1) & -((valueT) 1 << align); } diff --git a/gas/config/tc-fr30.c b/gas/config/tc-fr30.c index 8246113582c..e120ca595f6 100644 --- a/gas/config/tc-fr30.c +++ b/gas/config/tc-fr30.c @@ -156,7 +156,7 @@ md_section_align (segT segment, valueT size) { int align = bfd_section_alignment (segment); - return ((size + (1 << align) - 1) & -(1 << align)); + return (size + ((valueT) 1 << align) - 1) & -((valueT) 1 << align); } symbolS * diff --git a/gas/config/tc-frv.c b/gas/config/tc-frv.c index 86d8277041e..900fb4aa8bb 100644 --- a/gas/config/tc-frv.c +++ b/gas/config/tc-frv.c @@ -1226,7 +1226,7 @@ valueT md_section_align (segT segment, valueT size) { int align = bfd_section_alignment (segment); - return ((size + (1 << align) - 1) & -(1 << align)); + return (size + ((valueT) 1 << align) - 1) & -((valueT) 1 << align); } symbolS * diff --git a/gas/config/tc-h8300.c b/gas/config/tc-h8300.c index 12456b2d0c3..d7bb3295465 100644 --- a/gas/config/tc-h8300.c +++ b/gas/config/tc-h8300.c @@ -2223,7 +2223,7 @@ valueT md_section_align (segT segment, valueT size) { int align = bfd_section_alignment (segment); - return ((size + (1 << align) - 1) & (-1U << align)); + return (size + ((valueT) 1 << align) - 1) & -((valueT) 1 << align); } void diff --git a/gas/config/tc-hppa.c b/gas/config/tc-hppa.c index f1175e0d4e3..a22d094dd19 100644 --- a/gas/config/tc-hppa.c +++ b/gas/config/tc-hppa.c @@ -1589,7 +1589,7 @@ valueT md_section_align (asection *segment, valueT size) { int align = bfd_section_alignment (segment); - int align2 = (1 << align) - 1; + valueT align2 = ((valueT) 1 << align) - 1; return (size + align2) & ~align2; } diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index 9292cfa2f9b..8fb8a7ee372 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -18126,7 +18126,7 @@ md_section_align (segT segment, valueT size) work. */ int align = bfd_section_alignment (segment); - return ((size + (1 << align) - 1) & (-((valueT) 1 << align))); + return (size + ((valueT) 1 << align) - 1) & -((valueT) 1 << align); } #endif diff --git a/gas/config/tc-iq2000.c b/gas/config/tc-iq2000.c index 45976e7bebb..1a31e8e8a85 100644 --- a/gas/config/tc-iq2000.c +++ b/gas/config/tc-iq2000.c @@ -425,7 +425,7 @@ valueT md_section_align (segT segment, valueT size) { int align = bfd_section_alignment (segment); - return ((size + (1 << align) - 1) & -(1 << align)); + return (size + ((valueT) 1 << align) - 1) & -((valueT) 1 << align); } symbolS * diff --git a/gas/config/tc-lm32.c b/gas/config/tc-lm32.c index 241b5bee7a3..2a4bbd35b10 100644 --- a/gas/config/tc-lm32.c +++ b/gas/config/tc-lm32.c @@ -276,7 +276,7 @@ valueT md_section_align (asection *seg, valueT addr) { int align = bfd_section_alignment (seg); - return ((addr + (1 << align) - 1) & -(1 << align)); + return (addr + ((valueT) 1 << align) - 1) & -((valueT) 1 << align); } /* This function assembles the instructions. It emits the frags/bytes to the diff --git a/gas/config/tc-m32c.c b/gas/config/tc-m32c.c index a65daae1e5b..ff91d479363 100644 --- a/gas/config/tc-m32c.c +++ b/gas/config/tc-m32c.c @@ -380,7 +380,7 @@ valueT md_section_align (segT segment, valueT size) { int align = bfd_section_alignment (segment); - return ((size + (1 << align) - 1) & -(1 << align)); + return (size + ((valueT) 1 << align) - 1) & -((valueT) 1 << align); } symbolS * diff --git a/gas/config/tc-m32r.c b/gas/config/tc-m32r.c index 410b6a81d65..2368c9a8b29 100644 --- a/gas/config/tc-m32r.c +++ b/gas/config/tc-m32r.c @@ -1451,7 +1451,7 @@ md_section_align (segT segment, valueT size) { int align = bfd_section_alignment (segment); - return ((size + (1 << align) - 1) & -(1 << align)); + return (size + ((valueT) 1 << align) - 1) & -((valueT) 1 << align); } symbolS * diff --git a/gas/config/tc-m68hc11.c b/gas/config/tc-m68hc11.c index 6dd8120cc35..a9ac9c7ef5c 100644 --- a/gas/config/tc-m68hc11.c +++ b/gas/config/tc-m68hc11.c @@ -583,7 +583,7 @@ valueT md_section_align (asection *seg, valueT addr) { int align = bfd_section_alignment (seg); - return ((addr + (1 << align) - 1) & -(1 << align)); + return (addr + ((valueT) 1 << align) - 1) & -((valueT) 1 << align); } static int diff --git a/gas/config/tc-mep.c b/gas/config/tc-mep.c index e1327676272..14691861bcf 100644 --- a/gas/config/tc-mep.c +++ b/gas/config/tc-mep.c @@ -1381,7 +1381,7 @@ valueT md_section_align (segT segment, valueT size) { int align = bfd_section_alignment (segment); - return ((size + (1 << align) - 1) & -(1 << align)); + return (size + ((valueT) 1 << align) - 1) & -((valueT) 1 << align); } diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c index a1b56d73fdc..8b648ae89ce 100644 --- a/gas/config/tc-mips.c +++ b/gas/config/tc-mips.c @@ -17630,7 +17630,7 @@ md_section_align (asection *seg, valueT addr) if (align > 4) align = 4; - return ((addr + (1 << align) - 1) & -(1 << align)); + return (addr + ((valueT) 1 << align) - 1) & -((valueT) 1 << align); } /* Utility routine, called from above as well. If called while the diff --git a/gas/config/tc-mn10300.c b/gas/config/tc-mn10300.c index 4e0072d0826..537c2cb4e7c 100644 --- a/gas/config/tc-mn10300.c +++ b/gas/config/tc-mn10300.c @@ -902,7 +902,7 @@ md_section_align (asection *seg, valueT addr) { int align = bfd_section_alignment (seg); - return ((addr + (1 << align) - 1) & -(1 << align)); + return (addr + ((valueT) 1 << align) - 1) & -((valueT) 1 << align); } void diff --git a/gas/config/tc-msp430.c b/gas/config/tc-msp430.c index 4b37c310c19..0127a2a1416 100644 --- a/gas/config/tc-msp430.c +++ b/gas/config/tc-msp430.c @@ -4384,7 +4384,7 @@ md_section_align (asection * seg, valueT addr) { int align = bfd_section_alignment (seg); - return ((addr + (1 << align) - 1) & -(1 << align)); + return (addr + ((valueT) 1 << align) - 1) & -((valueT) 1 << align); } /* If you define this macro, it should return the offset between the diff --git a/gas/config/tc-mt.c b/gas/config/tc-mt.c index e5e9d5ca1f3..a795bdc81c7 100644 --- a/gas/config/tc-mt.c +++ b/gas/config/tc-mt.c @@ -335,7 +335,7 @@ md_section_align (segT segment, valueT size) { int align = bfd_section_alignment (segment); - return ((size + (1 << align) - 1) & -(1 << align)); + return (size + ((valueT) 1 << align) - 1) & -((valueT) 1 << align); } symbolS * diff --git a/gas/config/tc-nds32.c b/gas/config/tc-nds32.c index 53fb2c1af48..f5c021ddbbc 100644 --- a/gas/config/tc-nds32.c +++ b/gas/config/tc-nds32.c @@ -6608,7 +6608,7 @@ md_section_align (segT segment, valueT size) { int align = bfd_section_alignment (segment); - return ((size + (1 << align) - 1) & ((valueT) -1 << align)); + return (size + ((valueT) 1 << align) - 1) & -((valueT) 1 << align); } /* GAS will call this function when a symbol table lookup fails, before it diff --git a/gas/config/tc-or1k.c b/gas/config/tc-or1k.c index 87a2ac0e3cd..33975fea6dc 100644 --- a/gas/config/tc-or1k.c +++ b/gas/config/tc-or1k.c @@ -164,7 +164,7 @@ valueT md_section_align (segT segment, valueT size) { int align = bfd_section_alignment (segment); - return ((size + (1 << align) - 1) & -(1 << align)); + return (size + ((valueT) 1 << align) - 1) & -((valueT) 1 << align); } symbolS * diff --git a/gas/config/tc-ppc.c b/gas/config/tc-ppc.c index 08c3b7b8ef6..9b3aaabfa0a 100644 --- a/gas/config/tc-ppc.c +++ b/gas/config/tc-ppc.c @@ -6493,7 +6493,7 @@ md_section_align (asection *seg ATTRIBUTE_UNUSED, valueT addr) #else int align = bfd_section_alignment (seg); - return ((addr + (1 << align) - 1) & -(1 << align)); + return (addr + ((valueT) 1 << align) - 1) & -((valueT) 1 << align); #endif } diff --git a/gas/config/tc-rl78.c b/gas/config/tc-rl78.c index a20e8b17247..36ccacd0570 100644 --- a/gas/config/tc-rl78.c +++ b/gas/config/tc-rl78.c @@ -1508,5 +1508,5 @@ valueT md_section_align (segT segment, valueT size) { int align = bfd_section_alignment (segment); - return ((size + (1 << align) - 1) & -(1 << align)); + return (size + ((valueT) 1 << align) - 1) & -((valueT) 1 << align); } diff --git a/gas/config/tc-s12z.c b/gas/config/tc-s12z.c index 0299f97f223..438418a0c1d 100644 --- a/gas/config/tc-s12z.c +++ b/gas/config/tc-s12z.c @@ -186,7 +186,7 @@ valueT md_section_align (asection *seg, valueT addr) { int align = bfd_section_alignment (seg); - return ((addr + (1 << align) - 1) & -(1 << align)); + return (addr + ((valueT) 1 << align) - 1) & -((valueT) 1 << align); } void diff --git a/gas/config/tc-visium.c b/gas/config/tc-visium.c index c1a6d75f4fe..1e3e3a847be 100644 --- a/gas/config/tc-visium.c +++ b/gas/config/tc-visium.c @@ -201,7 +201,7 @@ md_section_align (asection *seg, valueT addr) { int align = bfd_section_alignment (seg); - return ((addr + (1 << align) - 1) & -(1 << align)); + return (addr + ((valueT) 1 << align) - 1) & -((valueT) 1 << align); } void diff --git a/gas/config/tc-wasm32.c b/gas/config/tc-wasm32.c index 066255f8994..23d2b434823 100644 --- a/gas/config/tc-wasm32.c +++ b/gas/config/tc-wasm32.c @@ -178,7 +178,7 @@ valueT md_section_align (asection * seg, valueT addr) { int align = bfd_section_alignment (seg); - return ((addr + (1 << align) - 1) & -(1 << align)); + return (addr + ((valueT) 1 << align) - 1) & -((valueT) 1 << align); } /* Apply a fixup, return TRUE if done (and no relocation is diff --git a/gas/config/tc-xgate.c b/gas/config/tc-xgate.c index 8d1f4740523..0823ecd93a4 100644 --- a/gas/config/tc-xgate.c +++ b/gas/config/tc-xgate.c @@ -466,7 +466,7 @@ valueT md_section_align (asection * seg, valueT addr) { int align = bfd_section_alignment (seg); - return ((addr + (1 << align) - 1) & -(1 << align)); + return (addr + ((valueT) 1 << align) - 1) & -((valueT) 1 << align); } void