...
Source file src/pkg/cmd/link/internal/amd64/obj.go
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 if objabi.GOARCH == "amd64p32" {
42 arch = sys.ArchAMD64P32
43 }
44
45 theArch := ld.Arch{
46 Funcalign: funcAlign,
47 Maxalign: maxAlign,
48 Minalign: minAlign,
49 Dwarfregsp: dwarfRegSP,
50 Dwarfreglr: dwarfRegLR,
51
52 Adddynrel: adddynrel,
53 Archinit: archinit,
54 Archreloc: archreloc,
55 Archrelocvariant: archrelocvariant,
56 Asmb: asmb,
57 Asmb2: asmb2,
58 Elfreloc1: elfreloc1,
59 Elfsetupplt: elfsetupplt,
60 Gentext: gentext,
61 Machoreloc1: machoreloc1,
62 PEreloc1: pereloc1,
63 TLSIEtoLE: tlsIEtoLE,
64
65 Linuxdynld: "/lib64/ld-linux-x86-64.so.2",
66 Freebsddynld: "/libexec/ld-elf.so.1",
67 Openbsddynld: "/usr/libexec/ld.so",
68 Netbsddynld: "/libexec/ld.elf_so",
69 Dragonflydynld: "/usr/libexec/ld-elf.so.2",
70 Solarisdynld: "/lib/amd64/ld.so.1",
71 }
72
73 return arch, theArch
74 }
75
76 func archinit(ctxt *ld.Link) {
77 switch ctxt.HeadType {
78 default:
79 ld.Exitf("unknown -H option: %v", ctxt.HeadType)
80
81 case objabi.Hplan9:
82 ld.HEADR = 32 + 8
83
84 if *ld.FlagTextAddr == -1 {
85 *ld.FlagTextAddr = 0x200000 + int64(ld.HEADR)
86 }
87 if *ld.FlagRound == -1 {
88 *ld.FlagRound = 0x200000
89 }
90
91 case objabi.Hdarwin:
92 ld.HEADR = ld.INITIAL_MACHO_HEADR
93 if *ld.FlagRound == -1 {
94 *ld.FlagRound = 4096
95 }
96 if *ld.FlagTextAddr == -1 {
97 *ld.FlagTextAddr = 0x1000000 + int64(ld.HEADR)
98 }
99
100 case objabi.Hlinux,
101 objabi.Hfreebsd,
102 objabi.Hnetbsd,
103 objabi.Hopenbsd,
104 objabi.Hdragonfly,
105 objabi.Hsolaris:
106 ld.Elfinit(ctxt)
107
108 ld.HEADR = ld.ELFRESERVE
109 if *ld.FlagTextAddr == -1 {
110 *ld.FlagTextAddr = (1 << 22) + int64(ld.HEADR)
111 }
112 if *ld.FlagRound == -1 {
113 *ld.FlagRound = 4096
114 }
115
116 case objabi.Hnacl:
117 ld.Elfinit(ctxt)
118 *ld.FlagW = true
119 ld.HEADR = 0x10000
120 ld.Funcalign = 32
121 if *ld.FlagTextAddr == -1 {
122 *ld.FlagTextAddr = 0x20000
123 }
124 if *ld.FlagRound == -1 {
125 *ld.FlagRound = 0x10000
126 }
127
128 case objabi.Hwindows:
129
130 return
131 }
132 }
133
View as plain text