home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / powerpc / include / asm / code-patching.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  1.7 KB  |  55 lines

  1. #ifndef _ASM_POWERPC_CODE_PATCHING_H
  2. #define _ASM_POWERPC_CODE_PATCHING_H
  3.  
  4. /*
  5.  * Copyright 2008, Michael Ellerman, IBM Corporation.
  6.  *
  7.  * This program is free software; you can redistribute it and/or
  8.  * modify it under the terms of the GNU General Public License
  9.  * as published by the Free Software Foundation; either version
  10.  * 2 of the License, or (at your option) any later version.
  11.  */
  12.  
  13. #include <asm/types.h>
  14.  
  15. #define PPC_NOP_INSTR        0x60000000
  16. #define PPC_LWSYNC_INSTR    0x7c2004ac
  17.  
  18. /* Flags for create_branch:
  19.  * "b"   == create_branch(addr, target, 0);
  20.  * "ba"  == create_branch(addr, target, BRANCH_ABSOLUTE);
  21.  * "bl"  == create_branch(addr, target, BRANCH_SET_LINK);
  22.  * "bla" == create_branch(addr, target, BRANCH_ABSOLUTE | BRANCH_SET_LINK);
  23.  */
  24. #define BRANCH_SET_LINK    0x1
  25. #define BRANCH_ABSOLUTE    0x2
  26.  
  27. unsigned int create_branch(const unsigned int *addr,
  28.                unsigned long target, int flags);
  29. unsigned int create_cond_branch(const unsigned int *addr,
  30.                 unsigned long target, int flags);
  31. void patch_branch(unsigned int *addr, unsigned long target, int flags);
  32. void patch_instruction(unsigned int *addr, unsigned int instr);
  33.  
  34. int instr_is_relative_branch(unsigned int instr);
  35. int instr_is_branch_to_addr(const unsigned int *instr, unsigned long addr);
  36. unsigned long branch_target(const unsigned int *instr);
  37. unsigned int translate_branch(const unsigned int *dest,
  38.                   const unsigned int *src);
  39.  
  40. static inline unsigned long ppc_function_entry(void *func)
  41. {
  42. #ifdef CONFIG_PPC64
  43.     /*
  44.      * On PPC64 the function pointer actually points to the function's
  45.      * descriptor. The first entry in the descriptor is the address
  46.      * of the function text.
  47.      */
  48.     return ((func_descr_t *)func)->entry;
  49. #else
  50.     return (unsigned long)func;
  51. #endif
  52. }
  53.  
  54. #endif /* _ASM_POWERPC_CODE_PATCHING_H */
  55.