@@ -358,6 +358,7 @@ static void arg_format_suppress_utf8(void);
358358static void arg_format_file (void );
359359static void arg_format_gcc (void );
360360static void arg_format_groupnumber (void );
361+ static void arg_format_universalnumber (void );
361362static void arg_format_limit (void );
362363static void arg_format_producer (void );
363364static void arg_format_snc (void );
@@ -596,6 +597,10 @@ static const char *usage_long_text[] = {
596597"-u<file> --format-file=<file> Print only specified file (CU name)" ,
597598"-x groupnumber=<n> " ,
598599" --format-group-number=<n> Groupnumber to print" ,
600+ "-x universalnumber=<n> " ,
601+ " --format-universalnumber=<n> Groupnumber to print" ,
602+ " non-zero only applies to" ,
603+ " Mach-O universal binaries." ,
599604"-H<num> --format-limit=<num> Limit output to the first <num>" ,
600605" major units." ,
601606" Stop after <num> compilation units" ,
@@ -739,11 +744,16 @@ OPT_FORMAT_SUPPRESS_URI, /* -U --format-suppress-uri */
739744OPT_FORMAT_SUPPRESS_URI_MSG , /* -q --format-suppress-uri-msg */
740745
741746OPT_FORMAT_SUPPRESS_UTF8 , /* --format-suppress-utf8 */
747+ OPT_FORMAT_UNIVERSALNUMBER , /* --format-universalnumber */
742748
743749/* Print Output Limiters */
744750OPT_FORMAT_FILE , /* -u<file> --format-file=<file> */
745751OPT_FORMAT_GCC , /* -cg --format-gcc */
746752OPT_FORMAT_GROUP_NUMBER , /* -x<n> --format-group-number=<n>*/
753+
754+ /* -x<n> --format-universalnumber=<n>*/
755+ OPT_FORMAT_GROUP_UNIVERSALNUMBER ,
756+
747757OPT_FORMAT_LIMIT , /* -H<num> --format-limit=<num> */
748758OPT_FORMAT_PRODUCER , /* -c<str> --format-producer=<str> */
749759OPT_FORMAT_SNC , /* -cs --format-snc */
@@ -893,6 +903,8 @@ OPT_FORMAT_SUPPRESS_OFFSETS },
893903{"format-gcc" , dwno_argument , 0 , OPT_FORMAT_GCC },
894904{"format-group-number" , dwrequired_argument , 0 ,
895905 OPT_FORMAT_GROUP_NUMBER },
906+ {"format-universalnumber" , dwrequired_argument , 0 ,
907+ OPT_FORMAT_UNIVERSALNUMBER },
896908{"format-limit" , dwrequired_argument , 0 , OPT_FORMAT_LIMIT },
897909{"format-producer" , dwrequired_argument , 0 , OPT_FORMAT_PRODUCER },
898910{"format-snc" , dwno_argument , 0 , OPT_FORMAT_SNC },
@@ -2148,6 +2160,9 @@ void arg_x_multiple_selection(void)
21482160 } else if (strncmp (dwoptarg ,"groupnumber=" ,12 ) == 0 ) {
21492161 dwoptarg = & dwoptarg [12 ];
21502162 arg_format_groupnumber ();
2163+ } else if (strncmp (dwoptarg ,"universalnumber=" ,16 ) == 0 ) {
2164+ dwoptarg = & dwoptarg [12 ];
2165+ arg_format_universalnumber ();
21512166 } else if (strncmp (dwoptarg ,"tied=" ,5 ) == 0 ) {
21522167 dwoptarg = & dwoptarg [5 ];
21532168 arg_file_tied ();
@@ -2187,6 +2202,32 @@ arg_file_abi(void)
21872202 }
21882203}
21892204
2205+ /* Option '-x universalnumber='
2206+ greater than zero only applies to Mach-O universal
2207+ object files*/
2208+ static void
2209+ arg_format_universalnumber (void )
2210+ {
2211+ /* By default prints the lowest universal number in the object.
2212+ Default is -x universalnumber=0 */
2213+
2214+ long int gnum = 0 ;
2215+ int res = 0 ;
2216+
2217+ if (!dwoptarg || !dwoptarg [0 ]) {
2218+ printf ("ERROR *groupnumber= does not allow an empty text\n" );
2219+ glflags .gf_count_major_errors ++ ;
2220+ arg_usage_error = TRUE;
2221+ return ;
2222+ }
2223+ res = get_number_value (dwoptarg ,& gnum );
2224+ if (res == DW_DLV_OK && gnum >= 0 ) {
2225+ glflags .gf_universalnumber = gnum ;
2226+ } else {
2227+ arg_x_invalid ();
2228+ }
2229+ }
2230+
21902231/* Option '-x groupnumber=' */
21912232static void
21922233arg_format_groupnumber (void )
@@ -2510,6 +2551,8 @@ set_command_options(int argc, char *argv[])
25102551 case OPT_FORMAT_FILE : arg_format_file (); break ;
25112552 case OPT_FORMAT_GCC : arg_format_gcc (); break ;
25122553 case OPT_FORMAT_GROUP_NUMBER : arg_format_groupnumber (); break ;
2554+ case OPT_FORMAT_UNIVERSALNUMBER : arg_format_universalnumber ();
2555+ break ;
25132556 case OPT_FORMAT_LIMIT : arg_format_limit (); break ;
25142557 case OPT_FORMAT_PRODUCER : arg_format_producer (); break ;
25152558 case OPT_FORMAT_SNC : arg_format_snc (); break ;
0 commit comments