wdbDirectCallLib.c
上传用户:baixin
上传日期:2008-03-13
资源大小:4795k
文件大小:2k
开发平台:

MultiPlatform

  1. /* wdbDirectCallLib.c - Call a function on the target */
  2. /* Copyright 1984-1998 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01c,04sep98,cdp enable Thumb support for all ARM CPUs with ARM_THUMB==TRUE.
  7. 01b,11jul97,cdp added Thumb (ARM7TDMI_T) support.
  8. 01a,18jan95,ms  written.
  9. */
  10. /*
  11. DESCPRIPTION
  12. This library contains the RPC to call a function on the target.
  13. The return value of the function is passed to the host.
  14. The function is called in the agents context (unlike wdbCallLib,
  15. which calls functions in an external context), so care must be taken
  16. when using this procedure.
  17. */
  18. #include "wdb/wdb.h"
  19. #include "wdb/wdbSvcLib.h"
  20. /* forward declarations */
  21. static UINT32 wdbDirectCall (WDB_CTX_CREATE_DESC *pCtxCreate, UINT32 *pVal);
  22. /******************************************************************************
  23. *
  24. * wdbDirectCallLibInit -
  25. */
  26. void wdbDirectCallLibInit (void)
  27.     {
  28.     wdbSvcAdd (WDB_DIRECT_CALL, wdbDirectCall, xdr_WDB_CTX_CREATE_DESC, xdr_UINT32);
  29.     }
  30. /******************************************************************************
  31. *
  32. * wdbDirectCall - RPC routine to directly call a function in the agents context
  33. */
  34. static UINT32 wdbDirectCall
  35.     (
  36.     WDB_CTX_CREATE_DESC * pCtxCreate,
  37.     UINT32 * pVal
  38.     )
  39.     {
  40.     UINT32 (*proc)(); /* function to call */
  41. #if ((CPU_FAMILY == ARM) && ARM_THUMB)
  42.     proc = (UINT32 (*)())(pCtxCreate->entry | 1);
  43. #else /* CPU_FAMILY == ARM */
  44.     proc = (UINT32 (*)())pCtxCreate->entry;
  45. #endif /* CPU_FAMILY == ARM */
  46.     *pVal = (*proc)(pCtxCreate->args[0], pCtxCreate->args[1],
  47. pCtxCreate->args[2], pCtxCreate->args[3],
  48. pCtxCreate->args[4], pCtxCreate->args[5],
  49. pCtxCreate->args[6], pCtxCreate->args[7],
  50. pCtxCreate->args[8], pCtxCreate->args[9]);
  51.     return (OK);
  52.     }