Changeset dffaeac for src/driver/cfa.cc


Ignore:
Timestamp:
Jul 13, 2018, 6:34:11 PM (4 years ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
aaron-thesis, arm-eh, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, no_list, persistent-indexer
Children:
6b8b767
Parents:
26ef3b2
Message:

fix -x flag and handle CFA suffixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/driver/cfa.cc

    r26ef3b2 rdffaeac  
    1010// Created On       : Tue Aug 20 13:44:49 2002
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon May 14 14:16:33 2018
    13 // Update Count     : 244
     12// Last Modified On : Fri Jul 13 17:40:12 2018
     13// Update Count     : 258
    1414//
    1515
     
    3737} // prefix
    3838
     39enum { NumSuffixes = 2 };
     40const string suffixes[NumSuffixes] = { "cfa", "hfa", };
     41
     42bool suffix( string arg ) {
     43        //std::cerr << arg << std::endl;
     44        size_t dot = arg.find_last_of( "." );
     45        //std::cerr << dot << " " << (dot != string::npos ? arg.substr( dot + 1 ) : "fred" ) << std::endl;
     46        if ( dot == string::npos ) return false;
     47        string sx = arg.substr( dot + 1 );
     48        for ( int i = 0; i < NumSuffixes; i += 1 ) {
     49                if ( sx == suffixes[i] ) return true;
     50        } // for
     51        return false;
     52} // suffix
     53
    3954
    4055void shuffle( const char *args[], int S, int E, int N ) {
    4156        // S & E index 1 passed the end so adjust with -1
    42 #ifdef __DEBUG_H__
     57        #ifdef __DEBUG_H__
    4358        cerr << "shuffle:" << S << " " << E << " " << N << endl;
    44 #endif // __DEBUG_H__
     59        #endif // __DEBUG_H__
    4560        for ( int j = E-1 + N; j > S-1 + N; j -=1 ) {
    46 #ifdef __DEBUG_H__
     61                #ifdef __DEBUG_H__
    4762                cerr << "\t" << j << " " << j-N << endl;
    48 #endif // __DEBUG_H__
     63                #endif // __DEBUG_H__
    4964                args[j] = args[j-N];
    5065        } // for
     
    7994        bool std_flag = false;                                                          // -std= flag
    8095        bool noincstd_flag = false;                                                     // -no-include-stdhdr= flag
     96        bool xflag = false;                                                                     // user supplied -x flag
    8197        bool debugging __attribute(( unused )) = false;         // -g flag
    8298
     
    88104        int nlibs = 0;
    89105
    90 #ifdef __DEBUG_H__
     106        #ifdef __DEBUG_H__
    91107        cerr << "CFA:" << endl;
    92 #endif // __DEBUG_H__
     108        #endif // __DEBUG_H__
    93109
    94110        // process command-line arguments
    95111
    96112        for ( int i = 1; i < argc; i += 1 ) {
    97 #ifdef __DEBUG_H__
     113                #ifdef __DEBUG_H__
    98114                cerr << "argv[" << i << "]:\"" << argv[i] << "\"" << endl;
    99 #endif // __DEBUG_H__
     115                #endif // __DEBUG_H__
    100116                arg = argv[i];                                                                  // convert to string value
    101 #ifdef __DEBUG_H__
     117                #ifdef __DEBUG_H__
    102118                cerr << "arg:\"" << arg << "\"" << endl;
    103 #endif // __DEBUG_H__
     119                #endif // __DEBUG_H__
    104120                if ( prefix( arg, "-" ) ) {
    105121                        // pass through arguments
     
    162178                                args[nargs] = argv[i];                                  // pass the argument along
    163179                                nargs += 1;
    164                         } else if ( arg == "-x" ) {                                     // lost so force along
     180                        } else if ( arg == "-x" ) {
     181                                xflag = true;
    165182                                args[nargs] = argv[i];                                  // pass the argument along
    166183                                nargs += 1;
     
    168185                                args[nargs] = argv[i];                                  // pass the argument along
    169186                                nargs += 1;
    170                                 args[nargs] = ( *new string( string("-D__GCC_X__=") + argv[i] ) ).c_str(); // add the argument for -x
    171                                 nargs += 1;
    172                         } else if ( prefix( arg, "-x" ) ) {                     // lost so force along
    173                                 args[nargs] = argv[i];                                  // pass the argument along
    174                                 nargs += 1;
    175                                 args[nargs] = ( *new string( string("-D__GCC_X__=") + arg.substr(2) ) ).c_str(); // add the argument for -x
    176                                 nargs += 1;
     187                                // args[nargs] = ( *new string( string("-D__GCC_X__=") + argv[i] ) ).c_str(); // add the argument for -x
     188                                // nargs += 1;
     189                        } else if ( prefix( arg, "-x" ) ) {
     190                                xflag = true;
     191                                args[nargs] = argv[i];                                  // pass the argument along
     192                                nargs += 1;
     193                                // args[nargs] = ( *new string( string("-D__GCC_X__=") + arg.substr(2) ) ).c_str(); // add the argument for -x
     194                                // nargs += 1;
    177195                        } else if ( arg == "-w" ) {
    178196                                args[nargs] = argv[i];                                  // pass the argument along
     
    246264                        } // if
    247265                } else {
     266                        bool opt = false;
     267                        if ( ! xflag && suffix( arg ) ) {
     268                                args[nargs] = "-x";
     269                                nargs += 1;
     270                                args[nargs] = "c";
     271                                nargs += 1;
     272                                // args[nargs] = ( *new string( string("-D__GCC_X__=c") ) ).c_str(); // add the argument for -x
     273                                // nargs += 1;
     274                                opt = true;
     275                        } // if
    248276                        // concatenate other arguments
    249277                        args[nargs] = argv[i];
    250278                        nargs += 1;
     279                        if ( opt ) {
     280                                args[nargs] = "-x";
     281                                nargs += 1;
     282                                args[nargs] = "none";
     283                                nargs += 1;
     284                                // args[nargs] = ( *new string( string("-D__GCC_X__=none") ) ).c_str(); // add the argument for -x
     285                                // nargs += 1;
     286                        } // if
    251287                        nonoptarg = true;
     288                        xflag = false;
    252289                } // if
    253290        } // for
    254291
    255 #ifdef __x86_64__
     292        #ifdef __x86_64__
    256293        args[nargs] = "-mcx16";                                                         // allow double-wide CAA
    257294        nargs += 1;
    258 #endif // __x86_64__
    259 
    260 #ifdef __DEBUG_H__
     295        #endif // __x86_64__
     296
     297        #ifdef __DEBUG_H__
    261298        cerr << "args:";
    262299        for ( int i = 1; i < nargs; i += 1 ) {
     
    264301        } // for
    265302        cerr << endl;
    266 #endif // __DEBUG_H__
     303        #endif // __DEBUG_H__
    267304
    268305        if ( cpp_flag && CFA_flag ) {
     
    283320        nargs += 1;
    284321
    285 #ifdef HAVE_LIBCFA
     322        #ifdef HAVE_LIBCFA
    286323        if ( link ) {
    287324                #if ! defined(HAVE_LIBCFA_RELEASE)
    288                         if ( ! debug ) {
    289                                 cerr << "error: Option -nodebug is unavailable, libcfa was not installed." << endl;
    290                                 exit( EXIT_FAILURE );
    291                         } // if
     325                if ( ! debug ) {
     326                        cerr << "error: Option -nodebug is unavailable, libcfa was not installed." << endl;
     327                        exit( EXIT_FAILURE );
     328                } // if
    292329                #endif
    293330                #if ! defined(HAVE_LIBCFA_DEBUG)
    294                         if ( debug ) {
    295                                 cerr << "error: Option -debug is unavailable, libcfa-d was not installed." << endl;
    296                                 exit( EXIT_FAILURE );
    297                         } // if
     331                if ( debug ) {
     332                        cerr << "error: Option -debug is unavailable, libcfa-d was not installed." << endl;
     333                        exit( EXIT_FAILURE );
     334                } // if
    298335                #endif
    299336
     
    323360                nargs += 1;
    324361        } // if
    325 #endif // HAVE_LIBCFA
     362        #endif // HAVE_LIBCFA
    326363
    327364        // Add exception flags (unconditionally)
     
    419456        args[nargs] = NULL;                                                                     // terminate with NULL
    420457
    421 #ifdef __DEBUG_H__
     458        #ifdef __DEBUG_H__
    422459        cerr << "nargs: " << nargs << endl;
    423460        cerr << "args:" << endl;
     
    425462                cerr << " \"" << args[i] << "\"" << endl;
    426463        } // for
    427 #endif // __DEBUG_H__
     464        #endif // __DEBUG_H__
    428465
    429466        if ( ! quiet ) {
Note: See TracChangeset for help on using the changeset viewer.