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 ppc64
32
33 import (
34 "cmd/internal/objabi"
35 "cmd/internal/sys"
36 "cmd/link/internal/ld"
37 "internal/buildcfg"
38 )
39
40 func Init() (*sys.Arch, ld.Arch) {
41 arch := sys.ArchPPC64LE
42 dynld := "/lib64/ld64.so.2"
43 musl := "/lib/ld-musl-powerpc64le.so.1"
44
45 if buildcfg.GOARCH == "ppc64" {
46 arch = sys.ArchPPC64
47 dynld = "/lib64/ld64.so.1"
48 musl = "/lib/ld-musl-powerpc64.so.1"
49 }
50
51 theArch := ld.Arch{
52 Funcalign: funcAlign,
53 Maxalign: maxAlign,
54 Minalign: minAlign,
55 Dwarfregsp: dwarfRegSP,
56 Dwarfreglr: dwarfRegLR,
57 TrampLimit: 0x1c00000,
58
59 Adddynrel: adddynrel,
60 Archinit: archinit,
61 Archreloc: archreloc,
62 Archrelocvariant: archrelocvariant,
63 Extreloc: extreloc,
64 Gentext: gentext,
65 Trampoline: trampoline,
66 Machoreloc1: machoreloc1,
67 Xcoffreloc1: xcoffreloc1,
68
69 ELF: ld.ELFArch{
70 Linuxdynld: dynld,
71 LinuxdynldMusl: musl,
72
73 Freebsddynld: "XXX",
74 Openbsddynld: "/usr/libexec/ld.so",
75 Netbsddynld: "XXX",
76 Dragonflydynld: "XXX",
77 Solarisdynld: "XXX",
78
79 Reloc1: elfreloc1,
80 RelocSize: 24,
81 SetupPLT: elfsetupplt,
82 },
83 }
84
85 return arch, theArch
86 }
87
88 func archinit(ctxt *ld.Link) {
89 switch ctxt.HeadType {
90 default:
91 ld.Exitf("unknown -H option: %v", ctxt.HeadType)
92
93 case objabi.Hplan9:
94 ld.HEADR = 32
95 if *ld.FlagRound == -1 {
96 *ld.FlagRound = 4096
97 }
98 if *ld.FlagTextAddr == -1 {
99 *ld.FlagTextAddr = ld.Rnd(4096, *ld.FlagRound) + int64(ld.HEADR)
100 }
101
102 case objabi.Hlinux,
103 objabi.Hopenbsd:
104 ld.Elfinit(ctxt)
105 ld.HEADR = ld.ELFRESERVE
106 if *ld.FlagRound == -1 {
107 *ld.FlagRound = 0x10000
108 }
109 if *ld.FlagTextAddr == -1 {
110 *ld.FlagTextAddr = ld.Rnd(0x10000, *ld.FlagRound) + int64(ld.HEADR)
111 }
112
113 case objabi.Haix:
114 ld.Xcoffinit(ctxt)
115 }
116 }
117
View as plain text