summaryrefslogtreecommitdiffstats
path: root/ld/scripttempl/tic3xcoff.sc
blob: 29dc400d653b118e6ccfa4d659a3c5a95cd76dd4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# 32 interrupt vectors + 32 trap vectors each of 4 bytes
# The .bss and .data sections need to be contiguous for direct addressing
# The data page pointer gets loaded with the start of .bss
# TI C compiler uses .cinit to initialise variables in .bss

test -z "$ENTRY" && ENTRY=_start
# These are substituted in as variables in order to get '}' in a shell
# conditional expansion.
INIT='.init : { *(.init) }'
FINI='.fini : { *(.fini) }'
cat <<EOF
OUTPUT_FORMAT("${OUTPUT_FORMAT}")
OUTPUT_ARCH("${OUTPUT_ARCH}")
${LIB_SEARCH_DIRS}

ENTRY(${ENTRY})
${RELOCATING+ __SYSMEM_SIZE = DEFINED(__SYSMEM_SIZE) ? __SYSMEM_SIZE : 0x4000;}
${RELOCATING+ __STACK_SIZE  = DEFINED(__STACK_SIZE)  ? __STACK_SIZE  : 0x1000;}

SECTIONS
{
  .comms ${RELOCATING+ 64} : {
    *(.comms)
  } 
  .bss ${RELOCATING+ SIZEOF(.comms) + ADDR(.comms)} : {
    ${RELOCATING+ .bss  =  .;}	
    *(.bss)
    *(COMMON)
    ${RELOCATING+  end  =  .;}
    ${RELOCATING+  _end  =  end;}
  }
  .data ${RELOCATING+ SIZEOF(.bss) + ADDR(.bss)} :
  { 				
    ${RELOCATING+  .data  = .;}
    *(.data)
    ${RELOCATING+  edata  =  .;}
  }
  .const ${RELOCATING+ SIZEOF(.data) + ADDR(.data)} :
  { 					
    *(.const)
  }
  .cinit ${RELOCATING+ SIZEOF(.const) + ADDR(.const)} :
  { 					
    ${RELOCATING+  cinit = .;}
    *(.cinit)
    LONG(0);
  }
  .text ${RELOCATING+ SIZEOF(.cinit) + ADDR(.cinit)} : {
    ${RELOCATING+  .text =  .;}
    ${RELOCATING+ *(.init)}
    *(.text)
    ${CONSTRUCTING+ ___CTOR_LIST__ = .;}
    ${CONSTRUCTING+ LONG(___CTOR_END__ - ___CTOR_LIST__ - 2)}
    ${CONSTRUCTING+ *(.ctors)}
    ${CONSTRUCTING+ LONG(0);}
    ${CONSTRUCTING+ ___CTOR_END__  = .;}
    ${CONSTRUCTING+ ___DTOR_LIST__ = .;}
    ${CONSTRUCTING+ LONG(___DTOR_END__ - ___DTOR_LIST__ - 2)}
    ${CONSTRUCTING+ *(.dtors)}
    ${CONSTRUCTING+ LONG(0)}
    ${CONSTRUCTING+ ___DTOR_END__  = .;}
    ${RELOCATING+ *(.fini)}
    ${RELOCATING+  etext =  .;}
    ${RELOCATING+  _etext =  etext;}
  }
  .stack ${RELOCATING+ SIZEOF(.text) + ADDR(.text)} :
  { 					
    *(.stack)
    ${RELOCATING+ .  =  . + __STACK_SIZE};		
  }
  .sysmem ${RELOCATING+ SIZEOF(.stack) + ADDR(.stack)} :
  { 					
    *(.sysmem)
  }
  .heap ${RELOCATING+ SIZEOF(.sysmem) + ADDR(.sysmem)} :
  { 					
    ${RELOCATING+ . += __SYSMEM_SIZE - SIZEOF(.sysmem)};
  }
  ${RELOCATING- ${INIT}}
  ${RELOCATING- ${FINI}}
  .stab  0 ${RELOCATING+(NOLOAD)} : 
  {
    [ .stab ]
  }
  .stabstr  0 ${RELOCATING+(NOLOAD)} :
  {
    [ .stabstr ]
  }
/* The TI tools sets cinit to -1 if the ram model is used.  */
    ${RELOCATING+  cinit = SIZEOF(.cinit) == 1 ? cinit : -1;}
}
EOF
OpenPOWER on IntegriCloud