return;
return 0;
md_apply_fix (fixP, valp)     fixS *fixP;     valueT *valp;{  char *buf = fixP->fx_where + fixP->fx_frag->fr_literal;  struct hppa_fix_struct *hppa_fixP;  long new_val, result;  unsigned int w1, w2, w;  hppa_fixP = (struct hppa_fix_struct *) fixP->tc_fix_data;  /* SOM uses R_HPPA_ENTRY and R_HPPA_EXIT relocations which can     never be "applied" (they are just markers).  Likewise for     R_HPPA_BEGIN_BRTAB and R_HPPA_END_BRTAB.  */#ifdef OBJ_SOM  if (fixP->fx_r_type == R_HPPA_ENTRY      || fixP->fx_r_type == R_HPPA_EXIT      || fixP->fx_r_type == R_HPPA_BEGIN_BRTAB      || fixP->fx_r_type == R_HPPA_END_BRTAB)    return;#endif  /* There should have been an HPPA specific fixup associated     with the GAS fixup.  */  if (hppa_fixP)    {      unsigned long buf_wd = bfd_get_32 (stdoutput, buf);      unsigned char fmt = bfd_hppa_insn2fmt (buf_wd);      /* If there is a symbol associated with this fixup, then it's something	 which will need a SOM relocation (except for some PC-relative relocs).	 In such cases we should treat the "val" or "addend" as zero since it	 will be added in as needed from fx_offset in tc_gen_reloc.  */      if ((fixP->fx_addsy != NULL	   || fixP->fx_r_type == R_HPPA_NONE)#ifdef OBJ_SOM	  && fmt != 32	  || hppa_fixP->fx_r_field == e_psel	  || hppa_fixP->fx_r_field == e_rpsel	  || hppa_fixP->fx_r_field == e_lpsel	  || hppa_fixP->fx_r_field == e_tsel	  || hppa_fixP->fx_r_field == e_rtsel	  || hppa_fixP->fx_r_field == e_ltsel#endif	  )	new_val = ((fmt == 12 || fmt == 17) ? 8 : 0);#ifdef OBJ_SOM      /* This is truely disgusting.  The machine independent code blindly	 adds in the value of the symbol being relocated against.  Damn!  */      else if (fmt == 32	       && fixP->fx_addsy != NULL	       && S_GET_SEGMENT (fixP->fx_addsy) != bfd_com_section_ptr)	new_val = hppa_field_adjust (*valp - S_GET_VALUE (fixP->fx_addsy),				     0, hppa_fixP->fx_r_field);#endif      else	new_val = hppa_field_adjust (*valp, 0, hppa_fixP->fx_r_field);      /* Handle pc-relative exceptions from above.  */#define arg_reloc_stub_needed(CALLER, CALLEE) \  ((CALLEE) && (CALLER) && ((CALLEE) != (CALLER)))      if ((fmt == 12 || fmt == 17)	  && fixP->fx_addsy	  && fixP->fx_pcrel	  && !arg_reloc_stub_needed (((obj_symbol_type *)				fixP->fx_addsy->bsym)->tc_data.hppa_arg_reloc,				    hppa_fixP->fx_arg_reloc)	  && ((int)(*valp) > -262144 && (int)(*valp) < 262143)	  && S_GET_SEGMENT (fixP->fx_addsy) == hppa_fixP->segment	  && !(fixP->fx_subsy	       && S_GET_SEGMENT (fixP->fx_subsy) != hppa_fixP->segment))	      	new_val = hppa_field_adjust (*valp, 0, hppa_fixP->fx_r_field);#undef arg_reloc_stub_needed	      switch (fmt)	{	/* Handle all opcodes with the 'j' operand type.  */	case 14:	  CHECK_FIELD (new_val, 8191, -8192, 0);	  /* Mask off 14 bits to be changed.  */	  bfd_put_32 (stdoutput,		      bfd_get_32 (stdoutput, buf) & 0xffffc000,		      buf);	  low_sign_unext (new_val, 14, &result);	  break;	/* Handle all opcodes with the 'k' operand type.  */	case 21:	  CHECK_FIELD (new_val, 2097152, 0, 0);	  /* Mask off 21 bits to be changed.  */	  bfd_put_32 (stdoutput,		      bfd_get_32 (stdoutput, buf) & 0xffe00000,		      buf);	  dis_assemble_21 (new_val, &result);	  break;	/* Handle all the opcodes with the 'i' operand type.  */	case 11:	  CHECK_FIELD (new_val, 1023, -1023, 0);	  /* Mask off 11 bits to be changed.  */	  bfd_put_32 (stdoutput,		      bfd_get_32 (stdoutput, buf) & 0xffff800,		      buf);	  low_sign_unext (new_val, 11, &result);	  break;	/* Handle all the opcodes with the 'w' operand type.  */	case 12:	  CHECK_FIELD (new_val, 8199, -8184, 0)	  /* Mask off 11 bits to be changed.  */	    sign_unext ((new_val - 8) >> 2, 12, &result);	  bfd_put_32 (stdoutput,		      bfd_get_32 (stdoutput, buf) & 0xffffe002,		      buf);	  dis_assemble_12 (result, &w1, &w);	  result = ((w1 << 2) | w);	  break;	/* Handle some of the opcodes with the 'W' operand type.  */	case 17:	  CHECK_FIELD (new_val, 262143, -262144, 0);	  /* Mask off 17 bits to be changed.  */	  bfd_put_32 (stdoutput,		      bfd_get_32 (stdoutput, buf) & 0xffe0e002,		      buf);	  sign_unext ((new_val - 8) >> 2, 17, &result);	  dis_assemble_17 (result, &w1, &w2, &w);	  result = ((w2 << 2) | (w1 << 16) | w);	  break;	case 32:	  result = 0;	  bfd_put_32 (stdoutput, new_val, buf);	  break;	default:	  as_bad ("Unknown relocation encountered in md_apply_fix.");	  return;	}      /* Insert the relocation.  */      bfd_put_32 (stdoutput, bfd_get_32 (stdoutput, buf) | result, buf);      return;    }  else    {      printf ("no hppa_fixup entry for this fixup (fixP = 0x%x, type = 0x%x)\n",	      (unsigned int) fixP, fixP->fx_r_type);      return;    }}