[BACK]Return to emul_aix.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / external / gpl3 / binutils / dist / binutils

Annotation of src/external/gpl3/binutils/dist/binutils/emul_aix.c, Revision 1.1.1.5

1.1       skrll       1: /* Binutils emulation layer.
1.1.1.5 ! christos    2:    Copyright (C) 2002-2016 Free Software Foundation, Inc.
1.1       skrll       3:    Written by Tom Rix, Red Hat Inc.
                      4:
                      5:    This file is part of GNU Binutils.
                      6:
                      7:    This program is free software; you can redistribute it and/or modify
                      8:    it under the terms of the GNU General Public License as published by
                      9:    the Free Software Foundation; either version 3 of the License, or
                     10:    (at your option) any later version.
                     11:
                     12:    This program is distributed in the hope that it will be useful,
                     13:    but WITHOUT ANY WARRANTY; without even the implied warranty of
                     14:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     15:    GNU General Public License for more details.
                     16:
                     17:    You should have received a copy of the GNU General Public License
                     18:    along with this program; if not, write to the Free Software
                     19:    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
                     20:    MA 02110-1301, USA.  */
                     21:
                     22: #include "binemul.h"
                     23: #include "bfdlink.h"
                     24: #include "coff/internal.h"
                     25: #include "coff/xcoff.h"
                     26: #include "libcoff.h"
                     27: #include "libxcoff.h"
                     28:
                     29: /* Default to <bigaf>.  */
1.1.1.3   christos   30: /* FIXME: write only variable.  */
1.1       skrll      31: static bfd_boolean big_archive = TRUE;
                     32:
                     33: /* Whether to include 32 bit objects.  */
                     34: static bfd_boolean X32 = TRUE;
                     35:
                     36: /* Whether to include 64 bit objects.  */
                     37: static bfd_boolean X64 = FALSE;
                     38:
                     39: static void
                     40: ar_emul_aix_usage (FILE *fp)
                     41: {
                     42:   AR_EMUL_USAGE_PRINT_OPTION_HEADER (fp);
                     43:   /* xgettext:c-format */
                     44:   fprintf (fp, _("  [-g]         - 32 bit small archive\n"));
                     45:   fprintf (fp, _("  [-X32]       - ignores 64 bit objects\n"));
                     46:   fprintf (fp, _("  [-X64]       - ignores 32 bit objects\n"));
                     47:   fprintf (fp, _("  [-X32_64]    - accepts 32 and 64 bit objects\n"));
                     48: }
                     49:
                     50: static bfd_boolean
1.1.1.3   christos   51: check_aix (bfd *try_bfd)
1.1       skrll      52: {
1.1.1.4   christos   53:   extern const bfd_target rs6000_xcoff_vec;
                     54:   extern const bfd_target rs6000_xcoff64_vec;
                     55:   extern const bfd_target rs6000_xcoff64_aix_vec;
1.1       skrll      56:
1.1.1.3   christos   57:   if (bfd_check_format (try_bfd, bfd_object))
1.1       skrll      58:     {
1.1.1.4   christos   59:       if (!X32 && try_bfd->xvec == &rs6000_xcoff_vec)
1.1.1.3   christos   60:        return FALSE;
1.1       skrll      61:
1.1.1.4   christos   62:       if (!X64 && (try_bfd->xvec == &rs6000_xcoff64_vec
                     63:                   || try_bfd->xvec == &rs6000_xcoff64_aix_vec))
1.1.1.3   christos   64:        return FALSE;
                     65:     }
1.1       skrll      66:   return TRUE;
                     67: }
                     68:
                     69: static bfd_boolean
1.1.1.2   christos   70: ar_emul_aix_append (bfd **after_bfd, char *file_name, const char *target,
                     71:                    bfd_boolean verbose, bfd_boolean flatten)
1.1       skrll      72: {
1.1.1.3   christos   73:   bfd *new_bfd;
1.1       skrll      74:
1.1.1.3   christos   75:   new_bfd = bfd_openr (file_name, target);
                     76:   AR_EMUL_ELEMENT_CHECK (new_bfd, file_name);
                     77:
                     78:   return do_ar_emul_append (after_bfd, new_bfd, verbose, flatten, check_aix);
1.1       skrll      79: }
                     80:
                     81: static bfd_boolean
1.1.1.2   christos   82: ar_emul_aix_replace (bfd **after_bfd, char *file_name, const char *target,
                     83:                     bfd_boolean verbose)
1.1       skrll      84: {
1.1.1.3   christos   85:   bfd *new_bfd;
1.1       skrll      86:
1.1.1.3   christos   87:   new_bfd = bfd_openr (file_name, target);
                     88:   AR_EMUL_ELEMENT_CHECK (new_bfd, file_name);
                     89:
                     90:   if (!check_aix (new_bfd))
                     91:     return FALSE;
                     92:
                     93:   AR_EMUL_REPLACE_PRINT_VERBOSE (verbose, file_name);
                     94:
                     95:   new_bfd->archive_next = *after_bfd;
                     96:   *after_bfd = new_bfd;
                     97:
                     98:   return TRUE;
1.1       skrll      99: }
                    100:
                    101: static bfd_boolean
                    102: ar_emul_aix_parse_arg (char *arg)
                    103: {
                    104:   if (CONST_STRNEQ (arg, "-X32_64"))
                    105:     {
                    106:       big_archive = TRUE;
                    107:       X32 = TRUE;
                    108:       X64 = TRUE;
                    109:     }
                    110:   else if (CONST_STRNEQ (arg, "-X32"))
                    111:     {
                    112:       big_archive = TRUE;
                    113:       X32 = TRUE;
                    114:       X64 = FALSE;
                    115:     }
                    116:   else if (CONST_STRNEQ (arg, "-X64"))
                    117:     {
                    118:       big_archive = TRUE;
                    119:       X32 = FALSE;
                    120:       X64 = TRUE;
                    121:     }
                    122:   else if (CONST_STRNEQ (arg, "-g"))
                    123:     {
                    124:       big_archive = FALSE;
                    125:       X32 = TRUE;
                    126:       X64 = FALSE;
                    127:     }
                    128:   else
                    129:     return FALSE;
                    130:
                    131:   return TRUE;
                    132: }
                    133:
                    134: struct bin_emulation_xfer_struct bin_aix_emulation =
                    135: {
                    136:   ar_emul_aix_usage,
                    137:   ar_emul_aix_append,
                    138:   ar_emul_aix_replace,
                    139:   ar_emul_aix_parse_arg,
                    140: };

CVSweb <webmaster@jp.NetBSD.org>