@@ -222,6 +222,7 @@ int mach_seg_data_isCode(const ref seg_data sd)
222222 if (I64 )
223223 {
224224 // printf("SDshtidx = %d, x%x\n", SDshtidx, SecHdrTab64[sd.SDshtidx].flags);
225+ // return SecHdrTab64[sd.SDshtidx].flags & (S_ATTR_PURE_INSTRUCTIONS | S_ATTR_SOME_INSTRUCTIONS);
225226 return strcmp (SecHdrTab64[sd.SDshtidx].segname.ptr, " __TEXT" ) == 0 ;
226227 }
227228 else
@@ -242,9 +243,9 @@ import dmd.backend.code: SegData;
242243
243244enum
244245{
245- RELaddr = 0 , // straight address
246+ RELaddr = 0 , // 32 bit fixup
246247 RELrel = 1 , // relative to location to be fixed up
247- RELadd = 2 , // add in extra bits of relocation
248+ RELadd = 2 , // add in 12 extra bits of relocation
248249}
249250
250251struct Relocation
@@ -900,8 +901,10 @@ void MachObj_term(const(char)[] objfilename)
900901 Relocation* rend = cast (Relocation* )(pseg.SDrel.buf + pseg.SDrel.length());
901902 for (; r != rend; r++ )
902903 { Symbol* s = r.targsym;
903- const (char )* rs = r.rtype == RELaddr ? " addr" : " rel" ;
904- // printf("%d:x%04llx : targseg %d targsym %s REL%s flag %d\n", seg, r.offset, r.targseg, s ? s.Sident.ptr : "0", rs, r.flag);
904+ const (char )* rs = r.rtype == RELaddr ? " addr" : // 32 bit address
905+ r.rtype == RELadd ? " add" :
906+ " rel" ;
907+ // printf("%d:x%04llx : targseg %d targsym %s REL%s flag %d\n", seg, r.offset, r.targseg, s ? s.Sident.ptr : "0", rs, r.flag);
905908 relocation_info rel;
906909 scattered_relocation_info srel;
907910 if (s)
0 commit comments