|
1 | 1 | /** |
2 | | - * Generate Mach-O object files |
| 2 | + * Generate Mach-O object files. |
| 3 | + * Does 64 bit X86_64 and 64 bit AArch64. |
| 4 | + * 32 bit X86_64 is more or less abandoned. |
3 | 5 | * |
4 | 6 | * Compiler implementation of the |
5 | 7 | * $(LINK2 https://www.dlang.org, D programming language). |
@@ -252,7 +254,7 @@ struct Relocation |
252 | 254 | uint targseg; // if !=0, then location is to be fixed up |
253 | 255 | // to address of start of this segment |
254 | 256 | REL rtype; // REL.address or REL.rel or REL.add |
255 | | - ubyte flag; // 1: emit SUBTRACTOR/UNSIGNED pair |
| 257 | + bool subtractor; // true: emit SUBTRACTOR/UNSIGNED pair |
256 | 258 | short val; // 0, -1, -2, -4 |
257 | 259 | } |
258 | 260 |
|
@@ -911,13 +913,13 @@ void MachObj_term(const(char)[] objfilename) |
911 | 913 | bool isPersonality = strcmp(s.Sident.ptr, "_D6object8TypeInfo8opEqualsMxFNbNfxCQBbZb") == 0; |
912 | 914 | if (isPersonality) |
913 | 915 | { symbol_print(*s); |
914 | | - printf("%d:x%04llx isCode %x : targseg %d targsym %s REL%s flag %d\n", seg, r.offset, pseg.isCode(), r.targseg, s ? s.Sident.ptr : "0", rs, r.flag); |
| 916 | + printf("%d:x%04llx isCode %x : targseg %d targsym %s REL%s flag %d\n", seg, r.offset, pseg.isCode(), r.targseg, s ? s.Sident.ptr : "0", rs, r.subtractor); |
915 | 917 | } |
916 | 918 | if (0)//s.Sclass == SC.locstat) |
917 | 919 | { symbol_print(*s); |
918 | | - printf("%d:x%04llx isCode %x : targseg %d targsym %s REL%s flag %d\n", seg, r.offset, pseg.isCode(), r.targseg, s ? s.Sident.ptr : "0", rs, r.flag); |
| 920 | + printf("%d:x%04llx isCode %x : targseg %d targsym %s REL%s flag %d\n", seg, r.offset, pseg.isCode(), r.targseg, s ? s.Sident.ptr : "0", rs, r.subtractor); |
919 | 921 | } |
920 | | - if (r.flag == 1) // emit SUBTRACTOR/UNSIGNED pair |
| 922 | + if (r.subtractor) // emit SUBTRACTOR/UNSIGNED pair |
921 | 923 | { |
922 | 924 | //printf("rel1\n"); |
923 | 925 | rel.r_type = ARM64_RELOC_SUBTRACTOR; |
@@ -1188,7 +1190,7 @@ void MachObj_term(const(char)[] objfilename) |
1188 | 1190 | { |
1189 | 1191 | //printf("Relocation\n"); |
1190 | 1192 | //symbol_print(*s); |
1191 | | - if (r.flag == 1) // emit SUBTRACTOR/UNSIGNED pair |
| 1193 | + if (r.subtractor) // emit SUBTRACTOR/UNSIGNED pair |
1192 | 1194 | { |
1193 | 1195 | if (I64) |
1194 | 1196 | { |
@@ -2727,7 +2729,7 @@ void MachObj_addrel(int seg, targ_size_t offset, Symbol* targsym, |
2727 | 2729 | rel.targsym = targsym; |
2728 | 2730 | rel.targseg = targseg; |
2729 | 2731 | rel.rtype = rtype; |
2730 | | - rel.flag = 0; |
| 2732 | + rel.subtractor = false; |
2731 | 2733 | rel.funcsym = funcsym_p; |
2732 | 2734 | rel.val = cast(short)val; |
2733 | 2735 | seg_data* pseg = SegData[seg]; |
@@ -2963,7 +2965,7 @@ int MachObj_reftoident(int seg, targ_size_t offset, Symbol* s, targ_size_t val, |
2963 | 2965 | rel.targsym = null; |
2964 | 2966 | rel.targseg = machobj.pointersSeg; |
2965 | 2967 | rel.rtype = REL.address; |
2966 | | - rel.flag = 0; |
| 2968 | + rel.subtractor = false; |
2967 | 2969 | rel.funcsym = null; |
2968 | 2970 | rel.val = 0; |
2969 | 2971 | seg_data* pseg2 = SegData[seg]; |
@@ -3248,7 +3250,7 @@ int dwarf_eh_frame_fixup(int dfseg, targ_size_t offset, Symbol* s, targ_size_t v |
3248 | 3250 | rel.targsym = s; |
3249 | 3251 | rel.targseg = 0; |
3250 | 3252 | rel.rtype = REL.address; |
3251 | | - rel.flag = 1; |
| 3253 | + rel.subtractor = true; |
3252 | 3254 | rel.funcsym = fdesym; |
3253 | 3255 | rel.val = 0; |
3254 | 3256 | seg_data* pseg = SegData[dfseg]; |
|
0 commit comments