Changeset ec1dd51a in rtems


Ignore:
Timestamp:
Mar 6, 2019, 10:15:56 AM (7 weeks ago)
Author:
Chris Johns <chrisj@…>
Branches:
master
Children:
3b68442
Parents:
96e4b22
git-author:
Chris Johns <chrisj@…> (03/06/19 10:15:56)
git-committer:
Chris Johns <chrisj@…> (03/06/19 19:33:47)
Message:

libdl: Add small data support to the remaining PowerPC BSPs.

Updates #3687

Files:
8 edited

Legend:

Unmodified
Added
Removed
  • bsps/powerpc/gen5200/start/linkcmds.gen5200_base

    r96e4b22 rec1dd51a  
    2727RamSize = bsp_ram_size;
    2828HeapSize = DEFINED(HeapSize) ? HeapSize : 0x0;
     29
     30/*
     31 * The upper layer linker command file may optionally define the symbol
     32 * bsp_section_small_data_area_size.  By default, the small data area is
     33 * defined by the .sdata and .sbss input sections.  Define
     34 * bsp_section_small_data_area_size, if you want to make space available for
     35 * dynamically loaded libraries (libdl).  Small memory targets which do not use
     36 * libdl, should not define this symbol.
     37 */
    2938
    3039MEMORY {
     
    234243
    235244        .sdata : {
     245                bsp_section_sdata_begin = .;
    236246                PROVIDE (_SDA_BASE_ = 32768);
    237247                *(.sdata .sdata.* .gnu.linkonce.s.*)
     
    246256                 */
    247257                bsp_section_data_end = .;
     258                bsp_section_sdata_end = .;
    248259        } > RAM
    249260
     
    252263                 * BSP: Start of bss section
    253264                 */
    254                 bsp_section_bss_start = .;
     265                bsp_section_sbss_begin = .;
    255266
    256267                __bss_start = .;
     
    261272                *(.sbss .sbss.* .gnu.linkonce.sb.*)
    262273                PROVIDE (__sbss_end = .); PROVIDE (___sbss_end = .);
     274                bsp_section_sbss_end = .;
     275                bsp_section_sdata_libdl_begin = .;
     276                . = DEFINED(bsp_section_small_data_area_size) ?
     277                      bsp_section_sdata_begin + bsp_section_small_data_area_size : .;
     278                bsp_section_sdata_libdl_end = .;
    263279
    264280                . = ALIGN (bsp_section_align);
     
    266282
    267283        .bss : {
     284                bsp_section_bss_start = .;
    268285                *(COMMON)
    269286                *(.dynbss)
  • bsps/powerpc/haleakala/start/linkcmds

    r96e4b22 rec1dd51a  
    2525}
    2626
     27/*
     28 * Max sdata/bss.
     29 */
     30bsp_section_small_data_area_size = 65536;
    2731
    2832SECTIONS
     
    218222      . = ALIGN (4);
    219223          PROVIDE (__SDATA_START__ = .);
     224      bsp_section_sdata_begin = .;
    220225      sdata.start = .;
    221226          *(.sdata*)
    222227      *(.gnu.linkonce.s.*)
    223228          sdata.end = .;
     229      bsp_section_sdata_end = .;
    224230        } > RAM
    225231
     
    228234      . = ALIGN (4);
    229235          PROVIDE(__SBSS_START__ = .);
     236      bsp_section_sbss_begin = .;
    230237          sbss.start = .;
    231238      *(.sbss .sbss.* *.gnu.linkonce.sb.*);
    232239          sbss.end = .;
     240      bsp_section_sbss_end = .;
     241      bsp_section_sdata_libdl_begin = .;
     242      . = DEFINED(bsp_section_small_data_area_size) ?
     243            bsp_section_sdata_begin + bsp_section_small_data_area_size : .;
     244      bsp_section_sdata_libdl_end = .;
    233245    } > RAM
    234246    PROVIDE(__SBSS_END__ = .);
  • bsps/powerpc/mpc8260ads/start/linkcmds

    r96e4b22 rec1dd51a  
    101101     */
    102102
    103     PROVIDE (__CTOR_LIST__ = .);       
     103    PROVIDE (__CTOR_LIST__ = .);
    104104    /* LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2) */
    105105    *crtbegin.o(.ctors)
     
    228228    PROVIDE (_FIXUP_END_ = .);
    229229    PROVIDE (__FIXUP_END__ = .);
    230  
     230
    231231    .sdata : {
     232      bsp_section_sdata_begin = .;
    232233      PROVIDE (_SDA_BASE_ = 32768);
    233234      *(.sdata .sdata.* .gnu.linkonce.s.*)
    234     } > ram
    235  
     235      bsp_section_sdata_end = .;
     236  } > ram
     237
    236238    .sbss : {
    237239      __bss_start = .;
    238  
     240      bsp_section_sbss_begin = .;
     241
    239242      PROVIDE (__sbss_start = .); PROVIDE (___sbss_start = .);
    240243      *(.scommon)
     
    242245      *(.sbss .sbss.* .gnu.linkonce.sb.*)
    243246      PROVIDE (__sbss_end = .); PROVIDE (___sbss_end = .);
    244     } > ram
    245  
     247      bsp_section_sbss_end = .;
     248      bsp_section_sdata_libdl_begin = .;
     249      . = DEFINED(bsp_section_small_data_area_size) ?
     250              bsp_section_sdata_begin + bsp_section_small_data_area_size : .;
     251      bsp_section_sdata_libdl_end = .;
     252    } > ram
     253
    246254    .sdata2 : {
    247255      PROVIDE (_SDA2_BASE_ = 32768);
    248  
     256
    249257      *(.sdata2 .sdata2.* .gnu.linkonce.s2.*)
    250258    } > ram =0
    251  
     259
    252260    .sbss2 : {
    253261      *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*)
  • bsps/powerpc/shared/start/linkcmds.share

    r96e4b22 rec1dd51a  
    22              "elf32-powerpc")
    33OUTPUT_ARCH(powerpc)
     4
    45/* Do we need any of these for elf?
    56   __DYNAMIC = 0;    */
     
    89        CODE : ORIGIN = 0x3000 , LENGTH = 32M - 0x3000
    910}
     11
     12/*
     13 * The upper layer linker command file may optionally define the symbol
     14 * bsp_section_small_data_area_size.  By default, the small data area is
     15 * defined by the .sdata and .sbss input sections.  Define
     16 * bsp_section_small_data_area_size, if you want to make space available for
     17 * dynamically loaded libraries (libdl).  Small memory targets which do not use
     18 * libdl, should not define this symbol.
     19 */
     20
    1021SECTIONS
    1122{
     
    216227     can access them all, and initialized data all before uninitialized, so
    217228     we can shorten the on-disk segment size.  */
    218   .sdata          : { PROVIDE (_SDA_BASE_ = 32768); *(.sdata*) *(.gnu.linkonce.s.*)     } >CODE
     229  .sdata : {
     230    bsp_section_sdata_begin = .;
     231    PROVIDE (_SDA_BASE_ = 32768);
     232    *(.sdata*) *(.gnu.linkonce.s.*)
     233    bsp_section_sdata_end = .;
     234  } > CODE
    219235  _edata  =  .;
    220236  PROVIDE (edata = .);
    221237  .sbss      :
    222238  {
     239    bsp_section_sbss_begin = .;
    223240    PROVIDE (__sbss_start = .);
    224241    *(.dynsbss)
     
    231248    PROVIDE (__SBSS_END__ = .);
    232249    PROVIDE (__sbss_end = .);
     250    bsp_section_sbss_end = .;
     251    bsp_section_sdata_libdl_begin = .;
     252     . = DEFINED(bsp_section_small_data_area_size) ?
     253         bsp_section_sdata_begin + bsp_section_small_data_area_size : .;
     254    bsp_section_sdata_libdl_end = .;
    233255  } > CODE
    234256  .plt   : { *(.plt) }  > CODE
  • bsps/powerpc/ss555/start/linkcmds

    r96e4b22 rec1dd51a  
    1616
    1717OUTPUT_FORMAT("elf32-powerpc", "elf32-powerpc", "elf32-powerpc")
    18 OUTPUT_ARCH(powerpc) 
     18OUTPUT_ARCH(powerpc)
    1919STARTUP(start.o)
    2020ENTRY(start)
     
    3636     * For the MPC555, we use the compressed vector table format which puts
    3737     * all of the exception vectors before 0x100.
    38      */ 
     38     */
    3939    *(.vectors)
    4040  }
     
    4343  {
    4444    /* Read-only sections, merged into text segment: */
    45    
     45
    4646    text.start = .;
    4747
     
    5555    /* C++ constructors/destructors */
    5656    *(.gnu.linkonce.t*)
    57              
     57
    5858    /*  Initialization and finalization code.
    5959     *
     
    6666     *  ecrtn.o; the linker won't look for a file to match a wildcard.  The
    6767     *  wildcard also means that it doesn't matter which directory ecrti.o
    68      *  and ecrtn.o are in. 
     68     *  and ecrtn.o are in.
    6969     */
    7070    PROVIDE (_init = .);
     
    7272    *(.init)
    7373    *ecrtn.o(.init)
    74    
     74
    7575    PROVIDE (_fini = .);
    7676    *ecrti.o(.fini)
     
    7878    *ecrtn.o(.init)
    7979
    80     /* 
     80    /*
    8181     *  C++ constructors and destructors for static objects.
    8282     *  PowerPC EABI does not use crtstuff yet, so we build "old-style"
     
    8484     *  end terminate with a NULL entry.
    8585     */
    86     PROVIDE (__CTOR_LIST__ = .);             
     86    PROVIDE (__CTOR_LIST__ = .);
    8787    /* LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2) */
    8888    *crtbegin.o(.ctors)
     
    9191    LONG(0)
    9292    PROVIDE (__CTOR_END__ = .);
    93        
     93
    9494    PROVIDE (__DTOR_LIST__ = .);
    9595    /* LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2) */
     
    9999    LONG(0)
    100100    PROVIDE (__DTOR_END__ = .);
    101        
     101
    102102    /*
    103103     * Special FreeBSD sysctl sections.
     
    140140    _TLS_Data_end = .;
    141141
    142     /* 
    143      * .data section contents, copied to RAM at system startup. 
     142    /*
     143     * .data section contents, copied to RAM at system startup.
    144144     */
    145145    . = ALIGN(0x20);
     
    164164   */
    165165  . = DEFINED(RTEMS_DEBUG) ? . : int_ram_org;
    166  
     166
    167167  .data : AT (data.contents.start)
    168168  {
    169169    data.start = .;
    170    
     170
    171171    *(.data)
    172172    *(.data.*)
    173173    KEEP (*(SORT(.rtemsrwset.*)))
    174174    *(.data1)
    175    
     175
    176176    PROVIDE (__SDATA_START__ = .);
    177177    *(.sdata .sdata.* .gnu.linkonce.s.*)
    178178    PROVIDE (__SDATA_END__ = .);
    179    
     179
    180180    PROVIDE (__EXCEPT_START__ = .);
    181181    *(.gcc_except_table*)
    182182    PROVIDE (__EXCEPT_END__ = .);
    183    
     183
    184184    PROVIDE(__GOT_START__ = .);
    185     *(.got.plt) 
     185    *(.got.plt)
    186186    *(.got)
    187187    PROVIDE(__GOT_END__ = .);
    188        
     188
    189189    *(.got1)
    190    
     190
    191191    PROVIDE (__GOT2_START__ = .);
    192192    PROVIDE (_GOT2_START_ = .);
     
    194194    PROVIDE (__GOT2_END__ = .);
    195195    PROVIDE (_GOT2_END_ = .);
    196        
     196
    197197    PROVIDE (__FIXUP_START__ = .);
    198198    PROVIDE (_FIXUP_START_ = .);
     
    205205     */
    206206    PROVIDE (__SDATA2_START__ = .);
     207    bsp_section_sdata_begin = .;
    207208    *(.sdata2 .sdata2.* .gnu.linkonce.s2.*)
    208209    *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*)
    209210    PROVIDE (__SDATA2_END__ = .);
     211    bsp_section_sdata_end = .;
    210212
    211213    data.end = .;
     
    217219  {
    218220    PROVIDE (__sbss_start = .); PROVIDE (___sbss_start = .);
     221    bsp_section_sbss_begin = .;
    219222    *(.dynsbss)
    220223    *(.sbss .sbss.* .gnu.linkonce.sb.*)
    221224    *(.scommon)
    222225    PROVIDE (__sbss_end = .); PROVIDE (___sbss_end = .);
     226    bsp_section_sbss_end = .;
     227    bsp_section_sdata_libdl_begin = .;
     228    . = DEFINED(bsp_section_small_data_area_size) ?
     229          bsp_section_sdata_begin + bsp_section_small_data_area_size : .;
     230    bsp_section_sdata_libdl_end = .;
    223231  }
    224232  .bss :
    225233  {
    226     *(.dynbss) 
     234    *(.dynbss)
    227235    *(.bss .bss* .gnu.linkonce.b*)
    228236    *(COMMON)
     
    248256  WorkAreaBase = .;
    249257
    250  
    251   /* 
    252    * Internal I/O devices 
     258
     259  /*
     260   * Internal I/O devices
    253261   */
    254262  .usiu 0x002FC000:             /* unified system interface unit */
     
    284292  .stab.indexstr 0 : { *(.stab.indexstr) }
    285293  .comment 0 : { *(.comment) }
    286  
     294
    287295  /* DWARF debug sections.
    288296     Symbols in the DWARF debugging sections are relative to the beginning
     
    291299  .debug          0 : { *(.debug) }
    292300  .line           0 : { *(.line) }
    293  
     301
    294302  /* GNU DWARF 1 extensions */
    295303  .debug_srcinfo  0 : { *(.debug_srcinfo) }
    296304  .debug_sfnames  0 : { *(.debug_sfnames) }
    297  
     305
    298306  /* DWARF 1.1 and DWARF 2 */
    299307  .debug_aranges  0 : { *(.debug_aranges) }
    300308  .debug_pubnames 0 : { *(.debug_pubnames) }
    301  
     309
    302310  /* DWARF 2 */
    303311  .debug_info     0 : { *(.debug_info) }
     
    308316  .debug_loc      0 : { *(.debug_loc) }
    309317  .debug_macinfo  0 : { *(.debug_macinfo) }
    310  
     318
    311319  /* SGI/MIPS DWARF 2 extensions */
    312320  .debug_weaknames 0 : { *(.debug_weaknames) }
  • bsps/powerpc/virtex4/start/linkcmds

    r96e4b22 rec1dd51a  
    210210   */
    211211  /* Initialised small data addressed as offsets from r13 */
    212   .sdata          : { PROVIDE (_SDA_BASE_ = 32768); *(.sdata* .gnu.linkonce.s.*)                     } > RAM
     212  .sdata          : {
     213        bsp_section_sdata_begin = .;
     214        PROVIDE (_SDA_BASE_ = 32768); *(.sdata* .gnu.linkonce.s.*);
     215        bsp_section_sdata_end = .;
     216   } > RAM
    213217
    214218  _edata          = .;
     
    217221  /* Zeroed small data addressed as offsets from r13 */
    218222  .sbss           : { PROVIDE (__sbss_start = .);
     223                      bsp_section_sbss_begin = .;
    219224                      *(.dynsbss)
    220225                      *(.sbss*)
     
    229234                      PROVIDE (__SBSS_END__ = .);
    230235                      PROVIDE (__sbss_end   = .);
     236                      bsp_section_sbss_end = .;
     237                      bsp_section_sdata_libdl_begin = .;
     238                      . = DEFINED(bsp_section_small_data_area_size) ?
     239                        bsp_section_sdata_begin + bsp_section_small_data_area_size : .;
     240                      bsp_section_sdata_libdl_end = .;
    231241                    } > RAM
    232242
  • bsps/powerpc/virtex5/start/linkcmds

    r96e4b22 rec1dd51a  
    210210   */
    211211  /* Initialised small data addressed as offsets from r13 */
    212   .sdata          : { PROVIDE (_SDA_BASE_ = 32768); *(.sdata* .gnu.linkonce.s.*)                     } > RAM
     212  .sdata          : {
     213        bsp_section_sdata_begin = .;
     214        PROVIDE (_SDA_BASE_ = 32768); *(.sdata* .gnu.linkonce.s.*);
     215        bsp_section_sdata_end = .;
     216   } > RAM
    213217
    214218  _edata          = .;
     
    217221  /* Zeroed small data addressed as offsets from r13 */
    218222  .sbss           : { PROVIDE (__sbss_start = .);
     223                      bsp_section_sbss_begin = .;
    219224                      *(.dynsbss)
    220225                      *(.sbss*)
     
    229234                      PROVIDE (__SBSS_END__ = .);
    230235                      PROVIDE (__sbss_end   = .);
     236                      bsp_section_sbss_end = .;
     237                      bsp_section_sdata_libdl_begin = .;
     238                      . = DEFINED(bsp_section_small_data_area_size) ?
     239                        bsp_section_sdata_begin + bsp_section_small_data_area_size : .;
     240                      bsp_section_sdata_libdl_end = .;
    231241                    } > RAM
    232242
  • cpukit/libdl/rtl-mdreloc-powerpc.c

    r96e4b22 rec1dd51a  
    5151get_sdata_start (void)
    5252{
     53#if _ARCH_PPC64
     54  return NULL;
     55#else
    5356  Elf_Addr addr;
    5457  GET_ADDR(__SDATA_START__, addr);
    5558  return (void*) addr;
    56 }
    57 
     59#endif
     60}
     61
     62#if !_ARCH_PPC64
    5863static size_t
    5964get_sdata_sbss_size (void)
     
    7580  return end - begin;
    7681}
     82#endif
    7783
    7884uint32_t
     
    9096                                  const uint32_t       flags)
    9197{
     98#if !_ARCH_PPC64
    9299  struct {
    93100    const char* label;
     
    105112      return flags | RTEMS_RTL_OBJ_SECT_ARCH_ALLOC;
    106113  }
     114#endif
    107115  return flags;
    108116}
     
    112120                                  rtems_rtl_obj_sect*  sect)
    113121{
     122#if _ARCH_PPC64
     123    rtems_rtl_set_error (ENOMEM, ".sdata no supported by ABI");
     124    return false;
     125#else
    114126  if (rtems_rtl_trace (RTEMS_RTL_TRACE_DETAIL))
    115127    printf ("rtl: section: arch: alloc: name=%s size=%zu flags=%08" PRIx32 \
     
    139151
    140152  return true;
     153#endif
    141154}
    142155
     
    145158                                  rtems_rtl_obj_sect*  sect)
    146159{
     160#if !_ARCH_PPC64
    147161  if (rtems_rtl_trace (RTEMS_RTL_TRACE_DETAIL))
    148162    printf ("rtl: section: arch: free: name=%s size=%zu\n", sect->name, sect->size);
    149163  if (sdata != NULL)
    150164    rtems_rtl_bit_alloc_bfree (sdata, sect->base, sect->size);
     165#endif
    151166  return true;
    152167}
Note: See TracChangeset for help on using the changeset viewer.