diff options
author | emaste <emaste@FreeBSD.org> | 2015-04-01 01:08:01 +0000 |
---|---|---|
committer | emaste <emaste@FreeBSD.org> | 2015-04-01 01:08:01 +0000 |
commit | 55208361ba5f1ea64b978cfd570feefd302f879c (patch) | |
tree | 55f82032e95d8fb3fba2e48a25de3d257af7f7ed /contrib/elftoolchain/elfcopy/main.c | |
parent | cb7d12714503777dbaaa780fca372adfad849d0d (diff) | |
download | FreeBSD-src-55208361ba5f1ea64b978cfd570feefd302f879c.zip FreeBSD-src-55208361ba5f1ea64b978cfd570feefd302f879c.tar.gz |
Update elftoolchain to upstream revision 3179
Some notable changes:
- libdwarf: Fixed DWARF4 line section
- elfcopy: Implement --localize-hidden
- nm: handle object name referenced by DW_AT_specification
- elfcopy: Add --strip-dwo and --extract-dwo options for split DWARF
- readelf: add remaining arm64 dynamic relocation names
- nm: Avoid integer overflow in value comparison
Relnotes: Yes
Sponsored by: The FreeBSD Foundation
Diffstat (limited to 'contrib/elftoolchain/elfcopy/main.c')
-rw-r--r-- | contrib/elftoolchain/elfcopy/main.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/contrib/elftoolchain/elfcopy/main.c b/contrib/elftoolchain/elfcopy/main.c index e5bea86..a48aea5 100644 --- a/contrib/elftoolchain/elfcopy/main.c +++ b/contrib/elftoolchain/elfcopy/main.c @@ -24,7 +24,6 @@ * SUCH DAMAGE. */ -#include <sys/cdefs.h> #include <sys/param.h> #include <sys/stat.h> @@ -40,7 +39,7 @@ #include "elfcopy.h" -ELFTC_VCSID("$Id: main.c 3156 2015-02-15 21:40:01Z emaste $"); +ELFTC_VCSID("$Id: main.c 3174 2015-03-27 17:13:41Z emaste $"); enum options { @@ -57,9 +56,11 @@ enum options ECP_GLOBALIZE_SYMBOLS, ECP_KEEP_SYMBOLS, ECP_KEEP_GLOBAL_SYMBOLS, + ECP_LOCALIZE_HIDDEN, ECP_LOCALIZE_SYMBOLS, ECP_NO_CHANGE_WARN, ECP_ONLY_DEBUG, + ECP_ONLY_DWO, ECP_PAD_TO, ECP_PREFIX_ALLOC, ECP_PREFIX_SEC, @@ -72,6 +73,7 @@ enum options ECP_SET_START, ECP_SREC_FORCE_S3, ECP_SREC_LEN, + ECP_STRIP_DWO, ECP_STRIP_SYMBOLS, ECP_STRIP_UNNEEDED, ECP_WEAKEN_ALL, @@ -124,6 +126,7 @@ static struct option elfcopy_longopts[] = {"change-warnings", no_argument, NULL, ECP_CHANGE_WARN}, {"discard-all", no_argument, NULL, 'x'}, {"discard-locals", no_argument, NULL, 'X'}, + {"extract-dwo", no_argument, NULL, ECP_ONLY_DWO}, {"gap-fill", required_argument, NULL, ECP_GAP_FILL}, {"globalize-symbol", required_argument, NULL, ECP_GLOBALIZE_SYMBOL}, {"globalize-symbols", required_argument, NULL, ECP_GLOBALIZE_SYMBOLS}, @@ -134,6 +137,7 @@ static struct option elfcopy_longopts[] = {"keep-global-symbol", required_argument, NULL, 'G'}, {"keep-global-symbols", required_argument, NULL, ECP_KEEP_GLOBAL_SYMBOLS}, + {"localize-hidden", no_argument, NULL, ECP_LOCALIZE_HIDDEN}, {"localize-symbol", required_argument, NULL, 'L'}, {"localize-symbols", required_argument, NULL, ECP_LOCALIZE_SYMBOLS}, {"no-adjust-warnings", no_argument, NULL, ECP_NO_CHANGE_WARN}, @@ -157,6 +161,7 @@ static struct option elfcopy_longopts[] = {"srec-len", required_argument, NULL, ECP_SREC_LEN}, {"strip-all", no_argument, NULL, 'S'}, {"strip-debug", no_argument, 0, 'g'}, + {"strip-dwo", no_argument, NULL, ECP_STRIP_DWO}, {"strip-symbol", required_argument, NULL, 'N'}, {"strip-symbols", required_argument, NULL, ECP_STRIP_SYMBOLS}, {"strip-unneeded", no_argument, NULL, ECP_STRIP_UNNEEDED}, @@ -348,6 +353,7 @@ create_elf(struct elfcopy *ecp) if (ecp->strip == STRIP_DEBUG || ecp->strip == STRIP_UNNEEDED || ecp->flags & WEAKEN_ALL || + ecp->flags & LOCALIZE_HIDDEN || ecp->flags & DISCARD_LOCAL || ecp->flags & DISCARD_LLABEL || ecp->prefix_sym != NULL || @@ -870,6 +876,9 @@ elfcopy_main(struct elfcopy *ecp, int argc, char **argv) case ECP_KEEP_GLOBAL_SYMBOLS: parse_symlist_file(ecp, optarg, SYMOP_KEEPG); break; + case ECP_LOCALIZE_HIDDEN: + ecp->flags |= LOCALIZE_HIDDEN; + break; case ECP_LOCALIZE_SYMBOLS: parse_symlist_file(ecp, optarg, SYMOP_LOCALIZE); break; @@ -879,6 +888,9 @@ elfcopy_main(struct elfcopy *ecp, int argc, char **argv) case ECP_ONLY_DEBUG: ecp->strip = STRIP_NONDEBUG; break; + case ECP_ONLY_DWO: + ecp->strip = STRIP_NONDWO; + break; case ECP_PAD_TO: ecp->pad_to = (uint64_t) strtoull(optarg, NULL, 0); break; @@ -939,6 +951,9 @@ elfcopy_main(struct elfcopy *ecp, int argc, char **argv) ecp->flags |= SREC_FORCE_LEN; ecp->srec_len = strtoul(optarg, NULL, 0); break; + case ECP_STRIP_DWO: + ecp->strip = STRIP_DWO; + break; case ECP_STRIP_SYMBOLS: parse_symlist_file(ecp, optarg, SYMOP_STRIP); break; @@ -1379,6 +1394,8 @@ Usage: %s [options] infile [outfile]\n\ section by VAL.\n\ --gap-fill=VAL Fill the gaps between sections with bytes\n\ of value VAL.\n\ + --localize-hidden Make all hidden symbols local to the output\n\ + file.\n\ --no-adjust-warning| --no-change-warnings\n\ Do not issue warnings for non-existent\n\ sections.\n\ |