[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