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 package amd64
32
33 import (
34 "cmd/internal/objabi"
35 "cmd/internal/sys"
36 "cmd/link/internal/ld"
37 )
38
39 func Init() (*sys.Arch, ld.Arch) {
40 arch := sys.ArchAMD64
41
42 theArch := ld.Arch{
43 Funcalign: funcAlign,
44 Maxalign: maxAlign,
45 Minalign: minAlign,
46 Dwarfregsp: dwarfRegSP,
47 Dwarfreglr: dwarfRegLR,
48
49 CodePad: []byte{0xCC},
50
51 Plan9Magic: uint32(4*26*26 + 7),
52 Plan9_64Bit: true,
53
54 Adddynrel: adddynrel,
55 Archinit: archinit,
56 Archreloc: archreloc,
57 Archrelocvariant: archrelocvariant,
58 Elfreloc1: elfreloc1,
59 ElfrelocSize: 24,
60 Elfsetupplt: elfsetupplt,
61 Gentext: gentext,
62 Machoreloc1: machoreloc1,
63 MachorelocSize: 8,
64 PEreloc1: pereloc1,
65 TLSIEtoLE: tlsIEtoLE,
66
67 Linuxdynld: "/lib64/ld-linux-x86-64.so.2",
68 Freebsddynld: "/libexec/ld-elf.so.1",
69 Openbsddynld: "/usr/libexec/ld.so",
70 Netbsddynld: "/libexec/ld.elf_so",
71 Dragonflydynld: "/usr/libexec/ld-elf.so.2",
72 Solarisdynld: "/lib/amd64/ld.so.1",
73 }
74
75 return arch, theArch
76 }
77
78 func archinit(ctxt *ld.Link) {
79 switch ctxt.HeadType {
80 default:
81 ld.Exitf("unknown -H option: %v", ctxt.HeadType)
82
83 case objabi.Hplan9:
84 ld.HEADR = 32 + 8
85
86 if *ld.FlagTextAddr == -1 {
87 *ld.FlagTextAddr = 0x200000 + int64(ld.HEADR)
88 }
89 if *ld.FlagRound == -1 {
90 *ld.FlagRound = 0x200000
91 }
92
93 case objabi.Hdarwin:
94 ld.HEADR = ld.INITIAL_MACHO_HEADR
95 if *ld.FlagRound == -1 {
96 *ld.FlagRound = 4096
97 }
98 if *ld.FlagTextAddr == -1 {
99 *ld.FlagTextAddr = 0x1000000 + int64(ld.HEADR)
100 }
101
102 case objabi.Hlinux,
103 objabi.Hfreebsd,
104 objabi.Hnetbsd,
105 objabi.Hopenbsd,
106 objabi.Hdragonfly,
107 objabi.Hsolaris:
108 ld.Elfinit(ctxt)
109
110 ld.HEADR = ld.ELFRESERVE
111 if *ld.FlagTextAddr == -1 {
112 *ld.FlagTextAddr = (1 << 22) + int64(ld.HEADR)
113 }
114 if *ld.FlagRound == -1 {
115 *ld.FlagRound = 4096
116 }
117
118 case objabi.Hwindows:
119
120 return
121 }
122 }
123
View as plain text