Skip to content

Commit 4451dbc

Browse files
WalterBrightthewilsonator
authored andcommitted
cleanup before doing more significant changes
1 parent 485a70b commit 4451dbc

2 files changed

Lines changed: 9 additions & 5 deletions

File tree

compiler/src/dmd/backend/mach.d

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -442,7 +442,8 @@ struct relocation_info
442442
void r_extern (uint r) { assert(!(r & ~1)); xxx = (xxx & ~0x0800_0000) | (r << (24 + 1 + 2)); }
443443
void r_type (uint r) { assert(!(r & ~0xF)); xxx = (xxx & ~0xF000_0000) | (r << (24 + 1 + 2 + 1)); }
444444

445-
uint r_pcrel() { return (xxx >> 24) & 1; }
445+
uint r_pcrel() { return (xxx >> 24) & 1; }
446+
uint r_type() { return (xxx >> 28) & 0xF; }
446447
}
447448

448449
struct scattered_relocation_info

compiler/src/dmd/backend/machobj.d

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

243244
enum
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

250251
struct 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

Comments
 (0)