1
- gpa : std.mem. Allocator ,
1
+ gpa : Allocator ,
2
2
bin_file : * link.File ,
3
3
format : DW.Format ,
4
4
endian : std.builtin.Endian ,
@@ -21,6 +21,7 @@ debug_rnglists: DebugRngLists,
21
21
debug_str : StringSection ,
22
22
23
23
pub const UpdateError = error {
24
+ WriteFailed ,
24
25
ReinterpretDeclRef ,
25
26
Unimplemented ,
26
27
EndOfStream ,
@@ -50,7 +51,7 @@ const ModInfo = struct {
50
51
dirs : std .AutoArrayHashMapUnmanaged (Unit.Index , void ),
51
52
files : std .AutoArrayHashMapUnmanaged (Zcu.File.Index , void ),
52
53
53
- fn deinit (mod_info : * ModInfo , gpa : std.mem. Allocator ) void {
54
+ fn deinit (mod_info : * ModInfo , gpa : Allocator ) void {
54
55
mod_info .dirs .deinit (gpa );
55
56
mod_info .files .deinit (gpa );
56
57
mod_info .* = undefined ;
@@ -220,7 +221,7 @@ const StringSection = struct {
220
221
.section = Section .init ,
221
222
};
222
223
223
- fn deinit (str_sec : * StringSection , gpa : std.mem. Allocator ) void {
224
+ fn deinit (str_sec : * StringSection , gpa : Allocator ) void {
224
225
str_sec .contents .deinit (gpa );
225
226
str_sec .map .deinit (gpa );
226
227
str_sec .section .deinit (gpa );
@@ -297,7 +298,7 @@ pub const Section = struct {
297
298
.len = 0 ,
298
299
};
299
300
300
- fn deinit (sec : * Section , gpa : std.mem. Allocator ) void {
301
+ fn deinit (sec : * Section , gpa : Allocator ) void {
301
302
for (sec .units .items ) | * unit | unit .deinit (gpa );
302
303
sec .units .deinit (gpa );
303
304
sec .* = undefined ;
@@ -357,7 +358,7 @@ pub const Section = struct {
357
358
if (sec .last == unit .toOptional ()) sec .last = unit_ptr .prev ;
358
359
}
359
360
360
- fn popUnit (sec : * Section , gpa : std.mem. Allocator ) void {
361
+ fn popUnit (sec : * Section , gpa : Allocator ) void {
361
362
const unit_index : Unit.Index = @enumFromInt (sec .units .items .len - 1 );
362
363
sec .unlinkUnit (unit_index );
363
364
var unit = sec .units .pop ().? ;
@@ -518,15 +519,15 @@ const Unit = struct {
518
519
unit .cross_section_relocs .clearRetainingCapacity ();
519
520
}
520
521
521
- fn deinit (unit : * Unit , gpa : std.mem. Allocator ) void {
522
+ fn deinit (unit : * Unit , gpa : Allocator ) void {
522
523
for (unit .entries .items ) | * entry | entry .deinit (gpa );
523
524
unit .entries .deinit (gpa );
524
525
unit .cross_unit_relocs .deinit (gpa );
525
526
unit .cross_section_relocs .deinit (gpa );
526
527
unit .* = undefined ;
527
528
}
528
529
529
- fn addEntry (unit : * Unit , gpa : std.mem. Allocator ) std.mem. Allocator.Error! Entry.Index {
530
+ fn addEntry (unit : * Unit , gpa : Allocator ) Allocator.Error ! Entry.Index {
530
531
if (unit .free .unwrap ()) | entry | {
531
532
const entry_ptr = unit .getEntry (entry );
532
533
unit .free = entry_ptr .next ;
@@ -780,7 +781,7 @@ const Entry = struct {
780
781
entry .external_relocs .clearRetainingCapacity ();
781
782
}
782
783
783
- fn deinit (entry : * Entry , gpa : std.mem. Allocator ) void {
784
+ fn deinit (entry : * Entry , gpa : Allocator ) void {
784
785
entry .cross_entry_relocs .deinit (gpa );
785
786
entry .cross_unit_relocs .deinit (gpa );
786
787
entry .cross_section_relocs .deinit (gpa );
@@ -1133,7 +1134,7 @@ pub const Loc = union(enum) {
1133
1134
};
1134
1135
}
1135
1136
1136
- fn writeReg (reg : u32 , op0 : u8 , opx : u8 , writer : anytype ) @TypeOf ( writer ). Error ! void {
1137
+ fn writeReg (reg : u32 , op0 : u8 , opx : u8 , writer : anytype ) ! void {
1137
1138
if (std .math .cast (u5 , reg )) | small_reg | {
1138
1139
try writer .writeByte (op0 + small_reg );
1139
1140
} else {
@@ -1142,7 +1143,7 @@ pub const Loc = union(enum) {
1142
1143
}
1143
1144
}
1144
1145
1145
- fn write (loc : Loc , adapter : anytype ) UpdateError ! void {
1146
+ fn write (loc : Loc , adapter : anytype ) ! void {
1146
1147
const writer = adapter .writer ();
1147
1148
switch (loc ) {
1148
1149
.empty = > {},
@@ -1712,15 +1713,15 @@ pub const WipNav = struct {
1712
1713
wip_nav .func = func ;
1713
1714
}
1714
1715
1715
- fn externalReloc (wip_nav : * WipNav , sec : * Section , reloc : ExternalReloc ) std.mem. Allocator.Error! void {
1716
+ fn externalReloc (wip_nav : * WipNav , sec : * Section , reloc : ExternalReloc ) Allocator.Error ! void {
1716
1717
try sec .getUnit (wip_nav .unit ).getEntry (wip_nav .entry ).external_relocs .append (wip_nav .dwarf .gpa , reloc );
1717
1718
}
1718
1719
1719
- pub fn infoExternalReloc (wip_nav : * WipNav , reloc : ExternalReloc ) std.mem. Allocator.Error! void {
1720
+ pub fn infoExternalReloc (wip_nav : * WipNav , reloc : ExternalReloc ) Allocator.Error ! void {
1720
1721
try wip_nav .externalReloc (& wip_nav .dwarf .debug_info .section , reloc );
1721
1722
}
1722
1723
1723
- fn frameExternalReloc (wip_nav : * WipNav , reloc : ExternalReloc ) std.mem. Allocator.Error! void {
1724
+ fn frameExternalReloc (wip_nav : * WipNav , reloc : ExternalReloc ) Allocator.Error ! void {
1724
1725
try wip_nav .externalReloc (& wip_nav .dwarf .debug_frame .section , reloc );
1725
1726
}
1726
1727
@@ -1768,33 +1769,33 @@ pub const WipNav = struct {
1768
1769
}
1769
1770
1770
1771
const ExprLocCounter = struct {
1771
- const Stream = std .io .CountingWriter (std .io .NullWriter );
1772
- stream : Stream ,
1772
+ stream : Writer.Discarding ,
1773
1773
section_offset_bytes : u32 ,
1774
1774
address_size : AddressSize ,
1775
- fn init (dwarf : * Dwarf ) ExprLocCounter {
1775
+ fn init (dwarf : * Dwarf , trash_buffer : [] u8 ) ExprLocCounter {
1776
1776
return .{
1777
- .stream = std . io . countingWriter ( std . io . null_writer ),
1777
+ .stream = . init ( trash_buffer ),
1778
1778
.section_offset_bytes = dwarf .sectionOffsetBytes (),
1779
1779
.address_size = dwarf .address_size ,
1780
1780
};
1781
1781
}
1782
- fn writer (counter : * ExprLocCounter ) Stream. Writer {
1783
- return counter .stream .writer () ;
1782
+ fn writer (counter : * ExprLocCounter ) * Writer {
1783
+ return & counter .stream .writer ;
1784
1784
}
1785
1785
fn endian (_ : ExprLocCounter ) std.builtin.Endian {
1786
1786
return @import ("builtin" ).cpu .arch .endian ();
1787
1787
}
1788
1788
fn addrSym (counter : * ExprLocCounter , _ : u32 ) error {}! void {
1789
- counter .stream .bytes_written += @intFromEnum (counter .address_size );
1789
+ counter .stream .count += @intFromEnum (counter .address_size );
1790
1790
}
1791
1791
fn infoEntry (counter : * ExprLocCounter , _ : Unit.Index , _ : Entry.Index ) error {}! void {
1792
- counter .stream .bytes_written += counter .section_offset_bytes ;
1792
+ counter .stream .count += counter .section_offset_bytes ;
1793
1793
}
1794
1794
};
1795
1795
1796
1796
fn infoExprLoc (wip_nav : * WipNav , loc : Loc ) UpdateError ! void {
1797
- var counter : ExprLocCounter = .init (wip_nav .dwarf );
1797
+ var trash_buffer : [64 ]u8 = undefined ;
1798
+ var counter : ExprLocCounter = .init (wip_nav .dwarf , & trash_buffer );
1798
1799
try loc .write (& counter );
1799
1800
1800
1801
const adapter : struct {
@@ -1812,7 +1813,7 @@ pub const WipNav = struct {
1812
1813
try ctx .wip_nav .infoSectionOffset (.debug_info , unit , entry , 0 );
1813
1814
}
1814
1815
} = .{ .wip_nav = wip_nav };
1815
- try uleb128 (adapter .writer (), counter .stream .bytes_written );
1816
+ try uleb128 (adapter .writer (), counter .stream .fullCount () );
1816
1817
try loc .write (adapter );
1817
1818
}
1818
1819
@@ -1826,7 +1827,8 @@ pub const WipNav = struct {
1826
1827
}
1827
1828
1828
1829
fn frameExprLoc (wip_nav : * WipNav , loc : Loc ) UpdateError ! void {
1829
- var counter : ExprLocCounter = .init (wip_nav .dwarf );
1830
+ var trash_buffer : [64 ]u8 = undefined ;
1831
+ var counter : ExprLocCounter = .init (wip_nav .dwarf , & trash_buffer );
1830
1832
try loc .write (& counter );
1831
1833
1832
1834
const adapter : struct {
@@ -1844,7 +1846,7 @@ pub const WipNav = struct {
1844
1846
try ctx .wip_nav .sectionOffset (.debug_frame , .debug_info , unit , entry , 0 );
1845
1847
}
1846
1848
} = .{ .wip_nav = wip_nav };
1847
- try uleb128 (adapter .writer (), counter .stream .bytes_written );
1849
+ try uleb128 (adapter .writer (), counter .stream .fullCount () );
1848
1850
try loc .write (adapter );
1849
1851
}
1850
1852
@@ -1922,7 +1924,7 @@ pub const WipNav = struct {
1922
1924
try wip_nav .infoSectionOffset (.debug_info , unit , entry , 0 );
1923
1925
}
1924
1926
1925
- fn refForward (wip_nav : * WipNav ) std.mem. Allocator.Error! u32 {
1927
+ fn refForward (wip_nav : * WipNav ) Allocator.Error ! u32 {
1926
1928
const dwarf = wip_nav .dwarf ;
1927
1929
const cross_entry_relocs = & dwarf .debug_info .section .getUnit (wip_nav .unit ).getEntry (wip_nav .entry ).cross_entry_relocs ;
1928
1930
const reloc_index : u32 = @intCast (cross_entry_relocs .items .len );
@@ -6022,14 +6024,14 @@ fn sectionOffsetBytes(dwarf: *Dwarf) u32 {
6022
6024
6023
6025
fn uleb128Bytes (value : anytype ) u32 {
6024
6026
var trash_buffer : [64 ]u8 = undefined ;
6025
- var d : std.Io. Writer.Discarding = .init (& trash_buffer );
6027
+ var d : Writer.Discarding = .init (& trash_buffer );
6026
6028
d .writer .writeUleb128 (value ) catch unreachable ;
6027
6029
return @intCast (d .count + d .writer .end );
6028
6030
}
6029
6031
6030
6032
fn sleb128Bytes (value : anytype ) u32 {
6031
6033
var trash_buffer : [64 ]u8 = undefined ;
6032
- var d : std.Io. Writer.Discarding = .init (& trash_buffer );
6034
+ var d : Writer.Discarding = .init (& trash_buffer );
6033
6035
d .writer .writeSleb128 (value ) catch unreachable ;
6034
6036
return @intCast (d .count + d .writer .end );
6035
6037
}
@@ -6057,3 +6059,5 @@ const sleb128 = std.leb.writeIleb128;
6057
6059
const std = @import ("std" );
6058
6060
const target_info = @import ("../target.zig" );
6059
6061
const uleb128 = std .leb .writeUleb128 ;
6062
+ const Allocator = std .mem .Allocator ;
6063
+ const Writer = std .Io .Writer ;
0 commit comments