[PATCH v4] PE/COFF: raise normal PE section limit safely

Jan Beulich jbeulich@suse.com
Fri Jul 17 06:40:13 GMT 2026


On 16.07.2026 02:54, Alan Modra wrote:
> On Tue, Jul 14, 2026 at 10:23:49PM +0200, Oleg Tolmatcev wrote:
>> PE/COFF stores symbol section numbers in a 16-bit field.  Binutils used
>> signed 16-bit handling there, which limited normal PE objects to 32767
>> sections even though MSVC and Clang already accept a larger unsigned
>> range.
>>
>> Raise the normal PE section limit to 65279, while keeping the PE/COFF
>> special section-number values for undefined, absolute and debug symbols
>> working correctly.  Do this by decoding and encoding normal PE symbol
>> section numbers as unsigned values in the ordinary range, but preserving
>> the reserved PE constants explicitly.
>>
>> Also add a gas test that exercises a normal PE object above the old
>> 32767-section limit and checks that objdump reports the high section
>> number correctly.
>>
>> bfd/ChangeLog:
>>
>> 	* coffcode.h (COFF_DEFAULT_MAX_NSCNS): Define.
>> 	(bfd_coff_std_swap_table): Use it for the default maximum section
>> 	count.
>> 	(ticoff0_swap_table): Likewise.
>> 	(ticoff1_swap_table): Likewise.
>> 	* peXXigen.c (pe_decode_sym_section_number): New function.
>> 	(pe_encode_sym_section_number): New function.
>> 	(_bfd_XXi_swap_sym_in): Use pe_decode_sym_section_number.
>> 	(_bfd_XXi_swap_sym_out): Use pe_encode_sym_section_number.
>>
>> include/ChangeLog:
>>
>> 	* coff/pe.h (IMAGE_SYM_UNDEFINED): Define.
>> 	(IMAGE_SYM_ABSOLUTE): Define.
>> 	(IMAGE_SYM_DEBUG): Define.
>> 	(IMAGE_SYM_SECTION_MAX): Define.
>>
>> gas/ChangeLog:
>>
>> 	* testsuite/gas/pe/pe.exp: Run large-obj-normal.
>> 	* testsuite/gas/pe/large-obj-normal.s: New test.
>> 	* testsuite/gas/pe/large-obj-normal.d: New test.
> 
> This looks OK to me.

Same here. I'll get this committed soon-ish.

Jan


More information about the Binutils mailing list