Skip to content

Commit b5fe017

Browse files
authored
corrected machobj fixups (dlang#23114)
1 parent 3eeb948 commit b5fe017

1 file changed

Lines changed: 9 additions & 8 deletions

File tree

compiler/src/dmd/backend/machobj.d

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -908,17 +908,15 @@ void MachObj_term(const(char)[] objfilename)
908908
r.rtype == RELadd ? "add" :
909909
"rel";
910910
//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);
911-
// bool isPersonality = strcmp(s.Sident.ptr, "__dmd_personality_v0") == 0 ||
912-
// strcmp(s.Sident.ptr, "___dmd_personality_v0") == 0; // temporary scaffolding
913-
// symbol_print(*s);
911+
// bool isPersonality = strcmp(s.Sident.ptr, "__dmd_personality_v0") == 0 ||
912+
// strcmp(s.Sident.ptr, "___dmd_personality_v0") == 0; // temporary scaffolding
913+
//symbol_print(*s);
914914
relocation_info rel;
915915
scattered_relocation_info srel;
916916
if (machobj.AArch64)
917917
{
918918
if (s)
919919
{
920-
//printf("Relocation\n");
921-
//symbol_print(*s);
922920
if (r.flag == 1) // emit SUBTRACTOR/UNSIGNED pair
923921
{
924922
//printf("rel1\n");
@@ -1056,12 +1054,16 @@ void MachObj_term(const(char)[] objfilename)
10561054
rel.r_address = cast(int)r.offset;
10571055
rel.r_symbolnum = s.Sseg;
10581056
rel.r_pcrel = 0;
1059-
rel.r_length = 2; // 3?
1057+
rel.r_length = 3;
10601058
rel.r_extern = 0;
10611059
rel.r_type = ARM64_RELOC_UNSIGNED;
10621060
machobj.fobjbuf.write(&rel, rel.sizeof);
10631061
foffset += rel.sizeof;
10641062
nreloc++;
1063+
1064+
int32_t* p = patchAddr64(seg, r.offset);
1065+
// Absolute address; add in addr of start of targ seg
1066+
*p += SecHdrTab64[SegData[s.Sseg].SDshtidx].addr + s.Soffset;
10651067
continue;
10661068
}
10671069
}
@@ -1144,10 +1146,9 @@ void MachObj_term(const(char)[] objfilename)
11441146
rel.r_address = cast(int)r.offset;
11451147
rel.r_symbolnum = r.targseg;
11461148
rel.r_pcrel = (r.rtype == RELaddr) ? 0 : 1;
1147-
rel.r_length = 2;
1149+
rel.r_length = 3;
11481150
rel.r_extern = 0;
11491151
rel.r_type = ARM64_RELOC_UNSIGNED;
1150-
rel.r_length = 3;
11511152

11521153
machobj.fobjbuf.write(&rel, rel.sizeof);
11531154
foffset += rel.sizeof;

0 commit comments

Comments
 (0)