Undo some of the index changes, and write our own index/rindex.

From-SVN: r2304
This commit is contained in:
Michael Meissner 1992-10-02 01:07:59 +00:00
parent d4099651d5
commit aa59a86918
1 changed files with 61 additions and 23 deletions

View File

@ -659,13 +659,6 @@ extern void xfree __proto((PTR_T));
extern void fatal(); /* can't use prototypes here */
extern void error();
#if !defined(__OSF1__) && !defined(__OSF__) && !defined(__osf__)
extern char *index ();
extern char *rindex ();
#else
#undef rindex
#undef index
#endif
#ifndef MIPS_DEBUGGING_INFO
@ -685,6 +678,11 @@ main ()
#else /* MIPS_DEBUGGING defined */
/* The local and global symbols have a field index, so undo any defines
of index -> strchr and rindex -> strrchr. */
#undef rindex
#undef index
#include <sys/types.h>
#include <a.out.h>
@ -1728,6 +1726,9 @@ STATIC void free_scope __proto((scope_t *));
STATIC void free_tag __proto((tag_t *));
STATIC void free_thead __proto((thead_t *));
STATIC char *local_index __proto((const char *, int));
STATIC char *local_rindex __proto((const char *, int));
extern char *sbrk __proto((int));
extern PTR_T malloc __proto((Size_t));
extern PTR_T calloc __proto((Size_t, Size_t));
@ -1927,7 +1928,7 @@ add_local_symbol (str_start, str_end_p1, type, storage, value, indx)
psym->value = value;
psym->st = (unsigned) type;
psym->sc = (unsigned) storage;
psym->indx = indx;
psym->index = indx;
psym->iss = (str_start == (const char *)0)
? 0
: add_string (&cur_file_ptr->strings,
@ -2015,13 +2016,13 @@ add_local_symbol (str_start, str_end_p1, type, storage, value, indx)
}
cur_file_ptr->cur_scope = pscope->prev;
psym->indx = pscope->lnumber; /* blk end gets begin sym # */
psym->index = pscope->lnumber; /* blk end gets begin sym # */
if (storage != sc_Info)
psym->iss = pscope->lsym->iss; /* blk end gets same name */
if (begin_type == st_File || begin_type == st_Block)
pscope->lsym->indx = ret+1; /* block begin gets next sym # */
pscope->lsym->index = ret+1; /* block begin gets next sym # */
/* Functions push two or more aux words as follows:
1st word: index+1 of the end symbol
@ -2030,14 +2031,14 @@ add_local_symbol (str_start, str_end_p1, type, storage, value, indx)
else
{
symint_t type;
pscope->lsym->indx = add_aux_sym_symint (ret+1);
pscope->lsym->index = add_aux_sym_symint (ret+1);
type = add_aux_sym_tir (&last_func_type_info,
hash_no,
&cur_file_ptr->thash_head[0]);
if (last_func_eptr)
{
last_func_eptr->ifd = cur_file_ptr->file_index;
last_func_eptr->asym.indx = type;
last_func_eptr->asym.index = type;
}
}
@ -2112,7 +2113,7 @@ add_ext_symbol (str_start, str_end_p1, type, storage, value, indx, ifd)
psym->asym.value = value;
psym->asym.st = (unsigned) type;
psym->asym.sc = (unsigned) storage;
psym->asym.indx = indx;
psym->asym.index = indx;
psym->asym.iss = (str_start == (const char *)0)
? 0
: add_string (&ext_strings,
@ -2431,7 +2432,7 @@ add_unknown_tag (ptag)
f_next = f_next->next;
f_cur->ifd_ptr->isym = file_index;
f_cur->index_ptr->rndx.indx = sym_index;
f_cur->index_ptr->rndx.index = sym_index;
free_forward (f_cur);
}
@ -3339,10 +3340,10 @@ parse_def (name_start)
external symbol. */
if (eptr != (EXTR *)0
&& (eptr->asym.indx == indexNil || cur_proc_ptr == (PDR *)0))
&& (eptr->asym.index == indexNil || cur_proc_ptr == (PDR *)0))
{
eptr->ifd = cur_file_ptr->file_index;
eptr->asym.indx = indx;
eptr->asym.index = indx;
}
@ -3429,7 +3430,7 @@ parse_def (name_start)
f_next = f_next->next;
f_cur->ifd_ptr->isym = file_index;
f_cur->index_ptr->rndx.indx = isym;
f_cur->index_ptr->rndx.index = isym;
free_forward (f_cur);
}
@ -3563,8 +3564,8 @@ parse_file (start)
(void) strtol (start, &p, 0);
if (start == p
|| (start_name = index (p, '"')) == (char *)0
|| (end_name_p1 = rindex (++start_name, '"')) == (char *)0)
|| (start_name = local_index (p, '"')) == (char *)0
|| (end_name_p1 = local_rindex (++start_name, '"')) == (char *)0)
{
error ("Illegal .file directive");
return;
@ -3817,7 +3818,7 @@ STATIC void
parse_stabs (start)
const char *start; /* start of directive */
{
const char *end = index (start+1, '"');
const char *end = local_index (start+1, '"');
if (*start != '"' || end == (const char *)0 || end[1] != ',')
{
@ -4515,7 +4516,7 @@ copy_object __proto((void))
&& orig_files->caux == 0)
{
char *filename = orig_local_strs + (orig_files->issBase + orig_files->rss);
char *suffix = rindex (filename, '.');
char *suffix = local_rindex (filename, '.');
if (suffix != (char *)0 && strcmp (suffix, ".s") == 0)
delete_ifd = 1;
@ -4564,7 +4565,7 @@ copy_object __proto((void))
(st_t) eptr->asym.st,
(sc_t) eptr->asym.sc,
eptr->asym.value,
(symint_t)((eptr->asym.indx == indexNil) ? indexNil : 0),
(symint_t)((eptr->asym.index == indexNil) ? indexNil : 0),
(ifd < orig_sym_hdr.ifdMax) ? remap_file_number[ ifd ] : ifd);
}
@ -4749,7 +4750,7 @@ main (argc, argv)
char *argv[];
{
int iflag = 0;
char *p = rindex (argv[0], '/');
char *p = local_rindex (argv[0], '/');
char *num_end;
int option;
int i;
@ -5621,3 +5622,40 @@ xfree (ptr)
free (ptr);
}
/* Define our own index/rindex, since the local and global symbol
structures as defined by MIPS has an 'index' field. */
STATIC char *
local_index (str, sentinel)
const char *str;
int sentinel;
{
int ch;
for ( ; (ch = *str) != sentinel; str++)
{
if (ch == '\0')
return (char *)0;
}
return (char *)str;
}
STATIC char *
local_rindex (str, sentinel)
const char *str;
int sentinel;
{
int ch;
const char *ret = (const char *)0;
for ( ; (ch = *str) != '\0'; str++)
{
if (ch == sentinel)
ret = str;
}
return (char *)ret;
}