[Bug 1560] sparc64 [1/5]: _Objects_Extend_information improper alignment for 64-bit targets
bugzilla-daemon at rtems.org
bugzilla-daemon at rtems.org
Wed Sep 1 01:47:37 UTC 2010
https://www.rtems.org/bugzilla/show_bug.cgi?id=1560
--- Comment #13 from Chris Johns <chrisj at rtems.org> 2010-08-31 20:47:36 CDT ---
(In reply to comment #11)
> Created an attachment (id=1044)
--> (https://www.rtems.org/bugzilla/attachment.cgi?id=1044) [details]
> Updated patch.
>
> I realized that the allocation was now too small in case of an alignment
> adjustment. So now the alignment adjustment is also made in computing the size
> of the allocation.
My understanding is the need for 3 alignments, not 2.
Part 1, aligned by the allocator.
block_size = (block_count * (sizeof(void *) + sizeof(uint32_t)) +
CPU_ALIGNMENT - 1) & ~(CPU_ALIGNMENT - 1);
Part 2, aligned by the line above.
block_size += block_count * sizeof(Objects_Name *) +
Part 3, it is not aligned.
((maximum + minimum_index) * sizeof(Objects_Control *));
How does this look ? Note I have removed the Object_Name*. I cannot see where
it is used or why it is there so removed it. It seems to have been present from
the start.
/*
* Allocate the tables and break it up. The tables are:
* 1. object_locks : void*
* 2. inactive_per_blocks : uint32_t
* 3. local_table : Objects_Name*
*/
#define ALIGN_BLOCK_SIZE(_s) \
(((_s) + (CPU_ALIGNMENT - 1)) & ~(CPU_ALIGNMENT - 1))
block_size =
ALIGN_BLOCK_SIZE( block_count * sizeof(void *) ) +
ALIGN_BLOCK_SIZE( block_count * sizeof(uint32_t) ) +
( (maximum + minimum_index) * sizeof(Objects_Control *) );
object_blocks = (void**) _Workspace_Allocate( block_size );
if ( !object_blocks ) {
_Workspace_Free( new_object_block );
return;
}
/*
* Break the block into the various sections.
*/
inactive_per_block = (uint32_t *) _Addresses_Add_offset(
object_blocks, ALIGN_BLOCK_SIZE( block_count * sizeof(void*) ));
local_table = (Objects_Control **) _Addresses_Add_offset(
inactive_per_block, ALIGN_BLOCK_SIZE( block_count * sizeof(uint32_t) ));
--
Configure bugmail: https://www.rtems.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are watching all bug changes.
More information about the bugs
mailing list