source: rtems/cpukit/score/cpu/riscv/riscv-context-initialize.c @ a49a3c8e

5
Last change on this file since a49a3c8e was a49a3c8e, checked in by Sebastian Huber <sebastian.huber@…>, on 06/27/18 at 06:37:34

riscv: Do not clear thread context

Do not clear the complete thread context. Initialize only the necessary
members. The Context_Control::is_executing member must be preserved
across _CPU_Context_Initialize() calls.

Update #3433.

  • Property mode set to 100644
File size: 2.2 KB
Line 
1/*
2 *
3 * Copyright (c) 2015 University of York.
4 * Hesham Almatary <hesham@alumni.york.ac.uk>
5 *
6 * COPYRIGHT (c) 1989-2006.
7 * On-Line Applications Research Corporation (OAR).
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 * 1. Redistributions of source code must retain the above copyright
13 *    notice, this list of conditions and the following disclaimer.
14 * 2. Redistributions in binary form must reproduce the above copyright
15 *    notice, this list of conditions and the following disclaimer in the
16 *    documentation and/or other materials provided with the distribution.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 * SUCH DAMAGE.
29 */
30
31#ifdef HAVE_CONFIG_H
32#include "config.h"
33#endif
34
35#include <rtems/score/cpu.h>
36#include <rtems/score/riscv-utility.h>
37
38void _CPU_Context_Initialize(
39  Context_Control *context,
40  void *stack_area_begin,
41  size_t stack_area_size,
42  unsigned long new_level,
43  void (*entry_point)( void ),
44  bool is_fp,
45  void *tls_area
46)
47{
48  uintptr_t stack = ((uintptr_t) stack_area_begin);
49
50  uintptr_t stack_high = stack + stack_area_size;
51
52  /* Stack Pointer - sp/x2 */
53  context->x[2] = stack_high;
54  /* Frame Pointer - fp/x8 */
55  context->x[8] = stack_high;
56  /* Return Address - ra/x1 */
57  context->x[1] = (uintptr_t) entry_point;
58
59  context->isr_dispatch_disable = 0;
60
61  /* Enable interrupts and FP */
62  context->mstatus = MSTATUS_FS | MSTATUS_MIE;
63}
Note: See TracBrowser for help on using the repository browser.