View | Details | Raw Unified | Return to bug 18597 | Differences between
and this patch

Collapse All | Expand All

(-)a/tapset/linux/nd_syscalls.stp (-8 / +2 lines)
Lines 3134-3157 probe __nd_syscall.io_setup.return = kprobe.function("sys_io_setup").return ? Link Here
3134
# long compat_sys_io_submit(aio_context_t ctx_id, int nr, u32 __user *iocb)
3134
# long compat_sys_io_submit(aio_context_t ctx_id, int nr, u32 __user *iocb)
3135
#
3135
#
3136
probe nd_syscall.io_submit = __nd_syscall.io_submit,
3136
probe nd_syscall.io_submit = __nd_syscall.io_submit,
3137
	__nd_syscall.compat_io_submit ?
3137
	kprobe.function("compat_sys_io_submit") ?
3138
{
3138
{
3139
	name = "io_submit"
3139
	name = "io_submit"
3140
	asmlinkage()
3140
	asmlinkage()
3141
	ctx_id = ulong_arg(1)
3141
	ctx_id = ulong_arg(1)
3142
	nr = long_arg(2)
3142
	iocbpp_uaddr = pointer_arg(3)
3143
	iocbpp_uaddr = pointer_arg(3)
3143
	argstr = sprintf("%u, %d, %p", ctx_id, nr, iocbpp_uaddr)
3144
	argstr = sprintf("%u, %d, %p", ctx_id, nr, iocbpp_uaddr)
3144
}
3145
}
3145
probe __nd_syscall.io_submit = kprobe.function("sys_io_submit") ?
3146
probe __nd_syscall.io_submit = kprobe.function("sys_io_submit") ?
3146
{
3147
{
3147
	@__syscall_gate(%{ __NR_io_submit %})
3148
	@__syscall_gate(%{ __NR_io_submit %})
3148
	asmlinkage()
3149
	nr = long_arg(2)
3150
}
3151
probe __nd_syscall.compat_io_submit = kprobe.function("compat_sys_io_submit") ?
3152
{
3153
	asmlinkage()
3154
	nr = int_arg(2)
3155
}
3149
}
3156
probe nd_syscall.io_submit.return = __nd_syscall.io_submit.return,
3150
probe nd_syscall.io_submit.return = __nd_syscall.io_submit.return,
3157
	kprobe.function("compat_sys_io_submit").return ?
3151
	kprobe.function("compat_sys_io_submit").return ?
(-)a/tapset/linux/nd_syscalls2.stp (-81 / +13 lines)
Lines 579-635 probe nd_syscall.prctl.return = kprobe.function("sys_prctl").return ? Link Here
579
}
579
}
580
580
581
# pread64 ____________________________________________________
581
# pread64 ____________________________________________________
582
#
583
# ssize_t sys_pread64(unsigned int fd,
582
# ssize_t sys_pread64(unsigned int fd,
584
#		 char __user *buf,
583
#		 char __user *buf,
585
#		 size_t count,
584
#		 size_t count,
586
#		 loff_t pos)
585
#		 loff_t pos)
587
#
586
#
588
probe nd_syscall.pread =
587
probe nd_syscall.pread = kprobe.function("sys_pread64")
589
%( arch == "s390" %?
590
	__nd_syscall.pread, __nd_syscall.compat_pread ?
591
%:
592
	__nd_syscall.pread
593
%)
594
{
588
{
589
	@__syscall_gate_compat_simple
595
	name = "pread"
590
	name = "pread"
596
	asmlinkage()
591
	asmlinkage()
597
	fd = int_arg(1)
592
	fd = int_arg(1)
598
	buf_uaddr = pointer_arg(2)
593
	buf_uaddr = pointer_arg(2)
599
	count = ulong_arg(3)
594
	count = ulong_arg(3)
600
	argstr = sprintf("%d, %p, %u, %d", fd, buf_uaddr, count, offset)
601
}
602
probe __nd_syscall.pread = kprobe.function("sys_pread64")
603
{
604
	asmlinkage()
605
%( arch == "s390" %?
606
	@__syscall_gate(%{ __NR_pread64 %})
607
%)
608
	offset = longlong_arg(4)
595
	offset = longlong_arg(4)
596
	argstr = sprintf("%d, %p, %u, %d", fd, buf_uaddr, count, offset)
609
}
597
}
610
%( arch == "s390" %?
598
probe nd_syscall.pread.return = kprobe.function("sys_pread64").return
611
probe __nd_syscall.compat_pread = kprobe.function("sys32_pread64").call ?
612
{
613
	asmlinkage()
614
	offset = (u32_arg(4) << 32) + u32_arg(5)
615
}
616
%)
617
probe nd_syscall.pread.return =
618
%( arch == "s390" %?
619
	__nd_syscall.pread.return, kprobe.function("sys32_pread64").return ?
620
%:
621
	__nd_syscall.pread.return
622
%)
623
{
599
{
600
	@__syscall_gate_compat_simple
624
	name = "pread"
601
	name = "pread"
625
	retstr = returnstr(1)
602
	retstr = returnstr(1)
626
}
603
}
627
probe __nd_syscall.pread.return = kprobe.function("sys_pread64").return
628
{
629
%( arch == "s390" %?
630
	@__syscall_gate(%{ __NR_pread64 %})
631
%)
632
}
633
604
634
# preadv ____________________________________________________
605
# preadv ____________________________________________________
635
#
606
#
Lines 876-884 probe nd_syscall.ptrace.return = kprobe.function("sys_ptrace").return ?, Link Here
876
#
847
#
877
probe nd_syscall.pwrite = kprobe.function("sys_pwrite64") ?
848
probe nd_syscall.pwrite = kprobe.function("sys_pwrite64") ?
878
{
849
{
879
%( arch == "s390" %?
850
	@__syscall_gate_compat_simple
880
	@__syscall_gate(%{ __NR_pwrite64 %})
881
%)
882
	name = "pwrite"
851
	name = "pwrite"
883
	asmlinkage()
852
	asmlinkage()
884
	fd = int_arg(1)
853
	fd = int_arg(1)
Lines 887-919 probe nd_syscall.pwrite = kprobe.function("sys_pwrite64") ? Link Here
887
	offset = longlong_arg(4)
856
	offset = longlong_arg(4)
888
	argstr = sprintf("%d, %s, %u, %d", fd,
857
	argstr = sprintf("%d, %s, %u, %d", fd,
889
			 user_string_n2_quoted(buf_uaddr, count, syscall_string_trunc),
858
			 user_string_n2_quoted(buf_uaddr, count, syscall_string_trunc),
890
				count, offset)
859
	                 count, offset)
891
}
860
}
892
probe nd_syscall.pwrite.return = kprobe.function("sys_pwrite64").return ?
861
probe nd_syscall.pwrite.return = kprobe.function("sys_pwrite64").return ?
893
{
862
{
894
%( arch == "s390" %?
863
	@__syscall_gate_compat_simple
895
	@__syscall_gate(%{ __NR_pwrite64 %})
896
%)
897
	name = "pwrite"
898
	retstr = returnstr(1)
899
}
900
# long sys32_pwrite64(unsigned int fd, const char __user *ubuf,
901
#				size_t count, u32 poshi, u32 poslo)
902
probe nd_syscall.pwrite32 = kprobe.function("sys32_pwrite64") ?
903
{
904
	name = "pwrite"
905
	asmlinkage()
906
	fd = int_arg(1)
907
	buf_uaddr = pointer_arg(2)
908
	count = ulong_arg(3)
909
	offset = (u32_arg(4) << 32) + u32_arg(5)
910
	argstr = sprintf("%d, %s, %u, %d", fd,
911
			 user_string_n2_quoted(buf_uaddr, count,
912
					       syscall_string_trunc),
913
			 count, offset)
914
}
915
probe nd_syscall.pwrite32.return = kprobe.function("sys32_pwrite64").return ?
916
{
917
	name = "pwrite"
864
	name = "pwrite"
918
	retstr = returnstr(1)
865
	retstr = returnstr(1)
919
}
866
}
Lines 4543-4571 probe nd_syscall.sync.return = kprobe.function("sys_sync").return Link Here
4543
# we can just probe that.
4490
# we can just probe that.
4544
probe nd_syscall.sync_file_range = kprobe.function("sys_sync_file_range") ?
4491
probe nd_syscall.sync_file_range = kprobe.function("sys_sync_file_range") ?
4545
{
4492
{
4493
	@__syscall_gate_compat_simple
4546
	asmlinkage()
4494
	asmlinkage()
4547
	name = "sync_file_range"
4495
	name = "sync_file_range"
4548
	fd = int_arg(1)
4496
	fd = int_arg(1)
4549
%( CONFIG_64BIT == "y" %?
4497
%( CONFIG_64BIT == "y" %?
4550
%( arch == "s390" %?
4498
	offset = longlong_arg(2)
4551
	# On s390x RHEL7 (3.10.0-229.el7.s390x), when longlong_arg()
4499
	nbytes = longlong_arg(3)
4552
	# gets called On a 32-bit executable it tries to grab the
4553
	# 64-bit value out of 2 different registers. However, at this
4554
	# point the value has been put into a single
4555
	# register. Normally we'd fix this by probing the the compat
4556
	# function. But, on this kernel the compat function is in
4557
	# assembly language, which we can't probe. So, we'll grab the
4558
	# registers directly.
4559
	if (%{ /* pure */ _stp_is_compat_task() %}) {
4560
		offset = u_register("r3")
4561
		nbytes = u_register("r4")
4562
	}
4563
	else
4564
%)
4565
	{
4566
		offset = longlong_arg(2)
4567
		nbytes = longlong_arg(3)
4568
	}
4569
	flags = uint_arg(4)
4500
	flags = uint_arg(4)
4570
%:
4501
%:
4571
%( arch == "arm" %?
4502
%( arch == "arm" %?
Lines 4581-4591 probe nd_syscall.sync_file_range = kprobe.function("sys_sync_file_range") ? Link Here
4581
%)
4512
%)
4582
	flags_str = _sync_file_range_flags_str(flags)
4513
	flags_str = _sync_file_range_flags_str(flags)
4583
	argstr = sprintf("%d, %d, %d, %s", fd, offset, nbytes,
4514
	argstr = sprintf("%d, %d, %d, %s", fd, offset, nbytes,
4584
			 _sync_file_range_flags_str(flags))
4515
	                 _sync_file_range_flags_str(flags))
4585
}
4516
}
4586
probe nd_syscall.sync_file_range.return =
4517
probe nd_syscall.sync_file_range.return =
4587
	kprobe.function("sys_sync_file_range").return ?
4518
	kprobe.function("sys_sync_file_range").return ?
4588
{
4519
{
4520
	@__syscall_gate_compat_simple
4589
	name = "sync_file_range"
4521
	name = "sync_file_range"
4590
	retstr = returnstr(1)
4522
	retstr = returnstr(1)
4591
}
4523
}
(-)a/tapset/linux/powerpc/nd_syscalls.stp (+69 lines)
Lines 977-979 probe nd_syscall.compat_lookup_dcookie.return = Link Here
977
        name = "lookup_dcookie"
977
        name = "lookup_dcookie"
978
        retstr = returnstr(1)
978
        retstr = returnstr(1)
979
}
979
}
980
981
# compat_pread _______________________________________________
982
# compat_ssize_t compat_sys_pread64(unsigned int fd, char __user *ubuf,
983
#                                   compat_size_t count, u32 reg6,
984
#                                   u32 poshi, u32 poslo)
985
probe nd_syscall.compat_pread = kprobe.function("compat_sys_pread64")
986
{
987
	name = "pread"
988
	asmlinkage()
989
	fd = int_arg(1)
990
	buf_uaddr = pointer_arg(2)
991
	count = ulong_arg(3)
992
	offset = (u32_arg(5) << 32) + u32_arg(6)
993
	argstr = sprintf("%d, %p, %u, %d", fd, buf_uaddr, count, offset)
994
}
995
probe nd_syscall.compat_pread.return = kprobe.function("compat_sys_pread64").return
996
{
997
	name = "pread"
998
	retstr = returnstr(1)
999
}
1000
1001
# compat_pwrite ______________________________________________
1002
# compat_ssize_t compat_sys_pwrite64(unsigned int fd, const char __user *ubuf,
1003
#                                    compat_size_t count, u32 reg6,
1004
#                                    u32 poshi, u32 poslo)
1005
#
1006
probe nd_syscall.compat_pwrite = kprobe.function("compat_sys_pwrite64") ?
1007
{
1008
	name = "pwrite"
1009
	asmlinkage()
1010
	fd = int_arg(1)
1011
	buf_uaddr = pointer_arg(2)
1012
	count = ulong_arg(3)
1013
	offset = (u32_arg(5) << 32) + u32_arg(6)
1014
	argstr = sprintf("%d, %s, %u, %d", fd,
1015
			 user_string_n2_quoted(buf_uaddr, count, syscall_string_trunc),
1016
	                 count, offset)
1017
}
1018
probe nd_syscall.compat_pwrite.return = kprobe.function("compat_sys_pwrite64").return ?
1019
{
1020
	name = "pwrite"
1021
	retstr = returnstr(1)
1022
}
1023
1024
# compat_sync_file_range _____________________________________
1025
# asmlinkage long compat_sys_sync_file_range2(int fd, unsigned int flags,
1026
#                                             unsigned offset_hi, unsigned offset_lo,
1027
#                                             unsigned nbytes_hi, unsigned nbytes_lo)
1028
#
1029
probe nd_syscall.compat_sync_file_range =
1030
	kprobe.function("compat_sys_sync_file_range2") ?
1031
{
1032
	asmlinkage()
1033
	name = "sync_file_range"
1034
	fd = int_arg(1)
1035
	flags = uint_arg(2)
1036
	offset = (u32_arg(3) << 32) + u32_arg(4)
1037
	nbytes = (u32_arg(5) << 32) + u32_arg(6)
1038
	flags_str = _sync_file_range_flags_str(flags)
1039
	argstr = sprintf("%d, %d, %d, %s", fd, offset, nbytes,
1040
	                 _sync_file_range_flags_str(flags))
1041
}
1042
probe nd_syscall.compat_sync_file_range.return =
1043
	kprobe.function("compat_sys_sync_file_range2").return ?
1044
{
1045
	name = "sync_file_range"
1046
	retstr = returnstr(1)
1047
}
1048
(-)a/tapset/linux/s390/nd_syscalls.stp (+77 lines)
Lines 477-480 probe nd_syscall.compat_lookup_dcookie.return = Link Here
477
        retstr = returnstr(1)
477
        retstr = returnstr(1)
478
}
478
}
479
479
480
# compat_pread _______________________________________________
481
# asmlinkage long sys32_pread64(unsigned int fd, char __user *ubuf,
482
#                               size_t count, u32 poshi, u32 poslo)
483
#
484
probe nd_syscall.compat_pread = kprobe.function("sys32_pread64")
485
{
486
	name = "pread"
487
	asmlinkage()
488
	fd = int_arg(1)
489
	buf_uaddr = pointer_arg(2)
490
	count = ulong_arg(3)
491
	offset = (u32_arg(4) << 32) + u32_arg(5)
492
	argstr = sprintf("%d, %p, %u, %d", fd, buf_uaddr, count, offset)
493
}
494
probe nd_syscall.compat_pread.return = kprobe.function("sys32_pread64").return
495
{
496
	name = "pread"
497
	retstr = returnstr(1)
498
}
499
500
# compat_pwrite ______________________________________________
501
# asmlinkage long sys32_pwrite64(unsigned int fd, const char __user *ubuf,
502
#                                size_t count, u32 poshi, u32 poslo)
503
#
504
probe nd_syscall.compat_pwrite = kprobe.function("sys32_pwrite64") ?
505
{
506
	name = "pwrite"
507
	asmlinkage()
508
	fd = int_arg(1)
509
	buf_uaddr = pointer_arg(2)
510
	count = ulong_arg(3)
511
	offset = (u32_arg(4) << 32) + u32_arg(5)
512
	argstr = sprintf("%d, %s, %u, %d", fd,
513
			 user_string_n2_quoted(buf_uaddr, count, syscall_string_trunc),
514
	                 count, offset)
515
}
516
probe nd_syscall.compat_pwrite.return = kprobe.function("sys32_pwrite64").return ?
517
{
518
	name = "pwrite"
519
	retstr = returnstr(1)
520
}
521
522
# compat_sync_file_range _____________________________________
523
# SYSCALL_DEFINE4(sync_file_range, int, fd, loff_t, offset, loff_t, nbytes,
524
#                 unsigned int, flags)
525
#
526
probe nd_syscall.compat_sync_file_range =
527
	kprobe.function("sys_sync_file_range") ?
528
{
529
	# On s390x RHEL7 (3.10.0-229.el7.s390x), when longlong_arg()
530
	# gets called On a 32-bit executable it tries to grab the
531
	# 64-bit value out of 2 different registers. However, at this
532
	# point the value has been put into a single
533
	# register. Normally we'd fix this by probing the the compat
534
	# function. But, on this kernel the compat function is in
535
	# assembly language, which we can't probe. So, we'll grab the
536
	# registers directly
537
	#
538
	if (! %{ /* pure */ _stp_is_compat_task() %}) next
539
	asmlinkage()
540
	name = "sync_file_range"
541
	fd = int_arg(1)
542
	offset = u_register("r3")
543
	nbytes = u_register("r4")
544
	flags = uint_arg(4)
545
	flags_str = _sync_file_range_flags_str(flags)
546
	argstr = sprintf("%d, %d, %d, %s", fd, offset, nbytes,
547
	_sync_file_range_flags_str(flags))
548
}
549
probe nd_syscall.compat_sync_file_range.return =
550
	kprobe.function("sys_sync_file_range").return ?
551
{
552
	if (! %{ /* pure */ _stp_is_compat_task() %}) next
553
	name = "sync_file_range"
554
	retstr = returnstr(1)
555
}
556
480
%)
557
%)
(-)a/tapset/linux/x86_64/nd_syscalls.stp (+66 lines)
Lines 443-445 probe nd_syscall.compat_lookup_dcookie.return = Link Here
443
        retstr = returnstr(1)
443
        retstr = returnstr(1)
444
}
444
}
445
445
446
# compat_pread _______________________________________________
447
# asmlinkage long sys32_pread(unsigned int fd, char __user *ubuf, u32 count,
448
#                             u32 poslo, u32 poshi)
449
#
450
probe nd_syscall.compat_pread = kprobe.function("sys32_pread")
451
{
452
	name = "pread"
453
	asmlinkage()
454
	fd = int_arg(1)
455
	buf_uaddr = pointer_arg(2)
456
	count = ulong_arg(3)
457
	offset = ((uint_arg(5) << 32) | uint_arg(4))
458
	argstr = sprintf("%d, %p, %u, %d", fd, buf_uaddr, count, offset)
459
}
460
probe nd_syscall.compat_pread.return = kprobe.function("sys32_pread").return
461
{
462
	name = "pread"
463
	retstr = returnstr(1)
464
}
465
466
# compat_pwrite _______________________________________________
467
# asmlinkage long sys32_pwrite(unsigned int fd, const char __user *ubuf,
468
#                              u32 count, u32 poslo, u32 poshi)
469
#
470
probe nd_syscall.compat_pwrite = kprobe.function("sys32_pwrite")
471
{
472
	name = "pwrite"
473
	asmlinkage()
474
	fd = int_arg(1)
475
	buf_uaddr = pointer_arg(2)
476
	count = ulong_arg(3)
477
	offset = ((uint_arg(5) << 32) | uint_arg(4))
478
	argstr = sprintf("%d, %s, %u, %d", fd,
479
			 user_string_n2_quoted(buf_uaddr, count, syscall_string_trunc),
480
	                 count, offset)
481
}
482
probe nd_syscall.compat_pwrite.return = kprobe.function("sys32_pwrite").return
483
{
484
	name = "pwrite"
485
	retstr = returnstr(1)
486
}
487
488
# compat_sync_file_range ______________________________________
489
# asmlinkage long sys32_sync_file_range(int fd, unsigned off_low, unsigned off_hi,
490
#                                       unsigned n_low, unsigned n_hi,  int flags)
491
#
492
probe nd_syscall.compat_sync_file_range =
493
	kprobe.function("sys32_sync_file_range") ?
494
{
495
	asmlinkage()
496
	name = "sync_file_range"
497
	fd = int_arg(1)
498
	offset = ((uint_arg(3) << 32) | uint_arg(2))
499
	nbytes = ((uint_arg(5) << 32) | uint_arg(4))
500
	flags = uint_arg(6)
501
	flags_str = _sync_file_range_flags_str(flags)
502
	argstr = sprintf("%d, %d, %d, %s", fd, offset, nbytes,
503
	                 _sync_file_range_flags_str(flags))
504
}
505
probe nd_syscall.compat_sync_file_range.return =
506
	kprobe.function("sys32_sync_file_range").return ?
507
{
508
	name = "sync_file_range"
509
	retstr = returnstr(1)
510
}
511
(-)a/tapset/powerpc/registers.stp (-7 / +2 lines)
Lines 149-155 function _stp_arg:long (argnum:long, sign_extend:long, truncate:long) { Link Here
149
	else if (argnum == 8)
149
	else if (argnum == 8)
150
		val = u_register("r10")
150
		val = u_register("r10")
151
151
152
	if (truncate) {
152
	if (truncate || @__compat_task) {
153
		if (sign_extend)
153
		if (sign_extend)
154
			val = _stp_sign_extend32(val)
154
			val = _stp_sign_extend32(val)
155
		else
155
		else
Lines 178-189 function ulong_arg:long (argnum:long) { Link Here
178
}
178
}
179
179
180
function longlong_arg:long (argnum:long) {
180
function longlong_arg:long (argnum:long) {
181
	if (probing_32bit_app()) {
181
	return _stp_arg(argnum, 0, 0)
182
		lowbits = _stp_arg(argnum, 0, 1)
183
		highbits = _stp_arg(argnum+1, 0, 1)
184
		return ((highbits << 32) | lowbits)
185
	} else
186
		return _stp_arg(argnum, 0, 0)
187
}
182
}
188
183
189
function ulonglong_arg:long (argnum:long) {
184
function ulonglong_arg:long (argnum:long) {
(-)a/tapset/s390/registers.stp (-8 / +2 lines)
Lines 237-243 function _stp_arg:long (argnum:long, sign_extend:long, truncate:long) Link Here
237
	else if (argnum >= 6)
237
	else if (argnum >= 6)
238
		val = _stp_get_kernel_stack_param(argnum - 6)
238
		val = _stp_get_kernel_stack_param(argnum - 6)
239
239
240
	if (truncate || %{ /* pure */ _stp_is_compat_task() %}) {
240
	if (truncate || @__compat_task) {
241
		/* High bits may be garbage. */
241
		/* High bits may be garbage. */
242
		val = (val & 0xffffffff)
242
		val = (val & 0xffffffff)
243
		if (sign_extend)
243
		if (sign_extend)
Lines 265-277 function ulong_arg:long (argnum:long) { Link Here
265
}
265
}
266
266
267
function longlong_arg:long (argnum:long) {
267
function longlong_arg:long (argnum:long) {
268
	if (probing_32bit_app()) {
268
	return _stp_arg(argnum, 0, 0)
269
		/* TODO verify if this is correct for 31bit apps */
270
		highbits = _stp_arg(argnum, 0, 1)
271
		lowbits = _stp_arg(argnum+1, 0, 1)
272
		return ((highbits << 32) | lowbits)
273
	} else
274
		return _stp_arg(argnum, 0, 0)
275
}
269
}
276
270
277
function ulonglong_arg:long (argnum:long) {
271
function ulonglong_arg:long (argnum:long) {
(-)a/tapset/x86_64/registers.stp (-7 / +2 lines)
Lines 167-173 function _stp_arg:long (argnum:long, sign_extend:long, truncate:long) %{ /* pure Link Here
167
	default:
167
	default:
168
		goto bad_argnum;
168
		goto bad_argnum;
169
	}
169
	}
170
	if (STAP_ARG_truncate || argsz == sizeof(int)) {
170
	if (STAP_ARG_truncate || _stp_is_compat_task()) {
171
		if (STAP_ARG_sign_extend)
171
		if (STAP_ARG_sign_extend)
172
			STAP_RETVALUE = (int64_t) __stp_sign_extend32(val);
172
			STAP_RETVALUE = (int64_t) __stp_sign_extend32(val);
173
		else
173
		else
Lines 215-226 function ulong_arg:long (argnum:long) { Link Here
215
}
215
}
216
216
217
function longlong_arg:long (argnum:long) {
217
function longlong_arg:long (argnum:long) {
218
	if (probing_32bit_app()) {
218
	return _stp_arg(argnum, 0, 0)
219
		lowbits = _stp_arg(argnum, 0, 1)
220
		highbits = _stp_arg(argnum+1, 0, 1)
221
		return ((highbits << 32) | lowbits)
222
	} else
223
		return _stp_arg(argnum, 0, 0)
224
}
219
}
225
220
226
function ulonglong_arg:long (argnum:long) {
221
function ulonglong_arg:long (argnum:long) {

Return to bug 18597