sb.l.SetAttrReachable(sb.symIdx, v)
}
-func (sb *SymbolBuilder) setReachable() {
- sb.SetReachable(true)
-}
-
func (sb *SymbolBuilder) ReadOnly() bool {
return sb.l.AttrReadOnly(sb.symIdx)
}
}
func (sb *SymbolBuilder) AddStringAt(off int64, str string) int64 {
+ strLen := int64(len(str))
+ if off+strLen > int64(len(sb.data)) {
+ panic("attempt to write past end of buffer")
+ }
+ copy(sb.data[off:off+strLen], str)
+ return off + strLen
+}
+
+// AddCStringAt adds str plus a null terminating byte.
+func (sb *SymbolBuilder) AddCStringAt(off int64, str string) int64 {
strLen := int64(len(str))
if off+strLen+1 > int64(len(sb.data)) {
panic("attempt to write past end of buffer")
sb.kind = sym.SNOPTRDATA
}
r := sb.size
- if sb.name == ".shstrtab" {
- // FIXME: find a better mechanism for this
- sb.l.elfsetstring(str, int(r))
- }
sb.data = append(sb.data, str...)
sb.data = append(sb.data, 0)
sb.size = int64(len(sb.data))
return sb.AddAddrPlus(arch, tgt, 0)
}
+func (sb *SymbolBuilder) AddPEImageRelativeAddrPlus(arch *sys.Arch, tgt Sym, add int64) int64 {
+ return sb.addSymRef(tgt, add, objabi.R_PEIMAGEOFF, 4)
+}
+
func (sb *SymbolBuilder) AddPCRelPlus(arch *sys.Arch, tgt Sym, add int64) int64 {
return sb.addSymRef(tgt, add, objabi.R_PCREL, 4)
}