root/arch/h8300/include/asm/flat.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. flat_get_addr_from_rp
  2. flat_put_addr_at_rp

   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 /*
   3  * arch/h8300/asm/include/flat.h -- uClinux flat-format executables
   4  */
   5 
   6 #ifndef __H8300_FLAT_H__
   7 #define __H8300_FLAT_H__
   8 
   9 #include <asm/unaligned.h>
  10 
  11 /*
  12  * on the H8 a couple of the relocations have an instruction in the
  13  * top byte.  As there can only be 24bits of address space,  we just
  14  * always preserve that 8bits at the top,  when it isn't an instruction
  15  * is is 0 (davidm@snapgear.com)
  16  */
  17 
  18 #define flat_get_relocate_addr(rel)             (rel & ~0x00000001)
  19 static inline int flat_get_addr_from_rp(u32 __user *rp, u32 relval, u32 flags,
  20                                         u32 *addr)
  21 {
  22         u32 val = get_unaligned((__force u32 *)rp);
  23         if (!(flags & FLAT_FLAG_GOTPIC))
  24                 val &= 0x00ffffff;
  25         *addr = val;
  26         return 0;
  27 }
  28 
  29 static inline int flat_put_addr_at_rp(u32 __user *rp, u32 addr, u32 rel)
  30 {
  31         u32 *p = (__force u32 *)rp;
  32         put_unaligned((addr & 0x00ffffff) | (*(char *)p << 24), p);
  33         return 0;
  34 }
  35 
  36 #endif /* __H8300_FLAT_H__ */

/* [<][>][^][v][top][bottom][index][help] */