*reloc_addr = finaladdr - (Elf32_Word) (char *) reloc_addr;
*reloc_addr = finaladdr - (Elf32_Word) reloc_addr;
__process_machine_rela (struct link_map *map,			const Elf32_Rela *reloc,			const Elf32_Sym *sym,			const Elf32_Sym *refsym,			Elf32_Addr *const reloc_addr,			Elf32_Addr const finaladdr,			int rinfo){  switch (rinfo)    {    case R_PPC_NONE:      return;    case R_PPC_ADDR32:    case R_PPC_UADDR32:    case R_PPC_GLOB_DAT:    case R_PPC_RELATIVE:      *reloc_addr = finaladdr;      return;    case R_PPC_ADDR24:      if (finaladdr > 0x01fffffc && finaladdr < 0xfe000000)	_dl_signal_error (0, map->l_name,			  "R_PPC_ADDR24 relocation out of range");      *reloc_addr = (*reloc_addr & 0xfc000003) | (finaladdr & 0x3fffffc);      break;    case R_PPC_ADDR16:    case R_PPC_UADDR16:      if (finaladdr > 0x7fff && finaladdr < 0x8000)	_dl_signal_error (0, map->l_name,			  "R_PPC_ADDR16 relocation out of range");      *(Elf32_Half*) reloc_addr = finaladdr;      break;    case R_PPC_ADDR16_LO:      *(Elf32_Half*) reloc_addr = finaladdr;      break;    case R_PPC_ADDR16_HI:      *(Elf32_Half*) reloc_addr = finaladdr >> 16;      break;    case R_PPC_ADDR16_HA:      *(Elf32_Half*) reloc_addr = (finaladdr + 0x8000) >> 16;      break;    case R_PPC_ADDR14:    case R_PPC_ADDR14_BRTAKEN:    case R_PPC_ADDR14_BRNTAKEN:      if (finaladdr > 0x7fff && finaladdr < 0x8000)	_dl_signal_error (0, map->l_name,			  "R_PPC_ADDR14 relocation out of range");      *reloc_addr = (*reloc_addr & 0xffff0003) | (finaladdr & 0xfffc);      if (rinfo != R_PPC_ADDR14)	*reloc_addr = ((*reloc_addr & 0xffdfffff)		       | ((rinfo == R_PPC_ADDR14_BRTAKEN)			  ^ (finaladdr >> 31)) << 21);      break;    case R_PPC_REL24:      {	Elf32_Sword delta = finaladdr - (Elf32_Word) (char *) reloc_addr;	if (delta << 6 >> 6 != delta)	  _dl_signal_error (0, map->l_name,			    "R_PPC_REL24 relocation out of range");	*reloc_addr = (*reloc_addr & 0xfc000003) | (delta & 0x3fffffc);      }      break;    case R_PPC_COPY:      if (sym == NULL)	/* This can happen in trace mode when an object could not be	   found.  */	return;      if (sym->st_size > refsym->st_size	  || (_dl_verbose && sym->st_size < refsym->st_size))	{	  const char *strtab;	  strtab = (const void *) map->l_info[DT_STRTAB]->d_un.d_ptr;	  _dl_sysdep_error (_dl_argv[0] ?: "<program name unknown>",			    ": Symbol `", strtab + refsym->st_name,			    "' has different size in shared object, "			    "consider re-linking\n", NULL);	}      memcpy (reloc_addr, (char *) finaladdr, MIN (sym->st_size,						   refsym->st_size));      return;    case R_PPC_REL32:      *reloc_addr = finaladdr - (Elf32_Word) (char *) reloc_addr;      return;    case R_PPC_JMP_SLOT:      elf_machine_fixup_plt (map, reloc, reloc_addr, finaladdr);      return;    default:      _dl_reloc_bad_type (map, rinfo, 0);      return;    }  MODIFIED_CODE_NOQUEUE (reloc_addr);}