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