bruno@nestvx.enet.dec.com (Bruno E. Achauer) (12/06/89)
Hi, below you find some patches to make GDB work on droppings from vcc and lk. (Vcc and lk are ports of the VAX/VMS C compiler and linker to Ultrix. Unfortunately, I have to use these instead of gcc.) Happy Hacking, --Bruno. ---- snip ---- snip ---- snip ---- snip ---- snip ---- snip ---- snip ---- *** m-vax.h~ Thu Aug 31 23:38:23 1989 --- m-vax.h Tue Oct 10 18:19:40 1989 *************** *** 63,68 /* Offset from address of function to start of its code. Zero on most machines. */ #define FUNCTION_START_OFFSET 2 /* Advance PC across any function entry prologue instructions --- 63,77 ----- /* Offset from address of function to start of its code. Zero on most machines. */ + /* Debugger info might be created by Ultrix-32 lk (yucc !). */ + + # define ULTRIX_LK + + /* lk creates N_NOMAP symbols for variables which were optimized away: */ + + # define IGNORE_SYMBOL(TYPE) \ + (((TYPE) == N_NOMAP) || ((TYPE) == N_NSYMS)) + #define FUNCTION_START_OFFSET 2 /* Advance PC across any function entry prologue instructions *** dbxread.c~ Sat Sep 30 19:08:40 1989 --- dbxread.c Tue Oct 10 17:59:19 1989 *************** *** 756,762 { /* Type is defined outside of header files. Find it in this object file's type vector. */ ! if (index >= type_vector_length) { type_vector_length *= 2; type_vector = (struct typevector *) --- 756,762 ----- { /* Type is defined outside of header files. Find it in this object file's type vector. */ ! while (index >= type_vector_length) { type_vector_length *= 2; type_vector = (struct typevector *) *************** *** 1931,1936 struct partial_symtab **dependency_list; int dependencies_used, dependencies_allocated; #ifdef PROFILE_TYPES for (i = 0; i < 256; i++) profile_types[i] = 0; --- 1931,1940 ----- struct partial_symtab **dependency_list; int dependencies_used, dependencies_allocated; + #ifdef ULTRIX_LK + int sline_highval = 0; /* to guesstimate last module's end address */ + #endif + #ifdef PROFILE_TYPES for (i = 0; i < 256; i++) profile_types[i] = 0; *************** *** 1984,1989 /* * Special case to speed up readin. */ if (bufp->n_type == N_SLINE) continue; /* Ok. There is a lot of code duplicated in the rest of this --- 1988,2000 ----- /* * Special case to speed up readin. */ + #ifdef ULTRIX_LK + if (bufp->n_type == N_SLINE) + { + if (bufp->n_value > sline_highval) sline_highval = bufp->n_value; + continue; + } + #else if (bufp->n_type == N_SLINE) continue; #endif /* ULTRIX_LK */ *************** *** 1985,1990 * Special case to speed up readin. */ if (bufp->n_type == N_SLINE) continue; /* Ok. There is a lot of code duplicated in the rest of this switch statiement (for efficiency reasons). Since I don't --- 1996,2002 ----- } #else if (bufp->n_type == N_SLINE) continue; + #endif /* ULTRIX_LK */ /* Ok. There is a lot of code duplicated in the rest of this switch statiement (for efficiency reasons). Since I don't *************** *** 2115,2120 } if (past_first_source_file && pst) { end_psymtab (pst, psymtab_include_list, includes_used, symnum * sizeof (struct nlist), bufp->n_value, dependency_list, dependencies_used, --- 2127,2141 ----- } if (past_first_source_file && pst) { + int capping_text = bufp->n_value; + + #ifdef ULTRIX_LK + /* lk fails to record the and address of the last module + loaded. Guesstimate it from the line numbers instead. */ + + if( capping_text == 0 ) capping_text = sline_highval; + #endif /*ULTRIX_LK */ + end_psymtab (pst, psymtab_include_list, includes_used, symnum * sizeof (struct nlist), capping_text, dependency_list, dependencies_used, *************** *** 2116,2122 if (past_first_source_file && pst) { end_psymtab (pst, psymtab_include_list, includes_used, ! symnum * sizeof (struct nlist), bufp->n_value, dependency_list, dependencies_used, global_psymbols.next, static_psymbols.next); pst = (struct partial_symtab *) 0; --- 2137,2143 ----- #endif /*ULTRIX_LK */ end_psymtab (pst, psymtab_include_list, includes_used, ! symnum * sizeof (struct nlist), capping_text, dependency_list, dependencies_used, global_psymbols.next, static_psymbols.next); pst = (struct partial_symtab *) 0;