Hplan9
Hsolaris
Hwindows
- Hwindowsgui
)
func (h *HeadType) Set(s string) error {
*h = Hsolaris
case "windows":
*h = Hwindows
- case "windowsgui":
- *h = Hwindowsgui
default:
return fmt.Errorf("invalid headtype: %q", s)
}
return "solaris"
case Hwindows:
return "windows"
- case Hwindowsgui:
- return "windowsgui"
}
return fmt.Sprintf("HeadType(%d)", *h)
}
asmbuf.Put1(0x8B)
asmbuf.asmand(ctxt, cursym, p, &pp.From, &p.To)
- case obj.Hwindows, obj.Hwindowsgui:
+ case obj.Hwindows:
// Windows TLS base is always 0x14(FS).
pp.From = p.From
0x8B)
asmbuf.asmand(ctxt, cursym, p, &pp.From, &p.To)
- case obj.Hwindows, obj.Hwindowsgui:
+ case obj.Hwindows:
// Windows TLS base is always 0x28(GS).
pp.From = p.From
case obj.Hlinux,
obj.Hnacl,
obj.Hplan9,
- obj.Hwindows,
- obj.Hwindowsgui:
+ obj.Hwindows:
return false
}
}
switch ctxt.Headtype {
- case obj.Hplan9, obj.Hwindows, obj.Hwindowsgui:
+ case obj.Hplan9, obj.Hwindows:
return false
case obj.Hlinux:
return !ctxt.Flag_shared
}
// TODO: Remove.
- if (ctxt.Headtype == obj.Hwindows || ctxt.Headtype == obj.Hwindowsgui) && ctxt.Arch.Family == sys.AMD64 || ctxt.Headtype == obj.Hplan9 {
+ if ctxt.Headtype == obj.Hwindows && ctxt.Arch.Family == sys.AMD64 || ctxt.Headtype == obj.Hplan9 {
if p.From.Scale == 1 && p.From.Index == REG_TLS {
p.From.Scale = 2
}
// nothing to do, the relocation will be laid out in reloc
return true
}
- if ld.Headtype == obj.Hwindows || ld.Headtype == obj.Hwindowsgui {
+ if ld.Headtype == obj.Hwindows {
// nothing to do, the relocation will be laid out in pereloc1
return true
} else {
return true
}
- if ld.Headtype == obj.Hwindows || ld.Headtype == obj.Hwindowsgui {
+ if ld.Headtype == obj.Hwindows {
// nothing to do, the relocation will be laid out in pereloc1
return true
}
ld.Flag8 = true /* 64-bit addresses */
case obj.Hnacl,
- obj.Hwindows,
- obj.Hwindowsgui:
+ obj.Hwindows:
break
}
symo = int64(ld.Segdwarf.Fileoff + ld.Segdwarf.Filelen)
symo = ld.Rnd(symo, int64(*ld.FlagRound))
- case obj.Hwindows,
- obj.Hwindowsgui:
+ case obj.Hwindows:
symo = int64(ld.Segdwarf.Fileoff + ld.Segdwarf.Filelen)
symo = ld.Rnd(symo, ld.PEFILEALIGN)
}
ld.Cflush()
}
- case obj.Hwindows, obj.Hwindowsgui:
+ case obj.Hwindows:
if ctxt.Debugvlog != 0 {
ctxt.Logf("%5.2f dwarf\n", obj.Cputime())
}
obj.Hnacl:
ld.Asmbelf(ctxt, symo)
- case obj.Hwindows,
- obj.Hwindowsgui:
+ case obj.Hwindows:
ld.Asmbpe(ctxt)
}
*ld.FlagRound = 0x10000
}
- case obj.Hwindows, obj.Hwindowsgui: /* PE executable */
+ case obj.Hwindows: /* PE executable */
// ld.HEADR, ld.FlagTextAddr, ld.FlagDataAddr and ld.FlagRound are set in ld.Peinit
return
}
o = 8 + r.Sym.Value
} else if Iself || Headtype == obj.Hplan9 || Headtype == obj.Hdarwin || isAndroidX86 {
o = int64(ctxt.Tlsoffset) + r.Add
- } else if Headtype == obj.Hwindows || Headtype == obj.Hwindowsgui {
+ } else if Headtype == obj.Hwindows {
o = r.Add
} else {
log.Fatalf("unexpected R_TLS_LE relocation for %v", Headtype)
o += Symaddr(rs)
}
}
- } else if Headtype == obj.Hwindows || Headtype == obj.Hwindowsgui {
+ } else if Headtype == obj.Hwindows {
// nothing to do
} else {
Errorf(s, "unhandled pcrel relocation to %s on %v", rs.Name, Headtype)
// IMAGE_REL_I386_DIR32, IMAGE_REL_AMD64_ADDR64 and IMAGE_REL_AMD64_ADDR32.
// Do not replace R_DWARFREF with R_ADDR for windows -
// let PE code emit correct relocations.
- if Headtype != obj.Hwindows && Headtype != obj.Hwindowsgui {
+ if Headtype != obj.Hwindows {
r.Type = obj.R_ADDR
}
} else {
o += int64(r.Siz)
}
- } else if (Headtype == obj.Hwindows || Headtype == obj.Hwindowsgui) && SysArch.Family == sys.AMD64 { // only amd64 needs PCREL
+ } else if Headtype == obj.Hwindows && SysArch.Family == sys.AMD64 { // only amd64 needs PCREL
// PE/COFF's PC32 relocation uses the address after the relocated
// bytes as the base. Compensate by skewing the addend.
o += int64(r.Siz)
}
func dynrelocsym(ctxt *Link, s *Symbol) {
- if (Headtype == obj.Hwindows || Headtype == obj.Hwindowsgui) && Linkmode != LinkExternal {
+ if Headtype == obj.Hwindows && Linkmode != LinkExternal {
rel := ctxt.Syms.Lookup(".rel", 0)
if s == rel {
return
func dynreloc(ctxt *Link, data *[obj.SXREF][]*Symbol) {
// -d suppresses dynamic loader format, so we may as well not
// compute these sections or mark their symbols as reachable.
- if *FlagD && Headtype != obj.Hwindows && Headtype != obj.Hwindowsgui {
+ if *FlagD && Headtype != obj.Hwindows {
return
}
if ctxt.Debugvlog != 0 {
Segdata.Vaddr = va
Segdata.Fileoff = va - Segtext.Vaddr + Segtext.Fileoff
Segdata.Filelen = 0
- if Headtype == obj.Hwindows || Headtype == obj.Hwindowsgui {
+ if Headtype == obj.Hwindows {
Segdata.Fileoff = Segtext.Fileoff + uint64(Rnd(int64(Segtext.Length), PEFILEALIGN))
}
if Headtype == obj.Hplan9 {
Segdwarf.Vaddr = va
Segdwarf.Fileoff = Segdata.Fileoff + uint64(Rnd(int64(Segdata.Filelen), int64(*FlagRound)))
Segdwarf.Filelen = 0
- if Headtype == obj.Hwindows || Headtype == obj.Hwindowsgui {
+ if Headtype == obj.Hwindows {
Segdwarf.Fileoff = Segdata.Fileoff + uint64(Rnd(int64(Segdata.Filelen), int64(PEFILEALIGN)))
}
for s := Segdwarf.Sect; s != nil; s = s.Next {
}
s.Vaddr = va
va += uint64(vlen)
- if Headtype == obj.Hwindows || Headtype == obj.Hwindowsgui {
+ if Headtype == obj.Hwindows {
va = uint64(Rnd(int64(va), PEFILEALIGN))
}
Segdwarf.Length = va - Segdwarf.Vaddr
determineLinkMode(ctxt)
// Recalculate pe parameters now that we have Linkmode set.
- if Headtype == obj.Hwindows || Headtype == obj.Hwindowsgui {
+ if Headtype == obj.Hwindows {
Peinit(ctxt)
}
if *flagLibGCC != "none" {
hostArchive(ctxt, *flagLibGCC)
}
- if Headtype == obj.Hwindows || Headtype == obj.Hwindowsgui {
+ if Headtype == obj.Hwindows {
if p := ctxt.findLibPath("libmingwex.a"); p != "none" {
hostArchive(ctxt, p)
}
}
}
}
- if Headtype == obj.Hwindows || Headtype == obj.Hwindowsgui {
+ if Headtype == obj.Hwindows {
// libmingw32 and libmingwex have some inter-dependencies,
// so must use linker groups.
argv = append(argv, "-Wl,--start-group", "-lmingwex", "-lmingw32", "-Wl,--end-group")
put(ctxt, nil, s.Name, FileSym, s.Value, nil)
case obj.SHOSTOBJ:
- if Headtype == obj.Hwindows || Headtype == obj.Hwindowsgui || Iself {
+ if Headtype == obj.Hwindows || Iself {
put(ctxt, s, s.Name, UndefinedSym, s.Value, nil)
}
if *flagOutfile == "" {
*flagOutfile = "a.out"
- if Headtype == obj.Hwindows || Headtype == obj.Hwindowsgui {
+ if Headtype == obj.Hwindows {
*flagOutfile += ".exe"
}
}
ctxt.domacho()
}
ctxt.dostkcheck()
- if Headtype == obj.Hwindows || Headtype == obj.Hwindowsgui {
+ if Headtype == obj.Hwindows {
ctxt.dope()
}
ctxt.addexport()
default:
log.Fatalf("unknown thread-local storage offset for %v", Headtype)
- case obj.Hplan9, obj.Hwindows, obj.Hwindowsgui:
+ case obj.Hplan9, obj.Hwindows:
break
/*
return true
}
- if (ld.Headtype == obj.Hwindows || ld.Headtype == obj.Hwindowsgui) && s.Size == int64(ld.SysArch.PtrSize) {
+ if ld.Headtype == obj.Hwindows && s.Size == int64(ld.SysArch.PtrSize) {
// nothing to do, the relocation will be laid out in pereloc1
return true
}
case obj.Hdarwin:
symo = uint32(ld.Segdwarf.Fileoff + uint64(ld.Rnd(int64(ld.Segdwarf.Filelen), int64(*ld.FlagRound))) + uint64(machlink))
- case obj.Hwindows, obj.Hwindowsgui:
+ case obj.Hwindows:
symo = uint32(ld.Segdwarf.Fileoff + ld.Segdwarf.Filelen)
symo = uint32(ld.Rnd(int64(symo), ld.PEFILEALIGN))
}
ld.Cflush()
}
- case obj.Hwindows, obj.Hwindowsgui:
+ case obj.Hwindows:
if ctxt.Debugvlog != 0 {
ctxt.Logf("%5.2f dwarf\n", obj.Cputime())
}
obj.Hnacl:
ld.Asmbelf(ctxt, int64(symo))
- case obj.Hwindows, obj.Hwindowsgui:
+ case obj.Hwindows:
ld.Asmbpe(ctxt)
}
*ld.FlagRound = 0x10000
}
- case obj.Hwindows, obj.Hwindowsgui: /* PE executable */
+ case obj.Hwindows: /* PE executable */
// ld.HEADR, ld.FlagTextAddr, ld.FlagDataAddr and ld.FlagRound are set in ld.Peinit
return
}