source: rtems/testsuites/psxtests/psxstack02/init.c

Last change on this file was 5594854, checked in by Joel Sherrill <joel@…>, on 04/07/22 at 15:05:28

testsuites/psxtests/psx[n-z]*: Change license to BSD-2

Updates #3053.

  • Property mode set to 100644
File size: 3.6 KB
Line 
1/* SPDX-License-Identifier: BSD-2-Clause */
2
3/*
4 *  COPYRIGHT (c) 1989-2012.
5 *  On-Line Applications Research Corporation (OAR).
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 *    notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 *    notice, this list of conditions and the following disclaimer in the
14 *    documentation and/or other materials provided with the distribution.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 * POSSIBILITY OF SUCH DAMAGE.
27 */
28
29#ifdef HAVE_CONFIG_H
30#include "config.h"
31#endif
32
33#include <tmacros.h>
34#include "test_support.h"
35
36#include <errno.h>
37#include <pthread.h>
38#include <sched.h>
39
40#include <rtems/posix/pthreadimpl.h>
41#include <rtems/score/stackimpl.h>
42
43const char rtems_test_name[] = "PSXSTACK 2";
44
45/* forward declarations to avoid warnings */
46void *POSIX_Init(void *argument);
47void *Test_Thread(void *arg);
48
49void *Stack_Low;
50void *Stack_High;
51
52void *Test_Thread(void *arg)
53{
54  #if defined(__GNUC__)
55    void *sp = __builtin_frame_address(0);
56
57    #if 0
58      printf( "Stack(%p - %p) and sp=%p\n", Stack_Low, Stack_High, sp );
59    #endif
60
61    if ( sp >= Stack_Low && sp <= Stack_High )
62      puts( "Test_Thread - running on user provided stack - OK" );
63    else {
64      puts( "Test_Thread - ERROR running on other stack" );
65      rtems_test_exit(0);
66    }
67  #else
68      puts( "Test_Thread - no way to get stack pointer and verify" );
69  #endif
70  puts( "Test_Thread - delete self" );
71  return NULL;
72}
73
74void *POSIX_Init(void *argument)
75{
76  int                 sc;
77  pthread_t           id;
78  pthread_attr_t      attr;
79  struct timespec     delay_request;
80
81  TEST_BEGIN();
82
83  puts( "Init - Allocate stack from heap" );
84  Stack_Low = malloc(PTHREAD_MINIMUM_STACK_SIZE);
85  rtems_test_assert( Stack_Low );
86  Stack_High = Stack_Low + PTHREAD_MINIMUM_STACK_SIZE;
87
88  puts( "Init - Initialize thread attribute for user provided stack" );
89  sc = pthread_attr_init( &attr );
90  rtems_test_assert( !sc );
91
92  sc = pthread_attr_setstack( &attr, Stack_Low, PTHREAD_MINIMUM_STACK_SIZE );
93  rtems_test_assert( !sc );
94
95  /* create threads */
96  sc = pthread_create( &id, &attr, Test_Thread, NULL );
97  rtems_test_assert( !sc );
98
99  puts( "Init - let other thread run" );
100  delay_request.tv_sec = 0;
101  delay_request.tv_nsec = 5 * 100000000;
102  sc = nanosleep( &delay_request, NULL );
103  rtems_test_assert( !sc );
104
105  TEST_END();
106
107  rtems_test_exit(0);
108}
109
110/* configuration information */
111
112#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
113#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
114
115#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
116
117#define CONFIGURE_MAXIMUM_POSIX_THREADS        2
118
119#define CONFIGURE_POSIX_INIT_THREAD_TABLE
120
121#define CONFIGURE_INIT
122#include <rtems/confdefs.h>
123/* end of file */
Note: See TracBrowser for help on using the repository browser.