From 9fa3cf0db84cbabdb639cdeb7565f4c3ca3bc562 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Wed, 14 Dec 2011 13:17:19 +0000 Subject: 2011-12-14 Sebastian Huber PR 1924/cpukit * sapi/include/rtems/config.h: Added stack_allocate_init_hook to rtems_configuration_table. * sapi/include/confdefs.h: Added CONFIGURE_TASK_STACK_FROM_ALLOCATOR and CONFIGURE_TASK_STACK_ALLOCATOR_INIT defines. Set default stack allocator and free hook to _Workspace_Allocate() and _Workspace_Free() respectively. * score/src/thread.c, score/src/threadstackallocate.c, score/src/threadstackfree.c: Update due to API changes. --- cpukit/score/src/threadstackallocate.c | 33 ++++++++++++--------------------- 1 file changed, 12 insertions(+), 21 deletions(-) (limited to 'cpukit/score/src/threadstackallocate.c') diff --git a/cpukit/score/src/threadstackallocate.c b/cpukit/score/src/threadstackallocate.c index 0989161f1e..9448328365 100644 --- a/cpukit/score/src/threadstackallocate.c +++ b/cpukit/score/src/threadstackallocate.c @@ -46,33 +46,24 @@ size_t _Thread_Stack_Allocate( { void *stack_addr = 0; size_t the_stack_size; + rtems_stack_allocate_hook stack_allocate_hook = + rtems_configuration_get_stack_allocate_hook(); the_stack_size = _Stack_Ensure_minimum( stack_size ); /* - * Call ONLY the CPU table stack allocate hook, _or_ the - * the RTEMS workspace allocate. This is so the stack free - * routine can call the correct deallocation routine. + * Pad the requested size so we allocate enough memory + * so the context initialization can align it properly. The address + * returned the workspace allocate must be directly stored in the + * stack control block because it is later used in the free sequence. + * + * Thus it is the responsibility of the CPU dependent code to + * get and keep the stack adjust factor, the stack alignment, and + * the context initialization sequence in sync. */ + the_stack_size = _Stack_Adjust_size( the_stack_size ); - if ( Configuration.stack_allocate_hook ) { - stack_addr = (*Configuration.stack_allocate_hook)( the_stack_size ); - } else { - - /* - * First pad the requested size so we allocate enough memory - * so the context initialization can align it properly. The address - * returned the workspace allocate must be directly stored in the - * stack control block because it is later used in the free sequence. - * - * Thus it is the responsibility of the CPU dependent code to - * get and keep the stack adjust factor, the stack alignment, and - * the context initialization sequence in sync. - */ - - the_stack_size = _Stack_Adjust_size( the_stack_size ); - stack_addr = _Workspace_Allocate( the_stack_size ); - } + stack_addr = (*stack_allocate_hook)( the_stack_size ); if ( !stack_addr ) the_stack_size = 0; -- cgit v1.2.3