--- ./gdb/xcoffread.c.xcoffread_symtab 2016-09-13 03:42:03.000000000 -0500 +++ ./gdb/xcoffread.c 2016-09-13 03:58:15.000000000 -0500 @@ -1027,7 +1027,7 @@ union internal_auxent fcn_aux_saved = main_aux; struct context_stack *newobj; - char *filestring = " _start_ "; /* Name of the current file. */ + char *filestring = pst->filename; /* Name of the current file. */ const char *last_csect_name; /* Last seen csect's name. */ @@ -1141,8 +1141,7 @@ /* Done with all files, everything from here on is globals. */ } - if ((cs->c_sclass == C_EXT || cs->c_sclass == C_HIDEXT) - && cs->c_naux == 1) + if ((cs->c_sclass == C_EXT || cs->c_sclass == C_HIDEXT)) { /* Dealing with a symbol with a csect entry. */ @@ -1153,8 +1152,31 @@ #define CSECT_SCLAS(PP) (CSECT(PP).x_smclas) /* Convert the auxent to something we can access. */ - bfd_coff_swap_aux_in (abfd, raw_auxptr, cs->c_type, cs->c_sclass, - 0, cs->c_naux, &main_aux); + /* XCOFF can have more than 1 auxent. */ + if (cs->c_naux > 1) + { + if (ISFCN (cs->c_type) && cs->c_sclass != C_TPDEF) + { + bfd_coff_swap_aux_in (abfd, raw_auxptr, cs->c_type, + cs->c_sclass, 0, cs->c_naux, + &main_aux); + goto function_entry_point; + } + else + bfd_coff_swap_aux_in (abfd, + raw_auxptr + + ((coff_data (abfd)->local_symesz) + * (cs->c_naux - 1)), + cs->c_type, cs->c_sclass, + cs->c_naux - 1, cs->c_naux, + &main_aux); + } + else if (cs->c_naux == 1) + bfd_coff_swap_aux_in (abfd, raw_auxptr, cs->c_type, + cs->c_sclass, 0, cs->c_naux, + &main_aux); + else + continue; switch (CSECT_SMTYP (&main_aux)) {