| 657 | | EnumDataRecord enumData = this.enumData[$-1]; |
|---|
| 658 | | |
|---|
| 659 | | uint address = enumData.offset + offset; |
|---|
| 660 | | |
|---|
| 661 | | writef("fixup - %s : %0.2X | offset: %0.4X | segrel: %s",enumData.base.name,enumData.offset,address,isSegmentRelativeFixup); |
|---|
| 662 | | |
|---|
| 663 | | writef(" | frame: "); |
|---|
| | 652 | FixupRecord fixup = new FixupRecord(); |
|---|
| | 653 | |
|---|
| | 654 | char[] output; |
|---|
| | 655 | output ~= std.string.format("fixup - segrel: %s offset: %d",isSegmentRelativeFixup,offset); |
|---|
| | 656 | |
|---|
| | 657 | output ~= std.string.format(" | target: "); |
|---|
| | 658 | switch(targetMethod){ |
|---|
| | 659 | case 0: targetDisplacement = 0; |
|---|
| | 660 | case 4: output ~= std.string.format("displacement: %d segment: %s",targetDisplacement,this.segments[targetDatum].name); break; |
|---|
| | 661 | |
|---|
| | 662 | case 1: targetDisplacement = 0; |
|---|
| | 663 | case 5: output ~= std.string.format("displacement: %d group %s",targetDisplacement,this.groups[targetDatum].name); break; |
|---|
| | 664 | |
|---|
| | 665 | case 2: targetDisplacement = 0; |
|---|
| | 666 | case 6: output ~= std.string.format("displacement: %d extern %d of %d",targetDisplacement,targetDatum,this.externs.length); break; |
|---|
| | 667 | |
|---|
| | 668 | default: |
|---|
| | 669 | output ~= std.string.format("<invalid>"); |
|---|
| | 670 | } |
|---|
| | 671 | |
|---|
| | 672 | output ~= " | frame: "; |
|---|
| 665 | | case 0: writef("segment %s",this.segments[frameDatum].name); break; |
|---|
| 666 | | case 1: writef("group %s",this.groups[frameDatum].name); break; |
|---|
| 667 | | case 2: writef("extern %s",this.externs[frameDatum].name); break; |
|---|
| 668 | | case 4: writef("segment %s",this.segments[$-1].name); break; |
|---|
| 669 | | case 5: writef("[target]"); break; |
|---|
| | 674 | case 0: output ~= std.string.format("segment %s",this.segments[frameDatum].name); break; |
|---|
| | 675 | case 1: output ~= std.string.format("group %s",this.groups[frameDatum].name); break; |
|---|
| | 676 | case 2: output ~= std.string.format("extern %s",this.externs[frameDatum].name); break; //TODO: go to pubdef to get segment |
|---|
| | 677 | case 4: output ~= std.string.format("enum data segment %s",this.enumData[$-1].base.name); break; |
|---|
| | 678 | case 5: output ~= std.string.format("[same as target]"); break; |
|---|
| 678 | | case 0: writef("(displacment: %d) ",targetDisplacement); |
|---|
| 679 | | case 4: writef("segment %s",this.segments[targetDatum].name); break; |
|---|
| 680 | | |
|---|
| 681 | | case 1: writef("(displacment: %d) ",targetDisplacement); |
|---|
| 682 | | case 5: writef("group %s",this.groups[targetDatum].name); break; |
|---|
| 683 | | |
|---|
| 684 | | case 2: writef("(displacment: %d) ",targetDisplacement); |
|---|
| 685 | | case 6: writef("extern %s",this.externs[frameDatum].name); break; |
|---|
| 686 | | |
|---|
| 687 | | default: |
|---|
| 688 | | writef("<invalid>"); |
|---|
| 689 | | } |
|---|
| 690 | | |
|---|
| 691 | | writefln(""); |
|---|
| | 686 | this.fixups ~= fixup; |
|---|