Exemplo n.º 1
0
rdfheaderrec *rdfgetheaderrec(rdffile *f)
{
  static rdfheaderrec r;
  int i;

  if (!f->header_loc) {
    rdf_errno = 5;
    return NULL;
  }

  if (f->header_fp >= f->header_len) return 0;

  RI8(r.type);
  switch(r.type) {
  case 1:	/* Relocation record */
    RI8(r.r.segment);
    RI32(r.r.offset);
    RI8(r.r.length);
    RI16(r.r.refseg);
    break;

  case 2:	/* Imported symbol record */
    RI16(r.i.segment);
    RS(r.i.label,32);
    break;

  case 3:	/* Exported symbol record */
    RI8(r.e.segment);
    RI32(r.e.offset);
    RS(r.e.label,32);
    break;

  case 4:	/* DLL record */
    RS(r.d.libname,127);
    break;

  case 5:	/* BSS reservation record */
    RI32(r.b.amount);
    break;

  default:
    rdf_errno = 2; /* invalid file */
    return NULL;
  }
  return &r;
}
Exemplo n.º 2
0
/*
 * Read a header record.
 * Returns the address of record, or NULL in case of error.
 */
rdfheaderrec *rdfgetheaderrec(rdffile * f)
{
    static rdfheaderrec r;
    int i;

    if (!f->header_loc) {
        rdf_errno = RDF_ERR_HEADER;
        return NULL;
    }

    if (f->header_fp >= f->header_len)
        return 0;

    RI8(r.type);
    RI8(r.g.reclen);

    switch (r.type) {
    case RDFREC_RELOC:         /* Relocation record */
    case RDFREC_SEGRELOC:
        if (r.r.reclen != 8) {
            rdf_errno = RDF_ERR_RECLEN;
            return NULL;
        }
        RI8(r.r.segment);
        RI32(r.r.offset);
        RI8(r.r.length);
        RI16(r.r.refseg);
        break;

    case RDFREC_IMPORT:        /* Imported symbol record */
    case RDFREC_FARIMPORT:
        RI8(r.i.flags);
        RI16(r.i.segment);
        RS(r.i.label, EXIM_LABEL_MAX);
        break;

    case RDFREC_GLOBAL:        /* Exported symbol record */
        RI8(r.e.flags);
        RI8(r.e.segment);
        RI32(r.e.offset);
        RS(r.e.label, EXIM_LABEL_MAX);
        break;

    case RDFREC_DLL:           /* DLL record */
        RS(r.d.libname, MODLIB_NAME_MAX);
        break;

    case RDFREC_BSS:           /* BSS reservation record */
        if (r.r.reclen != 4) {
            rdf_errno = RDF_ERR_RECLEN;
            return NULL;
        }
        RI32(r.b.amount);
        break;

    case RDFREC_MODNAME:       /* Module name record */
        RS(r.m.modname, MODLIB_NAME_MAX);
        break;

    case RDFREC_COMMON:        /* Common variable */
        RI16(r.c.segment);
        RI32(r.c.size);
        RI16(r.c.align);
        RS(r.c.label, EXIM_LABEL_MAX);
        break;

    default:
#ifdef STRICT_ERRORS
        rdf_errno = RDF_ERR_RECTYPE;    /* unknown header record */
        return NULL;
#else
        for (i = 0; i < r.g.reclen; i++)
            RI8(r.g.data[i]);
#endif
    }
    return &r;
}
Exemplo n.º 3
0
rdfheaderrec *rdfgetheaderrec(rdffile *f)
{
  static rdfheaderrec r;
  int i;

  if (!f->header_loc) {
    rdf_errno = 5;
    return NULL;
  }

  if (f->header_fp >= f->header_len) return 0;

  RI8(r.type);
  RI8(r.g.reclen);

  switch(r.type) {
  case 1:	/* Relocation record */
  case 6:
      if (r.r.reclen != 8) {
	  rdf_errno = 9;
	  return NULL;
      }
    RI8(r.r.segment);
    RI32(r.r.offset);
    RI8(r.r.length);
    RI16(r.r.refseg);
    break;

  case 2:	/* Imported symbol record */
  case 7:
    RI16(r.i.segment);
    RS(r.i.label,32);
    break;

  case 3:	/* Exported symbol record */
    RI8(r.e.segment);
    RI32(r.e.offset);
    RS(r.e.label,32);
    break;

  case 4:	/* DLL record */
    RS(r.d.libname,127);
    break;

  case 5:	/* BSS reservation record */
      if (r.r.reclen != 4) {
	  rdf_errno = 9;
	  return NULL;
      }
    RI32(r.b.amount);
    break;

  default:
#ifdef STRICT_ERRORS
    rdf_errno = 8; /* unknown header record */
    return NULL;
#else
    for (i = 0; i < r.g.reclen; i++)
	RI8(r.g.data[i]);
#endif
  }
  return &r;
}
Exemplo n.º 4
0
void code3(int mode, LPSYMBOL s1, LPSYMBOL s2, LPSYMBOL s3)
{
	switch (mode) {
	case AM_RR8:
		RR8(s1->instr, s2->val8, s3->val8);
		break;
	case AM_RI8:
		RI8(s1->instr, s2->val8, s3->val8);
		break;
	case AM_RM8:
		RM8(s1->instr, s2->val8, s3->val8);
		break;
	case AM_RA8:
		RA8(s1->instr, s2->val8, s3->val16);
		break;
	case AM_RR16:
		RR16(s1->instr, s2->val8, s3->val8);
		break;
	case AM_RI16:
		RI16(s1->instr, s2->val8, s3->val16);
		break;
	case AM_RM16:
		RM16(s1->instr, s2->val8, s3->val8);
		break;
	case AM_RA16:
		RA16(s1->instr, s2->val8, s3->val16);
		break;
	case AM_MR8:
		MR8(s1->instr, s2->val8, s3->val8);
		break;
	case AM_MR16:
		MR16(s1->instr, s2->val8, s3->val8);
		break;
	case AM_M8I8:
		M8I8(s1->instr, s2->val8, s3->val8);
		break;
	case AM_M16I8:
		M16I8(s1->instr, s2->val8, s3->val8);
		break;
	case AM_MI16:
		MI16(s1->instr, s2->val8, s3->val16);
		break;
	case AM_AR8:
		AR8(s1->instr, s2->val16, s3->val8);
		break;
	case AM_AR16:
		AR16(s1->instr, s2->val16, s3->val8);
		break;
	case AM_A8I8:
		A8I8(s1->instr, s2->val16, s3->val8);
		break;
	case AM_A16I8:
		A16I8(s1->instr, s2->val16, s3->val8);
		break;
	case AM_AI16:
		AI16(s1->instr, s2->val16, s3->val16);
		break;
	default:
		break;
	}
}