-Wimplicit-fallthrough error fixes
[deliverable/binutils-gdb.git] / binutils / strings.c
CommitLineData
252b5132 1/* strings -- print the strings of printable characters in files
6f2750fe 2 Copyright (C) 1993-2016 Free Software Foundation, Inc.
252b5132
RH
3
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
32866df7 6 the Free Software Foundation; either version 3, or (at your option)
252b5132
RH
7 any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
b43b5d5f
NC
16 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
17 02110-1301, USA. */
252b5132
RH
18\f
19/* Usage: strings [options] file...
20
21 Options:
22 --all
23 -a
7fac9594
NC
24 - Scan each file in its entirety.
25
26 --data
27 -d Scan only the initialized data section(s) of object files.
252b5132
RH
28
29 --print-file-name
30 -f Print the name of the file before each string.
31
32 --bytes=min-len
33 -n min-len
34 -min-len Print graphic char sequences, MIN-LEN or more bytes long,
35 that are followed by a NUL or a newline. Default is 4.
36
37 --radix={o,x,d}
38 -t {o,x,d} Print the offset within the file before each string,
39 in octal/hex/decimal.
40
334ac421
EA
41 --include-all-whitespace
42 -w By default tab and space are the only whitepace included in graphic
43 char sequences. This option considers all of isspace() valid.
44
252b5132
RH
45 -o Like -to. (Some other implementations have -o like -to,
46 others like -td. We chose one arbitrarily.)
47
8745eafa
NC
48 --encoding={s,S,b,l,B,L}
49 -e {s,S,b,l,B,L}
50 Select character encoding: 7-bit-character, 8-bit-character,
51 bigendian 16-bit, littleendian 16-bit, bigendian 32-bit,
52 littleendian 32-bit.
d132876a 53
252b5132 54 --target=BFDNAME
3bf31ec9 55 -T {bfdname}
252b5132
RH
56 Specify a non-default object file format.
57
55edd97b
EA
58 --output-separator=sep_string
59 -s sep_string String used to separate parsed strings in output.
60 Default is newline.
61
252b5132
RH
62 --help
63 -h Print the usage message on the standard output.
64
65 --version
ffbe5983 66 -V
252b5132
RH
67 -v Print the program version number.
68
69 Written by Richard Stallman <rms@gnu.ai.mit.edu>
70 and David MacKenzie <djm@gnu.ai.mit.edu>. */
71
3db64b00 72#include "sysdep.h"
252b5132 73#include "bfd.h"
e9792343 74#include "getopt.h"
252b5132 75#include "libiberty.h"
3882b010 76#include "safe-ctype.h"
3db64b00 77#include "bucomm.h"
252b5132 78
8745eafa
NC
79#define STRING_ISGRAPHIC(c) \
80 ( (c) >= 0 \
81 && (c) <= 255 \
334ac421
EA
82 && ((c) == '\t' || ISPRINT (c) || (encoding == 'S' && (c) > 127) \
83 || (include_all_whitespace == TRUE && ISSPACE (c))) \
84 )
252b5132
RH
85
86#ifndef errno
87extern int errno;
88#endif
89
90/* The BFD section flags that identify an initialized data section. */
91#define DATA_FLAGS (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS)
92
93/* Radix for printing addresses (must be 8, 10 or 16). */
94static int address_radix;
95
96/* Minimum length of sequence of graphic chars to trigger output. */
97static int string_min;
98
334ac421
EA
99/* Whether or not we include all whitespace as a graphic char. */
100static bfd_boolean include_all_whitespace;
101
b34976b6
AM
102/* TRUE means print address within file for each string. */
103static bfd_boolean print_addresses;
252b5132 104
b34976b6
AM
105/* TRUE means print filename for each string. */
106static bfd_boolean print_filenames;
252b5132 107
b34976b6
AM
108/* TRUE means for object files scan only the data section. */
109static bfd_boolean datasection_only;
252b5132 110
b34976b6
AM
111/* TRUE if we found an initialized data section in the current file. */
112static bfd_boolean got_a_section;
252b5132
RH
113
114/* The BFD object file format. */
115static char *target;
116
d132876a
NC
117/* The character encoding format. */
118static char encoding;
119static int encoding_bytes;
120
55edd97b
EA
121/* Output string used to separate parsed strings */
122static char *output_separator;
123
252b5132
RH
124static struct option long_options[] =
125{
126 {"all", no_argument, NULL, 'a'},
7fac9594 127 {"data", no_argument, NULL, 'd'},
252b5132
RH
128 {"print-file-name", no_argument, NULL, 'f'},
129 {"bytes", required_argument, NULL, 'n'},
130 {"radix", required_argument, NULL, 't'},
334ac421 131 {"include-all-whitespace", required_argument, NULL, 'w'},
d132876a 132 {"encoding", required_argument, NULL, 'e'},
252b5132 133 {"target", required_argument, NULL, 'T'},
55edd97b 134 {"output-separator", required_argument, NULL, 's'},
252b5132
RH
135 {"help", no_argument, NULL, 'h'},
136 {"version", no_argument, NULL, 'v'},
137 {NULL, 0, NULL, 0}
138};
139
06803313
NC
140/* Records the size of a named file so that we
141 do not repeatedly run bfd_stat() on it. */
142
143typedef struct
144{
145 const char * filename;
146 bfd_size_type filesize;
147} filename_and_size_t;
148
2da42df6
AJ
149static void strings_a_section (bfd *, asection *, void *);
150static bfd_boolean strings_object_file (const char *);
7fac9594 151static bfd_boolean strings_file (char *);
ee2fb9eb 152static void print_strings (const char *, FILE *, file_ptr, int, int, char *);
2da42df6 153static void usage (FILE *, int);
ee2fb9eb 154static long get_char (FILE *, file_ptr *, int *, char **);
252b5132 155\f
2da42df6 156int main (int, char **);
65de42c0 157
252b5132 158int
2da42df6 159main (int argc, char **argv)
252b5132
RH
160{
161 int optc;
162 int exit_status = 0;
b34976b6 163 bfd_boolean files_given = FALSE;
508e676d 164 char *s;
e36aef42 165 int numeric_opt = 0;
252b5132 166
3882b010 167#if defined (HAVE_SETLOCALE)
1c529ca6 168 setlocale (LC_ALL, "");
252b5132
RH
169#endif
170 bindtextdomain (PACKAGE, LOCALEDIR);
171 textdomain (PACKAGE);
172
173 program_name = argv[0];
174 xmalloc_set_program_name (program_name);
86eafac0 175 bfd_set_error_program_name (program_name);
869b9d07
MM
176
177 expandargv (&argc, &argv);
178
c904a764 179 string_min = 4;
334ac421 180 include_all_whitespace = FALSE;
b34976b6
AM
181 print_addresses = FALSE;
182 print_filenames = FALSE;
7fac9594
NC
183 if (DEFAULT_STRINGS_ALL)
184 datasection_only = FALSE;
185 else
186 datasection_only = TRUE;
252b5132 187 target = NULL;
d132876a 188 encoding = 's';
55edd97b 189 output_separator = NULL;
252b5132 190
55edd97b 191 while ((optc = getopt_long (argc, argv, "adfhHn:wot:e:T:s:Vv0123456789",
252b5132
RH
192 long_options, (int *) 0)) != EOF)
193 {
194 switch (optc)
195 {
196 case 'a':
b34976b6 197 datasection_only = FALSE;
252b5132
RH
198 break;
199
7fac9594
NC
200 case 'd':
201 datasection_only = TRUE;
202 break;
203
252b5132 204 case 'f':
b34976b6 205 print_filenames = TRUE;
252b5132
RH
206 break;
207
8b53311e 208 case 'H':
252b5132
RH
209 case 'h':
210 usage (stdout, 0);
211
212 case 'n':
508e676d
JK
213 string_min = (int) strtoul (optarg, &s, 0);
214 if (s != NULL && *s != 0)
215 fatal (_("invalid integer argument %s"), optarg);
252b5132
RH
216 break;
217
334ac421
EA
218 case 'w':
219 include_all_whitespace = TRUE;
220 break;
221
252b5132 222 case 'o':
b34976b6 223 print_addresses = TRUE;
252b5132
RH
224 address_radix = 8;
225 break;
226
227 case 't':
b34976b6 228 print_addresses = TRUE;
252b5132
RH
229 if (optarg[1] != '\0')
230 usage (stderr, 1);
231 switch (optarg[0])
232 {
233 case 'o':
234 address_radix = 8;
235 break;
236
237 case 'd':
238 address_radix = 10;
239 break;
240
241 case 'x':
242 address_radix = 16;
243 break;
244
245 default:
246 usage (stderr, 1);
247 }
248 break;
249
250 case 'T':
251 target = optarg;
252 break;
253
d132876a
NC
254 case 'e':
255 if (optarg[1] != '\0')
256 usage (stderr, 1);
257 encoding = optarg[0];
258 break;
259
55edd97b
EA
260 case 's':
261 output_separator = optarg;
262 break;
263
8b53311e 264 case 'V':
252b5132
RH
265 case 'v':
266 print_version ("strings");
267 break;
268
269 case '?':
270 usage (stderr, 1);
271
272 default:
e36aef42 273 numeric_opt = optind;
252b5132
RH
274 break;
275 }
276 }
277
e36aef42
AM
278 if (numeric_opt != 0)
279 {
280 string_min = (int) strtoul (argv[numeric_opt - 1] + 1, &s, 0);
281 if (s != NULL && *s != 0)
282 fatal (_("invalid integer argument %s"), argv[numeric_opt - 1] + 1);
283 }
c904a764
NC
284 if (string_min < 1)
285 fatal (_("invalid minimum string length %d"), string_min);
252b5132 286
d132876a
NC
287 switch (encoding)
288 {
8745eafa 289 case 'S':
d132876a
NC
290 case 's':
291 encoding_bytes = 1;
292 break;
293 case 'b':
294 case 'l':
295 encoding_bytes = 2;
296 break;
297 case 'B':
298 case 'L':
299 encoding_bytes = 4;
300 break;
301 default:
302 usage (stderr, 1);
303 }
304
252b5132
RH
305 bfd_init ();
306 set_default_bfd_target ();
307
308 if (optind >= argc)
309 {
b34976b6 310 datasection_only = FALSE;
5af11cab 311 SET_BINARY (fileno (stdin));
252b5132 312 print_strings ("{standard input}", stdin, 0, 0, 0, (char *) NULL);
b34976b6 313 files_given = TRUE;
252b5132
RH
314 }
315 else
316 {
317 for (; optind < argc; ++optind)
318 {
319 if (strcmp (argv[optind], "-") == 0)
b34976b6 320 datasection_only = FALSE;
252b5132
RH
321 else
322 {
b34976b6
AM
323 files_given = TRUE;
324 exit_status |= strings_file (argv[optind]) == FALSE;
252b5132
RH
325 }
326 }
327 }
328
b34976b6 329 if (!files_given)
252b5132
RH
330 usage (stderr, 1);
331
332 return (exit_status);
333}
334\f
06803313
NC
335/* Scan section SECT of the file ABFD, whose printable name is in
336 ARG->filename and whose size might be in ARG->filesize. If it
337 contains initialized data set `got_a_section' and print the
338 strings in it.
339
340 FIXME: We ought to be able to return error codes/messages for
341 certain conditions. */
252b5132
RH
342
343static void
06803313 344strings_a_section (bfd *abfd, asection *sect, void *arg)
252b5132 345{
06803313
NC
346 filename_and_size_t * filename_and_sizep;
347 bfd_size_type *filesizep;
348 bfd_size_type sectsize;
349 void *mem;
3aade688 350
06803313
NC
351 if ((sect->flags & DATA_FLAGS) != DATA_FLAGS)
352 return;
353
354 sectsize = bfd_get_section_size (sect);
3aade688 355
06803313
NC
356 if (sectsize <= 0)
357 return;
358
359 /* Get the size of the file. This might have been cached for us. */
360 filename_and_sizep = (filename_and_size_t *) arg;
361 filesizep = & filename_and_sizep->filesize;
362
363 if (*filesizep == 0)
364 {
365 struct stat st;
3aade688 366
06803313
NC
367 if (bfd_stat (abfd, &st))
368 return;
369
370 /* Cache the result so that we do not repeatedly stat this file. */
371 *filesizep = st.st_size;
372 }
252b5132 373
06803313
NC
374 /* Compare the size of the section against the size of the file.
375 If the section is bigger then the file must be corrupt and
376 we should not try dumping it. */
377 if (sectsize >= *filesizep)
378 return;
379
380 mem = xmalloc (sectsize);
381
382 if (bfd_get_section_contents (abfd, sect, mem, (file_ptr) 0, sectsize))
252b5132 383 {
06803313 384 got_a_section = TRUE;
8745eafa 385
06803313 386 print_strings (filename_and_sizep->filename, NULL, sect->filepos,
3f5e193b 387 0, sectsize, (char *) mem);
252b5132 388 }
06803313
NC
389
390 free (mem);
252b5132
RH
391}
392
393/* Scan all of the sections in FILE, and print the strings
394 in the initialized data section(s).
395
b34976b6
AM
396 Return TRUE if successful,
397 FALSE if not (such as if FILE is not an object file). */
252b5132 398
b34976b6 399static bfd_boolean
2da42df6 400strings_object_file (const char *file)
252b5132 401{
06803313
NC
402 filename_and_size_t filename_and_size;
403 bfd *abfd;
404
405 abfd = bfd_openr (file, target);
252b5132
RH
406
407 if (abfd == NULL)
8745eafa
NC
408 /* Treat the file as a non-object file. */
409 return FALSE;
252b5132
RH
410
411 /* This call is mainly for its side effect of reading in the sections.
412 We follow the traditional behavior of `strings' in that we don't
413 complain if we don't recognize a file to be an object file. */
b34976b6 414 if (!bfd_check_format (abfd, bfd_object))
252b5132
RH
415 {
416 bfd_close (abfd);
b34976b6 417 return FALSE;
252b5132
RH
418 }
419
b34976b6 420 got_a_section = FALSE;
06803313
NC
421 filename_and_size.filename = file;
422 filename_and_size.filesize = 0;
423 bfd_map_over_sections (abfd, strings_a_section, & filename_and_size);
252b5132
RH
424
425 if (!bfd_close (abfd))
426 {
427 bfd_nonfatal (file);
b34976b6 428 return FALSE;
252b5132
RH
429 }
430
431 return got_a_section;
432}
433
b34976b6 434/* Print the strings in FILE. Return TRUE if ok, FALSE if an error occurs. */
252b5132 435
b34976b6 436static bfd_boolean
2da42df6 437strings_file (char *file)
252b5132 438{
ee2fb9eb
JK
439 struct stat st;
440
441 /* get_file_size does not support non-S_ISREG files. */
fb5b5478 442
ee2fb9eb 443 if (stat (file, &st) < 0)
fb5b5478
JJ
444 {
445 if (errno == ENOENT)
446 non_fatal (_("'%s': No such file"), file);
447 else
448 non_fatal (_("Warning: could not locate '%s'. reason: %s"),
449 file, strerror (errno));
450 return FALSE;
451 }
f24ddbdd 452
252b5132
RH
453 /* If we weren't told to scan the whole file,
454 try to open it as an object file and only look at
455 initialized data sections. If that fails, fall back to the
456 whole file. */
457 if (!datasection_only || !strings_object_file (file))
458 {
459 FILE *stream;
460
ee2fb9eb 461 stream = fopen (file, FOPEN_RB);
252b5132
RH
462 if (stream == NULL)
463 {
464 fprintf (stderr, "%s: ", program_name);
465 perror (file);
b34976b6 466 return FALSE;
252b5132
RH
467 }
468
ee2fb9eb 469 print_strings (file, stream, (file_ptr) 0, 0, 0, (char *) 0);
252b5132
RH
470
471 if (fclose (stream) == EOF)
472 {
473 fprintf (stderr, "%s: ", program_name);
474 perror (file);
b34976b6 475 return FALSE;
252b5132
RH
476 }
477 }
478
b34976b6 479 return TRUE;
252b5132
RH
480}
481\f
d132876a
NC
482/* Read the next character, return EOF if none available.
483 Assume that STREAM is positioned so that the next byte read
484 is at address ADDRESS in the file.
485
486 If STREAM is NULL, do not read from it.
487 The caller can supply a buffer of characters
488 to be processed before the data in STREAM.
489 MAGIC is the address of the buffer and
490 MAGICCOUNT is how many characters are in it. */
491
492static long
ee2fb9eb 493get_char (FILE *stream, file_ptr *address, int *magiccount, char **magic)
d132876a
NC
494{
495 int c, i;
c54e2ec1 496 long r = 0;
d132876a
NC
497
498 for (i = 0; i < encoding_bytes; i++)
499 {
500 if (*magiccount)
501 {
502 (*magiccount)--;
503 c = *(*magic)++;
504 }
505 else
506 {
507 if (stream == NULL)
508 return EOF;
b7d4af3a
JW
509
510 /* Only use getc_unlocked if we found a declaration for it.
511 Otherwise, libc is not thread safe by default, and we
512 should not use it. */
513
514#if defined(HAVE_GETC_UNLOCKED) && HAVE_DECL_GETC_UNLOCKED
cedd9a58
JJ
515 c = getc_unlocked (stream);
516#else
d132876a 517 c = getc (stream);
cedd9a58 518#endif
d132876a
NC
519 if (c == EOF)
520 return EOF;
521 }
522
523 (*address)++;
c54e2ec1 524 r = (r << 8) | (c & 0xff);
d132876a
NC
525 }
526
527 switch (encoding)
528 {
c54e2ec1 529 default:
d132876a
NC
530 break;
531 case 'l':
c54e2ec1 532 r = ((r & 0xff) << 8) | ((r & 0xff00) >> 8);
d132876a
NC
533 break;
534 case 'L':
c54e2ec1
AM
535 r = (((r & 0xff) << 24) | ((r & 0xff00) << 8)
536 | ((r & 0xff0000) >> 8) | ((r & 0xff000000) >> 24));
d132876a
NC
537 break;
538 }
539
d132876a
NC
540 return r;
541}
542\f
252b5132
RH
543/* Find the strings in file FILENAME, read from STREAM.
544 Assume that STREAM is positioned so that the next byte read
545 is at address ADDRESS in the file.
546 Stop reading at address STOP_POINT in the file, if nonzero.
547
548 If STREAM is NULL, do not read from it.
549 The caller can supply a buffer of characters
550 to be processed before the data in STREAM.
551 MAGIC is the address of the buffer and
552 MAGICCOUNT is how many characters are in it.
553 Those characters come at address ADDRESS and the data in STREAM follow. */
554
555static void
ee2fb9eb 556print_strings (const char *filename, FILE *stream, file_ptr address,
2da42df6 557 int stop_point, int magiccount, char *magic)
252b5132 558{
d132876a 559 char *buf = (char *) xmalloc (sizeof (char) * (string_min + 1));
252b5132
RH
560
561 while (1)
562 {
ee2fb9eb 563 file_ptr start;
252b5132 564 int i;
d132876a 565 long c;
252b5132
RH
566
567 /* See if the next `string_min' chars are all graphic chars. */
568 tryline:
569 if (stop_point && address >= stop_point)
570 break;
571 start = address;
572 for (i = 0; i < string_min; i++)
573 {
d132876a
NC
574 c = get_char (stream, &address, &magiccount, &magic);
575 if (c == EOF)
68187828
NC
576 {
577 free (buf);
578 return;
579 }
8745eafa 580 if (! STRING_ISGRAPHIC (c))
252b5132
RH
581 /* Found a non-graphic. Try again starting with next char. */
582 goto tryline;
583 buf[i] = c;
584 }
585
586 /* We found a run of `string_min' graphic characters. Print up
e9f87780 587 to the next non-graphic character. */
252b5132
RH
588
589 if (print_filenames)
590 printf ("%s: ", filename);
591 if (print_addresses)
592 switch (address_radix)
593 {
594 case 8:
4c219c2e 595#ifdef HAVE_LONG_LONG
cedd9a58 596 if (sizeof (start) > sizeof (long))
6e3d6dc1 597 {
4c219c2e 598# ifndef __MSVCRT__
6e3d6dc1 599 printf ("%7llo ", (unsigned long long) start);
4c219c2e 600# else
6e3d6dc1 601 printf ("%7I64o ", (unsigned long long) start);
4c219c2e 602# endif
6e3d6dc1 603 }
cedd9a58 604 else
50e3244d 605#elif !BFD_HOST_64BIT_LONG
cedd9a58
JJ
606 if (start != (unsigned long) start)
607 printf ("++%7lo ", (unsigned long) start);
608 else
cedd9a58
JJ
609#endif
610 printf ("%7lo ", (unsigned long) start);
252b5132
RH
611 break;
612
613 case 10:
4c219c2e 614#ifdef HAVE_LONG_LONG
cedd9a58 615 if (sizeof (start) > sizeof (long))
6e3d6dc1 616 {
4c219c2e 617# ifndef __MSVCRT__
6e3d6dc1 618 printf ("%7lld ", (unsigned long long) start);
4c219c2e 619# else
6e3d6dc1 620 printf ("%7I64d ", (unsigned long long) start);
4c219c2e 621# endif
6e3d6dc1 622 }
cedd9a58 623 else
50e3244d 624#elif !BFD_HOST_64BIT_LONG
cedd9a58
JJ
625 if (start != (unsigned long) start)
626 printf ("++%7ld ", (unsigned long) start);
627 else
cedd9a58
JJ
628#endif
629 printf ("%7ld ", (long) start);
252b5132
RH
630 break;
631
632 case 16:
4c219c2e 633#ifdef HAVE_LONG_LONG
cedd9a58 634 if (sizeof (start) > sizeof (long))
6e3d6dc1 635 {
4c219c2e 636# ifndef __MSVCRT__
6e3d6dc1 637 printf ("%7llx ", (unsigned long long) start);
4c219c2e 638# else
6e3d6dc1 639 printf ("%7I64x ", (unsigned long long) start);
4c219c2e 640# endif
6e3d6dc1 641 }
cedd9a58 642 else
50e3244d 643#elif !BFD_HOST_64BIT_LONG
cedd9a58 644 if (start != (unsigned long) start)
e9f87780
AM
645 printf ("%lx%8.8lx ", (unsigned long) (start >> 32),
646 (unsigned long) (start & 0xffffffff));
cedd9a58 647 else
cedd9a58
JJ
648#endif
649 printf ("%7lx ", (unsigned long) start);
252b5132
RH
650 break;
651 }
652
653 buf[i] = '\0';
654 fputs (buf, stdout);
655
656 while (1)
657 {
d132876a
NC
658 c = get_char (stream, &address, &magiccount, &magic);
659 if (c == EOF)
660 break;
8745eafa 661 if (! STRING_ISGRAPHIC (c))
252b5132
RH
662 break;
663 putchar (c);
664 }
665
55edd97b
EA
666 if (output_separator)
667 fputs (output_separator, stdout);
668 else
669 putchar ('\n');
252b5132 670 }
68187828 671 free (buf);
252b5132
RH
672}
673\f
252b5132 674static void
2da42df6 675usage (FILE *stream, int status)
252b5132 676{
8b53311e
NC
677 fprintf (stream, _("Usage: %s [option(s)] [file(s)]\n"), program_name);
678 fprintf (stream, _(" Display printable strings in [file(s)] (stdin by default)\n"));
7fac9594
NC
679 fprintf (stream, _(" The options are:\n"));
680
681 if (DEFAULT_STRINGS_ALL)
682 fprintf (stream, _("\
683 -a - --all Scan the entire file, not just the data section [default]\n\
684 -d --data Only scan the data sections in the file\n"));
685 else
686 fprintf (stream, _("\
8b53311e 687 -a - --all Scan the entire file, not just the data section\n\
7fac9594
NC
688 -d --data Only scan the data sections in the file [default]\n"));
689
690 fprintf (stream, _("\
8b53311e
NC
691 -f --print-file-name Print the name of the file before each string\n\
692 -n --bytes=[number] Locate & print any NUL-terminated sequence of at\n\
c904a764 693 -<number> least [number] characters (default 4).\n\
d412a550 694 -t --radix={o,d,x} Print the location of the string in base 8, 10 or 16\n\
334ac421 695 -w --include-all-whitespace Include all whitespace as valid string characters\n\
8b53311e
NC
696 -o An alias for --radix=o\n\
697 -T --target=<BFDNAME> Specify the binary file format\n\
8745eafa
NC
698 -e --encoding={s,S,b,l,B,L} Select character size and endianness:\n\
699 s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit\n\
55edd97b 700 -s --output-separator=<string> String used to separate strings in output.\n\
07012eee 701 @<file> Read options from <file>\n\
8b53311e 702 -h --help Display this information\n\
ffbe5983 703 -v -V --version Print the program's version number\n"));
252b5132 704 list_supported_targets (program_name, stream);
92f01d61 705 if (REPORT_BUGS_TO[0] && status == 0)
8ad3436c 706 fprintf (stream, _("Report bugs to %s\n"), REPORT_BUGS_TO);
252b5132
RH
707 exit (status);
708}
This page took 1.071184 seconds and 4 git commands to generate.