@@ -164,22 +164,22 @@ func readsym(ctxt *Link, f *obj.Biobuf, pkg string, pn string) {
164
164
if obj .Bgetc (f ) != 0xfe {
165
165
log .Fatalf ("readsym out of sync" )
166
166
}
167
- t := int ( rdint (f ) )
167
+ t := rdint (f )
168
168
name := expandpkg (rdstring (f ), pkg )
169
- v := int ( rdint (f ) )
169
+ v := rdint (f )
170
170
if v != 0 && v != 1 {
171
171
log .Fatalf ("invalid symbol version %d" , v )
172
172
}
173
- flags := int ( rdint (f ) )
173
+ flags := rdint (f )
174
174
dupok := flags & 1
175
175
local := false
176
176
if flags & 2 != 0 {
177
177
local = true
178
178
}
179
- size := int ( rdint (f ) )
179
+ size := rdint (f )
180
180
typ := rdsym (ctxt , f , pkg )
181
181
data := rddata (f )
182
- nreloc := int ( rdint (f ) )
182
+ nreloc := rdint (f )
183
183
184
184
if v != 0 {
185
185
v = ctxt .Version
@@ -241,11 +241,11 @@ overwrite:
241
241
var r * Reloc
242
242
for i := 0 ; i < nreloc ; i ++ {
243
243
r = & s .R [i ]
244
- r .Off = int32 ( rdint ( f ) )
245
- r .Siz = uint8 ( rdint ( f ) )
246
- r .Type = int32 ( rdint ( f ) )
247
- r .Add = rdint (f )
248
- rdint (f ) // Xadd, ignored
244
+ r .Off = rdint32 ( f )
245
+ r .Siz = rduint8 ( f )
246
+ r .Type = rdint32 ( f )
247
+ r .Add = rdint64 (f )
248
+ rdint64 (f ) // Xadd, ignored
249
249
r .Sym = rdsym (ctxt , f , pkg )
250
250
rdsym (ctxt , f , pkg ) // Xsym, ignored
251
251
}
@@ -260,19 +260,19 @@ overwrite:
260
260
}
261
261
262
262
if s .Type == obj .STEXT {
263
- s .Args = int32 ( rdint ( f ) )
264
- s .Locals = int32 ( rdint ( f ) )
265
- s .Nosplit = uint8 ( rdint ( f ) )
266
- v := int ( rdint (f ) )
263
+ s .Args = rdint32 ( f )
264
+ s .Locals = rdint32 ( f )
265
+ s .Nosplit = rduint8 ( f )
266
+ v := rdint (f )
267
267
s .Leaf = uint8 (v & 1 )
268
268
s .Cfunc = uint8 (v & 2 )
269
- n := int ( rdint (f ) )
269
+ n := rdint (f )
270
270
var a * Auto
271
271
for i := 0 ; i < n ; i ++ {
272
272
a = new (Auto )
273
273
a .Asym = rdsym (ctxt , f , pkg )
274
- a .Aoffset = int32 ( rdint ( f ) )
275
- a .Name = int16 ( rdint ( f ) )
274
+ a .Aoffset = rdint32 ( f )
275
+ a .Name = rdint16 ( f )
276
276
a .Gotype = rdsym (ctxt , f , pkg )
277
277
a .Link = s .Autom
278
278
s .Autom = a
@@ -283,23 +283,23 @@ overwrite:
283
283
pc .Pcsp .P = rddata (f )
284
284
pc .Pcfile .P = rddata (f )
285
285
pc .Pcline .P = rddata (f )
286
- n = int ( rdint (f ) )
286
+ n = rdint (f )
287
287
pc .Pcdata = make ([]Pcdata , n )
288
288
pc .Npcdata = n
289
289
for i := 0 ; i < n ; i ++ {
290
290
pc .Pcdata [i ].P = rddata (f )
291
291
}
292
- n = int ( rdint (f ) )
292
+ n = rdint (f )
293
293
pc .Funcdata = make ([]* LSym , n )
294
294
pc .Funcdataoff = make ([]int64 , n )
295
295
pc .Nfuncdata = n
296
296
for i := 0 ; i < n ; i ++ {
297
297
pc .Funcdata [i ] = rdsym (ctxt , f , pkg )
298
298
}
299
299
for i := 0 ; i < n ; i ++ {
300
- pc .Funcdataoff [i ] = rdint (f )
300
+ pc .Funcdataoff [i ] = rdint64 (f )
301
301
}
302
- n = int ( rdint (f ) )
302
+ n = rdint (f )
303
303
pc .File = make ([]* LSym , n )
304
304
pc .Nfile = n
305
305
for i := 0 ; i < n ; i ++ {
@@ -374,7 +374,7 @@ overwrite:
374
374
}
375
375
}
376
376
377
- func rdint (f * obj.Biobuf ) int64 {
377
+ func rdint64 (f * obj.Biobuf ) int64 {
378
378
var c int
379
379
380
380
uv := uint64 (0 )
@@ -392,15 +392,47 @@ func rdint(f *obj.Biobuf) int64 {
392
392
return int64 (uv >> 1 ) ^ (int64 (uint64 (uv )<< 63 ) >> 63 )
393
393
}
394
394
395
+ func rdint (f * obj.Biobuf ) int {
396
+ n := rdint64 (f )
397
+ if int64 (int (n )) != n {
398
+ log .Panicf ("%v out of range for int" , n )
399
+ }
400
+ return int (n )
401
+ }
402
+
403
+ func rdint32 (f * obj.Biobuf ) int32 {
404
+ n := rdint64 (f )
405
+ if int64 (int32 (n )) != n {
406
+ log .Panicf ("%v out of range for int32" , n )
407
+ }
408
+ return int32 (n )
409
+ }
410
+
411
+ func rdint16 (f * obj.Biobuf ) int16 {
412
+ n := rdint64 (f )
413
+ if int64 (int16 (n )) != n {
414
+ log .Panicf ("%v out of range for int16" , n )
415
+ }
416
+ return int16 (n )
417
+ }
418
+
419
+ func rduint8 (f * obj.Biobuf ) uint8 {
420
+ n := rdint64 (f )
421
+ if int64 (uint8 (n )) != n {
422
+ log .Panicf ("%v out of range for uint8" , n )
423
+ }
424
+ return uint8 (n )
425
+ }
426
+
395
427
func rdstring (f * obj.Biobuf ) string {
396
- n := rdint (f )
428
+ n := rdint64 (f )
397
429
p := make ([]byte , n )
398
430
obj .Bread (f , p )
399
431
return string (p )
400
432
}
401
433
402
434
func rddata (f * obj.Biobuf ) []byte {
403
- n := rdint (f )
435
+ n := rdint64 (f )
404
436
p := make ([]byte , n )
405
437
obj .Bread (f , p )
406
438
return p
@@ -409,9 +441,9 @@ func rddata(f *obj.Biobuf) []byte {
409
441
var symbuf []byte
410
442
411
443
func rdsym (ctxt * Link , f * obj.Biobuf , pkg string ) * LSym {
412
- n := int ( rdint (f ) )
444
+ n := rdint (f )
413
445
if n == 0 {
414
- rdint (f )
446
+ rdint64 (f )
415
447
return nil
416
448
}
417
449
@@ -420,7 +452,7 @@ func rdsym(ctxt *Link, f *obj.Biobuf, pkg string) *LSym {
420
452
}
421
453
obj .Bread (f , symbuf [:n ])
422
454
p := string (symbuf [:n ])
423
- v := int ( rdint (f ) )
455
+ v := rdint (f )
424
456
if v != 0 {
425
457
v = ctxt .Version
426
458
}
0 commit comments