//
// Ideally the last page of the text segment would not be
// writable even for this short period.
- va = uint64(Rnd(int64(va), int64(*FlagRound)))
+ va = uint64(Rnd(int64(va), *FlagRound))
order = append(order, &Segrodata)
Segrodata.Rwx = 04
if len(Segrelrodata.Sections) > 0 {
// align to page boundary so as not to mix
// rodata, rel-ro data, and executable text.
- va = uint64(Rnd(int64(va), int64(*FlagRound)))
+ va = uint64(Rnd(int64(va), *FlagRound))
if ctxt.HeadType == objabi.Haix {
// Relro data are inside data segment on AIX.
va += uint64(XCOFFDATABASE) - uint64(XCOFFTEXTBASE)
Segrelrodata.Length = va - Segrelrodata.Vaddr
}
- va = uint64(Rnd(int64(va), int64(*FlagRound)))
+ va = uint64(Rnd(int64(va), *FlagRound))
if ctxt.HeadType == objabi.Haix && len(Segrelrodata.Sections) == 0 {
// Data sections are moved to an unreachable segment
// to ensure that they are position-independent.
Segdata.Filelen = bss.Vaddr - Segdata.Vaddr
if len(Segpdata.Sections) > 0 {
- va = uint64(Rnd(int64(va), int64(*FlagRound)))
+ va = uint64(Rnd(int64(va), *FlagRound))
order = append(order, &Segpdata)
Segpdata.Rwx = 04
Segpdata.Vaddr = va
}
if len(Segxdata.Sections) > 0 {
- va = uint64(Rnd(int64(va), int64(*FlagRound)))
+ va = uint64(Rnd(int64(va), *FlagRound))
order = append(order, &Segxdata)
Segxdata.Rwx = 04
Segxdata.Vaddr = va
Segxdata.Length = va - Segxdata.Vaddr
}
- va = uint64(Rnd(int64(va), int64(*FlagRound)))
+ va = uint64(Rnd(int64(va), *FlagRound))
order = append(order, &Segdwarf)
Segdwarf.Rwx = 06
Segdwarf.Vaddr = va
// aligned, the following rounding
// should ensure that this segment's
// VA ≡ Fileoff mod FlagRound.
- seg.Fileoff = uint64(Rnd(int64(prev.Fileoff+prev.Filelen), int64(*FlagRound)))
+ seg.Fileoff = uint64(Rnd(int64(prev.Fileoff+prev.Filelen), *FlagRound))
if seg.Vaddr%uint64(*FlagRound) != seg.Fileoff%uint64(*FlagRound) {
Exitf("bad segment rounding (Vaddr=%#x Fileoff=%#x FlagRound=%#x)", seg.Vaddr, seg.Fileoff, *FlagRound)
}
func asmbMacho(ctxt *Link) {
machlink := doMachoLink(ctxt)
if ctxt.IsExternal() {
- symo := int64(Segdwarf.Fileoff + uint64(Rnd(int64(Segdwarf.Filelen), int64(*FlagRound))) + uint64(machlink))
+ symo := int64(Segdwarf.Fileoff + uint64(Rnd(int64(Segdwarf.Filelen), *FlagRound)) + uint64(machlink))
ctxt.Out.SeekSet(symo)
machoEmitReloc(ctxt)
}
}
/* text */
- v := Rnd(int64(uint64(HEADR)+Segtext.Length), int64(*FlagRound))
+ v := Rnd(int64(uint64(HEADR)+Segtext.Length), *FlagRound)
var mstext *MachoSeg
if ctxt.LinkMode != LinkExternal {
if ctxt.LinkMode != LinkExternal {
ms := newMachoSeg("__LINKEDIT", 0)
- ms.vaddr = uint64(Rnd(int64(Segdata.Vaddr+Segdata.Length), int64(*FlagRound)))
+ ms.vaddr = uint64(Rnd(int64(Segdata.Vaddr+Segdata.Length), *FlagRound))
ms.vsize = uint64(s1 + s2 + s3 + s4 + s5 + s6 + s7)
ms.fileoffset = uint64(linkoff)
ms.filesize = ms.vsize
}
if size > 0 {
- linkoff = Rnd(int64(uint64(HEADR)+Segtext.Length), int64(*FlagRound)) + Rnd(int64(Segrelrodata.Filelen), int64(*FlagRound)) + Rnd(int64(Segdata.Filelen), int64(*FlagRound)) + Rnd(int64(Segdwarf.Filelen), int64(*FlagRound))
+ linkoff = Rnd(int64(uint64(HEADR)+Segtext.Length), *FlagRound) + Rnd(int64(Segrelrodata.Filelen), *FlagRound) + Rnd(int64(Segdata.Filelen), *FlagRound) + Rnd(int64(Segdwarf.Filelen), *FlagRound)
ctxt.Out.SeekSet(linkoff)
ctxt.Out.Write(ldr.Data(s1))
size += ldr.SymSize(s7)
}
- return Rnd(size, int64(*FlagRound))
+ return Rnd(size, *FlagRound)
}
func machorelocsect(ctxt *Link, out *OutBuf, sect *sym.Section, syms []loader.Sym) {
// Now copy the dwarf data into the output.
// Kernel requires all loaded segments to be page-aligned in the file,
// even though we mark this one as being 0 bytes of virtual address space.
- dwarfstart := Rnd(int64(linkseg.Offset), int64(*FlagRound))
+ dwarfstart := Rnd(int64(linkseg.Offset), *FlagRound)
if _, err := outf.Seek(dwarfstart, 0); err != nil {
return err
}
if _, err := exef.Seek(int64(linkseg.Offset), 0); err != nil {
return err
}
- linkstart := Rnd(dwarfstart+int64(dwarfsize), int64(*FlagRound))
+ linkstart := Rnd(dwarfstart+int64(dwarfsize), *FlagRound)
if _, err := outf.Seek(linkstart, 0); err != nil {
return err
}