Xref: utzoo alt.sources:1856 comp.unix.xenix:11448 Path: utzoo!utgpu!news-server.csri.toronto.edu!mailrus!uunet!mcsun!ukc!stl!robobar!root From: Steve.Bleazard@RoboBar.Co.UK Newsgroups: alt.sources,comp.unix.xenix Subject: GDB for Xenix 386 with GCC (part 2 of 4) Message-ID: <1990May8.111806.28624@robobar.co.uk> Date: 8 May 90 11:18:06 GMT Sender: root@robobar.co.uk (Super user) Organization: Robobar Ltd., Perivale, Middx., ENGLAND. Lines: 510 This is part two of a coordinated set of 4 patches for Xenix GCC, GAS and GDB. Please collect all parts before you start hacking :-) This is part 2 which patches GAS, say |patch -p -d /usr/local/src/gas-1.35 or whatever. Please ensure that ALL my patches for GAS under Xenix 386 (original + 1 bugfix == 2 prior patches) have already been applied. #! /bin/sh # This is a shell archive, meaning: # 1. Remove everything above the #! /bin/sh line. # 2. Save the resulting text in a file. # 3. Execute the file with /bin/sh (not csh) to create the files: # gas-dbxpch.01 # This archive created: Tue May 8 09:39:30 1990 export PATH; PATH=/bin:$PATH echo shar: extracting "'gas-dbxpch.01'" '(13414 characters)' if test -f 'gas-dbxpch.01' then echo shar: will not over-write existing file "'gas-dbxpch.01'" else sed 's/^X//' << \SHAR_EOF > 'gas-dbxpch.01' X*** ../gas-1.35.old/i386.c Mon Mar 5 20:11:07 1990 X--- ./i386.c Mon May 7 17:29:27 1990 X*************** X*** 1042,1046 **** X /* I caught it failing with obstack_room == 6, X so I changed to <= pace */ X! if (obstack_room (&frags) <= 6) frag_new (0); X p = frag_more (1); X p[0] = t->base_opcode; X--- 1042,1046 ---- X /* I caught it failing with obstack_room == 6, X so I changed to <= pace */ X! if (obstack_room (&frags) <= 6) { frag_wane(frag_now); frag_new (0); } X p = frag_more (1); X p[0] = t->base_opcode; X*** ../gas-1.35.old/msomf.h Mon May 7 17:26:26 1990 X--- ./msomf.h Tue May 1 10:01:23 1990 X*************** X*** 6,10 **** X--- 6,13 ---- X #define SDEF_CONST 3 X #define SDEF_BSS 4 X+ #define SDEF_SYMBOLS 5 X+ #define SDEF_TYPES 6 X #define SDEF_SIZE 4 X+ #define SDEF_G_SIZE 6 X X #define GDEF_DGROUP 1 X*** ../gas-1.35.old/write.c Mon May 7 17:28:28 1990 X--- ./write.c Tue May 1 16:45:59 1990 X*************** X*** 48,51 **** X--- 48,57 ---- X #endif /* M_XENIX */ X X+ #if __STDC__ X+ #include X+ #else X+ #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) X+ #endif X+ X void append(); X X*************** X*** 87,90 **** X--- 93,99 ---- X X static long int string_byte_count; X+ #ifdef M_XENIX X+ static long int stab_symbol_count; X+ #endif /* M_XENIX */ X X static char * the_object_file; X*************** X*** 154,157 **** X--- 163,195 ---- X } X X+ #ifdef M_XENIX X+ threads(type, trgt_thrd, frm_thrd) X+ int type; X+ int *trgt_thrd, *frm_thrd; X+ { X+ switch (type) X+ { X+ case PRIVDATA: *trgt_thrd = DATA_TGT_THREAD; X+ *frm_thrd = DGROUP_FRAME_THREAD; X+ break; X+ case PRIVBSS: *trgt_thrd = BSS_TGT_THREAD; X+ *frm_thrd = DGROUP_FRAME_THREAD; X+ break; X+ case PRIVTEXT: *trgt_thrd = TEXT_TGT_THREAD; X+ *frm_thrd = TEXT_FRAME_THREAD; X+ break; X+ case PUBLICDATA: *trgt_thrd = DATA_TGT_THREAD; X+ *frm_thrd = DGROUP_FRAME_THREAD; X+ break; X+ case PUBLICTEXT: *trgt_thrd = TEXT_TGT_THREAD; X+ *frm_thrd = TEXT_FRAME_THREAD; X+ break; X+ default: *trgt_thrd = CONST_TGT_THREAD; X+ *frm_thrd = DGROUP_FRAME_THREAD; X+ break; X+ } X+ } X+ #endif /* M_XENIX */ X+ X void X write_object_file() X*************** X*** 377,381 **** X symbol_number = 0; X #else /* M_XENIX */ X! symbol_number = 1; X #endif /* M_XENIX */ X X--- 415,419 ---- X symbol_number = 0; X #else /* M_XENIX */ X! symbol_number = 1; stab_symbol_count = 0; X #endif /* M_XENIX */ X X*************** X*** 409,418 **** X else X symbolP -> sy_number = 0; X #else /* M_XENIX */ X symbolP -> sy_number = symbol_number ++; X #endif /* M_XENIX */ X- #ifndef M_XENIX X #ifndef VMS X if (name) X { /* Ordinary case. */ X symbolP -> sy_name_offset = string_byte_count; X--- 447,461 ---- X else X symbolP -> sy_number = 0; X+ if (symbolP->sy_nlist.n_type&N_STAB) X+ stab_symbol_count++; X #else /* M_XENIX */ X symbolP -> sy_number = symbol_number ++; X #endif /* M_XENIX */ X #ifndef VMS X+ #ifndef M_XENIX X if (name) X+ #else /* M_XENIX */ X+ if (name && symbolP->sy_nlist.n_type&N_STAB) X+ #endif /* M_XENIX */ X { /* Ordinary case. */ X symbolP -> sy_name_offset = string_byte_count; X*************** X*** 421,425 **** X else /* .Stabd case. */ X #endif /* not VMS */ X- #endif /* not M_XENIX */ X symbolP -> sy_name_offset = 0; X symbolPP = & (symbolP -> sy_next); X--- 464,467 ---- X*************** X*** 757,761 **** X output_file_create (out_file_name); X omf_initialize_a_out(output_file_desc(), module_name, text_siz, data_siz, X! (long) local_bss_counter, 0L); X X /* Traverse the symbol chain emitting external symbol definitions X--- 799,805 ---- X output_file_create (out_file_name); X omf_initialize_a_out(output_file_desc(), module_name, text_siz, data_siz, X! (long) local_bss_counter, 0L, X! flagseen['g'], stab_symbol_count * sizeof(struct nlist), X! string_byte_count); X X /* Traverse the symbol chain emitting external symbol definitions X*************** X*** 783,787 **** X for ( symbolP = symbol_rootP; symbolP; symbolP = symbolP -> sy_next ) X { X! if (PUBLIC(symbolP->sy_type)) X { X unsigned int group = 0, segment = 0; X--- 827,831 ---- X for ( symbolP = symbol_rootP; symbolP; symbolP = symbolP -> sy_next ) X { X! if (PUBLIC(symbolP->sy_type)) X { X unsigned int group = 0, segment = 0; X*************** X*** 867,891 **** X int external = EXTDEF(symbolP->sy_type); X X! switch (symbolP->sy_type) X! { X! case PRIVDATA: trgt_thrd = DATA_TGT_THREAD; X! frm_thrd = DGROUP_FRAME_THREAD; X! break; X! case PRIVBSS: trgt_thrd = BSS_TGT_THREAD; X! frm_thrd = DGROUP_FRAME_THREAD; X! break; X! case PRIVTEXT: trgt_thrd = TEXT_TGT_THREAD; X! frm_thrd = TEXT_FRAME_THREAD; X! break; X! case PUBLICDATA: trgt_thrd = DATA_TGT_THREAD; X! frm_thrd = DGROUP_FRAME_THREAD; X! break; X! case PUBLICTEXT: trgt_thrd = TEXT_TGT_THREAD; X! frm_thrd = TEXT_FRAME_THREAD; X! break; X! default: trgt_thrd = CONST_TGT_THREAD; X! frm_thrd = DGROUP_FRAME_THREAD; X! break; X! } X if (fixP->fx_pcrel) X frm_thrd = TEXT_FRAME_THREAD; X--- 911,915 ---- X int external = EXTDEF(symbolP->sy_type); X X! threads(symbolP->sy_type, &trgt_thrd, &frm_thrd); X if (fixP->fx_pcrel) X frm_thrd = TEXT_FRAME_THREAD; X*************** X*** 959,983 **** X int external = EXTDEF(symbolP->sy_type); X X! switch (symbolP->sy_type) X! { X! case PRIVDATA: trgt_thrd = DATA_TGT_THREAD; X! frm_thrd = DGROUP_FRAME_THREAD; X! break; X! case PRIVBSS: trgt_thrd = BSS_TGT_THREAD; X! frm_thrd = DGROUP_FRAME_THREAD; X! break; X! case PRIVTEXT: trgt_thrd = TEXT_TGT_THREAD; X! frm_thrd = TEXT_FRAME_THREAD; X! break; X! case PUBLICDATA: trgt_thrd = DATA_TGT_THREAD; X! frm_thrd = DGROUP_FRAME_THREAD; X! break; X! case PUBLICTEXT: trgt_thrd = TEXT_TGT_THREAD; X! frm_thrd = TEXT_FRAME_THREAD; X! break; X! default: trgt_thrd = CONST_TGT_THREAD; X! frm_thrd = DGROUP_FRAME_THREAD; X! break; X! } X if (fixP->fx_pcrel) X frm_thrd = TEXT_FRAME_THREAD; X--- 983,987 ---- X int external = EXTDEF(symbolP->sy_type); X X! threads(symbolP->sy_type, &trgt_thrd, &frm_thrd); X if (fixP->fx_pcrel) X frm_thrd = TEXT_FRAME_THREAD; X*************** X*** 1004,1007 **** X--- 1008,1140 ---- X } X } X+ X+ /* Traverse the symbol chain emitting stabs. X+ */ X+ X+ #define VAL_OFF offsetof(struct nlist, n_value) X+ X+ if (flagseen['g'] && stab_symbol_count) X+ { X+ long count = 0, ncount = 0; X+ symbolS *last_startP; X+ char *temp; X+ symbolS *fsymP; X+ int i; X+ int start_fixup = 0; X+ X+ omf_start_ledata(I386, SDEF_SYMBOLS, 0); X+ last_startP = symbol_rootP; X+ for (symbolP = symbol_rootP; symbolP; symbolP = symbolP -> sy_next) X+ { X+ if (symbolP->sy_nlist.n_type & N_STAB) X+ { X+ if ((ncount + 1) * sizeof(struct nlist) >= 1016) X+ { X+ omf_end_ledata(); X+ X+ /* emit relocations */ X+ X+ start_fixup = 0; X+ for (i = 0, fsymP=last_startP; i < ncount; fsymP=fsymP->sy_next) X+ { X+ if (fsymP->sy_nlist.n_type & N_STAB) X+ { X+ if (fsymP->sy_type & N_TYPE) /* if relocation required */ X+ { X+ int trgt_thrd, frm_thrd; X+ int external = EXTDEF(fsymP->sy_type & N_TYPE); X+ X+ threads(fsymP->sy_type & N_TYPE,&trgt_thrd,&frm_thrd); X+ if (!start_fixup) X+ { X+ omf_start_fixup(I386); X+ start_fixup++; X+ } X+ omf_fixup(I386, 1, /* segment relative */ X+ LOC_OFFSET32, i * sizeof(struct nlist) + VAL_OFF, X+ external ? 0 : 1, X+ external ? FRM_TRGT : frm_thrd, X+ external ? 0 : 1, X+ external ? TGT_EI : trgt_thrd, X+ 1, /* No offset */ X+ 0, /* No frame required */ X+ external ? fsymP->sy_number : 0, X+ 0); X+ } X+ i++; X+ } X+ } X+ if (start_fixup) X+ omf_end_fixup(); X+ X+ /* start new segment */ X+ X+ ncount = 0; last_startP = symbolP; X+ omf_start_ledata(I386, SDEF_SYMBOLS, count*sizeof(struct nlist)); X+ } X+ temp = symbolP->sy_nlist.n_un.n_name; X+ symbolP->sy_nlist.n_un.n_strx = symbolP->sy_name_offset; X+ omf_ledata(&(symbolP->sy_nlist), sizeof(struct nlist)); X+ symbolP->sy_nlist.n_un.n_name = temp; X+ ncount++; count++; X+ } X+ } X+ omf_end_ledata(); X+ start_fixup = 0; X+ for (i = 0, fsymP = last_startP; i < ncount; fsymP = fsymP->sy_next) X+ { X+ if (fsymP->sy_nlist.n_type & N_STAB) X+ { X+ if (fsymP->sy_type & N_TYPE) /* if relocation required */ X+ { X+ int trgt_thrd, frm_thrd; X+ int external = EXTDEF(fsymP->sy_type & N_TYPE); X+ X+ threads(fsymP->sy_type & N_TYPE,&trgt_thrd,&frm_thrd); X+ if (!start_fixup) X+ { X+ omf_start_fixup(I386); X+ start_fixup++; X+ } X+ omf_fixup(I386, 1, /* segment relative */ X+ LOC_OFFSET32, i * sizeof(struct nlist) + VAL_OFF, X+ external ? 0 : 1, X+ external ? FRM_TRGT : frm_thrd, X+ external ? 0 : 1, X+ external ? TGT_EI : trgt_thrd, X+ 1, /* No offset */ X+ 0, /* No frame required */ X+ external ? fsymP->sy_number : 0, X+ 0); X+ } X+ i++; X+ } X+ } X+ if (start_fixup) X+ omf_end_fixup(); X+ X+ count = sizeof(string_byte_count); ncount = count; X+ omf_start_ledata(I386, SDEF_TYPES, 0); X+ omf_ledata(&string_byte_count, sizeof(string_byte_count)); X+ for (symbolP = symbol_rootP; symbolP; symbolP = symbolP -> sy_next) X+ { X+ if (symbolP->sy_nlist.n_type & N_STAB && symbolP -> sy_name) X+ { X+ int len = strlen(symbolP -> sy_name) + 1; X+ X+ if (ncount + len > 1016) X+ { X+ omf_end_ledata(); X+ omf_start_ledata(I386, SDEF_TYPES, count); X+ ncount = 0; X+ } X+ omf_ledata(symbolP->sy_name, len); X+ count += len; ncount += len; X+ } X+ } X+ omf_end_ledata(); X+ } X+ X+ X omf_modend(I386); X output_file_close (out_file_name); X*** ../gas-1.35.old/xenixomf.c Mon May 7 17:26:26 1990 X--- ./xenixomf.c Wed May 2 11:03:47 1990 X*************** X*** 544,548 **** X--- 544,553 ---- X #define L_UBSS 8 X #define L_BSS 9 X+ #define L_TYPES 10 X+ #define L_DEBTYP 11 X+ #define L_SYMBOLS 12 X+ #define L_DEBSYM 13 X #define L_TSIZE 9 X+ #define L_G_TSIZE 13 X X char *lnames_tab[] = { X*************** X*** 556,560 **** X "CONST", X "_BSS", X! "BSS" X }; X X--- 561,569 ---- X "CONST", X "_BSS", X! "BSS", X! "$$TYPES", X! "DEBTYP", X! "$$SYMBOLS", X! "DEBSYM" X }; X X*************** X*** 573,577 **** X {SD_DWORD|SD_PUBLIC|SD_PGRES, 0, L_UDATA, L_DATA}, X {SD_DWORD|SD_PUBLIC|SD_PGRES, 0, L_CONST, L_CONST}, X! {SD_DWORD|SD_PUBLIC|SD_PGRES, 0, L_UBSS, L_BSS} X }; X X--- 582,588 ---- X {SD_DWORD|SD_PUBLIC|SD_PGRES, 0, L_UDATA, L_DATA}, X {SD_DWORD|SD_PUBLIC|SD_PGRES, 0, L_CONST, L_CONST}, X! {SD_DWORD|SD_PUBLIC|SD_PGRES, 0, L_UBSS, L_BSS}, X! {SD_BYTE|SD_PGRES, 0, L_SYMBOLS, L_DEBSYM}, X! {SD_BYTE|SD_PGRES, 0, L_TYPES, L_DEBTYP} X }; X X*************** X*** 592,596 **** X #define NUMFIXEDCOMMENTS 4 X X! static unsigned char gas_comment[] = "gas-1.34"; X static unsigned char lib_comment[] = "SLIBCE"; X static unsigned char model_comment[] = "3s"; X--- 603,607 ---- X #define NUMFIXEDCOMMENTS 4 X X! static unsigned char gas_comment[] = "gas-1.35c"; X static unsigned char lib_comment[] = "SLIBCE"; X static unsigned char model_comment[] = "3s"; X*************** X*** 604,611 **** X }; X X! void omf_initialize_a_out(fd, name, text_size, data_size, bss_size, const_size) X int fd; X unsigned char *name; X long text_size, data_size, bss_size, const_size; X { X int i; X--- 615,625 ---- X }; X X! void omf_initialize_a_out(fd, name, text_size, data_size, bss_size, const_size, X! gdb, syms_size, str_size) X int fd; X unsigned char *name; X long text_size, data_size, bss_size, const_size; X+ int gdb; X+ long syms_size, str_size; X { X int i; X*************** X*** 622,626 **** X X omf_start_lnames(); X! for (i = 1; i <= L_TSIZE; i++) X omf_lnames(lnames_tab[i]); X omf_end_lnames(); X--- 636,640 ---- X X omf_start_lnames(); X! for (i = 1; i <= (gdb ? L_G_TSIZE : L_TSIZE); i++) X omf_lnames(lnames_tab[i]); X omf_end_lnames(); X*************** X*** 632,636 **** X segt[SDEF_BSS].length = bss_size; X segt[SDEF_CONST].length = const_size; X! for (i = 1; i <= SDEF_SIZE; i++) X omf_segdef(I386, segt[i].attrib, 0, 0L, segt[i].length, X segt[i].nameindex, segt[i].classindex); X--- 646,655 ---- X segt[SDEF_BSS].length = bss_size; X segt[SDEF_CONST].length = const_size; X! if (gdb) X! { X! segt[SDEF_SYMBOLS].length = syms_size; X! segt[SDEF_TYPES].length = str_size; X! } X! for (i = 1; i <= (gdb ? SDEF_G_SIZE : SDEF_SIZE); i++) X omf_segdef(I386, segt[i].attrib, 0, 0L, segt[i].length, X segt[i].nameindex, segt[i].classindex); SHAR_EOF if test 13414 -ne "`wc -c < 'gas-dbxpch.01'`" then echo shar: error transmitting "'gas-dbxpch.01'" '(should have been 13414 characters)' fi fi # end of overwriting check # End of shell archive exit 0