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.
This commit is contained in:
parent
54d83b8d39
commit
95cc7c169c
7 changed files with 61 additions and 14 deletions
|
@ -1,3 +1,15 @@
|
||||||
|
2019-10-21 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
|
PR 452
|
||||||
|
* 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.
|
||||||
|
|
||||||
2019-10-20 John David Anglin <danglin@gcc.gnu.org>
|
2019-10-20 John David Anglin <danglin@gcc.gnu.org>
|
||||||
|
|
||||||
* elf32-hppa.c (elf32_hppa_size_dynamic_sections): Provide 8-byte
|
* elf32-hppa.c (elf32_hppa_size_dynamic_sections): Provide 8-byte
|
||||||
|
|
|
@ -1299,6 +1299,9 @@ normalize (bfd *abfd, const char *file)
|
||||||
const char *last;
|
const char *last;
|
||||||
char *copy;
|
char *copy;
|
||||||
|
|
||||||
|
if (abfd->flags & BFD_ARCHIVE_FULL_PATH)
|
||||||
|
return file;
|
||||||
|
|
||||||
first = file + strlen (file) - 1;
|
first = file + strlen (file) - 1;
|
||||||
last = first + 1;
|
last = first + 1;
|
||||||
|
|
||||||
|
@ -1326,8 +1329,10 @@ normalize (bfd *abfd, const char *file)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
static const char *
|
static const char *
|
||||||
normalize (bfd *abfd ATTRIBUTE_UNUSED, const char *file)
|
normalize (bfd *abfd, const char *file)
|
||||||
{
|
{
|
||||||
|
if (abfd->flags & BFD_ARCHIVE_FULL_PATH)
|
||||||
|
return file;
|
||||||
return lbasename (file);
|
return lbasename (file);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -1562,7 +1567,7 @@ _bfd_construct_extended_name_table (bfd *abfd,
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
normal = normalize (current, current->filename);
|
normal = normalize (abfd, current->filename);
|
||||||
if (normal == NULL)
|
if (normal == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
@ -1643,7 +1648,7 @@ _bfd_construct_extended_name_table (bfd *abfd,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
normal = normalize (current, filename);
|
normal = normalize (abfd, filename);
|
||||||
if (normal == NULL)
|
if (normal == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -1714,7 +1719,7 @@ _bfd_archive_bsd44_construct_extended_name_table (bfd *abfd,
|
||||||
current != NULL;
|
current != NULL;
|
||||||
current = current->archive_next)
|
current = current->archive_next)
|
||||||
{
|
{
|
||||||
const char *normal = normalize (current, current->filename);
|
const char *normal = normalize (abfd, current->filename);
|
||||||
int has_space = 0;
|
int has_space = 0;
|
||||||
unsigned int len;
|
unsigned int len;
|
||||||
|
|
||||||
|
|
|
@ -6498,7 +6498,7 @@ struct bfd
|
||||||
ENUM_BITFIELD (bfd_direction) direction : 2;
|
ENUM_BITFIELD (bfd_direction) direction : 2;
|
||||||
|
|
||||||
/* Format_specific flags. */
|
/* Format_specific flags. */
|
||||||
flagword flags : 20;
|
flagword flags;
|
||||||
|
|
||||||
/* Values that may appear in the flags field of a BFD. These also
|
/* Values that may appear in the flags field of a BFD. These also
|
||||||
appear in the object_flags field of the bfd_target structure, where
|
appear in the object_flags field of the bfd_target structure, where
|
||||||
|
@ -6585,6 +6585,9 @@ struct bfd
|
||||||
/* Use the ELF STT_COMMON type in this BFD. */
|
/* Use the ELF STT_COMMON type in this BFD. */
|
||||||
#define BFD_USE_ELF_STT_COMMON 0x80000
|
#define BFD_USE_ELF_STT_COMMON 0x80000
|
||||||
|
|
||||||
|
/* Put pathnames into archives (non-POSIX). */
|
||||||
|
#define BFD_ARCHIVE_FULL_PATH 0x100000
|
||||||
|
|
||||||
/* Flags bits to be saved in bfd_preserve_save. */
|
/* Flags bits to be saved in bfd_preserve_save. */
|
||||||
#define BFD_FLAGS_SAVED \
|
#define BFD_FLAGS_SAVED \
|
||||||
(BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \
|
(BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \
|
||||||
|
|
|
@ -92,7 +92,7 @@ CODE_FRAGMENT
|
||||||
. ENUM_BITFIELD (bfd_direction) direction : 2;
|
. ENUM_BITFIELD (bfd_direction) direction : 2;
|
||||||
.
|
.
|
||||||
. {* Format_specific flags. *}
|
. {* Format_specific flags. *}
|
||||||
. flagword flags : 20;
|
. flagword flags;
|
||||||
.
|
.
|
||||||
. {* Values that may appear in the flags field of a BFD. These also
|
. {* Values that may appear in the flags field of a BFD. These also
|
||||||
. appear in the object_flags field of the bfd_target structure, where
|
. appear in the object_flags field of the bfd_target structure, where
|
||||||
|
@ -179,6 +179,9 @@ CODE_FRAGMENT
|
||||||
. {* Use the ELF STT_COMMON type in this BFD. *}
|
. {* Use the ELF STT_COMMON type in this BFD. *}
|
||||||
.#define BFD_USE_ELF_STT_COMMON 0x80000
|
.#define BFD_USE_ELF_STT_COMMON 0x80000
|
||||||
.
|
.
|
||||||
|
. {* Put pathnames into archives (non-POSIX). *}
|
||||||
|
.#define BFD_ARCHIVE_FULL_PATH 0x100000
|
||||||
|
.
|
||||||
. {* Flags bits to be saved in bfd_preserve_save. *}
|
. {* Flags bits to be saved in bfd_preserve_save. *}
|
||||||
.#define BFD_FLAGS_SAVED \
|
.#define BFD_FLAGS_SAVED \
|
||||||
. (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \
|
. (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \
|
||||||
|
|
|
@ -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>
|
2019-10-14 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
* objcopy.c (compare_section_lma): Correct comment. Dereference
|
* objcopy.c (compare_section_lma): Correct comment. Dereference
|
||||||
|
|
|
@ -1200,6 +1200,9 @@ write_archive (bfd *iarch)
|
||||||
if (deterministic)
|
if (deterministic)
|
||||||
obfd->flags |= BFD_DETERMINISTIC_OUTPUT;
|
obfd->flags |= BFD_DETERMINISTIC_OUTPUT;
|
||||||
|
|
||||||
|
if (full_pathname)
|
||||||
|
obfd->flags |= BFD_ARCHIVE_FULL_PATH;
|
||||||
|
|
||||||
if (make_thin_archive || bfd_is_thin_archive (iarch))
|
if (make_thin_archive || bfd_is_thin_archive (iarch))
|
||||||
bfd_set_thin_archive (obfd, TRUE);
|
bfd_set_thin_archive (obfd, TRUE);
|
||||||
|
|
||||||
|
|
|
@ -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
|
If you do not specify a @var{member}, all files in the archive
|
||||||
are extracted.
|
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
|
@end table
|
||||||
|
|
||||||
A number of modifiers (@var{mod}) may immediately follow the @var{p}
|
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.
|
option.
|
||||||
|
|
||||||
@item P
|
@item P
|
||||||
Use the full path name when matching names in the archive. @sc{gnu}
|
Use the full path name when matching or storing names in the archive.
|
||||||
@command{ar} can not create an archive with a full path name (such archives
|
Archives created with full path names are not POSIX compliant, and
|
||||||
are not POSIX compliant), but other archive creators can. This option
|
thus may not work with tools other than up to date @sc{gnu} tools.
|
||||||
will cause @sc{gnu} @command{ar} to match file names using a complete path
|
Modifying such archives with @sc{gnu} @command{ar} without using
|
||||||
name, which can be convenient when extracting a single file from an
|
@option{P} will remove the full path names unless the archive is a
|
||||||
archive created by another tool.
|
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
|
@item s
|
||||||
@cindex writing archive index
|
@cindex writing archive index
|
||||||
|
@ -533,7 +544,7 @@ and then exits.
|
||||||
Displays the version information of @command{ar} and then exits.
|
Displays the version information of @command{ar} and then exits.
|
||||||
|
|
||||||
@item -X32_64
|
@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
|
compatibility with AIX. The behaviour produced by this option is the
|
||||||
default for @sc{gnu} @command{ar}. @command{ar} does not support any
|
default for @sc{gnu} @command{ar}. @command{ar} does not support any
|
||||||
of the other @samp{-X} options; in particular, it does not support
|
of the other @samp{-X} options; in particular, it does not support
|
||||||
|
|
Loading…
Add table
Reference in a new issue