genScript.sh
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:8k
源码类别:

VxWorks

开发平台:

C/C++

  1. #!/bin/sh
  2. # genScript.sh
  3. #
  4. # a shell script to generate linker scripts.
  5. #
  6. # TODO:
  7. # 1. convenience labels like etext, edata, end, and wrs_kernel_*_{start,end}
  8. #    are primarily used by ROM kernels and can most likely be omitted from RAM
  9. #    kernels. But they're harmless and it makes script sharing easier.
  10. # 2. "classic" convenience labels (etext/edata/end) should be phased out in
  11. #    favor of the newer ones. Further, DAT has requested that we make the new
  12. #    names conform to wrsInitialCapitals style.
  13. # 3. Due to the template generation strategy employed here, the final output
  14. #    may look a little awkwardly formatted and certainly is not as clean and
  15. #    simple as the early versions of the Diab scripts. Suggestions welcome.
  16. #    I actually think this might not be such a bad application for (gasp!) Tcl,
  17. #    so a future Tcl rewrite (which also helps windows users) is possible.
  18. # 4. Currently GNU aligns everything to 16. This is probably overkill on many
  19. #    chips, and especially once everyone is ELF, the internal section alignment
  20. #    should take care of things -- except for convenience labels which need to
  21. #    guarantee 4 byte alignment for use with copyLongs and fillLongs.
  22. # 5. General convergence...
  23. mod_history()
  24. {
  25. cat <<'EOF'
  26. /*
  27. modification history
  28. --------------------
  29. 01l,29may02,tpw  Diab: pad out sections, needed for MIPS byteswap. SPR 78076
  30. 01k,24apr02,sn   GNU: SPR 75835 - added support for relocatable script link.OUT
  31. 01j,19apr02,tpw  Diab: provide _etext for ColdFire. SPR 75122
  32. 01i,06feb02,sn   Both: place .got2 to handle tramp.o (_x_gnu_tramp.o).
  33. 01h,25jan02,tpw  GNU: give debug sections explicit 0 addresses.
  34. 01g,14jan02,tpw  Diab: place .eh_frame data, in case of insistent GNU objects.
  35. 01f,14dec01,tpw  Diab: provide both underscore options of wrs_kernel* here too.
  36. 01e,05dec01,tpw  Both: Add .boot and .reset section support, for PPC 4xx series
  37.                  and Book E.
  38. 01d,05dec01,tpw  Diab: Add .frame_info section to text region.
  39. 01c,03dec01,jab  Diab: replaced LOAD() with AT()
  40. 01b,14nov01,tpw  ALL: Correct some more bootrom/kernel issues.
  41. 01b,06nov01,tpw  GNU: Add /DISCARD/ directive to discard uninteresting sections
  42. 01a,01nov01,tpw  gnu script written
  43. 01a,29oct01,jab  diab script written
  44. */
  45. EOF
  46. }
  47. filename="$1"
  48. TOOL="$2"
  49. shift 2
  50. style="$*"
  51. align=16
  52. am1=`expr $align - 1`
  53. bind=""
  54. [ "$TOOL" = diab ] && bind=BIND
  55. dot_boot_text="
  56.   .boot $bind(wrs_kernel_text_start + wrs_kernel_rom_size - 0x800) :
  57.   {
  58.   *(.boot)
  59.   }
  60.   .reset $bind(wrs_kernel_text_start + wrs_kernel_rom_size - 4) :
  61.   {
  62.   *(.reset)
  63.   }
  64. "
  65. diab_data_group_text="  }
  66.   GROUP BIND(_VX_START_DATA) : {"
  67. named_debug_sections="
  68.   /* Stabs debugging sections.  */
  69.   .stab 0 : { *(.stab) }
  70.   .stabstr 0 : { *(.stabstr) }
  71.   .stab.excl 0 : { *(.stab.excl) }
  72.   .stab.exclstr 0 : { *(.stab.exclstr) }
  73.   .stab.index 0 : { *(.stab.index) }
  74.   .stab.indexstr 0 : { *(.stab.indexstr) }
  75.   .comment 0 : { *(.comment) }
  76.   /* DWARF debug sections.
  77.      Symbols in the DWARF debugging sections are relative to the beginning
  78.      of the section so we begin them at 0.  */
  79.   /* DWARF 1 */
  80.   .debug          0 : { *(.debug) }
  81.   .line           0 : { *(.line) }
  82.   /* GNU DWARF 1 extensions */
  83.   .debug_srcinfo  0 : { *(.debug_srcinfo) }
  84.   .debug_sfnames  0 : { *(.debug_sfnames) }
  85.   /* DWARF 1.1 and DWARF 2 */
  86.   .debug_aranges  0 : { *(.debug_aranges) }
  87.   .debug_pubnames 0 : { *(.debug_pubnames) }
  88.   /* DWARF 2 */
  89.   .debug_info     0 : { *(.debug_info) }
  90.   .debug_abbrev   0 : { *(.debug_abbrev) }
  91.   .debug_line     0 : { *(.debug_line) }
  92.   .debug_frame    0 : { *(.debug_frame) }
  93.   .debug_str      0 : { *(.debug_str) }
  94.   .debug_loc      0 : { *(.debug_loc) }
  95.   .debug_macinfo  0 : { *(.debug_macinfo) }
  96.   /* SGI/MIPS DWARF 2 extensions */
  97.   .debug_weaknames 0 : { *(.debug_weaknames) }
  98.   .debug_funcnames 0 : { *(.debug_funcnames) }
  99.   .debug_typenames 0 : { *(.debug_typenames) }
  100.   .debug_varnames  0 : { *(.debug_varnames) }"
  101. rom_at=""
  102. dot_boot=""
  103. diab_data_group=""
  104. zero=""
  105. wrs_kernel_text_start="wrs_kernel_text_start = .; _wrs_kernel_text_start = .;"
  106. wrs_kernel_text_end="wrs_kernel_text_end = .; _wrs_kernel_text_end = .;"
  107. etext="etext = .; _etext = .;"
  108. wrs_kernel_data_start="wrs_kernel_data_start = .; _wrs_kernel_data_start = .;"
  109. wrs_kernel_data_end="wrs_kernel_data_end = .; _wrs_kernel_data_end = .;"
  110. edata="edata = .; _edata = .;"
  111. wrs_kernel_bss_start="wrs_kernel_bss_start = .; _wrs_kernel_bss_start = .;"
  112. wrs_kernel_bss_end="wrs_kernel_bss_end = .; _wrs_kernel_bss_end = .;"
  113. end="end = .; _end = .;"
  114. gp_mips_diab="_gp = ((. + $am1) & ~$am1) + 0x7ff0;"
  115. gp_mips_gnu="_gp = ALIGN(16) + 0x7ff0; /* set gp for MIPS startup code */"
  116. sec_align_diab=". = ((. + 3) & ~3);"
  117. sec_align_gnu=". = ALIGN($align);"
  118. for arg
  119. do
  120.     case "$arg" in
  121. AOUT) named_debug_sections="" ;;
  122. ROM) diab_data_group="$diab_data_group_text" ;
  123. rom_at=" AT(etext)" ;;
  124. RAM) ;;
  125. DOTBOOT) dot_boot="$dot_boot_text" ;;
  126. OUT)            zero="0"
  127. wrs_kernel_text_start=""
  128. wrs_kernel_text_end=""
  129. etext=""
  130. wrs_kernel_data_start=""
  131. wrs_kernel_data_end=""
  132. edata=""
  133. wrs_kernel_bss_start=""
  134. wrs_kernel_bss_end=""
  135. end=""
  136. gp_mips_gnu=""
  137. gp_mips_diab=""
  138. sec_align_gnu=""
  139. sec_align_diab=""
  140. ;;
  141. *) echo "$0: '$arg' unknown." 1>&2 ; exit 1 ;;
  142.     esac
  143. done
  144. cat <<EOF
  145. /* $filename - $TOOL linker command file for VxWorks: $style */
  146. /* Copyright 1984-2001 Wind River Systems, Inc. */
  147. /* This file was automatically generated using tool/common/ldscripts. */
  148. EOF
  149. mod_history
  150. if [ "$TOOL" = diab ]; then
  151. cat <<EOF
  152. SECTIONS {
  153.   GROUP BIND(_VX_START_TEXT) : {
  154.     .text (TEXT) : {
  155.       $wrs_kernel_text_start
  156.       *(.text) *(.rdata) *(.rodata)
  157.       *(.init) *(.fini)
  158.       *(.frame_info)
  159.       *(.sdata2)
  160.       $sec_align_diab
  161.     }
  162.     $sec_align_diab
  163.     $etext
  164.     $wrs_kernel_text_end
  165. $diab_data_group
  166.     .data (DATA)$rom_at : {
  167.       $wrs_kernel_data_start
  168.       *(.data)
  169.       *(.eh_frame) /* Some GNU objects insist on having .eh_frame data. */
  170.       *(.ctors)
  171.       *(.dtors)
  172.       /* set gp for MIPS startup code */
  173.       $gp_mips_diab
  174.       *(.got2)
  175.       *(.sdata)
  176.       $sec_align_diab
  177.     }
  178.     $sec_align_diab
  179.     $edata
  180.     $wrs_kernel_data_end
  181.     .bss (BSS) : {
  182.       $wrs_kernel_bss_start
  183.       *(.sbss)
  184.       *(.bss)
  185.       $sec_align_diab
  186.     }
  187.     $sec_align_diab
  188.     $end
  189.     $wrs_kernel_bss_end
  190.   }
  191. $dot_boot}
  192. EOF
  193. else
  194. # presume $TOOL = gnu
  195. cat <<EOF
  196. ENTRY(_start)
  197. SECTIONS
  198. {
  199.   .text     $zero :
  200.   {
  201.     $wrs_kernel_text_start
  202.     *(.text) *(.text.*) *(.stub) *(.gnu.warning) *(.gnu.linkonce.t*)
  203.     KEEP(*(.init)) KEEP(*(.fini))
  204.     *(.glue_7t) *(.glue_7) *(.rdata) /* for ARM */
  205.     *(.mips16.fn.*) *(.mips16.call.*) *(.reginfo) /* for MIPS */
  206.     *(.rodata) *(.rodata.*) *(.gnu.linkonce.r*) *(.rodata1)
  207.     *(.sdata2) *(.sbss2) /* for PPC */
  208.     $sec_align_gnu
  209.   }
  210.   $sec_align_gnu
  211.   $wrs_kernel_text_end
  212.   $etext
  213.   .data   $zero :$rom_at
  214.   {
  215.     $wrs_kernel_data_start
  216.     *(.data) *(.data.*) *(.gnu.linkonce.d*) SORT(CONSTRUCTORS) *(.data1)
  217.     *(.eh_frame) *(.gcc_except_table)
  218.     KEEP (*crtbegin.o(.ctors))
  219.     KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
  220.     KEEP (*(SORT(.ctors.*)))
  221.     KEEP (*(.ctors))
  222.     KEEP (*crtbegin.o(.dtors))
  223.     KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
  224.     KEEP (*(SORT(.dtors.*)))
  225.     KEEP (*(.dtors))
  226.     $gp_mips_gnu
  227.     /* got*, dynamic, sdata*, lit[48], and sbss should follow _gp */
  228.     *(.got.plt) *(.got) *(.dynamic)
  229.     *(.got2)
  230.     *(.sdata) *(.sdata.*) *(.lit8) *(.lit4)
  231.     $sec_align_gnu
  232.   }
  233.   $sec_align_gnu
  234.   $edata
  235.   $wrs_kernel_data_end
  236.   .bss     $zero  :
  237.   {
  238.     $wrs_kernel_bss_start
  239.     *(.sbss) *(.scommon) *(.dynbss) *(.bss) *(COMMON)
  240.     $sec_align_gnu
  241.   }
  242.   $sec_align_gnu
  243.   $end
  244.   $wrs_kernel_bss_end
  245. $dot_boot
  246.   /DISCARD/ :
  247.   {
  248.   *(.note) /* seen on Pentium ELF */
  249.   *(.comment) /* seen on PPC & SH ELF */
  250.   *(.pdr) /* seen on MIPS ELF */
  251.   }$named_debug_sections
  252. }
  253. EOF
  254. fi