ups-cvs Mailing List for UPS debugger
Brought to you by:
ianedwards
You can subscribe to this list here.
2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(11) |
Nov
(49) |
Dec
(1) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2003 |
Jan
(1) |
Feb
|
Mar
(10) |
Apr
(5) |
May
|
Jun
(5) |
Jul
(19) |
Aug
(29) |
Sep
(3) |
Oct
(1) |
Nov
(8) |
Dec
|
2004 |
Jan
|
Feb
(20) |
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(3) |
Dec
|
2005 |
Jan
(1) |
Feb
(10) |
Mar
(5) |
Apr
(1) |
May
|
Jun
|
Jul
(2) |
Aug
(3) |
Sep
|
Oct
|
Nov
|
Dec
(1) |
2006 |
Jan
(1) |
Feb
|
Mar
|
Apr
|
May
|
Jun
(4) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2007 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(4) |
Dec
|
2008 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
(11) |
Aug
|
Sep
|
Oct
(2) |
Nov
|
Dec
|
2009 |
Jan
|
Feb
|
Mar
(2) |
Apr
|
May
|
Jun
(3) |
Jul
(4) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2010 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(5) |
Nov
|
Dec
|
2011 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(1) |
Dec
|
2012 |
Jan
|
Feb
(2) |
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2014 |
Jan
(34) |
Feb
(3) |
Mar
(2) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(2) |
Oct
|
Nov
|
Dec
|
2017 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Tom H. <th...@us...> - 2017-03-08 12:21:27
|
Update of /cvsroot/ups/ups/ups In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv9681/ups Modified Files: ao_target.c obj_bpt.c obj_buildf.c st_lookup.c va_menu.c Log Message: Fix some compiler warnings. Index: st_lookup.c =================================================================== RCS file: /cvsroot/ups/ups/ups/st_lookup.c,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** st_lookup.c 10 Jul 2008 15:58:40 -0000 1.7 --- st_lookup.c 8 Mar 2017 12:21:25 -0000 1.8 *************** *** 842,846 **** char *namecopy; ! for (s = funcname; s != '\0'; ++s) { if (strchr(globchars, *s) != NULL) break; --- 842,846 ---- char *namecopy; ! for (s = funcname; *s != '\0'; ++s) { if (strchr(globchars, *s) != NULL) break; *************** *** 1404,1408 **** } ! for (s = funcname; s != '\0'; ++s) { if (strchr(globchars, *s) != NULL) break; --- 1404,1408 ---- } ! for (s = funcname; *s != '\0'; ++s) { if (strchr(globchars, *s) != NULL) break; Index: obj_bpt.c =================================================================== RCS file: /cvsroot/ups/ups/ups/obj_bpt.c,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** obj_bpt.c 14 Jan 2014 15:31:50 -0000 1.9 --- obj_bpt.c 8 Mar 2017 12:21:25 -0000 1.10 *************** *** 1910,1915 **** switch (command) { case MR_BPTMEN_SOURCE: ! if (bd->func || bd->fil) ! show_bpt_source((bpdesc_t *)obj, TRUE); break; case MR_BPTMEN_REMOVE: --- 1910,1915 ---- switch (command) { case MR_BPTMEN_SOURCE: ! if (bd->func || bd->fil) ! show_bpt_source((bpdesc_t *)obj, TRUE); break; case MR_BPTMEN_REMOVE: Index: va_menu.c =================================================================== RCS file: /cvsroot/ups/ups/ups/va_menu.c,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** va_menu.c 16 Jan 2014 18:36:27 -0000 1.9 --- va_menu.c 8 Mar 2017 12:21:25 -0000 1.10 *************** *** 588,592 **** return special_format->format; ! special_format = special_format->next; } while (special_format != NULL); --- 588,592 ---- return special_format->format; ! special_format = special_format->next; } while (special_format != NULL); Index: obj_buildf.c =================================================================== RCS file: /cvsroot/ups/ups/ups/obj_buildf.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** obj_buildf.c 4 Nov 2002 14:56:20 -0000 1.2 --- obj_buildf.c 8 Mar 2017 12:21:25 -0000 1.3 *************** *** 456,460 **** static int rows[9], first_time = 1; char *env_str, *ptr = 0; - char violation_msg[100]; int j, k, n, used, str_ok = 0; long i = 0; --- 456,459 ---- *************** *** 483,490 **** if (env_str && !str_ok) { ! sprintf(violation_msg, "WARNING: ups*%s resource must be an integer between 1 and %d\n", resource, max_rows); - fprintf(stderr, violation_msg); i = row_default; } --- 482,488 ---- if (env_str && !str_ok) { ! fprintf(stderr, "WARNING: ups*%s resource must be an integer between 1 and %d\n", resource, max_rows); i = row_default; } *************** *** 496,503 **** if (env_str && str_ok) { ! sprintf(violation_msg, "WARNING: ups*%s resource value of %ld already used\n", resource, i); - fprintf(stderr, violation_msg); } for (n = 1; n <= max_rows; n++) --- 494,500 ---- if (env_str && str_ok) { ! fprintf(stderr, "WARNING: ups*%s resource value of %ld already used\n", resource, i); } for (n = 1; n <= max_rows; n++) *************** *** 514,521 **** if (env_str && str_ok) { ! sprintf(violation_msg, " - using %ld for ups*%s instead.\n", i, resource); - fprintf(stderr, violation_msg); } break; --- 511,517 ---- if (env_str && str_ok) { ! fprintf(stderr, " - using %ld for ups*%s instead.\n", i, resource); } break; *************** *** 528,535 **** if (env_str && !str_ok) { ! sprintf(violation_msg, " - using %ld for ups*%s instead.\n", i, resource); - fprintf(stderr, violation_msg); } break; --- 524,530 ---- if (env_str && !str_ok) { ! fprintf(stderr, " - using %ld for ups*%s instead.\n", i, resource); } break; Index: ao_target.c =================================================================== RCS file: /cvsroot/ups/ups/ups/ao_target.c,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** ao_target.c 14 Jan 2014 15:31:50 -0000 1.16 --- ao_target.c 8 Mar 2017 12:21:24 -0000 1.17 *************** *** 1428,1434 **** */ if (ip->ip_stopres != SR_DIED && bp != NULL) { ! if (dx_remove_breakpoint(xp, bp) != 0) *p_mesg = "Can't remove breakpoint at return address"; return -1; } --- 1428,1435 ---- */ if (ip->ip_stopres != SR_DIED && bp != NULL) { ! if (dx_remove_breakpoint(xp, bp) != 0) { *p_mesg = "Can't remove breakpoint at return address"; return -1; + } } |
From: Tom H. <th...@us...> - 2014-09-24 11:51:54
|
Update of /cvsroot/ups/ups/ups In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv4176/ups Modified Files: ao_dwftype.c Log Message: Don't try and shortcut a typedef that refers to an unresolved type by making it refer to the target of the unresolved type. This is correct for nested typedefs, but not for other type references. Index: ao_dwftype.c =================================================================== RCS file: /cvsroot/ups/ups/ups/ao_dwftype.c,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -d -r1.20 -r1.21 *** ao_dwftype.c 24 Sep 2014 11:50:05 -0000 1.20 --- ao_dwftype.c 24 Sep 2014 11:51:52 -0000 1.21 *************** *** 813,817 **** type->ty_base = dwf_type_from_dtype(base); else ! dt->dt_base_offset = base->dt_base_offset; else dt->dt_base_offset = base_offset; --- 813,817 ---- type->ty_base = dwf_type_from_dtype(base); else ! dt->dt_base_offset = base_offset; else dt->dt_base_offset = base_offset; |
From: Tom H. <th...@us...> - 2014-09-24 11:50:07
|
Update of /cvsroot/ups/ups/ups In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv4063/ups Modified Files: ao_dwftype.c Log Message: Always search the whole of the type list when fixing up type references, as we can't guarantee any particular order of backward and forward references in the DWARF so just searching part of the list is not safe. Index: ao_dwftype.c =================================================================== RCS file: /cvsroot/ups/ups/ups/ao_dwftype.c,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** ao_dwftype.c 25 Mar 2014 13:48:02 -0000 1.19 --- ao_dwftype.c 24 Sep 2014 11:50:05 -0000 1.20 *************** *** 64,68 **** dwf_guess_ae_alignment PROTO((aggr_or_enum_def_t *ae)); static type_t * ! dwf_fixup_type PROTO((dtype_t *dt)); /* --- 64,68 ---- dwf_guess_ae_alignment PROTO((aggr_or_enum_def_t *ae)); static type_t * ! dwf_fixup_type PROTO((dtype_t *dt, dtype_t *dtypes)); /* *************** *** 942,946 **** */ for (dt = start; dt; dt = dt->dt_next) { ! dwf_fixup_type(dt); if (dt->dt_base_offset != (off_t)0) { incomplete++; --- 942,946 ---- */ for (dt = start; dt; dt = dt->dt_next) { ! dwf_fixup_type(dt, start); if (dt->dt_base_offset != (off_t)0) { incomplete++; *************** *** 1065,1070 **** */ static type_t * ! dwf_fixup_type(dt) dtype_t *dt; { dtype_t *dbase; --- 1065,1071 ---- */ static type_t * ! dwf_fixup_type(dt, dtypes) dtype_t *dt; + dtype_t *dtypes; { dtype_t *dbase; *************** *** 1078,1086 **** * Look for the base type in our list. */ ! if ((dbase = dwf_lookup_dtype(dt, dt->dt_base_offset)) != NULL) { /* * Resolve the base type if possible. */ ! if ((base = dwf_fixup_type(dbase)) != NULL) { *(dt->dt_p_type) = base; dt->dt_base_offset = (off_t)0; /* mark it done */ --- 1079,1087 ---- * Look for the base type in our list. */ ! if ((dbase = dwf_lookup_dtype(dtypes, dt->dt_base_offset)) != NULL) { /* * Resolve the base type if possible. */ ! if ((base = dwf_fixup_type(dbase, dtypes)) != NULL) { *(dt->dt_p_type) = base; dt->dt_base_offset = (off_t)0; /* mark it done */ |
From: Tom H. <th...@us...> - 2014-03-25 14:49:27
|
Update of /cvsroot/ups/ups/ups In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv3592 Modified Files: ci_types.c Log Message: Avoid buffer overflows with long type names. Index: ci_types.c =================================================================== RCS file: /cvsroot/ups/ups/ups/ci_types.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** ci_types.c 4 Nov 2002 14:56:20 -0000 1.2 --- ci_types.c 25 Mar 2014 14:49:25 -0000 1.3 *************** *** 809,813 **** type_t *type; { ! static char buf[128]; const char *tagtype, *tag; --- 809,813 ---- type_t *type; { ! static char buf[4096]; const char *tagtype, *tag; *************** *** 847,853 **** if ((tag = type->ty_aggr_or_enum->ae_tag) != NULL) ! (void) sprintf(buf, "%s %s", tagtype, tag); else ! (void) sprintf(buf, "(unnamed) %s", tagtype); return buf; } --- 847,853 ---- if ((tag = type->ty_aggr_or_enum->ae_tag) != NULL) ! (void) snprintf(buf, sizeof(buf), "%s %s", tagtype, tag); else ! (void) snprintf(buf, sizeof(buf), "(unnamed) %s", tagtype); return buf; } |
From: Tom H. <th...@us...> - 2014-03-25 13:48:04
|
Update of /cvsroot/ups/ups/ups In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv32368 Modified Files: ao_dwftype.c Log Message: Handle a typedef that refers back to a previous typedef that itself was a forward reference that hasn't been resolved yet. Index: ao_dwftype.c =================================================================== RCS file: /cvsroot/ups/ups/ups/ao_dwftype.c,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** ao_dwftype.c 14 Jan 2014 15:31:50 -0000 1.18 --- ao_dwftype.c 25 Mar 2014 13:48:02 -0000 1.19 *************** *** 779,784 **** block_t *bl; { ! dtype_t *dt; ! type_t *type, *base; typedef_t *td; off_t base_offset; --- 779,784 ---- block_t *bl; { ! dtype_t *dt, *base; ! type_t *type; typedef_t *td; off_t base_offset; *************** *** 809,814 **** if (dwf_has_attribute(dbg, die, DW_AT_type)) { base_offset = dwf_get_cu_ref(dbg, die, DW_AT_type); ! if ((base = dwf_find_type(stf, base_offset)) != NULL) ! type->ty_base = base; else dt->dt_base_offset = base_offset; --- 809,817 ---- if (dwf_has_attribute(dbg, die, DW_AT_type)) { base_offset = dwf_get_cu_ref(dbg, die, DW_AT_type); ! if ((base = dwf_lookup_dtype(stf->stf_dtypes, base_offset)) != NULL) ! if (base->dt_base_offset == 0) ! type->ty_base = dwf_type_from_dtype(base); ! else ! dt->dt_base_offset = base->dt_base_offset; else dt->dt_base_offset = base_offset; |
From: Tom H. <th...@us...> - 2014-02-13 11:29:22
|
Update of /cvsroot/ups/ups/ups In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv3545 Modified Files: ao_elfread.c Log Message: Ignore any debug file with a .gnu_debugaltlink section for now, as this means that dwz multi-file compression has been used and libdwarf doesn't handle this yet and it will cause all sorts of crashes. Index: ao_elfread.c =================================================================== RCS file: /cvsroot/ups/ups/ups/ao_elfread.c,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** ao_elfread.c 9 Jan 2014 16:28:34 -0000 1.9 --- ao_elfread.c 13 Feb 2014 11:29:19 -0000 1.10 *************** *** 575,579 **** #if WANT_DWARF ! if (elf_lookup_section(el->debugel, ".debug_info", &dwarfsh)) { *p_st_is = ST_DWARF; symsh = symstrsh = NULL; --- 575,580 ---- #if WANT_DWARF ! if (elf_lookup_section(el->debugel, ".debug_info", &dwarfsh) && ! !elf_lookup_section(el->debugel, ".gnu_debugaltlink", &debuglinksh)) { *p_st_is = ST_DWARF; symsh = symstrsh = NULL; |
From: Tom H. <th...@us...> - 2014-02-13 11:23:56
|
Update of /cvsroot/ups/ups/lib/libdwarf/cmplrs In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv3226/cmplrs Modified Files: dwarf_addr_finder.h Log Message: Update libdwarf to 20140208 release |
From: Tom H. <th...@us...> - 2014-02-02 11:06:07
|
Update of /cvsroot/ups/ups/lib/libdwarf/cmplrs In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv1243/lib/libdwarf/cmplrs Modified Files: dwarf_addr_finder.h Log Message: Update to 20140131 release of libdwarf. |
From: Tom H. <th...@us...> - 2014-01-28 14:25:47
|
Update of /cvsroot/ups/ups/ups In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv15929/ups Modified Files: ao_dwfsyms.c ao_dwftext.c ao_dwfutil.c ao_syms.h ao_text.c Log Message: Give up on trying to share file records for header files as it means we can't work out which CU to read for a inline function because we may find the wrong parent file. Instead just make the "file mismatch" checking less stringent. Index: ao_dwftext.c =================================================================== RCS file: /cvsroot/ups/ups/ups/ao_dwftext.c,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** ao_dwftext.c 27 Jan 2014 09:41:32 -0000 1.13 --- ao_dwftext.c 28 Jan 2014 14:25:45 -0000 1.14 *************** *** 186,195 **** dwf_do_cu_lines(st, stf); - /* - * If we found some lines then dwf_do_cu_lines will have already - * set this, but even if it didn't we have done our best now. - */ - f->fu_flags |= FU_DONE_LNOS; - #if WANT_DEBUG dump_header(f->fu_demangled_name); --- 186,189 ---- Index: ao_dwfsyms.c =================================================================== RCS file: /cvsroot/ups/ups/ups/ao_dwfsyms.c,v retrieving revision 1.36 retrieving revision 1.37 diff -C2 -d -r1.36 -r1.37 *** ao_dwfsyms.c 27 Jan 2014 09:43:05 -0000 1.36 --- ao_dwfsyms.c 28 Jan 2014 14:25:45 -0000 1.37 *************** *** 183,187 **** f = fl->fl_func; ! if (f->fu__lnos && (f->fu_flags & FU_DONE_LNOS) == 0) { /* * The first 'lno' may be the function preamble. --- 183,187 ---- f = fl->fl_func; ! if ((f->fu_flags & FU_DONE_LNOS) == 0) { /* * The first 'lno' may be the function preamble. *************** *** 306,310 **** f->fu_language = fil->fi_language; } ! else if (f->fu_fil != fil) panic("File mismatch"); --- 306,310 ---- f->fu_language = fil->fi_language; } ! else if (strcmp(f->fu_fil->fi_name, fil->fi_name) != 0) panic("File mismatch"); Index: ao_syms.h =================================================================== RCS file: /cvsroot/ups/ups/ups/ao_syms.h,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** ao_syms.h 24 Jan 2014 16:46:31 -0000 1.11 --- ao_syms.h 28 Jan 2014 14:25:45 -0000 1.12 *************** *** 147,151 **** #if WANT_DWARF - fil_t *st_source_files; /* Source files */ hashtab_t *st_type_names; /* Type name -> DIE. */ Dwarf_Debug st_dw_dbg; /* Handle for libdwarf calls on main object */ --- 147,150 ---- Index: ao_text.c =================================================================== RCS file: /cvsroot/ups/ups/ups/ao_text.c,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** ao_text.c 24 Jan 2014 16:46:31 -0000 1.15 --- ao_text.c 28 Jan 2014 14:25:45 -0000 1.16 *************** *** 253,257 **** #if WANT_DWARF - ast->st_source_files = NULL; ast->st_type_names = NULL; ast->st_dw_dbg = 0; --- 253,256 ---- Index: ao_dwfutil.c =================================================================== RCS file: /cvsroot/ups/ups/ups/ao_dwfutil.c,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -d -r1.28 -r1.29 *** ao_dwfutil.c 24 Jan 2014 16:46:31 -0000 1.28 --- ao_dwfutil.c 28 Jan 2014 14:25:45 -0000 1.29 *************** *** 371,380 **** int comp_dir_len = 0; hf_t **list, *file; - ao_stdata_t *ast; - - /* - * Initalise - */ - ast = AO_STDATA(stf->stf_symtab); /* --- 371,374 ---- *************** *** 417,425 **** hf_stf->stf_compiler_type = stf->stf_compiler_type; hf_stf->stf_parent = stf; ! ! if (!find_sol_fil(ast->st_source_files, comp_dir, hf_stf->stf_name, &hf_stf->stf_fil)) { ! ast->st_source_files = ao_make_fil(hf_stf, (block_t *)NULL, comp_dir, ast->st_source_files); ! hf_stf->stf_fil = ast->st_source_files; ! } } hf_stf->stf_fnum = i + 1; /* numbers start at 1 */ --- 411,415 ---- hf_stf->stf_compiler_type = stf->stf_compiler_type; hf_stf->stf_parent = stf; ! hf_stf->stf_fil = ao_make_fil(hf_stf, (block_t *)NULL, comp_dir, (fil_t *)NULL); } hf_stf->stf_fnum = i + 1; /* numbers start at 1 */ |
From: Tom H. <th...@us...> - 2014-01-27 09:43:08
|
Update of /cvsroot/ups/ups/ups In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv8073/ups Modified Files: ao_dwfsyms.c Log Message: Only warn if the address goes backward within a single function. Index: ao_dwfsyms.c =================================================================== RCS file: /cvsroot/ups/ups/ups/ao_dwfsyms.c,v retrieving revision 1.35 retrieving revision 1.36 diff -C2 -d -r1.35 -r1.36 *** ao_dwfsyms.c 27 Jan 2014 09:41:32 -0000 1.35 --- ao_dwfsyms.c 27 Jan 2014 09:43:05 -0000 1.36 *************** *** 111,115 **** char *name; funclist_t *fl; ! func_t *f; lno_t *lno = NULL; --- 111,115 ---- char *name; funclist_t *fl; ! func_t *f, *prev_f = NULL; lno_t *lno = NULL; *************** *** 142,150 **** dwf_fatal_error("dwarf_linesrc", rv, cu_die, err); - if (addr > prev_addr) - errf("dwf_do_cu_lines: Address went up - 0x%lx to 0x%lx", - (long)addr, (long)prev_addr); - prev_addr = addr; - if ((f = dwf_lookup_func_by_addr(stf, addr + stf->stf_addr)) == NULL) { errf("\bAddress 0x%lx not found in %s", (long)addr + stf->stf_addr, name); --- 142,145 ---- *************** *** 157,160 **** --- 152,161 ---- panic("dwf_do_cu_lines: Already done lnos"); + if (f == prev_f && addr > prev_addr) + errf("dwf_do_cu_lines: Address went up - 0x%lx to 0x%lx", + (long)addr, (long)prev_addr); + prev_addr = addr; + prev_f = f; + dwarf_dealloc(dbg, name, DW_DLA_STRING); dwarf_dealloc(dbg, lines[i], DW_DLA_LINE); |
From: Tom H. <th...@us...> - 2014-01-27 09:41:35
|
Update of /cvsroot/ups/ups/ups In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv7949/ups Modified Files: ao_dwfsyms.c ao_dwftext.c Log Message: Because we now share header files between multiple source files we can't just mark every function in the header as done as soon as we load line numbers for one of the source files. Instead only mark a function as done if we actually find some line numbers for it, or if it was the function we were actually looking to load the line numbers for. Index: ao_dwftext.c =================================================================== RCS file: /cvsroot/ups/ups/ups/ao_dwftext.c,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** ao_dwftext.c 14 Jan 2014 15:31:50 -0000 1.12 --- ao_dwftext.c 27 Jan 2014 09:41:32 -0000 1.13 *************** *** 186,189 **** --- 186,195 ---- dwf_do_cu_lines(st, stf); + /* + * If we found some lines then dwf_do_cu_lines will have already + * set this, but even if it didn't we have done our best now. + */ + f->fu_flags |= FU_DONE_LNOS; + #if WANT_DEBUG dump_header(f->fu_demangled_name); Index: ao_dwfsyms.c =================================================================== RCS file: /cvsroot/ups/ups/ups/ao_dwfsyms.c,v retrieving revision 1.34 retrieving revision 1.35 diff -C2 -d -r1.34 -r1.35 *** ao_dwfsyms.c 24 Jan 2014 16:56:43 -0000 1.34 --- ao_dwfsyms.c 27 Jan 2014 09:41:32 -0000 1.35 *************** *** 182,186 **** f = fl->fl_func; ! if (! (f->fu_flags & FU_DONE_LNOS)) { /* * The first 'lno' may be the function preamble. --- 182,186 ---- f = fl->fl_func; ! if (f->fu__lnos && (f->fu_flags & FU_DONE_LNOS) == 0) { /* * The first 'lno' may be the function preamble. |
From: Tom H. <th...@us...> - 2014-01-24 17:13:24
|
Update of /cvsroot/ups/ups/ups In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv31821/ups Modified Files: ao_symscan.c Log Message: We strip a leading "./" from file names when adding file records so we need to do the same when searching, or we won't match them. Index: ao_symscan.c =================================================================== RCS file: /cvsroot/ups/ups/ups/ao_symscan.c,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** ao_symscan.c 7 Jul 2009 15:42:44 -0000 1.11 --- ao_symscan.c 24 Jan 2014 17:13:22 -0000 1.12 *************** *** 548,551 **** --- 548,554 ---- abspath = *name == '/'; + if (*name == '.' && *(name+1) == '/') + name = name + 2; + for (fil = sfiles; fil != NULL; fil = fil->fi_next) { if ((abspath || same_string(fil->fi_path_hint, path_hint)) && |
From: Tom H. <th...@us...> - 2014-01-24 17:00:26
|
Update of /cvsroot/ups/ups/ups In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv30279/ups Modified Files: ao_dwarf.c Log Message: Try the DWARF4 standard DW_AT_linkage_name attribute as well as the DW_AT_MIPS_linkage_name extension when looking for the mangled name of a function. Index: ao_dwarf.c =================================================================== RCS file: /cvsroot/ups/ups/ups/ao_dwarf.c,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** ao_dwarf.c 16 Jan 2014 10:25:26 -0000 1.7 --- ao_dwarf.c 24 Jan 2014 17:00:23 -0000 1.8 *************** *** 317,321 **** if (p_mangled != NULL) { *p_mangled = NULL; ! if (dwf_has_attribute(dbg, die, DW_AT_MIPS_linkage_name)) { *p_mangled = dwf_get_string(dbg, ap, die, DW_AT_MIPS_linkage_name); found = TRUE; --- 317,325 ---- if (p_mangled != NULL) { *p_mangled = NULL; ! if (dwf_has_attribute(dbg, die, DW_AT_linkage_name)) { ! *p_mangled = dwf_get_string(dbg, ap, die, DW_AT_linkage_name); ! found = TRUE; ! } ! else if (dwf_has_attribute(dbg, die, DW_AT_MIPS_linkage_name)) { *p_mangled = dwf_get_string(dbg, ap, die, DW_AT_MIPS_linkage_name); found = TRUE; |
From: Tom H. <th...@us...> - 2014-01-24 16:56:46
|
Update of /cvsroot/ups/ups/ups In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv29974/ups Modified Files: ao_dwfsyms.c Log Message: Don't try and compare, and possible update, a function's name if we don't have one as gcc sometimes seems to output automatically generated constructors with no name. Index: ao_dwfsyms.c =================================================================== RCS file: /cvsroot/ups/ups/ups/ao_dwfsyms.c,v retrieving revision 1.33 retrieving revision 1.34 diff -C2 -d -r1.33 -r1.34 *** ao_dwfsyms.c 24 Jan 2014 15:57:25 -0000 1.33 --- ao_dwfsyms.c 24 Jan 2014 16:56:43 -0000 1.34 *************** *** 294,298 **** if (st->st_functab && addr_and_functab_to_func(st->st_functab, addr, &f) && f->fu_addr == addr) { ! if (strcmp(f->fu_name, name) != 0) f->fu_name = name; --- 294,298 ---- if (st->st_functab && addr_and_functab_to_func(st->st_functab, addr, &f) && f->fu_addr == addr) { ! if (name && strcmp(f->fu_name, name) != 0) f->fu_name = name; |
From: Tom H. <th...@us...> - 2014-01-24 16:46:33
|
Update of /cvsroot/ups/ups/ups In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv29122/ups Modified Files: ao_dwfutil.c ao_syms.h ao_text.c Log Message: Avoid creating duplicate fil_t records for the same header file when it is referenced from more than one source file in the same executable or shared library. Index: ao_syms.h =================================================================== RCS file: /cvsroot/ups/ups/ups/ao_syms.h,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** ao_syms.h 14 Jan 2014 12:39:53 -0000 1.10 --- ao_syms.h 24 Jan 2014 16:46:31 -0000 1.11 *************** *** 147,150 **** --- 147,151 ---- #if WANT_DWARF + fil_t *st_source_files; /* Source files */ hashtab_t *st_type_names; /* Type name -> DIE. */ Dwarf_Debug st_dw_dbg; /* Handle for libdwarf calls on main object */ Index: ao_text.c =================================================================== RCS file: /cvsroot/ups/ups/ups/ao_text.c,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** ao_text.c 7 Jul 2009 15:42:44 -0000 1.14 --- ao_text.c 24 Jan 2014 16:46:31 -0000 1.15 *************** *** 253,256 **** --- 253,257 ---- #if WANT_DWARF + ast->st_source_files = NULL; ast->st_type_names = NULL; ast->st_dw_dbg = 0; Index: ao_dwfutil.c =================================================================== RCS file: /cvsroot/ups/ups/ups/ao_dwfutil.c,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -d -r1.27 -r1.28 *** ao_dwfutil.c 17 Jan 2014 16:09:35 -0000 1.27 --- ao_dwfutil.c 24 Jan 2014 16:46:31 -0000 1.28 *************** *** 371,374 **** --- 371,380 ---- int comp_dir_len = 0; hf_t **list, *file; + ao_stdata_t *ast; + + /* + * Initalise + */ + ast = AO_STDATA(stf->stf_symtab); /* *************** *** 411,415 **** hf_stf->stf_compiler_type = stf->stf_compiler_type; hf_stf->stf_parent = stf; ! hf_stf->stf_fil = ao_make_fil(hf_stf, (block_t *)NULL, comp_dir, (fil_t *)NULL); } hf_stf->stf_fnum = i + 1; /* numbers start at 1 */ --- 417,425 ---- hf_stf->stf_compiler_type = stf->stf_compiler_type; hf_stf->stf_parent = stf; ! ! if (!find_sol_fil(ast->st_source_files, comp_dir, hf_stf->stf_name, &hf_stf->stf_fil)) { ! ast->st_source_files = ao_make_fil(hf_stf, (block_t *)NULL, comp_dir, ast->st_source_files); ! hf_stf->stf_fil = ast->st_source_files; ! } } hf_stf->stf_fnum = i + 1; /* numbers start at 1 */ |
From: Tom H. <th...@us...> - 2014-01-24 15:57:28
|
Update of /cvsroot/ups/ups/ups In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv24591/ups Modified Files: ao_dwfsyms.c Log Message: Compute high_pc correctly for functions when it is recorded in the DWARF as an offset from low_pc. Index: ao_dwfsyms.c =================================================================== RCS file: /cvsroot/ups/ups/ups/ao_dwfsyms.c,v retrieving revision 1.32 retrieving revision 1.33 diff -C2 -d -r1.32 -r1.33 *** ao_dwfsyms.c 14 Jan 2014 15:31:50 -0000 1.32 --- ao_dwfsyms.c 24 Jan 2014 15:57:25 -0000 1.33 *************** *** 282,286 **** /* These used to process line number data later. */ fs->fs_low_pc = dwf_get_address(dbg, addr_die, DW_AT_low_pc, 0) + stf->stf_addr; ! fs->fs_high_pc = dwf_get_address(dbg, addr_die, DW_AT_high_pc, fs->fs_low_pc) + stf->stf_addr; fs->fs_die_offset = dwf_offset_of_die(dbg, addr_die); --- 282,286 ---- /* These used to process line number data later. */ fs->fs_low_pc = dwf_get_address(dbg, addr_die, DW_AT_low_pc, 0) + stf->stf_addr; ! fs->fs_high_pc = dwf_get_address(dbg, addr_die, DW_AT_high_pc, fs->fs_low_pc - stf->stf_addr) + stf->stf_addr; fs->fs_die_offset = dwf_offset_of_die(dbg, addr_die); *************** *** 311,315 **** } else { ! f = ci_make_func(st->st_apool, name, addr, st, fil, *p_flist); } --- 311,315 ---- } else { ! f = ci_make_func(st->st_apool, name, addr, st, fil, *p_flist); } |
From: Tom H. <th...@us...> - 2014-01-17 16:09:38
|
Update of /cvsroot/ups/ups/ups In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv1068/ups Modified Files: ao_dwfutil.c Log Message: Beef up the DWARF unwinder a bit. Index: ao_dwfutil.c =================================================================== RCS file: /cvsroot/ups/ups/ups/ao_dwfutil.c,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -d -r1.26 -r1.27 *** ao_dwfutil.c 16 Jan 2014 10:34:01 -0000 1.26 --- ao_dwfutil.c 17 Jan 2014 16:09:35 -0000 1.27 *************** *** 682,706 **** if (rv == DW_DLV_OK) { ! if (value_type != DW_EXPR_OFFSET) ! panic("Unsupported value type in unwind info"); ! ! if (register_num == DW_FRAME_CFA_COL3) ! *regval = cfa; ! else if (register_num == fp_col) ! *regval = fp; ! else if (register_num == sp_col) ! *regval = sp; ! else if (register_num == DW_FRAME_SAME_VAL && regnum == fp_col) ! *regval = fp; ! else if (register_num == DW_FRAME_SAME_VAL && regnum == sp_col) ! *regval = cfa; ! else ! rv = DW_DLV_ERROR; ! if (rv == DW_DLV_OK && offset_relevant) ! *regval += offset_or_block_len; ! if (rv == DW_DLV_OK && register_num == DW_FRAME_CFA_COL3) ! dread_addrval(xp, *regval, regval); } --- 682,716 ---- if (rv == DW_DLV_OK) { ! if (value_type == DW_EXPR_OFFSET) { ! if (register_num == DW_FRAME_CFA_COL3) ! *regval = cfa; ! else if (register_num == fp_col) ! *regval = fp; ! else if (register_num == sp_col) ! *regval = sp; ! else if (register_num == DW_FRAME_SAME_VAL && regnum == fp_col) ! *regval = fp; ! else if (register_num == DW_FRAME_SAME_VAL && regnum == sp_col) ! *regval = cfa; ! else ! rv = DW_DLV_ERROR; ! if (rv == DW_DLV_OK && offset_relevant) ! *regval += offset_or_block_len; ! if (rv == DW_DLV_OK && register_num == DW_FRAME_CFA_COL3) ! dread_addrval(xp, *regval, regval); ! } else if (value_type == DW_EXPR_VAL_OFFSET) { ! *regval = cfa + offset_or_block_len; ! } else if (value_type == DW_EXPR_EXPRESSION) { ! errf("dwf_unwind_reg : unhandled expression value"); ! rv = DW_DLV_ERROR; ! } else if (value_type == DW_EXPR_VAL_EXPRESSION) { ! errf("dwf_unwind_reg : unhandled val_expression value"); ! rv = DW_DLV_ERROR; ! } else { ! errf("dwf_unwind_reg : unknown value type"); ! rv = DW_DLV_ERROR; ! } } |
From: Tom H. <th...@us...> - 2014-01-17 15:05:53
|
Update of /cvsroot/ups/ups/ups In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv24782/ups Modified Files: ao_elfread64.c Log Message: Handle alignment correctly in 64 bit ELF images. Index: ao_elfread64.c =================================================================== RCS file: /cvsroot/ups/ups/ups/ao_elfread64.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** ao_elfread64.c 3 Jan 2014 14:57:57 -0000 1.2 --- ao_elfread64.c 17 Jan 2014 15:05:50 -0000 1.3 *************** *** 41,45 **** #define ELF_R_TYPE(val) ELF64_R_TYPE(val) ! #define ELF_ALIGN(offset) (((offset) + 3) & ~3) #define ELF(x) elf64_##x --- 41,45 ---- #define ELF_R_TYPE(val) ELF64_R_TYPE(val) ! #define ELF_ALIGN(offset) (((offset) + 7) & ~7) #define ELF(x) elf64_##x |
From: Tom H. <th...@us...> - 2014-01-16 18:36:30
|
Update of /cvsroot/ups/ups/ups In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv2841/ups Modified Files: va_menu.c Log Message: Don't try and use DWARF variable location data for globals Index: va_menu.c =================================================================== RCS file: /cvsroot/ups/ups/ups/va_menu.c,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** va_menu.c 16 Jan 2014 10:34:01 -0000 1.8 --- va_menu.c 16 Jan 2014 18:36:27 -0000 1.9 *************** *** 606,610 **** xp = get_current_target(); ! if (v->va_location) { func_t *f = get_stack_func(par, &pc, &fp, &ap, &sp, &cfa); stf_t *stf = AO_FIDATA(f->fu_fil); --- 606,610 ---- xp = get_current_target(); ! if (v->va_location && ups_get_object_type(par) != OT_SFILE) { func_t *f = get_stack_func(par, &pc, &fp, &ap, &sp, &cfa); stf_t *stf = AO_FIDATA(f->fu_fil); |
From: Tom H. <th...@us...> - 2014-01-16 10:34:04
|
Update of /cvsroot/ups/ups/ups In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv22705/ups Modified Files: ao_dwfutil.c obj_stack.c obj_stack.h symtab.h va_expr.c va_format.c va_menu.c Log Message: Add support for DWARF variables whose location varies during the course of a function's execution. Index: va_expr.c =================================================================== RCS file: /cvsroot/ups/ups/ups/va_expr.c,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** va_expr.c 14 Jan 2014 14:34:12 -0000 1.10 --- va_expr.c 16 Jan 2014 10:34:01 -0000 1.11 *************** *** 410,414 **** fil = (fil_t *)par; else ! fil = get_stack_func(par, &junk, &junk, &junk, &junk)->fu_fil; lnum = de->de_block->bl_start_lnum; --- 410,414 ---- fil = (fil_t *)par; else ! fil = get_stack_func(par, &junk, &junk, &junk, &junk, &junk)->fu_fil; lnum = de->de_block->bl_start_lnum; *************** *** 917,921 **** bool change_caused_by_edit; { ! taddr_t fp, ap, sp, cfa; dexpr_t *de; bool lose_descendents; --- 917,921 ---- bool change_caused_by_edit; { ! taddr_t pc, fp, ap, sp, cfa; dexpr_t *de; bool lose_descendents; *************** *** 941,947 **** par = get_code(obj, OBJ_PARENT); if (ups_get_object_type(par) == OT_SFILE) ! fp = ap = 0; else ! get_stack_func(par, &fp, &ap, &sp, &cfa); Expr_type = NULL; --- 941,947 ---- par = get_code(obj, OBJ_PARENT); if (ups_get_object_type(par) == OT_SFILE) ! pc = fp = ap = sp = cfa = 0; else ! get_stack_func(par, &pc, &fp, &ap, &sp, &cfa); Expr_type = NULL; *************** *** 1325,1329 **** fil = (fil_t *)par; else ! fil = get_stack_func(par, &junk, &junk, &junk, &junk)->fu_fil; lnum = de->de_block->bl_start_lnum; --- 1325,1329 ---- fil = (fil_t *)par; else ! fil = get_stack_func(par, &junk, &junk, &junk, &junk, &junk)->fu_fil; lnum = de->de_block->bl_start_lnum; *************** *** 1341,1345 **** if (cr->cr_machine != NULL && cr->cr_parse_id != NULL) { ! taddr_t fp, ap, sp, cfa; ci_exec_result_t res; objid_t par; --- 1341,1345 ---- if (cr->cr_machine != NULL && cr->cr_parse_id != NULL) { ! taddr_t pc, fp, ap, sp, cfa; ci_exec_result_t res; objid_t par; *************** *** 1347,1353 **** par = get_code((objid_t)de, OBJ_PARENT); if (ups_get_object_type(par) == OT_SFILE) ! fp = ap = 0; else ! get_stack_func(par, &fp, &ap, &sp, &cfa); Expr_type = NULL; --- 1347,1353 ---- par = get_code((objid_t)de, OBJ_PARENT); if (ups_get_object_type(par) == OT_SFILE) ! pc = fp = ap = sp = cfa = 0; else ! get_stack_func(par, &pc, &fp, &ap, &sp, &cfa); Expr_type = NULL; *************** *** 1388,1392 **** { objid_t par; ! taddr_t fp, ap, sp, cfa, junk; fil_t *fil; int lnum; --- 1388,1392 ---- { objid_t par; ! taddr_t pc, fp, ap, sp, cfa, junk; fil_t *fil; int lnum; *************** *** 1401,1405 **** fil = (fil_t *)par; else ! fil = get_stack_func(par, &junk, &junk, &junk, &junk)->fu_fil; lnum = de->de_block->bl_start_lnum; --- 1401,1405 ---- fil = (fil_t *)par; else ! fil = get_stack_func(par, &junk, &junk, &junk, &junk, &junk)->fu_fil; lnum = de->de_block->bl_start_lnum; *************** *** 1429,1435 **** par = get_code((objid_t)de, OBJ_PARENT); if (ups_get_object_type(par) == OT_SFILE) ! fp = ap = 0; else ! get_stack_func(par, &fp, &ap, &sp, &cfa); Expr_type = NULL; --- 1429,1435 ---- par = get_code((objid_t)de, OBJ_PARENT); if (ups_get_object_type(par) == OT_SFILE) ! pc = fp = ap = sp = cfa = 0; else ! get_stack_func(par, &pc, &fp, &ap, &sp, &cfa); Expr_type = NULL; Index: va_format.c =================================================================== RCS file: /cvsroot/ups/ups/ups/va_format.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** va_format.c 20 Dec 2005 12:43:12 -0000 1.2 --- va_format.c 16 Jan 2014 10:34:01 -0000 1.3 *************** *** 517,521 **** case OT_FUNC: case OT_BLOCK: ! func = get_stack_func(par, &junk, &junk, &junk, &junk); fil = func->fu_fil; break; --- 517,521 ---- case OT_FUNC: case OT_BLOCK: ! func = get_stack_func(par, &junk, &junk, &junk, &junk, &junk); fil = func->fu_fil; break; Index: va_menu.c =================================================================== RCS file: /cvsroot/ups/ups/ups/va_menu.c,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** va_menu.c 14 Jan 2014 15:31:51 -0000 1.7 --- va_menu.c 16 Jan 2014 10:34:01 -0000 1.8 *************** *** 601,605 **** int *p_decl_may_have_changed; { ! taddr_t addr, fp, ap, sp, cfa; target_t *xp; --- 601,605 ---- int *p_decl_may_have_changed; { ! taddr_t addr, pc, fp, ap, sp, cfa; target_t *xp; *************** *** 607,638 **** if (v->va_location) { ! switch (v->va_location->v_op) { ! case OP_ADDR: ! addr = v->va_location->v_addr; ! break; ! case OP_REGISTER: ! addr = get_reg_addr(xp, par, (int)v->va_location->v_register, ! (size_t)dynamic_type_size(v->va_type, ! ilist)); ! break; ! case OP_CFA_RELATIVE: ! (void)get_stack_func(par, &fp, &ap, &sp, &cfa); ! addr = cfa + v->va_location->v_offset; ! break; ! case OP_FP_RELATIVE: ! (void)get_stack_func(par, &fp, &ap, &sp, &cfa); ! addr = fp + v->va_location->v_offset; ! break; ! case OP_SP_RELATIVE: ! (void)get_stack_func(par, &fp, &ap, &sp, &cfa); ! addr = sp + v->va_location->v_offset; ! break; ! default: ! panic("unknown op in gda"); } } else { switch (v->va_class) { case CL_REF: ! (void) get_stack_func(par, &fp, &ap, &sp, &cfa); if (dread(xp, ap+v->va_addr, (char *)&addr, sizeof(addr)) != 0) --- 607,652 ---- if (v->va_location) { ! func_t *f = get_stack_func(par, &pc, &fp, &ap, &sp, &cfa); ! stf_t *stf = AO_FIDATA(f->fu_fil); ! vaddr_t *vaddr; ! ! while (stf->stf_parent) ! stf = stf->stf_parent; ! ! for (vaddr = v->va_location; vaddr; vaddr = vaddr->v_next) { ! if (pc - stf->stf_addr >= vaddr->v_low_pc && ! pc - stf->stf_addr < vaddr->v_high_pc ) break; ! } ! ! if (vaddr == NULL) { ! errf("no location match in gda"); ! addr = BAD_ADDR; ! } else { ! switch (vaddr->v_op) { ! case OP_ADDR: ! addr = vaddr->v_addr; ! break; ! case OP_REGISTER: ! addr = get_reg_addr(xp, par, (int)vaddr->v_register, ! (size_t)dynamic_type_size(v->va_type, ! ilist)); ! break; ! case OP_CFA_RELATIVE: ! addr = cfa + vaddr->v_offset; ! break; ! case OP_FP_RELATIVE: ! addr = fp + vaddr->v_offset; ! break; ! case OP_SP_RELATIVE: ! addr = sp + vaddr->v_offset; ! break; ! default: ! panic("unknown op in gda"); ! } } } else { switch (v->va_class) { case CL_REF: ! (void) get_stack_func(par, &pc, &fp, &ap, &sp, &cfa); if (dread(xp, ap+v->va_addr, (char *)&addr, sizeof(addr)) != 0) *************** *** 641,649 **** break; case CL_ARG: ! (void) get_stack_func(par, &fp, &ap, &sp, &cfa); addr = ap + v->va_addr; break; case CL_AUTO: ! get_stack_func(par, &fp, &ap, &sp, &cfa); addr = fp + v->va_addr; --- 655,663 ---- break; case CL_ARG: ! (void) get_stack_func(par, &pc, &fp, &ap, &sp, &cfa); addr = ap + v->va_addr; break; case CL_AUTO: ! get_stack_func(par, &pc, &fp, &ap, &sp, &cfa); addr = fp + v->va_addr; Index: symtab.h =================================================================== RCS file: /cvsroot/ups/ups/ups/symtab.h,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** symtab.h 20 Dec 2005 12:43:12 -0000 1.4 --- symtab.h 16 Jan 2014 10:34:01 -0000 1.5 *************** *** 314,319 **** } vaddr_op_t; typedef struct vaddr_s { vaddr_op_t v_op; /* Operation. */ - struct vaddr_s *v_next; union { taddr_t vu_addr; /* Address or unsigned offset. */ --- 314,321 ---- } vaddr_op_t; typedef struct vaddr_s { + struct vaddr_s *v_next; /* Next description. */ + taddr_t v_low_pc; /* Low PC address. */ + taddr_t v_high_pc; /* High PC address. */ vaddr_op_t v_op; /* Operation. */ union { taddr_t vu_addr; /* Address or unsigned offset. */ Index: obj_stack.h =================================================================== RCS file: /cvsroot/ups/ups/ups/obj_stack.h,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** obj_stack.h 20 Dec 2005 12:43:12 -0000 1.3 --- obj_stack.h 16 Jan 2014 10:34:01 -0000 1.4 *************** *** 70,74 **** #ifdef SYMTAB_H_INCLUDED block_t *obj_to_block PROTO((objid_t obj)); ! func_t *get_stack_func PROTO((objid_t obj, taddr_t *p_fp, taddr_t *p_ap, taddr_t *p_sp, taddr_t *p_cfa)); objid_t find_block PROTO((objid_t par, block_t *block)); --- 70,74 ---- #ifdef SYMTAB_H_INCLUDED block_t *obj_to_block PROTO((objid_t obj)); ! func_t *get_stack_func PROTO((objid_t obj, taddr_t *p_pc, taddr_t *p_fp, taddr_t *p_ap, taddr_t *p_sp, taddr_t *p_cfa)); objid_t find_block PROTO((objid_t par, block_t *block)); Index: obj_stack.c =================================================================== RCS file: /cvsroot/ups/ups/ups/obj_stack.c,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** obj_stack.c 14 Jan 2014 15:31:50 -0000 1.8 --- obj_stack.c 16 Jan 2014 10:34:01 -0000 1.9 *************** *** 1211,1215 **** taddr_t junk; ! f = get_stack_func(par, &junk, &junk, &junk, &junk); #ifdef ARCH_MIPS if (!(f->fu_language == LANG_C || f->fu_language == LANG_CC)) { --- 1211,1215 ---- taddr_t junk; ! f = get_stack_func(par, &junk, &junk, &junk, &junk, &junk); #ifdef ARCH_MIPS if (!(f->fu_language == LANG_C || f->fu_language == LANG_CC)) { *************** *** 1276,1286 **** func_t * ! get_stack_func(obj, p_fp, p_ap, p_sp, p_cfa) objid_t obj; ! taddr_t *p_fp, *p_ap, *p_sp, *p_cfa; { Stack *stk; stk = obj_to_stack(obj); *p_fp = stk->stk_fp; *p_ap = stk->stk_ap; --- 1276,1287 ---- func_t * ! get_stack_func(obj, p_pc, p_fp, p_ap, p_sp, p_cfa) objid_t obj; ! taddr_t *p_pc, *p_fp, *p_ap, *p_sp, *p_cfa; { Stack *stk; stk = obj_to_stack(obj); + *p_pc = stk->stk_pc; *p_fp = stk->stk_fp; *p_ap = stk->stk_ap; *************** *** 1465,1469 **** if (!par) return found; ! f = get_stack_func(par, &junk, &junk, &junk, &junk); #ifdef ARCH_MIPS --- 1466,1470 ---- if (!par) return found; ! f = get_stack_func(par, &junk, &junk, &junk, &junk, &junk); #ifdef ARCH_MIPS Index: ao_dwfutil.c =================================================================== RCS file: /cvsroot/ups/ups/ups/ao_dwfutil.c,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** ao_dwfutil.c 15 Jan 2014 10:22:47 -0000 1.25 --- ao_dwfutil.c 16 Jan 2014 10:34:01 -0000 1.26 *************** *** 495,499 **** Dwarf_Signed count = 0; Dwarf_Small op; ! vaddr_t *head = NULL, *vaddr; unsigned char fp_regop; unsigned char sp_regop; --- 495,499 ---- Dwarf_Signed count = 0; Dwarf_Small op; ! vaddr_t *head = NULL, *tail = NULL, *vaddr; unsigned char fp_regop; unsigned char sp_regop; *************** *** 523,629 **** for (i = 0; i < count; i++) { vaddr = (vaddr_t *)alloc(ap, sizeof(vaddr_t)); - if (head == NULL) { - head = vaddr; - } else { - errf("dwf_get_location : location list too long"); - head = NULL; - break; - } ! if (loclist[i]->ld_cents != 1) { ! errf("dwf_get_location : location expression too complicated"); ! head = NULL; ! break; ! } ! op = loclist[i]->ld_s->lr_atom; ! if (op == DW_OP_addr) { ! /* ! * Address ! */ ! vaddr->v_op = OP_ADDR; ! vaddr->v_addr = loclist[i]->ld_s->lr_number; ! } else if ((op >= DW_OP_reg0) && (op <= DW_OP_reg31)) { ! /* ! * Register 0..31 ! */ ! vaddr->v_op = OP_REGISTER; ! vaddr->v_register = op - DW_OP_reg0; ! } else if (op == DW_OP_regx) { ! /* ! * Register ! */ ! vaddr->v_op = OP_REGISTER; ! vaddr->v_register = loclist[i]->ld_s->lr_number; ! } else if (op == DW_OP_plus_uconst) { ! /* ! * Unsigned offset. ! */ ! vaddr->v_op = OP_U_OFFSET; ! vaddr->v_u_offset = loclist[i]->ld_s->lr_number; ! } else if (op == DW_OP_fbreg) { ! /* ! * Relative to frame base address. ! */ ! if (frame_base == BAD_FRAME_BASE) { ! errf("dwf_get_location : frame base not known"); ! head = NULL; ! i = count; ! } else if (frame_base && frame_base->v_op == OP_REGISTER) { ! if (frame_base->v_register == fp_reg) { ! vaddr->v_op = OP_FP_RELATIVE; ! vaddr->v_offset = (Dwarf_Signed)loclist[i]->ld_s->lr_number; ! } else if (frame_base->v_register == sp_reg) { ! vaddr->v_op = OP_SP_RELATIVE; ! vaddr->v_offset = (Dwarf_Signed)loclist[i]->ld_s->lr_number; } else { ! panic("dwf_get_location : frame base register not fp or sp"); } ! } else { ! vaddr->v_op = OP_CFA_RELATIVE; ! vaddr->v_offset = (Dwarf_Signed)loclist[i]->ld_s->lr_number; ! } ! } else if (op == fp_regop) { ! /* ! * Relative to frame pointer. ! */ ! vaddr->v_op = OP_FP_RELATIVE; ! vaddr->v_offset = (Dwarf_Signed)loclist[i]->ld_s->lr_number; ! } else if (op == sp_regop) { ! /* ! * Relative to stack pointer. ! */ ! vaddr->v_op = OP_SP_RELATIVE; ! vaddr->v_offset = (Dwarf_Signed)loclist[i]->ld_s->lr_number; ! } else if (op == DW_OP_call_frame_cfa) { ! /* ! * Frame base address. ! */ ! if (frame_base == BAD_FRAME_BASE) { ! errf("dwf_get_location : frame base not known"); ! head = NULL; ! i = count; ! } else if (frame_base && frame_base->v_op == OP_REGISTER) { ! if (frame_base->v_register == fp_reg) { ! vaddr->v_op = OP_FP_RELATIVE; ! vaddr->v_offset = 0; ! } else if (frame_base->v_register == sp_reg) { ! vaddr->v_op = OP_SP_RELATIVE; ! vaddr->v_offset = 0; } else { ! panic("dwf_get_location : frame base register not fp or sp"); } } else { ! vaddr->v_op = OP_CFA_RELATIVE; ! vaddr->v_offset = 0; } } else { ! panic("dwf_get_location : unsupported opcode in location expression"); } ! dwarf_dealloc(dbg, loclist[i]->ld_s, DW_DLA_LOC_BLOCK); ! dwarf_dealloc(dbg, loclist[i], DW_DLA_LOCDESC); } dwarf_dealloc(dbg, loclist, DW_DLA_LIST); --- 523,633 ---- for (i = 0; i < count; i++) { + Dwarf_Locdesc *ld = loclist[i]; vaddr = (vaddr_t *)alloc(ap, sizeof(vaddr_t)); ! vaddr->v_next = NULL; ! vaddr->v_low_pc = ld->ld_lopc; ! vaddr->v_high_pc = ld->ld_hipc; ! if (ld->ld_cents == 1) { ! op = ld->ld_s->lr_atom; ! if (op == DW_OP_addr) { ! /* ! * Address ! */ ! vaddr->v_op = OP_ADDR; ! vaddr->v_addr = ld->ld_s->lr_number; ! } else if ((op >= DW_OP_reg0) && (op <= DW_OP_reg31)) { ! /* ! * Register 0..31 ! */ ! vaddr->v_op = OP_REGISTER; ! vaddr->v_register = op - DW_OP_reg0; ! } else if (op == DW_OP_regx) { ! /* ! * Register ! */ ! vaddr->v_op = OP_REGISTER; ! vaddr->v_register = ld->ld_s->lr_number; ! } else if (op == DW_OP_plus_uconst) { ! /* ! * Unsigned offset. ! */ ! vaddr->v_op = OP_U_OFFSET; ! vaddr->v_u_offset = ld->ld_s->lr_number; ! } else if (op == DW_OP_fbreg) { ! /* ! * Relative to frame base address. ! */ ! if (frame_base == BAD_FRAME_BASE) { ! errf("dwf_get_location : frame base not known"); ! goto next_location; ! } else if (frame_base && frame_base->v_op == OP_REGISTER) { ! if (frame_base->v_register == fp_reg) { ! vaddr->v_op = OP_FP_RELATIVE; ! vaddr->v_offset = (Dwarf_Signed)ld->ld_s->lr_number; ! } else if (frame_base->v_register == sp_reg) { ! vaddr->v_op = OP_SP_RELATIVE; ! vaddr->v_offset = (Dwarf_Signed)ld->ld_s->lr_number; ! } else { ! panic("dwf_get_location : frame base register not fp or sp"); ! } } else { ! vaddr->v_op = OP_CFA_RELATIVE; ! vaddr->v_offset = (Dwarf_Signed)ld->ld_s->lr_number; } ! } else if (op == fp_regop) { ! /* ! * Relative to frame pointer. ! */ ! vaddr->v_op = OP_FP_RELATIVE; ! vaddr->v_offset = (Dwarf_Signed)ld->ld_s->lr_number; ! } else if (op == sp_regop) { ! /* ! * Relative to stack pointer. ! */ ! vaddr->v_op = OP_SP_RELATIVE; ! vaddr->v_offset = (Dwarf_Signed)ld->ld_s->lr_number; ! } else if (op == DW_OP_call_frame_cfa) { ! /* ! * Frame base address. ! */ ! if (frame_base == BAD_FRAME_BASE) { ! errf("dwf_get_location : frame base not known"); ! goto next_location; ! } else if (frame_base && frame_base->v_op == OP_REGISTER) { ! if (frame_base->v_register == fp_reg) { ! vaddr->v_op = OP_FP_RELATIVE; ! vaddr->v_offset = 0; ! } else if (frame_base->v_register == sp_reg) { ! vaddr->v_op = OP_SP_RELATIVE; ! vaddr->v_offset = 0; ! } else { ! panic("dwf_get_location : frame base register not fp or sp"); ! } } else { ! vaddr->v_op = OP_CFA_RELATIVE; ! vaddr->v_offset = 0; } } else { ! errf("dwf_get_location : unsupported opcode in location expression"); ! goto next_location; } } else { ! errf("dwf_get_location : location expression too complicated"); ! goto next_location; } + + if (head == NULL) { + tail = head = vaddr; + } else { + tail = tail->v_next = vaddr; + } ! next_location: ! ! dwarf_dealloc(dbg, ld->ld_s, DW_DLA_LOC_BLOCK); ! dwarf_dealloc(dbg, ld, DW_DLA_LOCDESC); } dwarf_dealloc(dbg, loclist, DW_DLA_LIST); |
From: Tom H. <th...@us...> - 2014-01-16 10:25:28
|
Update of /cvsroot/ups/ups/ups In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv21416/ups Modified Files: ao_dwarf.c Log Message: Don't try and examine an attribute that we failed to read. Index: ao_dwarf.c =================================================================== RCS file: /cvsroot/ups/ups/ups/ao_dwarf.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** ao_dwarf.c 10 Jan 2014 10:51:34 -0000 1.6 --- ao_dwarf.c 16 Jan 2014 10:25:26 -0000 1.7 *************** *** 345,371 **** Dwarf_Half form; ! if ((rv = dwarf_attr(die, id, &attribute, &err)) != DW_DLV_OK) dwf_fatal_error("dwarf_attr", rv, die, err); ! if ((rv = dwarf_whatform(attribute, &form, &err)) != DW_DLV_OK) dwf_fatal_error("dwarf_whatform", rv, die, err); ! if (form == DW_FORM_addr) { ! if ((rv = dwarf_formaddr(attribute, &addr, &err)) != DW_DLV_OK) ! dwf_fatal_error("dwarf_formaddr", rv, die, err); ! } else if ((form == DW_FORM_data1) ! || (form == DW_FORM_data2) ! || (form == DW_FORM_data4) ! || (form == DW_FORM_data8) ! || (form == DW_FORM_udata)) { ! Dwarf_Unsigned offset; ! if ((rv = dwarf_formudata(attribute, &offset, &err)) != DW_DLV_OK) ! dwf_fatal_error("dwarf_formudata", rv, die, err); ! addr = base + offset; ! } else { ! dwf_fatal_error("attribute form not address", 0, die, err); } - dwarf_dealloc(dbg, attribute, DW_DLA_ATTR); } return addr; --- 345,373 ---- Dwarf_Half form; ! if ((rv = dwarf_attr(die, id, &attribute, &err)) != DW_DLV_OK) { dwf_fatal_error("dwarf_attr", rv, die, err); ! } else if ((rv = dwarf_whatform(attribute, &form, &err)) != DW_DLV_OK) { dwf_fatal_error("dwarf_whatform", rv, die, err); + } else { + if (form == DW_FORM_addr) { + if ((rv = dwarf_formaddr(attribute, &addr, &err)) != DW_DLV_OK) + dwf_fatal_error("dwarf_formaddr", rv, die, err); + } else if ((form == DW_FORM_data1) + || (form == DW_FORM_data2) + || (form == DW_FORM_data4) + || (form == DW_FORM_data8) + || (form == DW_FORM_udata)) { + Dwarf_Unsigned offset; ! if ((rv = dwarf_formudata(attribute, &offset, &err)) != DW_DLV_OK) ! dwf_fatal_error("dwarf_formudata", rv, die, err); ! addr = base + offset; ! } else { ! dwf_fatal_error("attribute form not address", 0, die, err); ! } ! dwarf_dealloc(dbg, attribute, DW_DLA_ATTR); } } return addr; |
From: Tom H. <th...@us...> - 2014-01-15 13:45:38
|
Update of /cvsroot/ups/ups/ups In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv3563/ups Modified Files: ao_ptrace.c Log Message: Install the abort handler after the setjmp context is created. Index: ao_ptrace.c =================================================================== RCS file: /cvsroot/ups/ups/ups/ao_ptrace.c,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** ao_ptrace.c 15 Jan 2014 08:55:32 -0000 1.16 --- ao_ptrace.c 15 Jan 2014 13:45:35 -0000 1.17 *************** *** 230,234 **** int *p_errno; { ! abort_func_t oldfunc = set_user_abort_func(stop_target); int ret; --- 230,234 ---- int *p_errno; { ! abort_func_t oldfunc = NULL; int ret; *************** *** 242,245 **** --- 242,247 ---- } + oldfunc = set_user_abort_func(stop_target); + if (get_run_alarm_time() > 0) ret = wait3(p_status, WNOHANG, NULL); |
From: Tom H. <th...@us...> - 2014-01-15 10:22:49
|
Update of /cvsroot/ups/ups/ups In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv17964/ups Modified Files: ao_dwfutil.c ao_stack.c Log Message: Don't terminate a DWARF unwind just because FP becomes zero - the correct termination condition is when there is an unwind record which does not specify an unwind rule for the PC. Index: ao_stack.c =================================================================== RCS file: /cvsroot/ups/ups/ups/ao_stack.c,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** ao_stack.c 13 Jul 2009 13:47:37 -0000 1.15 --- ao_stack.c 15 Jan 2014 10:22:47 -0000 1.16 *************** *** 426,429 **** --- 426,430 ---- { int wordsize = xp_get_addrsize(xp) / 8; + int finished = 0; taddr_t pc, fp, sp; register Stack *stk; *************** *** 435,442 **** sp = xp_getreg(xp, UPSREG_SP); - if (fp == (taddr_t)0) { - fp = (taddr_t)-1; - } - #ifdef DEBUG_STACK if (Debug_flags & DBFLAG_STACK) --- 436,439 ---- *************** *** 444,448 **** #endif ! for (stk = last = NULL; fp != (taddr_t)0; last = stk) { taddr_t prevpc = (last == NULL) ? pc : (pc - 1); fil_t *fil; --- 441,445 ---- #endif ! for (stk = last = NULL; !finished; last = stk) { taddr_t prevpc = (last == NULL) ? pc : (pc - 1); fil_t *fil; *************** *** 488,491 **** --- 485,489 ---- if (f->fu_symtab && st_unwind(xp, f->fu_symtab, &fp, &sp, &prevpc, &stk->stk_cfa)) { pc = prevpc; + finished = pc == (taddr_t)0; } else if ((f->fu_flags & FU_NO_FP) != 0 || pc < f->fu_addr) { *************** *** 646,649 **** --- 644,649 ---- sp = sp + offset + 4; + + finished = fp == (taddr_t)0; } else { if (dread_addrval(xp, stk->stk_fp, &fp) != 0) *************** *** 654,657 **** --- 654,659 ---- sp = stk->stk_fp + 2 * wordsize; + finished = fp == (taddr_t)0; + #ifdef DEBUG_STACK if (Debug_flags & DBFLAG_STACK) { Index: ao_dwfutil.c =================================================================== RCS file: /cvsroot/ups/ups/ups/ao_dwfutil.c,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -d -r1.24 -r1.25 *** ao_dwfutil.c 14 Jan 2014 12:39:53 -0000 1.24 --- ao_dwfutil.c 15 Jan 2014 10:22:47 -0000 1.25 *************** *** 756,759 **** --- 756,761 ---- *sp = new_sp; *pc = new_pc; + } else { + *pc = 0; } } |
From: Tom H. <th...@us...> - 2014-01-15 08:55:34
|
Update of /cvsroot/ups/ups/ups In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv5122/ups Modified Files: ao_ptrace.c Log Message: Remove the user abort function before exiting wait_with_intr or we might wind up jumping to a sigjmp context that is no longer valid if a signal arrives between exiting wait_with_intr and the user abort handler being removed. Index: ao_ptrace.c =================================================================== RCS file: /cvsroot/ups/ups/ups/ao_ptrace.c,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** ao_ptrace.c 14 Jan 2014 15:31:50 -0000 1.15 --- ao_ptrace.c 15 Jan 2014 08:55:32 -0000 1.16 *************** *** 122,126 **** static void stop_target PROTO((void)); static char *get_restart_pc PROTO((iproc_t *ip)); ! static int wait_with_intr PROTO((wait_arg_t *p_status)); static int get_words PROTO((int pid, ptracereq_t ptrace_req, taddr_t addr, char *buf, size_t nbytes)); --- 122,126 ---- static void stop_target PROTO((void)); static char *get_restart_pc PROTO((iproc_t *ip)); ! static int wait_with_intr PROTO((wait_arg_t *p_status, int *p_errno)); static int get_words PROTO((int pid, ptracereq_t ptrace_req, taddr_t addr, char *buf, size_t nbytes)); *************** *** 226,239 **** static int ! wait_with_intr(p_status) wait_arg_t *p_status; { int ret; #if HAVE_SIGSETJMP && HAVE_SIGLONGJMP ! if (sigsetjmp(Longjmp_env, 1) == 1) #else ! if (setjmp(Longjmp_env) == 1) #endif return 0; if (get_run_alarm_time() > 0) --- 226,244 ---- static int ! wait_with_intr(p_status, p_errno) wait_arg_t *p_status; + int *p_errno; { + abort_func_t oldfunc = set_user_abort_func(stop_target); int ret; + #if HAVE_SIGSETJMP && HAVE_SIGLONGJMP ! if (sigsetjmp(Longjmp_env, 1) == 1) { #else ! if (setjmp(Longjmp_env) == 1) { #endif + set_user_abort_func(oldfunc); return 0; + } if (get_run_alarm_time() > 0) *************** *** 242,245 **** --- 247,254 ---- ret = wait(p_status); + *p_errno = errno; + + set_user_abort_func(oldfunc); + return ret; } *************** *** 300,305 **** user_stopped_target = FALSE; for (;;) { - abort_func_t oldfunc; - if ((Debug_flags & DBFLAG_NO_STOP) != 0) { pid = wait(&status); --- 309,312 ---- *************** *** 307,314 **** } else { ! oldfunc = set_user_abort_func(stop_target); ! pid = wait_with_intr(&status); ! wait_errno = errno; ! (void) set_user_abort_func(oldfunc); } --- 314,318 ---- } else { ! pid = wait_with_intr(&status, &wait_errno); } |
From: Tom H. <th...@us...> - 2014-01-15 08:54:19
|
Update of /cvsroot/ups/ups/lib/libx11wn In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv5022/lib/libx11wn Modified Files: wn_event.c Log Message: Make sure the user abort function only fires once. Index: wn_event.c =================================================================== RCS file: /cvsroot/ups/ups/lib/libx11wn/wn_event.c,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** wn_event.c 14 Jan 2014 22:47:25 -0000 1.9 --- wn_event.c 15 Jan 2014 08:54:17 -0000 1.10 *************** *** 1240,1243 **** --- 1240,1244 ---- static wn_abort_func_t Abort_func = NULL; static swin_t *Abort_w; + static int Abort_pending; static void *************** *** 1245,1249 **** int unused_sig; { ! (*Abort_func)(); } --- 1246,1253 ---- int unused_sig; { ! if (Abort_pending) { ! Abort_pending = 0; ! Abort_func(); ! } } *************** *** 1291,1294 **** --- 1295,1299 ---- Abort_func = func; Abort_w = w; + Abort_pending = 1; #ifdef X11 |