reloc->addend = fixp->fx_addnumber;
reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;  if (fixp->fx_addsy && fixp->fx_subsy) {  if ((S_GET_SEGMENT (fixp->fx_addsy) != S_GET_SEGMENT (fixp->fx_subsy)) || S_GET_SEGMENT (fixp->fx_addsy) == undefined_section) { as_bad_where (fixp->fx_file, fixp->fx_line, "Difference of symbols in different sections is not supported"); return NULL; }  reloc->sym_ptr_ptr = &bfd_abs_symbol; reloc->addend = (S_GET_VALUE (fixp->fx_addsy) - S_GET_VALUE (fixp->fx_subsy) + fixp->fx_offset); } else { reloc->sym_ptr_ptr = (asymbol **) xmalloc (sizeof( asymbol *)); *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy); reloc->addend = fixp->fx_offset; }
tc_gen_reloc (seg, fixp)     asection *seg;     fixS *fixp;{  arelent *reloc;  reloc = (arelent *) bfd_alloc_by_size_t (stdoutput, sizeof (arelent));  reloc->sym_ptr_ptr = &fixp->fx_addsy->bsym;  reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;  reloc->howto = bfd_reloc_type_lookup (stdoutput, fixp->fx_r_type);  if (reloc->howto == (reloc_howto_type *) NULL)    {      as_bad_where (fixp->fx_file, fixp->fx_line,                    "reloc %d not supported by object file format", (int)fixp->fx_r_type);      return NULL;    }  reloc->addend = fixp->fx_addnumber;  /*  printf("tc_gen_reloc: addr=%x  addend=%x\n", reloc->address, reloc->addend); */  return reloc;}