Coff archives: handle newline-separated long names #117
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Static archives (
.a
) generated by GNU toolchains use newline (\n
) as separator in the "long names" header, instead of\000
(used in MS' toolchain). This header is used whenever object names take more than 16 bytes. The absence of\000
's triggered a quadratic behaviour when reading object names.To fix this, we postprocess the "long name" string table to replace
\n
(and/or the optional trailing/
) by\000
. Similar logic is present inbinutils
:https://github.com/bminor/binutils-gdb/blob/672008e6dcacddd76a5551aec9a30cd31c102d72/bfd/archive.c#L1323-L1324
(
ARFMAG[1]
is\n
above.)Fixes #101