diff options
author | Alan Modra <amodra@gmail.com> | 2019-10-21 12:54:06 +1030 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2019-10-21 16:13:39 +1030 |
commit | 95cc7c169c4bbb6f10e630184f527b20b83fc5c3 (patch) | |
tree | 926d50d0829027a0804a62450fcbf6396c85da72 /binutils | |
parent | 54d83b8d3920eea4a0d545f1ff7ac2923d938e6c (diff) | |
download | gdb-95cc7c169c4bbb6f10e630184f527b20b83fc5c3.zip gdb-95cc7c169c4bbb6f10e630184f527b20b83fc5c3.tar.gz gdb-95cc7c169c4bbb6f10e630184f527b20b83fc5c3.tar.bz2 |
ar P support
This patch extends "ar P" to allow creation of normal (as distinct
from thin) archives with full path names.
PR 452
PR 25104
bfd/
* archive.c (normalize): Return file unchanged when
BFD_ARCHIVE_FULL_PATH.
(_bfd_construct_extended_name_table): Pass abfd, the output
bfd, to normalize.
(_bfd_archive_bsd44_construct_extended_name_table): Likewise.
* bfd.c (struct bfd): Make flags a full flagword.
(BFD_ARCHIVE_FULL_PATH): Define.
* bfd-in2.h: Regenerate.
binutils/
* ar.c (write_archive): Set BFD_ARCHIVE_FULL_PATH.
* doc/binutils.texi (extract from archive): Mention
restrictions when extracting from archives with full paths.
(ar P): Update to current P support.
(ar -X32_64): Fix spelling.
Diffstat (limited to 'binutils')
-rw-r--r-- | binutils/ChangeLog | 10 | ||||
-rw-r--r-- | binutils/ar.c | 3 | ||||
-rw-r--r-- | binutils/doc/binutils.texi | 27 |
3 files changed, 32 insertions, 8 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog index e47c145..74a223b 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,13 @@ +2019-10-21 Alan Modra <amodra@gmail.com> + + PR 452 + PR 25104 + * ar.c (write_archive): Set BFD_ARCHIVE_FULL_PATH. + * doc/binutils.texi (extract from archive): Mention + restrictions when extracting from archives with full paths. + (ar P): Update to current P support. + (ar -X32_64): Fix spelling. + 2019-10-14 Alan Modra <amodra@gmail.com> * objcopy.c (compare_section_lma): Correct comment. Dereference diff --git a/binutils/ar.c b/binutils/ar.c index b99afff..38c54c9 100644 --- a/binutils/ar.c +++ b/binutils/ar.c @@ -1200,6 +1200,9 @@ write_archive (bfd *iarch) if (deterministic) obfd->flags |= BFD_DETERMINISTIC_OUTPUT; + if (full_pathname) + obfd->flags |= BFD_ARCHIVE_FULL_PATH; + if (make_thin_archive || bfd_is_thin_archive (iarch)) bfd_set_thin_archive (obfd, TRUE); diff --git a/binutils/doc/binutils.texi b/binutils/doc/binutils.texi index 4e10cdc..2edd7e1 100644 --- a/binutils/doc/binutils.texi +++ b/binutils/doc/binutils.texi @@ -387,7 +387,10 @@ use the @samp{v} modifier with this operation, to request that If you do not specify a @var{member}, all files in the archive are extracted. -Files cannot be extracted from a thin archive. +Files cannot be extracted from a thin archive, and there are +restrictions on extracting from archives created with @option{P}: The +paths must not be absolute, may not contain @code{..}, and any +subdirectories in the paths must exist. @end table A number of modifiers (@var{mod}) may immediately follow the @var{p} @@ -463,12 +466,20 @@ Display member offsets inside the archive. Use together with the @samp{t} option. @item P -Use the full path name when matching names in the archive. @sc{gnu} -@command{ar} can not create an archive with a full path name (such archives -are not POSIX compliant), but other archive creators can. This option -will cause @sc{gnu} @command{ar} to match file names using a complete path -name, which can be convenient when extracting a single file from an -archive created by another tool. +Use the full path name when matching or storing names in the archive. +Archives created with full path names are not POSIX compliant, and +thus may not work with tools other than up to date @sc{gnu} tools. +Modifying such archives with @sc{gnu} @command{ar} without using +@option{P} will remove the full path names unless the archive is a +thin archive. Note that @option{P} may be useful when adding files to +a thin archive since @option{r} without @option{P} ignores the path +when choosing which element to replace. Thus +@smallexample +ar rcST archive.a subdir/file1 subdir/file2 file1 +@end smallexample +will result in the first @code{subdir/file1} being replaced with +@code{file1} from the current directory. Adding @option{P} will +prevent this replacement. @item s @cindex writing archive index @@ -533,7 +544,7 @@ and then exits. Displays the version information of @command{ar} and then exits. @item -X32_64 -@command{ar} ignores an initial option spelt @samp{-X32_64}, for +@command{ar} ignores an initial option spelled @samp{-X32_64}, for compatibility with AIX. The behaviour produced by this option is the default for @sc{gnu} @command{ar}. @command{ar} does not support any of the other @samp{-X} options; in particular, it does not support |