GDB for Xenix 386 with GCC (part 2 of 4)
Steve.Bleazard at RoboBar.Co.UK
Steve.Bleazard at RoboBar.Co.UK
Tue May 8 21:18:06 AEST 1990
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 <stddef.h>
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
More information about the Alt.sources
mailing list