eirik@labs.labs.tek.com (Eirik Fuller) (07/28/89)
The enclosed diffs provide a workaround for gdb segmentation faults. If there is supposed to be a guarantee that TYPE_FIELD_NAME etc are non-nil, this guarantee sometimes fails; if appropriate, I can probably send examples of how to make this happen. If there is no such guarantee, this might be the right fix. In any case, I doubt these patches break anything. *** ../gdb-3.2/valops.c Wed Jul 5 12:46:58 1989 --- valops.c Mon Jul 17 14:56:56 1989 *************** *** 816,822 { for (i = TYPE_NFIELDS (t) - 1; i >= 0; i--) { ! if (!strcmp (TYPE_FIELD_NAME (t, i), name)) { found = 1; break; --- 816,823 ----- { for (i = TYPE_NFIELDS (t) - 1; i >= 0; i--) { ! char *tfn = TYPE_FIELD_NAME (t, i); ! if (tfn && !strcmp (tfn, name)) { found = 1; break; *************** *** 846,852 { for (i = TYPE_NFN_FIELDS (t) - 1; i >= 0; --i) { ! if (! strcmp (TYPE_FN_FIELDLIST_NAME (t, i), name)) { error ("use `info method' command to print value of method \"%s\"", name); } --- 847,854 ----- { for (i = TYPE_NFN_FIELDS (t) - 1; i >= 0; --i) { ! char *tfn = TYPE_FN_FIELDLIST_NAME (t, i); ! if (tfn && ! strcmp (tfn, name)) { error ("use `info method' command to print value of method \"%s\"", name); } *************** *** 886,892 { struct fn_field *f = TYPE_FN_FIELDLIST1 (t, i); ! if (!strcmp (TYPE_FN_FIELDLIST_NAME (t, i), name)) { int j; struct fn_field *f = TYPE_FN_FIELDLIST1 (t, i); --- 888,895 ----- { struct fn_field *f = TYPE_FN_FIELDLIST1 (t, i); ! char *tfn = TYPE_FN_FIELDLIST_NAME (t, i); ! if (tfn && !strcmp (tfn, name)) { int j; struct fn_field *f = TYPE_FN_FIELDLIST1 (t, i); *************** *** 925,931 { for (i = TYPE_NFIELDS (t) - 1; i >= 0; i--) { ! if (!strcmp (TYPE_FIELD_NAME (t, i), name)) { found = 1; break; --- 928,935 ----- { for (i = TYPE_NFIELDS (t) - 1; i >= 0; i--) { ! char *tfn = TYPE_FIELD_NAME (t, i); ! if (tfn && !strcmp (tfn, name)) { found = 1; break; *************** *** 1013,1019 { for (i = TYPE_NFIELDS (t) - 1; i >= 0; i--) { ! if (!strcmp (TYPE_FIELD_NAME (t, i), name)) { return 1; } --- 1017,1024 ----- { for (i = TYPE_NFIELDS (t) - 1; i >= 0; i--) { ! char *tfn = TYPE_FIELD_NAME (t, i); ! if (tfn && !strcmp (tfn, name)) { return 1; } *************** *** 1038,1044 { for (i = TYPE_NFN_FIELDS (t) - 1; i >= 0; --i) { ! if (!strcmp (TYPE_FN_FIELDLIST_NAME (t, i), name)) return 1; } --- 1043,1050 ----- { for (i = TYPE_NFN_FIELDS (t) - 1; i >= 0; --i) { ! char *tfn = TYPE_FN_FIELDLIST_NAME (t, i); ! if (tfn && !strcmp (tfn, name)) return 1; } *************** *** 1078,1084 { for (i = TYPE_NFIELDS (t) - 1; i >= 0; i--) { ! if (!strcmp (TYPE_FIELD_NAME (t, i), name)) { if (TYPE_FIELD_PACKED (t, i)) error ("pointers to bitfield members not allowed"); --- 1084,1091 ----- { for (i = TYPE_NFIELDS (t) - 1; i >= 0; i--) { ! char *tfn = TYPE_FIELD_NAME (t, i); ! if (tfn && !strcmp (tfn, name)) { if (TYPE_FIELD_PACKED (t, i)) error ("pointers to bitfield members not allowed"); *************** *** 1115,1121 { for (i = TYPE_NFN_FIELDS (t) - 1; i >= 0; --i) { ! if (!strcmp (TYPE_FN_FIELDLIST_NAME (t, i), name)) { int j = TYPE_FN_FIELDLIST_LENGTH (t, i); struct fn_field *f = TYPE_FN_FIELDLIST1 (t, i); --- 1122,1129 ----- { for (i = TYPE_NFN_FIELDS (t) - 1; i >= 0; --i) { ! char *tfn = TYPE_FN_FIELDLIST_NAME (t, i); ! if (tfn && !strcmp (tfn, name)) { int j = TYPE_FN_FIELDLIST_LENGTH (t, i); struct fn_field *f = TYPE_FN_FIELDLIST1 (t, i);