[PATCH] Fix symbols truncation for i386pep target

Jan Beulich jbeulich@suse.com
Fri Aug 22 10:06:15 GMT 2025


On 22.08.2025 10:38, Frediano Ziglio wrote:
> In case the symbols are between 15 and 18 characters it gets
> truncated.
> This is due to a mismatch in type declaration allocating only
> 14 bytes for x_fname field.
> This can be easy verified with these commands
> 
>   $ echo 'int main(void) {}' > 15_characters.c
>   $ gcc -c 15_characters.c
>   $ ld -mi386pep 15_characters.o
>   ld: a.exe:.comment: section below image base
>   $ objdump -t a.exe | grep 103
>   [  0](sec -2)(fl 0x00)(ty    0)(scl 103) (nx 1) 0x0000000000000002
> 15_characters.
> 
> Signed-off-by: Frediano Ziglio <frediano.ziglio@cloud.com>

I noticed a problem here the other day, too, but ...

> --- a/include/coff/x86_64.h
> +++ b/include/coff/x86_64.h
> @@ -23,6 +23,11 @@
>  #ifndef COFF_X86_64_H
>  #define COFF_X86_64_H
> 
> +#ifdef E_FILNMLEN
> +#error E_FILNMLEN already defined!
> +#endif
> +#define E_FILNMLEN      18      /* # characters in a file name.  */
> +
>  #include "coff/x86.h"
> 
>  #define AMD64MAGIC 0x8664

... this can't be quite right. Aiui the size is 18 for all PE/COFF targets,
hence why include/coff/pe.h has the value set like this. Question therefore
is why that #define doesn't take effect.

Furthermore E_FILNMLEN and FILNMLEN need to remain in sync; see e.g.
coffswap.h.

Jan


More information about the Binutils mailing list