1
2
3
4
5 package riscv64
6
7 import (
8 "cmd/internal/objabi"
9 "cmd/internal/sys"
10 "cmd/link/internal/ld"
11 )
12
13 func Init() (*sys.Arch, ld.Arch) {
14 arch := sys.ArchRISCV64
15
16 theArch := ld.Arch{
17 Funcalign: funcAlign,
18 Maxalign: maxAlign,
19 Minalign: minAlign,
20 Dwarfregsp: dwarfRegSP,
21 Dwarfreglr: dwarfRegLR,
22
23 Adddynrel: adddynrel,
24 Archinit: archinit,
25 Archreloc: archreloc,
26 Archrelocvariant: archrelocvariant,
27 Extreloc: extreloc,
28
29
30
31
32
33 TrampLimit: 1,
34 Trampoline: trampoline,
35
36 Gentext: gentext,
37 GenSymsLate: genSymsLate,
38 Machoreloc1: machoreloc1,
39
40 ELF: ld.ELFArch{
41 Linuxdynld: "/lib/ld-linux-riscv64-lp64d.so.1",
42 LinuxdynldMusl: "/lib/ld-musl-riscv64.so.1",
43
44 Freebsddynld: "/usr/libexec/ld-elf.so.1",
45 Netbsddynld: "XXX",
46 Openbsddynld: "/usr/libexec/ld.so",
47 Dragonflydynld: "XXX",
48 Solarisdynld: "XXX",
49
50 Reloc1: elfreloc1,
51 RelocSize: 24,
52 SetupPLT: elfsetupplt,
53 },
54 }
55
56 return arch, theArch
57 }
58
59 func archinit(ctxt *ld.Link) {
60 switch ctxt.HeadType {
61 case objabi.Hlinux, objabi.Hfreebsd, objabi.Hopenbsd:
62 ld.Elfinit(ctxt)
63 ld.HEADR = ld.ELFRESERVE
64 if *ld.FlagRound == -1 {
65 *ld.FlagRound = 0x10000
66 }
67 if *ld.FlagTextAddr == -1 {
68 *ld.FlagTextAddr = ld.Rnd(0x10000, *ld.FlagRound) + int64(ld.HEADR)
69 }
70 default:
71 ld.Exitf("unknown -H option: %v", ctxt.HeadType)
72 }
73 }
74
View as plain text