You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(122) |
Nov
(152) |
Dec
(69) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(6) |
Feb
(25) |
Mar
(73) |
Apr
(82) |
May
(24) |
Jun
(25) |
Jul
(10) |
Aug
(11) |
Sep
(10) |
Oct
(54) |
Nov
(203) |
Dec
(182) |
| 2004 |
Jan
(307) |
Feb
(305) |
Mar
(430) |
Apr
(312) |
May
(187) |
Jun
(342) |
Jul
(487) |
Aug
(637) |
Sep
(336) |
Oct
(373) |
Nov
(441) |
Dec
(210) |
| 2005 |
Jan
(385) |
Feb
(480) |
Mar
(636) |
Apr
(544) |
May
(679) |
Jun
(625) |
Jul
(810) |
Aug
(838) |
Sep
(634) |
Oct
(521) |
Nov
(965) |
Dec
(543) |
| 2006 |
Jan
(494) |
Feb
(431) |
Mar
(546) |
Apr
(411) |
May
(406) |
Jun
(322) |
Jul
(256) |
Aug
(401) |
Sep
(345) |
Oct
(542) |
Nov
(308) |
Dec
(481) |
| 2007 |
Jan
(427) |
Feb
(326) |
Mar
(367) |
Apr
(255) |
May
(244) |
Jun
(204) |
Jul
(223) |
Aug
(231) |
Sep
(354) |
Oct
(374) |
Nov
(497) |
Dec
(362) |
| 2008 |
Jan
(322) |
Feb
(482) |
Mar
(658) |
Apr
(422) |
May
(476) |
Jun
(396) |
Jul
(455) |
Aug
(267) |
Sep
(280) |
Oct
(253) |
Nov
(232) |
Dec
(304) |
| 2009 |
Jan
(486) |
Feb
(470) |
Mar
(458) |
Apr
(423) |
May
(696) |
Jun
(461) |
Jul
(551) |
Aug
(575) |
Sep
(134) |
Oct
(110) |
Nov
(157) |
Dec
(102) |
| 2010 |
Jan
(226) |
Feb
(86) |
Mar
(147) |
Apr
(117) |
May
(107) |
Jun
(203) |
Jul
(193) |
Aug
(238) |
Sep
(300) |
Oct
(246) |
Nov
(23) |
Dec
(75) |
| 2011 |
Jan
(133) |
Feb
(195) |
Mar
(315) |
Apr
(200) |
May
(267) |
Jun
(293) |
Jul
(353) |
Aug
(237) |
Sep
(278) |
Oct
(611) |
Nov
(274) |
Dec
(260) |
| 2012 |
Jan
(303) |
Feb
(391) |
Mar
(417) |
Apr
(441) |
May
(488) |
Jun
(655) |
Jul
(590) |
Aug
(610) |
Sep
(526) |
Oct
(478) |
Nov
(359) |
Dec
(372) |
| 2013 |
Jan
(467) |
Feb
(226) |
Mar
(391) |
Apr
(281) |
May
(299) |
Jun
(252) |
Jul
(311) |
Aug
(352) |
Sep
(481) |
Oct
(571) |
Nov
(222) |
Dec
(231) |
| 2014 |
Jan
(185) |
Feb
(329) |
Mar
(245) |
Apr
(238) |
May
(281) |
Jun
(399) |
Jul
(382) |
Aug
(500) |
Sep
(579) |
Oct
(435) |
Nov
(487) |
Dec
(256) |
| 2015 |
Jan
(338) |
Feb
(357) |
Mar
(330) |
Apr
(294) |
May
(191) |
Jun
(108) |
Jul
(142) |
Aug
(261) |
Sep
(190) |
Oct
(54) |
Nov
(83) |
Dec
(22) |
| 2016 |
Jan
(49) |
Feb
(89) |
Mar
(33) |
Apr
(50) |
May
(27) |
Jun
(34) |
Jul
(53) |
Aug
(53) |
Sep
(98) |
Oct
(206) |
Nov
(93) |
Dec
(53) |
| 2017 |
Jan
(65) |
Feb
(82) |
Mar
(102) |
Apr
(86) |
May
(187) |
Jun
(67) |
Jul
(23) |
Aug
(93) |
Sep
(65) |
Oct
(45) |
Nov
(35) |
Dec
(17) |
| 2018 |
Jan
(26) |
Feb
(35) |
Mar
(38) |
Apr
(32) |
May
(8) |
Jun
(43) |
Jul
(27) |
Aug
(30) |
Sep
(43) |
Oct
(42) |
Nov
(38) |
Dec
(67) |
| 2019 |
Jan
(32) |
Feb
(37) |
Mar
(53) |
Apr
(64) |
May
(49) |
Jun
(18) |
Jul
(14) |
Aug
(53) |
Sep
(25) |
Oct
(30) |
Nov
(49) |
Dec
(31) |
| 2020 |
Jan
(87) |
Feb
(45) |
Mar
(37) |
Apr
(51) |
May
(99) |
Jun
(36) |
Jul
(11) |
Aug
(14) |
Sep
(20) |
Oct
(24) |
Nov
(40) |
Dec
(23) |
| 2021 |
Jan
(14) |
Feb
(53) |
Mar
(85) |
Apr
(15) |
May
(19) |
Jun
(3) |
Jul
(14) |
Aug
(1) |
Sep
(57) |
Oct
(73) |
Nov
(56) |
Dec
(22) |
| 2022 |
Jan
(3) |
Feb
(22) |
Mar
(6) |
Apr
(55) |
May
(46) |
Jun
(39) |
Jul
(15) |
Aug
(9) |
Sep
(11) |
Oct
(34) |
Nov
(20) |
Dec
(36) |
| 2023 |
Jan
(79) |
Feb
(41) |
Mar
(99) |
Apr
(169) |
May
(48) |
Jun
(16) |
Jul
(16) |
Aug
(57) |
Sep
(19) |
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
|
|
|
|
|
1
(36) |
2
(30) |
|
3
(17) |
4
(21) |
5
(18) |
6
(14) |
7
(23) |
8
(12) |
9
(11) |
|
10
(11) |
11
(12) |
12
(11) |
13
(12) |
14
(11) |
15
(11) |
16
(15) |
|
17
(12) |
18
(15) |
19
(15) |
20
(25) |
21
(26) |
22
(21) |
23
(18) |
|
24
(25) |
25
(28) |
26
(27) |
27
(32) |
28
(13) |
29
(12) |
30
(10) |
|
From: Tom H. <th...@cy...> - 2005-04-28 02:55:46
|
Nightly build on honda ( x86_64, Fedora Core 3 ) started at 2005-04-28 03:10:07 BST Checking out vex source tree ... done Building vex ... done Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 156 tests, 84 stderr failures, 21 stdout failures ================= memcheck/tests/addressable (stdout) memcheck/tests/addressable (stderr) memcheck/tests/badaddrvalue (stdout) memcheck/tests/badaddrvalue (stderr) memcheck/tests/badfree-2trace (stderr) memcheck/tests/badfree (stderr) memcheck/tests/badjump (stderr) memcheck/tests/badjump2 (stderr) memcheck/tests/badloop (stderr) memcheck/tests/badpoll (stderr) memcheck/tests/badrw (stderr) memcheck/tests/brk (stderr) memcheck/tests/brk2 (stderr) memcheck/tests/buflen_check (stderr) memcheck/tests/clientperm (stdout) memcheck/tests/clientperm (stderr) memcheck/tests/custom_alloc (stderr) memcheck/tests/describe-block (stderr) memcheck/tests/doublefree (stderr) memcheck/tests/error_counts (stdout) memcheck/tests/errs1 (stderr) memcheck/tests/execve (stderr) memcheck/tests/execve2 (stderr) memcheck/tests/exitprog (stderr) memcheck/tests/fprw (stderr) memcheck/tests/fwrite (stdout) memcheck/tests/fwrite (stderr) memcheck/tests/inits (stderr) memcheck/tests/inline (stdout) memcheck/tests/inline (stderr) memcheck/tests/leak-0 (stderr) memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-regroot (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/leakotron (stdout) memcheck/tests/malloc1 (stderr) memcheck/tests/malloc2 (stderr) memcheck/tests/malloc3 (stdout) memcheck/tests/malloc3 (stderr) memcheck/tests/manuel1 (stdout) memcheck/tests/manuel1 (stderr) memcheck/tests/manuel2 (stdout) memcheck/tests/manuel2 (stderr) memcheck/tests/manuel3 (stderr) memcheck/tests/match-overrun (stderr) memcheck/tests/memalign2 (stderr) memcheck/tests/memalign_test (stderr) memcheck/tests/memcmptest (stdout) memcheck/tests/memcmptest (stderr) memcheck/tests/mempool (stderr) memcheck/tests/metadata (stdout) memcheck/tests/metadata (stderr) memcheck/tests/mismatches (stderr) memcheck/tests/mmaptest (stderr) memcheck/tests/nanoleak (stderr) memcheck/tests/nanoleak_supp (stderr) memcheck/tests/new_nothrow (stderr) memcheck/tests/new_override (stdout) memcheck/tests/new_override (stderr) memcheck/tests/null_socket (stderr) memcheck/tests/overlap (stdout) memcheck/tests/overlap (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/post-syscall (stdout) memcheck/tests/post-syscall (stderr) memcheck/tests/realloc1 (stderr) memcheck/tests/realloc2 (stderr) memcheck/tests/realloc3 (stderr) memcheck/tests/scalar (stderr) memcheck/tests/scalar_exit_group (stderr) memcheck/tests/scalar_fork (stderr) memcheck/tests/scalar_supp (stderr) memcheck/tests/scalar_vfork (stderr) memcheck/tests/sigaltstack (stderr) memcheck/tests/signal2 (stdout) memcheck/tests/signal2 (stderr) memcheck/tests/sigprocmask (stderr) memcheck/tests/str_tester (stderr) memcheck/tests/supp1 (stderr) memcheck/tests/supp2 (stderr) memcheck/tests/suppfree (stderr) memcheck/tests/threadederrno (stdout) memcheck/tests/threadederrno (stderr) memcheck/tests/toobig-allocs (stderr) memcheck/tests/trivialleak (stderr) memcheck/tests/vgtest_ume (stderr) memcheck/tests/weirdioctl (stdout) memcheck/tests/weirdioctl (stderr) memcheck/tests/writev (stderr) memcheck/tests/zeropage (stdout) memcheck/tests/zeropage (stderr) corecheck/tests/fdleak_cmsg (stderr) corecheck/tests/fdleak_creat (stderr) corecheck/tests/fdleak_dup (stderr) corecheck/tests/fdleak_dup2 (stderr) corecheck/tests/fdleak_fcntl (stderr) corecheck/tests/fdleak_ipv4 (stderr) corecheck/tests/fdleak_open (stderr) corecheck/tests/fdleak_pipe (stderr) corecheck/tests/fdleak_socketpair (stderr) massif/tests/toobig-allocs (stderr) none/tests/faultstatus (stderr) none/tests/selfrun (stdout) none/tests/selfrun (stderr) none/tests/tls (stdout) |
|
From: Tom H. <th...@cy...> - 2005-04-28 02:43:06
|
Nightly build on audi ( i686, Red Hat 9 ) started at 2005-04-28 03:25:02 BST Checking out vex source tree ... done Building vex ... done Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 175 tests, 7 stderr failures, 2 stdout failures ================= memcheck/tests/metadata (stdout) memcheck/tests/metadata (stderr) memcheck/tests/scalar (stderr) memcheck/tests/scalar_exit_group (stderr) memcheck/tests/scalar_supp (stderr) none/tests/faultstatus (stderr) none/tests/x86/int (stderr) none/tests/x86/sigcontext (stdout) none/tests/x86/sigcontext (stderr) |
|
From: Tom H. <to...@co...> - 2005-04-28 02:31:41
|
Nightly build on dunsmere ( athlon, Fedora Core 3 ) started at 2005-04-28 03:30:03 BST Checking out vex source tree ... done Building vex ... done Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... failed Last 20 lines of log.verbose follow gcc -Wmissing-prototypes -Winline -Wall -Wshadow -O -g -mpreferred-stack-boundary=2 -DELFSZ=32 -fno-omit-frame-pointer -Wno-long-long -o valgrind -static -g ume.o stage1.o m_debuglog.o jmp_with_stack.o if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I../coregrind -I.. -I../coregrind/x86 -I../coregrind/x86 -I../coregrind/linux -I../coregrind/x86-linux -I../include -I../include -I../include/x86 -I../include/linux -I../include/x86-linux -I/tmp/valgrind.23138/vex/pub -DVG_LIBDIR="\"/tmp/valgrind.23138/Inst/lib/valgrind"\" -I./demangle -DKICKSTART_BASE=0xb0000000 -DVG_PLATFORM="x86-linux" -Wmissing-prototypes -Winline -Wall -Wshadow -O -g -mpreferred-stack-boundary=2 -DELFSZ=32 -fno-omit-frame-pointer -fpie -Wno-long-long -MT stage2-m_errormgr.o -MD -MP -MF ".deps/stage2-m_errormgr.Tpo" -c -o stage2-m_errormgr.o `test -f 'm_errormgr.c' || echo './'`m_errormgr.c; \ then mv -f ".deps/stage2-m_errormgr.Tpo" ".deps/stage2-m_errormgr.Po"; else rm -f ".deps/stage2-m_errormgr.Tpo"; exit 1; fi if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I../coregrind -I.. -I../coregrind/x86 -I../coregrind/x86 -I../coregrind/linux -I../coregrind/x86-linux -I../include -I../include -I../include/x86 -I../include/linux -I../include/x86-linux -I/tmp/valgrind.23138/vex/pub -DVG_LIBDIR="\"/tmp/valgrind.23138/Inst/lib/valgrind"\" -I./demangle -DKICKSTART_BASE=0xb0000000 -DVG_PLATFORM="x86-linux" -Wmissing-prototypes -Winline -Wall -Wshadow -O -g -mpreferred-stack-boundary=2 -DELFSZ=32 -fno-omit-frame-pointer -fpie -Wno-long-long -MT stage2-m_execontext.o -MD -MP -MF ".deps/stage2-m_execontext.Tpo" -c -o stage2-m_execontext.o `test -f 'm_execontext.c' || echo './'`m_execontext.c; \ then mv -f ".deps/stage2-m_execontext.Tpo" ".deps/stage2-m_execontext.Po"; else rm -f ".deps/stage2-m_execontext.Tpo"; exit 1; fi if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I../coregrind -I.. -I../coregrind/x86 -I../coregrind/x86 -I../coregrind/linux -I../coregrind/x86-linux -I../include -I../include -I../include/x86 -I../include/linux -I../include/x86-linux -I/tmp/valgrind.23138/vex/pub -DVG_LIBDIR="\"/tmp/valgrind.23138/Inst/lib/valgrind"\" -I./demangle -DKICKSTART_BASE=0xb0000000 -DVG_PLATFORM="x86-linux" -Wmissing-prototypes -Winline -Wall -Wshadow -O -g -mpreferred-stack-boundary=2 -DELFSZ=32 -fno-omit-frame-pointer -fpie -Wno-long-long -MT stage2-m_stacktrace.o -MD -MP -MF ".deps/stage2-m_stacktrace.Tpo" -c -o stage2-m_stacktrace.o `test -f 'm_stacktrace.c' || echo './'`m_stacktrace.c; \ then mv -f ".deps/stage2-m_stacktrace.Tpo" ".deps/stage2-m_stacktrace.Po"; else rm -f ".deps/stage2-m_stacktrace.Tpo"; exit 1; fi if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../coregrind -I../coregrind -I.. -I../coregrind/x86 -I../coregrind/x86 -I../coregrind/linux -I../coregrind/x86-linux -I../include -I../include -I../include/x86 -I../include/linux -I../include/x86-linux -I/tmp/valgrind.23138/vex/pub -DVG_LIBDIR="\"/tmp/valgrind.23138/Inst/lib/valgrind"\" -I./demangle -DKICKSTART_BASE=0xb0000000 -DVG_PLATFORM="x86-linux" -Wmissing-prototypes -Winline -Wall -Wshadow -O -g -mpreferred-stack-boundary=2 -DELFSZ=32 -fno-omit-frame-pointer -fpie -Wno-long-long -MT stage2-m_debuglog.o -MD -MP -MF ".deps/stage2-m_debuglog.Tpo" -c -o stage2-m_debuglog.o `test -f 'm_debuglog.c' || echo './'`m_debuglog.c; \ then mv -f ".deps/stage2-m_debuglog.Tpo" ".deps/stage2-m_debuglog.Po"; else rm -f ".deps/stage2-m_debuglog.Tpo"; exit 1; fi m_debuglog.c: In function `local_sys_write_stderr': m_debuglog.c:65: error: PIC register `ebx' clobbered in `asm' make[4]: *** [stage2-m_debuglog.o] Error 1 make[4]: Leaving directory `/tmp/valgrind.23138/valgrind/coregrind' make[3]: *** [all-recursive] Error 1 make[3]: Leaving directory `/tmp/valgrind.23138/valgrind/coregrind' make[2]: *** [all] Error 2 make[2]: Leaving directory `/tmp/valgrind.23138/valgrind/coregrind' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/tmp/valgrind.23138/valgrind' make: *** [all] Error 2 |
|
From: Tom H. <th...@cy...> - 2005-04-28 02:28:40
|
Nightly build on gill ( x86_64, Fedora Core 2 ) started at 2005-04-28 03:00:02 BST Checking out vex source tree ... done Building vex ... done Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 156 tests, 84 stderr failures, 21 stdout failures ================= memcheck/tests/addressable (stdout) memcheck/tests/addressable (stderr) memcheck/tests/badaddrvalue (stdout) memcheck/tests/badaddrvalue (stderr) memcheck/tests/badfree-2trace (stderr) memcheck/tests/badfree (stderr) memcheck/tests/badjump (stderr) memcheck/tests/badjump2 (stderr) memcheck/tests/badloop (stderr) memcheck/tests/badpoll (stderr) memcheck/tests/badrw (stderr) memcheck/tests/brk (stderr) memcheck/tests/brk2 (stderr) memcheck/tests/buflen_check (stderr) memcheck/tests/clientperm (stdout) memcheck/tests/clientperm (stderr) memcheck/tests/custom_alloc (stderr) memcheck/tests/describe-block (stderr) memcheck/tests/doublefree (stderr) memcheck/tests/error_counts (stdout) memcheck/tests/errs1 (stderr) memcheck/tests/execve (stderr) memcheck/tests/execve2 (stderr) memcheck/tests/exitprog (stderr) memcheck/tests/fprw (stderr) memcheck/tests/fwrite (stdout) memcheck/tests/fwrite (stderr) memcheck/tests/inits (stderr) memcheck/tests/inline (stdout) memcheck/tests/inline (stderr) memcheck/tests/leak-0 (stderr) memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-regroot (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/leakotron (stdout) memcheck/tests/malloc1 (stderr) memcheck/tests/malloc2 (stderr) memcheck/tests/malloc3 (stdout) memcheck/tests/malloc3 (stderr) memcheck/tests/manuel1 (stdout) memcheck/tests/manuel1 (stderr) memcheck/tests/manuel2 (stdout) memcheck/tests/manuel2 (stderr) memcheck/tests/manuel3 (stderr) memcheck/tests/match-overrun (stderr) memcheck/tests/memalign2 (stderr) memcheck/tests/memalign_test (stderr) memcheck/tests/memcmptest (stdout) memcheck/tests/memcmptest (stderr) memcheck/tests/mempool (stderr) memcheck/tests/metadata (stdout) memcheck/tests/metadata (stderr) memcheck/tests/mismatches (stderr) memcheck/tests/mmaptest (stderr) memcheck/tests/nanoleak (stderr) memcheck/tests/nanoleak_supp (stderr) memcheck/tests/new_nothrow (stderr) memcheck/tests/new_override (stdout) memcheck/tests/new_override (stderr) memcheck/tests/null_socket (stderr) memcheck/tests/overlap (stdout) memcheck/tests/overlap (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/post-syscall (stdout) memcheck/tests/post-syscall (stderr) memcheck/tests/realloc1 (stderr) memcheck/tests/realloc2 (stderr) memcheck/tests/realloc3 (stderr) memcheck/tests/scalar (stderr) memcheck/tests/scalar_exit_group (stderr) memcheck/tests/scalar_fork (stderr) memcheck/tests/scalar_supp (stderr) memcheck/tests/scalar_vfork (stderr) memcheck/tests/sigaltstack (stderr) memcheck/tests/signal2 (stdout) memcheck/tests/signal2 (stderr) memcheck/tests/sigprocmask (stderr) memcheck/tests/str_tester (stderr) memcheck/tests/supp1 (stderr) memcheck/tests/supp2 (stderr) memcheck/tests/suppfree (stderr) memcheck/tests/threadederrno (stdout) memcheck/tests/threadederrno (stderr) memcheck/tests/toobig-allocs (stderr) memcheck/tests/trivialleak (stderr) memcheck/tests/vgtest_ume (stderr) memcheck/tests/weirdioctl (stdout) memcheck/tests/weirdioctl (stderr) memcheck/tests/writev (stderr) memcheck/tests/zeropage (stdout) memcheck/tests/zeropage (stderr) corecheck/tests/fdleak_cmsg (stderr) corecheck/tests/fdleak_creat (stderr) corecheck/tests/fdleak_dup (stderr) corecheck/tests/fdleak_dup2 (stderr) corecheck/tests/fdleak_fcntl (stderr) corecheck/tests/fdleak_ipv4 (stderr) corecheck/tests/fdleak_open (stderr) corecheck/tests/fdleak_pipe (stderr) corecheck/tests/fdleak_socketpair (stderr) massif/tests/toobig-allocs (stderr) none/tests/faultstatus (stderr) none/tests/selfrun (stdout) none/tests/selfrun (stderr) none/tests/tls (stdout) |
|
From: Tom H. <to...@co...> - 2005-04-28 02:26:24
|
Nightly build on dunsmere ( Fedora Core 3 ) started at 2005-04-28 03:20:03 BST Checking out source tree ... done Configuring ... done Building ... done Running regression tests ... done Last 20 lines of log.verbose follow insn_mmx: valgrind ./insn_mmx insn_mmxext: valgrind ./insn_mmxext insn_sse: valgrind ./insn_sse insn_sse2: (skipping, prereq failed: ../../../tests/cputest x86-sse2) int: valgrind ./int sh: line 1: 22950 Segmentation fault VALGRINDLIB=/tmp/valgrind.29679/valgrind/.in_place /tmp/valgrind.29679/valgrind/./coregrind/valgrind --command-line-only=yes --memcheck:leak-check=no --addrcheck:leak-check=no --tool=none ./int >int.stdout.out 2>int.stderr.out pushpopseg: valgrind ./pushpopseg rcl_assert: valgrind ./rcl_assert seg_override: valgrind ./seg_override -- Finished tests in none/tests/x86 ------------------------------------ yield: valgrind ./yield -- Finished tests in none/tests ---------------------------------------- == 207 tests, 4 stderr failures, 0 stdout failures ================= memcheck/tests/execve (stderr) memcheck/tests/execve2 (stderr) memcheck/tests/scalar (stderr) memcheck/tests/scalar_supp (stderr) make: *** [regtest] Error 1 |
|
From: Tom H. <th...@cy...> - 2005-04-28 02:25:49
|
Nightly build on ginetta ( i686, Red Hat 8.0 ) started at 2005-04-28 03:20:01 BST Checking out vex source tree ... done Building vex ... done Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 174 tests, 8 stderr failures, 2 stdout failures ================= memcheck/tests/metadata (stdout) memcheck/tests/metadata (stderr) memcheck/tests/scalar (stderr) memcheck/tests/scalar_exit_group (stderr) memcheck/tests/scalar_supp (stderr) memcheck/tests/threadederrno (stderr) none/tests/faultstatus (stderr) none/tests/x86/int (stderr) none/tests/x86/sigcontext (stdout) none/tests/x86/sigcontext (stderr) |
|
From: Tom H. <th...@cy...> - 2005-04-28 02:22:27
|
Nightly build on audi ( Red Hat 9 ) started at 2005-04-28 03:15:02 BST Checking out source tree ... done Configuring ... done Building ... done Running regression tests ... done Last 20 lines of log.verbose follow fpu_lazy_eflags: valgrind ./fpu_lazy_eflags insn_basic: valgrind ./insn_basic insn_cmov: valgrind ./insn_cmov insn_fpu: valgrind ./insn_fpu insn_mmx: valgrind ./insn_mmx insn_mmxext: valgrind ./insn_mmxext insn_sse: valgrind ./insn_sse insn_sse2: (skipping, prereq failed: ../../../tests/cputest x86-sse2) int: valgrind ./int pushpopseg: valgrind ./pushpopseg rcl_assert: valgrind ./rcl_assert seg_override: valgrind ./seg_override -- Finished tests in none/tests/x86 ------------------------------------ yield: valgrind ./yield -- Finished tests in none/tests ---------------------------------------- == 206 tests, 1 stderr failure, 0 stdout failures ================= memcheck/tests/scalar (stderr) make: *** [regtest] Error 1 |
|
From: Tom H. <th...@cy...> - 2005-04-28 02:20:39
|
Nightly build on alvis ( i686, Red Hat 7.3 ) started at 2005-04-28 03:15:01 BST Checking out vex source tree ... done Building vex ... done Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 174 tests, 17 stderr failures, 2 stdout failures ================= memcheck/tests/addressable (stderr) memcheck/tests/describe-block (stderr) memcheck/tests/leak-0 (stderr) memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-regroot (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/match-overrun (stderr) memcheck/tests/metadata (stdout) memcheck/tests/metadata (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/scalar (stderr) memcheck/tests/scalar_exit_group (stderr) memcheck/tests/scalar_supp (stderr) memcheck/tests/threadederrno (stderr) memcheck/tests/vgtest_ume (stderr) none/tests/faultstatus (stderr) none/tests/x86/int (stderr) none/tests/x86/sigcontext (stdout) none/tests/x86/sigcontext (stderr) |
|
From: Tom H. <th...@cy...> - 2005-04-28 02:16:35
|
Nightly build on ginetta ( Red Hat 8.0 ) started at 2005-04-28 03:10:02 BST Checking out source tree ... done Configuring ... done Building ... done Running regression tests ... done Last 20 lines of log.verbose follow insn_cmov: valgrind ./insn_cmov insn_fpu: valgrind ./insn_fpu insn_mmx: valgrind ./insn_mmx insn_mmxext: valgrind ./insn_mmxext insn_sse: valgrind ./insn_sse insn_sse2: (skipping, prereq failed: ../../../tests/cputest x86-sse2) int: valgrind ./int pushpopseg: valgrind ./pushpopseg rcl_assert: valgrind ./rcl_assert seg_override: valgrind ./seg_override -- Finished tests in none/tests/x86 ------------------------------------ yield: valgrind ./yield -- Finished tests in none/tests ---------------------------------------- == 205 tests, 3 stderr failures, 0 stdout failures ================= memcheck/tests/pth_once (stderr) memcheck/tests/scalar (stderr) memcheck/tests/threadederrno (stderr) make: *** [regtest] Error 1 |
|
From: Tom H. <th...@cy...> - 2005-04-28 02:11:46
|
Nightly build on alvis ( Red Hat 7.3 ) started at 2005-04-28 03:05:02 BST Checking out source tree ... done Configuring ... done Building ... done Running regression tests ... done Last 20 lines of log.verbose follow == 205 tests, 17 stderr failures, 0 stdout failures ================= memcheck/tests/addressable (stderr) memcheck/tests/describe-block (stderr) memcheck/tests/distinguished-writes (stderr) memcheck/tests/leak-0 (stderr) memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-regroot (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/match-overrun (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/pth_once (stderr) memcheck/tests/scalar (stderr) memcheck/tests/threadederrno (stderr) memcheck/tests/vgtest_ume (stderr) addrcheck/tests/leak-0 (stderr) addrcheck/tests/leak-cycle (stderr) addrcheck/tests/leak-regroot (stderr) addrcheck/tests/leak-tree (stderr) make: *** [regtest] Error 1 |
|
From: <sv...@va...> - 2005-04-27 23:17:52
|
Author: sewardj
Date: 2005-04-28 00:17:48 +0100 (Thu, 28 Apr 2005)
New Revision: 3578
Modified:
trunk/coregrind/m_debuglog.c
Log:
local_sys_write_stderr: tell gcc what registers the asm trashes.
Otherwise it doesn't save %ebx across the routine, which is fatal as
%ebx is a callee-save register, it seems.
Modified: trunk/coregrind/m_debuglog.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_debuglog.c 2005-04-27 22:46:36 UTC (rev 3577)
+++ trunk/coregrind/m_debuglog.c 2005-04-27 23:17:48 UTC (rev 3578)
@@ -66,11 +66,13 @@
"movl $4, %%eax\n" /* set %eax =3D __NR_write */
"movl $2, %%ebx\n" /* set %ebx =3D stderr */
"movl %1, %%ecx\n" /* set %ecx =3D buf */
- "movl %2, %%edx\n" /* set %ecx =3D n */
+ "movl %2, %%edx\n" /* set %edx =3D n */
"int $0x80\n" /* write(stderr, buf, n) */
"movl %%eax, %0\n" /* set __res =3D eax */
: "=3Dmr" (__res)
- : "g" (buf), "g" (n) );
+ : "g" (buf), "g" (n)
+ : "eax", "ebx", "ecx", "edx"
+ );
if (__res < 0)=20
__res =3D -1;
return __res;
@@ -83,7 +85,9 @@
"movl $20, %%eax\n" /* set %eax =3D __NR_getpid */
"int $0x80\n" /* getpid() */
"movl %%eax, %0\n" /* set __res =3D eax */
- : "=3Dmr" (__res) );
+ : "=3Dmr" (__res)
+ :
+ : "eax" );
return __res;
}
=20
@@ -96,7 +100,7 @@
"movq $1, %%rax\n" /* set %rax =3D __NR_write */
"movq $2, %%rdi\n" /* set %rdi =3D stderr */
"movq %1, %%rsi\n" /* set %rsi =3D buf */
- "movl %2, %%edx\n" /* set %edx =3D n */
+ "movl %2, %%edx\n" /* set %edx =3D n */
"syscall\n" /* write(stderr, buf, n) */
"movl %%eax, %0\n" /* set __res =3D %eax */
: "=3Dmr" (__res)
|
|
From: <sv...@va...> - 2005-04-27 22:46:40
|
Author: sewardj
Date: 2005-04-27 23:46:36 +0100 (Wed, 27 Apr 2005)
New Revision: 3577
Modified:
trunk/memcheck/mac_leakcheck.c
trunk/memcheck/mac_shared.h
trunk/memcheck/mc_main.c
Log:
Reinstate the leak checker; it works at least on x86.
Modified: trunk/memcheck/mac_leakcheck.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/memcheck/mac_leakcheck.c 2005-04-27 11:40:27 UTC (rev 3576)
+++ trunk/memcheck/mac_leakcheck.c 2005-04-27 22:46:36 UTC (rev 3577)
@@ -175,8 +175,8 @@
static Addr lc_max_mallocd_addr;
static SizeT lc_scanned;
=20
-static Bool (*lc_is_valid_chunk) (UInt chunk);
-static Bool (*lc_is_valid_address)(Addr addr);
+static Bool (*lc_is_within_valid_secondary) (Addr addr);
+static Bool (*lc_is_valid_aligned_word) (Addr addr);
=20
static const Char *pp_lossmode(Reachedness lossmode)
{
@@ -324,7 +324,6 @@
cliques, and clique is the index of the current clique leader. */
static void _lc_scan_memory(Addr start, SizeT len, Int clique)
{
-#if 0
Addr ptr =3D ROUNDUP(start, sizeof(Addr));
Addr end =3D ROUNDDN(start+len, sizeof(Addr));
vki_sigset_t sigmask;
@@ -340,11 +339,11 @@
!VG_(is_addressable)(ptr, sizeof(Addr), VKI_PROT_READ))
ptr =3D PGROUNDUP(ptr+1); /* first page bad */
=20
- while(ptr < end) {
+ while (ptr < end) {
Addr addr;
=20
/* Skip invalid chunks */
- if (!(*lc_is_valid_chunk)(PM_IDX(ptr))) {
+ if (!(*lc_is_within_valid_secondary)(ptr)) {
ptr =3D ROUNDUP(ptr+1, SECONDARY_SIZE);
continue;
}
@@ -357,7 +356,7 @@
}
=20
if (__builtin_setjmp(memscan_jmpbuf) =3D=3D 0) {
- if ((*lc_is_valid_address)(ptr)) {
+ if ((*lc_is_valid_aligned_word)(ptr)) {
addr =3D *(Addr *)ptr;
_lc_markstack_push(addr, clique);
} else if (0 && VG_DEBUG_LEAKCHECK)
@@ -374,7 +373,6 @@
=20
VG_(sigprocmask)(VKI_SIG_SETMASK, &sigmask, NULL);
VG_(set_fault_catcher)(NULL);
-#endif
}
=20
=20
@@ -570,8 +568,8 @@
*/
void MAC_(do_detect_memory_leaks) (
ThreadId tid, LeakCheckMode mode,
- Bool (*is_valid_64k_chunk) ( UInt ),
- Bool (*is_valid_address) ( Addr )
+ Bool (*is_within_valid_secondary) ( Addr ),
+ Bool (*is_valid_aligned_word) ( Addr )
)
{
Int i;
@@ -622,8 +620,8 @@
}
lc_markstack_top =3D -1;
=20
- lc_is_valid_chunk =3D is_valid_64k_chunk;
- lc_is_valid_address =3D is_valid_address;
+ lc_is_within_valid_secondary =3D is_within_valid_secondary;
+ lc_is_valid_aligned_word =3D is_valid_aligned_word;
=20
lc_scanned =3D 0;
=20
Modified: trunk/memcheck/mac_shared.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/memcheck/mac_shared.h 2005-04-27 11:40:27 UTC (rev 3576)
+++ trunk/memcheck/mac_shared.h 2005-04-27 22:46:36 UTC (rev 3577)
@@ -203,6 +203,12 @@
/* expand 1 bit -> 8 */
#define BIT_TO_BYTE(b) ((~(((UChar)(b) & 1) - 1)) & 0xFF)
=20
+/* The number of entries in the primary map can be altered. However
+ we hardwire the assumption that each secondary map covers precisely
+ 64k of address space. */
+#define SECONDARY_SIZE 65536 /* DO NOT CHANGE */
+#define SECONDARY_MASK (SECONDARY_SIZE-1) /* DO NOT CHANGE */
+
//zz #define SECONDARY_SHIFT 16
//zz #define SECONDARY_SIZE (1 << SECONDARY_SHIFT)
//zz #define SECONDARY_MASK (SECONDARY_SIZE - 1)
@@ -407,8 +413,8 @@
=20
extern void MAC_(do_detect_memory_leaks) (
ThreadId tid, LeakCheckMode mode,
- Bool (*is_valid_64k_chunk) ( UInt ),
- Bool (*is_valid_address) ( Addr )
+ Bool (*is_within_valid_secondary) ( Addr ),
+ Bool (*is_valid_aligned_word) ( Addr )
);
=20
extern VGA_REGPARM(1) void MAC_(new_mem_stack_4) ( Addr old_ESP );
Modified: trunk/memcheck/mc_main.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/memcheck/mc_main.c 2005-04-27 11:40:27 UTC (rev 3576)
+++ trunk/memcheck/mc_main.c 2005-04-27 22:46:36 UTC (rev 3577)
@@ -114,12 +114,6 @@
=20
/* --------------- Basic configuration --------------- */
=20
-/* The number of entries in the primary map can be altered. However
- we hardwire the assumption that each secondary map covers precisely
- 64k of address space. */
-#define SECONDARY_SIZE 65536 /* DO NOT CHANGE */
-#define SECONDARY_MASK (SECONDARY_SIZE-1) /* DO NOT CHANGE */
-
/* Only change this. N_PRIMARY_MAP *must* be a power of 2. */
#define N_PRIMARY_BITS 16
=20
@@ -210,12 +204,12 @@
=20
/* Find an entry in the auxiliary map. If an entry is found, move it
one step closer to the front of the array, then return its address.
- If an entry is not found, allocate one. Note carefully that
+ If an entry is not found, return NULL. Note carefully that
because a each call potentially rearranges the entries, each call
to this function invalidates ALL AuxMapEnt*s previously obtained by
calling this fn. =20
*/
-static AuxMapEnt* find_or_alloc_in_auxmap ( Addr a )
+static AuxMapEnt* maybe_find_in_auxmap ( Addr a )
{
UWord i;
tl_assert(a > MAX_PRIMARY_ADDRESS);
@@ -241,6 +235,23 @@
return &auxmap[i];
}
=20
+ return NULL;
+}
+
+
+/* Find an entry in the auxiliary map. If an entry is found, move it
+ one step closer to the front of the array, then return its address.
+ If an entry is not found, allocate one. Note carefully that
+ because a each call potentially rearranges the entries, each call
+ to this function invalidates ALL AuxMapEnt*s previously obtained by
+ calling this fn. =20
+*/
+static AuxMapEnt* find_or_alloc_in_auxmap ( Addr a )
+{
+ AuxMapEnt* am =3D maybe_find_in_auxmap(a);
+ if (am)
+ return am;
+
/* We didn't find it. Hmm. This is a new piece of address space.
We'll need to allocate a new AuxMap entry for it. */
if (auxmap_used >=3D auxmap_size) {
@@ -281,6 +292,23 @@
}
}
=20
+/* If 'a' has a SecMap, produce it. Else produce NULL. But don't
+ allocate one if one doesn't already exist. This is used by the
+ leak checker.
+*/
+static SecMap* maybe_get_secmap_for ( Addr a )
+{
+ if (a <=3D MAX_PRIMARY_ADDRESS) {
+ UWord pm_off =3D a >> 16;
+ return primary_map[ pm_off ];
+ } else {
+ AuxMapEnt* am =3D maybe_find_in_auxmap(a);
+ return am ? am->sm : NULL;
+ }
+}
+
+
+
/* Produce the secmap for 'a', either from the primary map or by
ensuring there is an entry for it in the aux primary map. The
secmap may not be a distinguished one, since the caller will want
@@ -1655,55 +1683,59 @@
//zz=20
//zz return 1;
//zz }
-//zz=20
-//zz=20
-//zz /*------------------------------------------------------------*/
-//zz /*--- Detecting leaked (unreachable) malloc'd blocks. ---*/
-//zz /*------------------------------------------------------------*/
-//zz=20
-//zz /* For the memory leak detector, say whether an entire 64k chunk of
-//zz address space is possibly in use, or not. If in doubt return
-//zz True.
-//zz */
-//zz static
-//zz Bool mc_is_valid_64k_chunk ( UInt chunk_number )
-//zz {
-//zz tl_assert(chunk_number >=3D 0 && chunk_number < PRIMARY_SIZE);
-//zz if (primary_map[chunk_number] =3D=3D DSM_NOTADDR) {
-//zz /* Definitely not in use. */
-//zz return False;
-//zz } else {
-//zz return True;
-//zz }
-//zz }
-//zz=20
-//zz=20
-//zz /* For the memory leak detector, say whether or not a given word
-//zz address is to be regarded as valid. */
-//zz static
-//zz Bool mc_is_valid_address ( Addr a )
-//zz {
-//zz UInt vbytes;
-//zz UChar abits;
-//zz tl_assert(VG_IS_4_ALIGNED(a));
-//zz abits =3D get_abits4_ALIGNED(a);
-//zz vbytes =3D get_vbytes4_ALIGNED(a);
-//zz if (abits =3D=3D VGM_NIBBLE_VALID && vbytes =3D=3D VGM_WORD_VALI=
D) {
-//zz return True;
-//zz } else {
-//zz return False;
-//zz }
-//zz }
=20
=20
+/*------------------------------------------------------------*/
+/*--- Detecting leaked (unreachable) malloc'd blocks. ---*/
+/*------------------------------------------------------------*/
+
+/* For the memory leak detector, say whether an entire 64k chunk of
+ address space is possibly in use, or not. If in doubt return
+ True.
+*/
+static
+Bool mc_is_within_valid_secondary ( Addr a )
+{
+ SecMap* sm =3D maybe_get_secmap_for ( a );
+ if (sm =3D=3D NULL || sm =3D=3D &sm_distinguished[SM_DIST_NOACCESS]) =
{
+ /* Definitely not in use. */
+ return False;
+ } else {
+ return True;
+ }
+}
+
+
+/* For the memory leak detector, say whether or not a given word
+ address is to be regarded as valid. */
+static
+Bool mc_is_valid_aligned_word ( Addr a )
+{
+ tl_assert(sizeof(UWord) =3D=3D 4 || sizeof(UWord) =3D=3D 8);
+ if (sizeof(UWord) =3D=3D 4) {
+ tl_assert(VG_IS_4_ALIGNED(a));
+ } else {
+ tl_assert(VG_IS_8_ALIGNED(a));
+ }
+ if (mc_check_readable( a, sizeof(UWord), NULL ) =3D=3D MC_Ok) {
+ return True;
+ } else {
+ return False;
+ }
+}
+
+
/* Leak detector for this tool. We don't actually do anything, merely
run the generic leak detector with suitable parameters for this
tool. */
static void mc_detect_memory_leaks ( ThreadId tid, LeakCheckMode mode )
{
- VG_(printf)("memcheck: leak detection currently disabled\n");
- // MAC_(do_detect_memory_leaks) (=20
- // tid, mode, mc_is_valid_64k_chunk, mc_is_valid_address );
+ MAC_(do_detect_memory_leaks) (=20
+ tid,=20
+ mode,=20
+ mc_is_within_valid_secondary,=20
+ mc_is_valid_aligned_word=20
+ );
}
=20
=20
|
|
From: Stephen M.
|
>>>>> "RW" == Rex Walburn <wa...@gm...> writes: RW> Hi RW> Thanks for the info on Kvasir/Daikon but I have one fundamental RW> question. How do you detect local variables for a function ? I RW> have looked at Kvasir and cannot figure out where it does RW> that. Given an object file or an executable in Dwarf /Elf format RW> is there any way to list the local variables in a function ? I RW> have looked at dwarfdump and readelf output and they seem to stick RW> to giving details of the global symbols. The local variables, RW> (which are kept on the stack), are not shown. Is there a way to RW> figure this out ? For example in the function below,' i' is a RW> local variable which is always on the stack. I wanted to know if RW> there is some part of code in Kvasir/(anywhere) that can map a RW> stack address to a local variable in the current scope? I hope my RW> question is clear. Kvasir doesn't include any code for accessing local variables, because for our application, we were just interested in global (and static) variables, parameters, and return values. As Tom Hughes points out, though, DWARF does include information about the location of locals, so I don't think they would be too hard to add. Locals will be either on the stack, where they can be treated much like Kvasir treats parameters, or they can be in registers; the debugging information will tell you which. At least in theory, you need to worry about the compiler moving values that correspond to the same variable between registers and stack slots; there's a way of representing this in DWARF2, I think. I couldn't get GCC (3.3, 3.4) to do this on a small example, though, so it may not be a problem in practice. Hope this helps, -- Stephen |
|
From: Tom H. <to...@co...> - 2005-04-27 19:59:59
|
In message <792...@ma...>
Rex Walburn <wa...@gm...> wrote:
> Thanks for the info on Kvasir/Daikon but I have one fundamental
> question. How do you detect local variables for a function ? I have
> looked at Kvasir and cannot figure out where it does that. Given an
> object file or an executable in Dwarf /Elf format is there any way to
> list the local variables in a function ? I have looked at dwarfdump
> and readelf output and they seem to stick to giving details of the
> global symbols. The local variables, (which are kept on the stack),
> are not shown. Is there a way to figure this out ? For example in the
> function below,' i' is a local variable which is always on the stack.
> I wanted to know if there is some part of code in Kvasir/(anywhere)
> that can map a stack address to a local variable in the current scope?
> I hope my question is clear.
The output of dwarfdump should show the location of stack variables
just fine - they will usually have a DW_OP_fbreg location expression.
Tom
--
Tom Hughes (to...@co...)
http://www.compton.nu/
|
|
From: Rex W. <wa...@gm...> - 2005-04-27 19:10:56
|
Hi
Thanks for the info on Kvasir/Daikon but I have one fundamental
question. How do you detect local variables for a function ? I have
looked at Kvasir and cannot figure out where it does that. Given an
object file or an executable in Dwarf /Elf format is there any way to
list the local variables in a function ? I have looked at dwarfdump
and readelf output and they seem to stick to giving details of the
global symbols. The local variables, (which are kept on the stack),
are not shown. Is there a way to figure this out ? For example in the
function below,' i' is a local variable which is always on the stack.
I wanted to know if there is some part of code in Kvasir/(anywhere)
that can map a stack address to a local variable in the current scope?
I hope my question is clear.
main()=20
{
int i =3D0;
for(i=3D0;i<1;i++)
printf("%d\n",i);
}
Looking forward to your reply.
Thanks.
Rex
On 4/21/05, Stephen McCamant <sm...@cs...> wrote:
> JF> Rex Walburn wrote:
>=20
> RW> Hi
> RW> I tried using VG_(describe_addr) and it returns a value (null) for
> RW> every address.
>=20
> >>>>> "JF" =3D=3D Jeremy Fitzhardinge <je...@go...> writes:
>=20
> JF> Only the stabs reader extracts enough type information for
> JF> describe_addr to work; nobody has put the effort into the DWARF
> JF> reader yet. If you compile with -gstabs, you might get more
> JF> useful results (though I suspect this code has been untested for a
> JF> while, so you may get some explosions instead).
>=20
> You might also want to try looking at the "Kvasir" tool that our
> research group has implemented. We had a similar problem of wanting to
> have detailed variable information along with per-instruction
> operation tracking: in our case, we wanted to print the values of all
> the accessible variables at the entrance and exit of functions, but to
> use Memcheck's information to know which memory locations had valid
> data.
>=20
> Rather than building on Valgrind's existing debugging information
> reading code, we made our own by modifying the "readelf" tool from the
> GNU Binutils (unfortunately, we didn't find out about libdwarf until
> too late); this just supports DWARF, but we read all sorts of
> information about global variables, parameters, arrays, and structs.
> We use this information to find the address(es) for each variable
> we're interested in, and then print their contents.
>=20
> You can get the source for Kvasir as part of the Daikon distribution,
> from http://pag.csail.mit.edu/daikon/download/. At the moment, it
> comes as a tool along with a minimally modified version of Valgrind
> 2.2.0, and includes hacked versions of Memcheck and readelf inside
> (it's all GPLed). In the current version, the code for reading the
> debugging information, traversing the sets of variables, and printing
> out their contents in our specific trace format aren't as well
> separated as we'd like, but if you don't mind reusing by cut and
> paste, you might find a lot of code you could take advantage of.
>=20
> -- Stephen
>
|
|
From: Rex W. <wa...@gm...> - 2005-04-27 17:41:49
|
Hi Is there a function in Valgrind, that can tell me the value of the stack pointer on the valgrind's virtual processor and its offset from the stack on the real processor ? Is there a function that can tell me if a current address is an address on the stack of valgrind's virtual processor or not? If not, how do I go about writing it? Thanks. Rex |
|
From: <sv...@va...> - 2005-04-27 13:39:57
|
Author: sewardj
Date: 2005-04-27 14:39:35 +0100 (Wed, 27 Apr 2005)
New Revision: 1151
Modified:
trunk/priv/host-amd64/isel.c
Log:
Handle CmpNEZ16.
Modified: trunk/priv/host-amd64/isel.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/priv/host-amd64/isel.c 2005-04-27 11:55:08 UTC (rev 1150)
+++ trunk/priv/host-amd64/isel.c 2005-04-27 13:39:35 UTC (rev 1151)
@@ -1824,6 +1824,16 @@
return Acc_NZ;
}
=20
+ /* --- patterns rooted at: CmpNEZ16 --- */
+
+ /* CmpNEZ16(x) */
+ if (e->tag =3D=3D Iex_Unop=20
+ && e->Iex.Unop.op =3D=3D Iop_CmpNEZ16) {
+ HReg r =3D iselIntExpr_R(env, e->Iex.Unop.arg);
+ addInstr(env, AMD64Instr_Test64(AMD64RI_Imm(0xFFFF),AMD64RM_Reg(r)=
));
+ return Acc_NZ;
+ }
+
/* --- patterns rooted at: CmpNEZ32 --- */
=20
/* CmpNEZ32(x) */
|
|
From: <sv...@va...> - 2005-04-27 11:55:19
|
Author: sewardj
Date: 2005-04-27 12:55:08 +0100 (Wed, 27 Apr 2005)
New Revision: 1150
Modified:
trunk/priv/host-amd64/isel.c
Log:
Handle various more primops, and reorganise iselCondCode_wrk in line
with similar reorg on x86 side.
Modified: trunk/priv/host-amd64/isel.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/priv/host-amd64/isel.c 2005-04-27 11:53:23 UTC (rev 1149)
+++ trunk/priv/host-amd64/isel.c 2005-04-27 11:55:08 UTC (rev 1150)
@@ -781,7 +781,7 @@
MatchInfo mi;
DECLARE_PATTERN(p_8Uto64);
DECLARE_PATTERN(p_16Uto64);
- DECLARE_PATTERN(p_1Uto8_32to1_64to32);
+ DECLARE_PATTERN(p_1Uto8_64to1);
//.. DECLARE_PATTERN(p_32to1_then_1Uto8);
=20
IRType ty =3D typeOfIRExpr(env->type_env,e);
@@ -1127,20 +1127,7 @@
=20
/* --------- UNARY OP --------- */
case Iex_Unop: {
- /* 32Uto64(16Uto32(expr16)) */
- DEFINE_PATTERN(p_16Uto64,
- unop(Iop_32Uto64, unop(Iop_16Uto32, bind(0)) ) );
- if (matchIRExpr(&mi,p_16Uto64,e)) {
- IRExpr* expr16 =3D mi.bindee[0];
- HReg dst =3D newVRegI(env);
- HReg src =3D iselIntExpr_R(env, expr16);
- addInstr(env, mk_iMOVsd_RR(src,dst) );
- addInstr(env, AMD64Instr_Sh64(Ash_SHL, 48, AMD64RM_Reg(dst)));
- addInstr(env, AMD64Instr_Sh64(Ash_SHR, 48, AMD64RM_Reg(dst)));
- return dst;
- }
-
- /* 32Uto64(8Uto32(expr16)) */
+ /* 32Uto64(8Uto32(expr8)) */
DEFINE_PATTERN(p_8Uto64,
unop(Iop_32Uto64, unop(Iop_8Uto32, bind(0)) ) );
if (matchIRExpr(&mi,p_8Uto64,e)) {
@@ -1153,11 +1140,10 @@
return dst;
}
=20
- /* 1Uto8(32to1(64to32(expr64))) */
- DEFINE_PATTERN(p_1Uto8_32to1_64to32,
- unop(Iop_1Uto8,=20
- unop(Iop_32to1, unop(Iop_64to32, bind(0)))));
- if (matchIRExpr(&mi,p_1Uto8_32to1_64to32,e)) {
+ /* 1Uto8(64to1(expr64)) */
+ DEFINE_PATTERN( p_1Uto8_64to1,
+ unop(Iop_1Uto8, unop(Iop_64to1, bind(0))) );
+ if (matchIRExpr(&mi,p_1Uto8_64to1,e)) {
IRExpr* expr64 =3D mi.bindee[0];
HReg dst =3D newVRegI(env);
HReg src =3D iselIntExpr_R(env, expr64);
@@ -1207,22 +1193,30 @@
return rLo; /* and abandon rHi */
}
case Iop_8Uto16:
- case Iop_8Uto32:
+// case Iop_8Uto32:
+ case Iop_8Uto64:
+ case Iop_16Uto64:
case Iop_16Uto32: {
- HReg dst =3D newVRegI(env);
- HReg src =3D iselIntExpr_R(env, e->Iex.Unop.arg);
- UInt mask =3D e->Iex.Unop.op=3D=3DIop_16Uto32 ? 0xFFFF : 0xF=
F;
+ HReg dst =3D newVRegI(env);
+ HReg src =3D iselIntExpr_R(env, e->Iex.Unop.arg);
+ Bool srcIs16 =3D e->Iex.Unop.op=3D=3DIop_16Uto32
+ || e->Iex.Unop.op=3D=3DIop_16Uto64;
+ UInt mask =3D srcIs16 ? 0xFFFF : 0xFF;
addInstr(env, mk_iMOVsd_RR(src,dst) );
addInstr(env, AMD64Instr_Alu64R(Aalu_AND,
AMD64RMI_Imm(mask), dst));
return dst;
}
case Iop_8Sto16:
+ case Iop_8Sto64:
case Iop_8Sto32:
- case Iop_16Sto32: {
- HReg dst =3D newVRegI(env);
- HReg src =3D iselIntExpr_R(env, e->Iex.Unop.arg);
- UInt amt =3D e->Iex.Unop.op=3D=3DIop_16Sto32 ? 48 : 56;
+ case Iop_16Sto32:
+ case Iop_16Sto64: {
+ HReg dst =3D newVRegI(env);
+ HReg src =3D iselIntExpr_R(env, e->Iex.Unop.arg);
+ Bool srcIs16 =3D e->Iex.Unop.op=3D=3DIop_16Sto32
+ || e->Iex.Unop.op=3D=3DIop_16Sto64;
+ UInt amt =3D srcIs16 ? 48 : 56;
addInstr(env, mk_iMOVsd_RR(src,dst) );
addInstr(env, AMD64Instr_Sh64(Ash_SHL, amt, AMD64RM_Reg(dst)=
));
addInstr(env, AMD64Instr_Sh64(Ash_SAR, amt, AMD64RM_Reg(dst)=
));
@@ -1264,6 +1258,7 @@
Ash_SHR, shift, AMD64RM_Reg(dst)));
return dst;
}
+ case Iop_1Uto64:
case Iop_1Uto32:
case Iop_1Uto8: {
HReg dst =3D newVRegI(env);
@@ -1304,6 +1299,16 @@
AMD64RMI_Reg(tmp), dst));
return dst;
}
+ case Iop_Neg8:
+ case Iop_Neg16:
+ case Iop_Neg32:
+ case Iop_Neg64: {
+ HReg dst =3D newVRegI(env);
+ HReg reg =3D iselIntExpr_R(env, e->Iex.Unop.arg);
+ addInstr(env, mk_iMOVsd_RR(reg,dst));
+ addInstr(env, AMD64Instr_Unary64(Aun_NEG,AMD64RM_Reg(dst)));
+ return dst;
+ }
=20
case Iop_V128to32: {
HReg dst =3D newVRegI(env);
@@ -1347,7 +1352,9 @@
=20
case Iop_16to8:
case Iop_32to8:
+ case Iop_64to8:
case Iop_32to16:
+ case Iop_64to16:
case Iop_64to32:
/* These are no-ops. */
return iselIntExpr_R(env, e->Iex.Unop.arg);
@@ -1749,6 +1756,15 @@
vassert(e);
vassert(typeOfIRExpr(env->type_env,e) =3D=3D Ity_I1);
=20
+ /* var */
+ if (e->tag =3D=3D Iex_Tmp) {
+ HReg r64 =3D lookupIRTemp(env, e->Iex.Tmp.tmp);
+ HReg dst =3D newVRegI(env);
+ addInstr(env, mk_iMOVsd_RR(r64,dst));
+ addInstr(env, AMD64Instr_Alu64R(Aalu_AND,AMD64RMI_Imm(1),dst));
+ return Acc_NZ;
+ }
+
//.. /* Constant 1:Bit */
//.. if (e->tag =3D=3D Iex_Const && e->Iex.Const.con->Ico.U1 =3D=3D T=
rue) {
//.. HReg r;
@@ -1765,16 +1781,11 @@
return 1 ^ iselCondCode(env, e->Iex.Unop.arg);
}
=20
- /* 32to1(64to32(32Uto64(1Uto32(expr1))))
- -- the casts are pointless, ignore them */
- DEFINE_PATTERN(
- p_1Uto64_then_64to1,
- unop(Iop_32to1,
- unop(Iop_64to32,
- unop(Iop_32Uto64,
- unop(Iop_1Uto32,
- bind(0)))))
- );
+ /* --- patterns rooted at: 64to1 --- */
+
+ /* 64to1(1Uto64(expr1)) =3D=3D> expr1 */
+ DEFINE_PATTERN( p_1Uto64_then_64to1,
+ unop(Iop_64to1, unop(Iop_1Uto64, bind(0))) );
if (matchIRExpr(&mi,p_1Uto64_then_64to1,e)) {
IRExpr* expr1 =3D mi.bindee[0];
return iselCondCode(env, expr1);
@@ -1796,16 +1807,49 @@
//.. return iselCondCode(env, expr1);
//.. }
=20
- /* pattern: 32to1(64to32(expr64)) */
- DEFINE_PATTERN(p_32to1_64to32,=20
- unop(Iop_32to1,unop(Iop_64to32, bind(0)))
- );
- if (matchIRExpr(&mi,p_32to1_64to32,e)) {
- AMD64RM* rm =3D iselIntExpr_RM(env, mi.bindee[0]);
+ /* 64to1 */
+ if (e->tag =3D=3D Iex_Unop && e->Iex.Unop.op =3D=3D Iop_64to1) {
+ AMD64RM* rm =3D iselIntExpr_RM(env, e->Iex.Unop.arg);
addInstr(env, AMD64Instr_Test64(AMD64RI_Imm(1),rm));
return Acc_NZ;
}
=20
+ /* --- patterns rooted at: CmpNEZ8 --- */
+
+ /* CmpNEZ8(x) */
+ if (e->tag =3D=3D Iex_Unop=20
+ && e->Iex.Unop.op =3D=3D Iop_CmpNEZ8) {
+ HReg r =3D iselIntExpr_R(env, e->Iex.Unop.arg);
+ addInstr(env, AMD64Instr_Test64(AMD64RI_Imm(0xFF),AMD64RM_Reg(r)))=
;
+ return Acc_NZ;
+ }
+
+ /* --- patterns rooted at: CmpNEZ32 --- */
+
+ /* CmpNEZ32(x) */
+ if (e->tag =3D=3D Iex_Unop=20
+ && e->Iex.Unop.op =3D=3D Iop_CmpNEZ32) {
+ HReg r1 =3D iselIntExpr_R(env, e->Iex.Unop.arg);
+ HReg tmp =3D newVRegI(env);
+ AMD64RMI* rmi2 =3D AMD64RMI_Imm(0);
+ addInstr(env, AMD64Instr_MovZLQ(r1,tmp));
+ addInstr(env, AMD64Instr_Alu64R(Aalu_CMP,rmi2,tmp));
+ return Acc_NZ;
+ }
+
+ /* --- patterns rooted at: CmpNEZ64 --- */
+
+ /* CmpNEZ64(x) */
+ if (e->tag =3D=3D Iex_Unop=20
+ && e->Iex.Unop.op =3D=3D Iop_CmpNEZ64) {
+ HReg r1 =3D iselIntExpr_R(env, e->Iex.Unop.arg);
+ AMD64RMI* rmi2 =3D AMD64RMI_Imm(0);
+ addInstr(env, AMD64Instr_Alu64R(Aalu_CMP,rmi2,r1));
+ return Acc_NZ;
+ }
+
+ /* --- patterns rooted at: Cmp{EQ,NE}{8,16,32} --- */
+
/* CmpEQ8 / CmpNE8 */
if (e->tag =3D=3D Iex_Binop=20
&& (e->Iex.Binop.op =3D=3D Iop_CmpEQ8
@@ -1853,39 +1897,10 @@
switch (e->Iex.Binop.op) {
case Iop_CmpEQ32: return Acc_Z;
case Iop_CmpNE32: return Acc_NZ;
- default: vpanic("iselCondCode(amd64): CmpXX8");
+ default: vpanic("iselCondCode(amd64): CmpXX32");
}
}
=20
-
-//.. /* CmpEQ16 / CmpNE16 */
-//.. if (e->tag =3D=3D Iex_Binop=20
-//.. && (e->Iex.Binop.op =3D=3D Iop_CmpEQ16
-//.. || e->Iex.Binop.op =3D=3D Iop_CmpNE16)) {
-//.. HReg r1 =3D iselIntExpr_R(env, e->Iex.Binop.arg1);
-//.. X86RMI* rmi2 =3D iselIntExpr_RMI(env, e->Iex.Binop.arg2);
-//.. HReg r =3D newVRegI(env);
-//.. addInstr(env, mk_iMOVsd_RR(r1,r));
-//.. addInstr(env, X86Instr_Alu32R(Xalu_XOR,rmi2,r));
-//.. addInstr(env, X86Instr_Alu32R(Xalu_AND,X86RMI_Imm(0xFFFF),r))=
;
-//.. switch (e->Iex.Binop.op) {
-//.. case Iop_CmpEQ16: return Xcc_Z;
-//.. case Iop_CmpNE16: return Xcc_NZ;
-//.. default: vpanic("iselCondCode(x86): CmpXX16");
-//.. }
-//.. }
-
- /* CmpNE32(1Sto32(b), 0) =3D=3D> b */
- {
- DECLARE_PATTERN(p_CmpNE32_1Sto32);
- DEFINE_PATTERN(
- p_CmpNE32_1Sto32,
- binop(Iop_CmpNE32, unop(Iop_1Sto32,bind(0)), mkU32(0)));
- if (matchIRExpr(&mi, p_CmpNE32_1Sto32, e)) {
- return iselCondCode(env, mi.bindee[0]);
- }
- }
-
/* Cmp*64*(x,y) */
if (e->tag =3D=3D Iex_Binop=20
&& (e->Iex.Binop.op =3D=3D Iop_CmpEQ64
@@ -1956,15 +1971,6 @@
//.. }
//.. }
=20
- /* var */
- if (e->tag =3D=3D Iex_Tmp) {
- HReg r64 =3D lookupIRTemp(env, e->Iex.Tmp.tmp);
- HReg dst =3D newVRegI(env);
- addInstr(env, mk_iMOVsd_RR(r64,dst));
- addInstr(env, AMD64Instr_Alu64R(Aalu_AND,AMD64RMI_Imm(1),dst));
- return Acc_NZ;
- }
-
ppIRExpr(e);
vpanic("iselCondCode(amd64)");
}
|
|
From: <sv...@va...> - 2005-04-27 11:53:52
|
Author: sewardj
Date: 2005-04-27 12:53:23 +0100 (Wed, 27 Apr 2005)
New Revision: 1149
Modified:
trunk/priv/host-amd64/hdefs.c
Log:
Emit 'negq'.
Modified: trunk/priv/host-amd64/hdefs.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/priv/host-amd64/hdefs.c 2005-04-27 11:52:40 UTC (rev 1148)
+++ trunk/priv/host-amd64/hdefs.c 2005-04-27 11:53:23 UTC (rev 1149)
@@ -145,6 +145,17 @@
=20
void getAllocableRegs_AMD64 ( Int* nregs, HReg** arr )
{
+#if 0
+ *nregs =3D 6;
+ *arr =3D LibVEX_Alloc(*nregs * sizeof(HReg));
+ (*arr)[ 0] =3D hregAMD64_RSI();
+ (*arr)[ 1] =3D hregAMD64_RDI();
+ (*arr)[ 2] =3D hregAMD64_RBX();
+
+ (*arr)[ 3] =3D hregAMD64_XMM7();
+ (*arr)[ 4] =3D hregAMD64_XMM8();
+ (*arr)[ 5] =3D hregAMD64_XMM9();
+#endif
#if 1
*nregs =3D 11;
*arr =3D LibVEX_Alloc(*nregs * sizeof(HReg));
@@ -160,7 +171,8 @@
(*arr)[ 8] =3D hregAMD64_XMM7();
(*arr)[ 9] =3D hregAMD64_XMM8();
(*arr)[10] =3D hregAMD64_XMM9();
-#else
+#endif
+#if 0
*nregs =3D 30;
*arr =3D LibVEX_Alloc(*nregs * sizeof(HReg));
(*arr)[ 0] =3D hregAMD64_RAX();
@@ -1033,7 +1045,7 @@
ppAMD64RM(i->Ain.Test64.dst);
return;
case Ain_Unary64:
- vex_printf("%sl ", showAMD64UnaryOp(i->Ain.Unary64.op));
+ vex_printf("%sq ", showAMD64UnaryOp(i->Ain.Unary64.op));
ppAMD64RM(i->Ain.Unary64.dst);
return;
case Ain_MulL:
@@ -2426,15 +2438,16 @@
goto bad;
}
}
-//.. if (i->Xin.Unary32.op =3D=3D Xun_NEG) {
-//.. *p++ =3D 0xF7;
-//.. if (i->Xin.Unary32.dst->tag =3D=3D Xrm_Reg) {
-//.. p =3D doAMode_R(p, fake(3), i->Xin.Unary32.dst->Xrm.Reg=
.reg);
-//.. goto done;
-//.. } else {
-//.. goto bad;
-//.. }
-//.. }
+ if (i->Ain.Unary64.op =3D=3D Aun_NEG) {
+ if (i->Ain.Unary64.dst->tag =3D=3D Arm_Reg) {
+ *p++ =3D rexAMode_R(fake(0), i->Ain.Unary64.dst->Arm.Reg.reg=
);
+ *p++ =3D 0xF7;
+ p =3D doAMode_R(p, fake(3), i->Ain.Unary64.dst->Arm.Reg.reg)=
;
+ goto done;
+ } else {
+ goto bad;
+ }
+ }
break;
=20
case Ain_MulL:
|
|
From: <sv...@va...> - 2005-04-27 11:53:00
|
Author: sewardj
Date: 2005-04-27 12:52:40 +0100 (Wed, 27 Apr 2005)
New Revision: 1148
Modified:
trunk/priv/guest-amd64/ghelpers.c
Log:
* Use new 64-to/from-{16,8,1} conversion primops
* disable "Z after SUBW" specialisation which apparently causes
xedit to fail for unknown reasons
Modified: trunk/priv/guest-amd64/ghelpers.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/priv/guest-amd64/ghelpers.c 2005-04-27 11:50:56 UTC (rev 1147)
+++ trunk/priv/guest-amd64/ghelpers.c 2005-04-27 11:52:40 UTC (rev 1148)
@@ -900,22 +900,20 @@
if (isU64(cc_op, AMD64G_CC_OP_SUBL) && isU64(cond, AMD64CondL)) {
/* long sub/cmp, then L (signed less than)=20
--> test dst <s src */
- return unop(Iop_32Uto64,
- unop(Iop_1Uto32,
+ return unop(Iop_1Uto64,
binop(Iop_CmpLT64S,=20
binop(Iop_Shl64,cc_dep1,mkU8(32)),
- binop(Iop_Shl64,cc_dep2,mkU8(32)))));
+ binop(Iop_Shl64,cc_dep2,mkU8(32))));
=20
}
=20
if (isU64(cc_op, AMD64G_CC_OP_SUBL) && isU64(cond, AMD64CondLE)) {
/* long sub/cmp, then L (signed less than or equal)=20
--> test dst <s src */
- return unop(Iop_32Uto64,
- unop(Iop_1Uto32,
+ return unop(Iop_1Uto64,
binop(Iop_CmpLE64S,=20
binop(Iop_Shl64,cc_dep1,mkU8(32)),
- binop(Iop_Shl64,cc_dep2,mkU8(32)))));
+ binop(Iop_Shl64,cc_dep2,mkU8(32))));
=20
}
=20
@@ -936,24 +934,23 @@
=20
/*---------------- SUBW ----------------*/
=20
- if (isU64(cc_op, AMD64G_CC_OP_SUBW) && isU64(cond, AMD64CondZ)) {
- /* word sub/cmp, then Z --> test dst=3D=3Dsrc */
- return unop(Iop_32Uto64,
- unop(Iop_1Uto32,
- binop(Iop_CmpEQ16,=20
- unop(Iop_32to16,unop(Iop_64to32,cc_dep1)),
- unop(Iop_32to16,unop(Iop_64to32,cc_dep2)))));
- }
+ // CAUSES xedit not to work
+ // if (isU64(cc_op, AMD64G_CC_OP_SUBW) && isU64(cond, AMD64Co=
ndZ)) {
+ // /* word sub/cmp, then Z --> test dst=3D=3Dsrc */
+ // return unop(Iop_1Uto64,
+ // binop(Iop_CmpEQ16,=20
+ // unop(Iop_64to16,cc_dep1),
+ // unop(Iop_64to16,cc_dep2)));
+ // }
=20
/*---------------- SUBB ----------------*/
=20
if (isU64(cc_op, AMD64G_CC_OP_SUBB) && isU64(cond, AMD64CondZ)) {
/* byte sub/cmp, then Z --> test dst=3D=3Dsrc */
- return unop(Iop_32Uto64,
- unop(Iop_1Uto32,
+ return unop(Iop_1Uto64,
binop(Iop_CmpEQ8,=20
- unop(Iop_32to8,unop(Iop_64to32,cc_dep1)),
- unop(Iop_32to8,unop(Iop_64to32,cc_dep2)))));
+ unop(Iop_64to8,cc_dep1),
+ unop(Iop_64to8,cc_dep2)));
}
=20
// if (isU64(cc_op, AMD64G_CC_OP_SUBB) && isU64(cond, AMD64CondNZ))=
{
@@ -979,10 +976,10 @@
=20
if (isU64(cc_op, AMD64G_CC_OP_LOGICL) && isU64(cond, AMD64CondZ)) =
{
/* long and/or/xor, then Z --> test dst=3D=3D0 */
- return unop(Iop_32Uto64,
- unop(Iop_1Uto32,binop(Iop_CmpEQ64,=20
- binop(Iop_Shl64,cc_dep1,mkU8(32)),=
=20
- mkU64(0))));
+ return unop(Iop_1Uto64,
+ binop(Iop_CmpEQ64,=20
+ binop(Iop_Shl64,cc_dep1,mkU8(32)),=20
+ mkU64(0)));
}
=20
//.. if (isU32(cc_op, AMD64G_CC_OP_LOGICL) && isU32(cond, X86CondS=
)) {
@@ -997,10 +994,10 @@
OF is zero, so this reduces to SZ | ZF -- which will be 1 if=
f
the result is <=3Dsigned 0. Hence ...
*/
- return unop(Iop_32Uto64,
- unop(Iop_1Uto32,binop(Iop_CmpLE64S,=20
- binop(Iop_Shl64,cc_dep1,mkU8(32)),=
=20
- mkU64(0))));
+ return unop(Iop_1Uto64,
+ binop(Iop_CmpLE64S,=20
+ binop(Iop_Shl64,cc_dep1,mkU8(32)),=20
+ mkU64(0)));
}
=20
//.. if (isU32(cc_op, AMD64G_CC_OP_LOGICL) && isU32(cond, X86CondB=
E)) {
@@ -1112,19 +1109,17 @@
=20
if (isU64(cc_op, AMD64G_CC_OP_SUBL)) {
/* C after sub denotes unsigned less than */
- return unop(Iop_32Uto64,
- unop(Iop_1Uto32,
+ return unop(Iop_1Uto64,
binop(Iop_CmpLT64U,=20
binop(Iop_Shl64,cc_dep1,mkU8(32)),=20
- binop(Iop_Shl64,cc_dep2,mkU8(32)))));
+ binop(Iop_Shl64,cc_dep2,mkU8(32))));
}
if (isU64(cc_op, AMD64G_CC_OP_SUBB)) {
/* C after sub denotes unsigned less than */
- return unop(Iop_32Uto64,
- unop(Iop_1Uto32,
+ return unop(Iop_1Uto64,
binop(Iop_CmpLT64U,=20
binop(Iop_And64,cc_dep1,mkU64(0xFF)),
- binop(Iop_And64,cc_dep2,mkU64(0xFF)))));
+ binop(Iop_And64,cc_dep2,mkU64(0xFF))));
}
if (isU64(cc_op, AMD64G_CC_OP_LOGICQ)
|| isU64(cc_op, AMD64G_CC_OP_LOGICL)
|
|
From: <sv...@va...> - 2005-04-27 11:51:18
|
Author: sewardj
Date: 2005-04-27 12:50:56 +0100 (Wed, 27 Apr 2005)
New Revision: 1147
Modified:
trunk/priv/guest-amd64/toIR.c
Log:
Use new 64-to/from-{16,8,1} conversion primops instead of going via
Ity_I32.
Modified: trunk/priv/guest-amd64/toIR.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/priv/guest-amd64/toIR.c 2005-04-27 11:42:44 UTC (rev 1146)
+++ trunk/priv/guest-amd64/toIR.c 2005-04-27 11:50:56 UTC (rev 1147)
@@ -266,16 +266,16 @@
return unop(signd ? Iop_16Sto32 : Iop_16Uto32, src);
}
if (szSmall =3D=3D 1 && szBig =3D=3D 8 && !signd) {
- return unop(Iop_32Uto64, unop(Iop_8Uto32, src));
+ return unop(Iop_8Uto64, src);
}
if (szSmall =3D=3D 1 && szBig =3D=3D 8 && signd) {
- return unop(Iop_32Sto64, unop(Iop_8Sto32, src));
+ return unop(Iop_8Sto64, src);
}
if (szSmall =3D=3D 2 && szBig =3D=3D 8 && !signd) {
- return unop(Iop_32Uto64, unop(Iop_16Uto32, src));
+ return unop(Iop_16Uto64, src);
}
if (szSmall =3D=3D 2 && szBig =3D=3D 8 && signd) {
- return unop(Iop_32Sto64, unop(Iop_16Sto32, src));
+ return unop(Iop_16Sto64, src);
}
vpanic("doScalarWidening(amd64)");
}
@@ -1545,7 +1545,7 @@
/* Exclude the requested condition, OP and NDEP from definedness
checking. We're only interested in DEP1 and DEP2. */
call->Iex.CCall.cee->mcx_mask =3D (1<<0) | (1<<1) | (1<<4);
- return unop(Iop_32to1, unop(Iop_64to32, call));
+ return unop(Iop_64to1, call);
}
=20
/* Build IR to calculate just the carry flag from stored
@@ -1593,8 +1593,8 @@
switch (typeOfIRExpr(irbb->tyenv,e)) {
case Ity_I64: return e;
case Ity_I32: return unop(Iop_32Uto64, e);
- case Ity_I16: return unop(Iop_32Uto64, unop(Iop_16Uto32,e));
- case Ity_I8: return unop(Iop_32Uto64, unop(Iop_8Uto32,e));
+ case Ity_I16: return unop(Iop_16Uto64, e);
+ case Ity_I8: return unop(Iop_8Uto64, e);
default: vpanic("widenUto64");
}
}
@@ -1605,8 +1605,8 @@
switch (typeOfIRExpr(irbb->tyenv,e)) {
case Ity_I64: return e;
case Ity_I32: return unop(Iop_32Sto64, e);
- case Ity_I16: return unop(Iop_32Sto64, unop(Iop_16Sto32,e));
- case Ity_I8: return unop(Iop_32Sto64, unop(Iop_8Sto32,e));
+ case Ity_I16: return unop(Iop_16Sto64, e);
+ case Ity_I8: return unop(Iop_8Sto64, e);
default: vpanic("widenSto64");
}
}
@@ -1625,9 +1625,9 @@
if (src_ty =3D=3D Ity_I64 && dst_ty =3D=3D Ity_I32)
return unop(Iop_64to32, e);
if (src_ty =3D=3D Ity_I64 && dst_ty =3D=3D Ity_I16)
- return unop(Iop_32to16, unop(Iop_64to32, e));
+ return unop(Iop_64to16, e);
if (src_ty =3D=3D Ity_I64 && dst_ty =3D=3D Ity_I8)
- return unop(Iop_32to8, unop(Iop_64to32, e));
+ return unop(Iop_64to8, e);
=20
vex_printf("\nsrc, dst tys are: ");
ppIRType(src_ty);
@@ -6803,7 +6803,7 @@
);
=20
if (sz =3D=3D 2)
- assign( dst, unop(Iop_32to16, unop(Iop_64to32, mkexpr(dst64))) );
+ assign( dst, unop(Iop_64to16, mkexpr(dst64)) );
else
if (sz =3D=3D 4)
assign( dst, unop(Iop_64to32, mkexpr(dst64)) );
|
|
From: <sv...@va...> - 2005-04-27 11:43:06
|
Author: sewardj
Date: 2005-04-27 12:42:44 +0100 (Wed, 27 Apr 2005)
New Revision: 1146
Modified:
trunk/priv/ir/irdefs.c
trunk/priv/ir/iropt.c
trunk/pub/libvex_ir.h
Log:
Add even more 64-bit integer primops (sigh)
Modified: trunk/priv/ir/irdefs.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/priv/ir/irdefs.c 2005-04-26 23:39:45 UTC (rev 1145)
+++ trunk/priv/ir/irdefs.c 2005-04-27 11:42:44 UTC (rev 1146)
@@ -142,11 +142,19 @@
case Iop_32Sto64: vex_printf("32Sto64"); return;
case Iop_32Uto64: vex_printf("32Uto64"); return;
case Iop_32to8: vex_printf("32to8"); return;
+ case Iop_16Uto64: vex_printf("16Uto64"); return;
+ case Iop_16Sto64: vex_printf("16Sto64"); return;
+ case Iop_8Uto64: vex_printf("8Uto64"); return;
+ case Iop_8Sto64: vex_printf("8Sto64"); return;
+ case Iop_64to16: vex_printf("64to16"); return;
+ case Iop_64to8: vex_printf("64to8"); return;
=20
case Iop_Not1: vex_printf("Not1"); return;
case Iop_32to1: vex_printf("32to1"); return;
+ case Iop_64to1: vex_printf("64to1"); return;
case Iop_1Uto8: vex_printf("1Uto8"); return;
case Iop_1Uto32: vex_printf("1Uto32"); return;
+ case Iop_1Uto64: vex_printf("1Uto64"); return;
case Iop_1Sto8: vex_printf("1Sto8"); return;
case Iop_1Sto16: vex_printf("1Sto16"); return;
case Iop_1Sto32: vex_printf("1Sto32"); return;
@@ -1350,8 +1358,9 @@
case Iop_1Sto8: UNARY(Ity_I8,Ity_I1);
case Iop_1Sto16: UNARY(Ity_I16,Ity_I1);
case Iop_1Uto32: case Iop_1Sto32: UNARY(Ity_I32,Ity_I1);
- case Iop_1Sto64: UNARY(Ity_I64,Ity_I1);
+ case Iop_1Sto64: case Iop_1Uto64: UNARY(Ity_I64,Ity_I1);
case Iop_32to1: UNARY(Ity_I1,Ity_I32);
+ case Iop_64to1: UNARY(Ity_I1,Ity_I64);
=20
case Iop_8Uto32: case Iop_8Sto32:
UNARY(Ity_I32,Ity_I8);
@@ -1365,7 +1374,16 @@
case Iop_32Sto64: case Iop_32Uto64:
UNARY(Ity_I64,Ity_I32);
=20
+ case Iop_8Uto64: case Iop_8Sto64:
+ UNARY(Ity_I64,Ity_I8);
+
+ case Iop_16Uto64: case Iop_16Sto64:
+ UNARY(Ity_I64,Ity_I16);
+ case Iop_64to16:
+ UNARY(Ity_I16, Ity_I64);
+
case Iop_32to8: UNARY(Ity_I8,Ity_I32);
+ case Iop_64to8: UNARY(Ity_I8,Ity_I64);
=20
case Iop_ScaleF64: case Iop_PRemF64: case Iop_PRem1F64:
case Iop_AtanF64: case Iop_Yl2xF64: case Iop_Yl2xp1F64:=20
Modified: trunk/priv/ir/iropt.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/priv/ir/iropt.c 2005-04-26 23:39:45 UTC (rev 1145)
+++ trunk/priv/ir/iropt.c 2005-04-27 11:42:44 UTC (rev 1146)
@@ -898,6 +898,14 @@
e2 =3D IRExpr_Const(IRConst_U32((UInt)s32));
break;
}
+ case Iop_8Uto64:
+ e2 =3D IRExpr_Const(IRConst_U64(
+ 0xFFULL & e->Iex.Unop.arg->Iex.Const.con->Ico.U8));
+ break;
+ case Iop_16Uto64:
+ e2 =3D IRExpr_Const(IRConst_U64(
+ 0xFFFFULL & e->Iex.Unop.arg->Iex.Const.con->Ico.U16)=
);
+ break;
case Iop_8Uto32:
e2 =3D IRExpr_Const(IRConst_U32(
0xFF & e->Iex.Unop.arg->Iex.Const.con->Ico.U8));
@@ -919,6 +927,11 @@
1 =3D=3D (1 & e->Iex.Unop.arg->Iex.Const.con->Ico.U3=
2)
)));
break;
+ case Iop_64to1:
+ e2 =3D IRExpr_Const(IRConst_U1(toBool(
+ 1 =3D=3D (1 & e->Iex.Unop.arg->Iex.Const.con->Ico.U6=
4)
+ )));
+ break;
=20
case Iop_Not64:
e2 =3D IRExpr_Const(IRConst_U64(
@@ -942,6 +955,10 @@
notBool(e->Iex.Unop.arg->Iex.Const.con->Ico.U1)));
break;
=20
+ case Iop_Neg64:
+ e2 =3D IRExpr_Const(IRConst_U64(
+ - (e->Iex.Unop.arg->Iex.Const.con->Ico.U64)));
+ break;
case Iop_Neg32:
e2 =3D IRExpr_Const(IRConst_U32(
- (e->Iex.Unop.arg->Iex.Const.con->Ico.U32)));
@@ -951,6 +968,18 @@
- (e->Iex.Unop.arg->Iex.Const.con->Ico.U8)));
break;
=20
+ case Iop_64to8: {
+ ULong w64 =3D e->Iex.Unop.arg->Iex.Const.con->Ico.U64;
+ w64 &=3D 0xFFULL;
+ e2 =3D IRExpr_Const(IRConst_U8( (UChar)w64 ));
+ break;
+ }
+ case Iop_64to16: {
+ ULong w64 =3D e->Iex.Unop.arg->Iex.Const.con->Ico.U64;
+ w64 &=3D 0xFFFFULL;
+ e2 =3D IRExpr_Const(IRConst_U16( (UChar)w64 ));
+ break;
+ }
case Iop_64to32: {
ULong w64 =3D e->Iex.Unop.arg->Iex.Const.con->Ico.U64;
w64 &=3D 0x00000000FFFFFFFFULL;
@@ -1262,6 +1291,14 @@
} else {
=20
/* other cases (identities, etc) */
+
+ /* Shl64/Shr64(x,0) =3D=3D> x */
+ if ((e->Iex.Binop.op =3D=3D Iop_Shl64 || e->Iex.Binop.op =3D=3D=
Iop_Shr64)
+ && e->Iex.Binop.arg2->tag =3D=3D Iex_Const
+ && e->Iex.Binop.arg2->Iex.Const.con->Ico.U8 =3D=3D 0) {
+ e2 =3D e->Iex.Binop.arg1;
+ } else
+
/* Shl32/Shr32(x,0) =3D=3D> x */
if ((e->Iex.Binop.op =3D=3D Iop_Shl32 || e->Iex.Binop.op =3D=3D=
Iop_Shr32)
&& e->Iex.Binop.arg2->tag =3D=3D Iex_Const
@@ -1331,7 +1368,6 @@
|| e->Iex.Binop.op =3D=3D Iop_Xor16
|| e->Iex.Binop.op =3D=3D Iop_Xor8)
&& sameIRTemps(e->Iex.Binop.arg1, e->Iex.Binop.arg2)) {
- vassert(0); /* awaiting test case */
e2 =3D mkZeroForXor(e->Iex.Binop.op);
}
=20
Modified: trunk/pub/libvex_ir.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/pub/libvex_ir.h 2005-04-26 23:39:45 UTC (rev 1145)
+++ trunk/pub/libvex_ir.h 2005-04-27 11:42:44 UTC (rev 1146)
@@ -286,8 +286,10 @@
/* 1-bit stuff */
Iop_Not1, /* :: Ity_Bit -> Ity_Bit */
Iop_32to1, /* :: Ity_I32 -> Ity_Bit, just select bit[0] */
- Iop_1Uto8, /* :: Ity_Bit -> Ity_I8, unsigned widen */
+ Iop_64to1, /* :: Ity_I64 -> Ity_Bit, just select bit[0] */
+ Iop_1Uto8, /* :: Ity_Bit -> Ity_I8, unsigned widen */
Iop_1Uto32, /* :: Ity_Bit -> Ity_I32, unsigned widen */
+ Iop_1Uto64, /* :: Ity_Bit -> Ity_I64, unsigned widen */
Iop_1Sto8, /* :: Ity_Bit -> Ity_I8, signed widen */
Iop_1Sto16, /* :: Ity_Bit -> Ity_I16, signed widen */
Iop_1Sto32, /* :: Ity_Bit -> Ity_I32, signed widen */
|
|
From: <sv...@va...> - 2005-04-27 11:40:32
|
Author: sewardj
Date: 2005-04-27 12:40:27 +0100 (Wed, 27 Apr 2005)
New Revision: 3576
Modified:
trunk/memcheck/mc_translate.c
Log:
Handle various new 64-bit integer primops.
Modified: trunk/memcheck/mc_translate.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/memcheck/mc_translate.c 2005-04-27 09:23:02 UTC (rev 3575)
+++ trunk/memcheck/mc_translate.c 2005-04-27 11:40:27 UTC (rev 3576)
@@ -1832,6 +1832,11 @@
case Iop_Ctz32:
return mkPCastTo(mce, Ity_I32, vatom);
=20
+ case Iop_1Uto64:
+ case Iop_8Uto64:
+ case Iop_8Sto64:
+ case Iop_16Uto64:
+ case Iop_16Sto64:
case Iop_32Sto64:
case Iop_32Uto64:
case Iop_V128to64:
@@ -1853,16 +1858,21 @@
case Iop_8Uto16:
case Iop_32to16:
case Iop_32HIto16:
+ case Iop_64to16:
return assignNew(mce, Ity_I16, unop(op, vatom));
=20
case Iop_1Uto8:
case Iop_16to8:
case Iop_32to8:
+ case Iop_64to8:
return assignNew(mce, Ity_I8, unop(op, vatom));
=20
case Iop_32to1:
return assignNew(mce, Ity_I1, unop(Iop_32to1, vatom));
=20
+ case Iop_64to1:
+ return assignNew(mce, Ity_I1, unop(Iop_64to1, vatom));
+
case Iop_ReinterpF64asI64:
case Iop_ReinterpI64asF64:
case Iop_ReinterpI32asF32:
|
|
From: <sv...@va...> - 2005-04-27 09:23:06
|
Author: tom
Date: 2005-04-27 10:23:02 +0100 (Wed, 27 Apr 2005)
New Revision: 3575
Modified:
trunk/coregrind/m_debuglog.c
Log:
Make the debug log module work on amd64.
Modified: trunk/coregrind/m_debuglog.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_debuglog.c 2005-04-27 08:58:53 UTC (rev 3574)
+++ trunk/coregrind/m_debuglog.c 2005-04-27 09:23:02 UTC (rev 3575)
@@ -91,12 +91,33 @@
=20
static UInt local_sys_write_stderr ( HChar* buf, Int n )
{
- return 0;
+ UInt __res;
+ __asm__ volatile (
+ "movq $1, %%rax\n" /* set %rax =3D __NR_write */
+ "movq $2, %%rdi\n" /* set %rdi =3D stderr */
+ "movq %1, %%rsi\n" /* set %rsi =3D buf */
+ "movl %2, %%edx\n" /* set %edx =3D n */
+ "syscall\n" /* write(stderr, buf, n) */
+ "movl %%eax, %0\n" /* set __res =3D %eax */
+ : "=3Dmr" (__res)
+ : "g" (buf), "g" (n)
+ : "rax", "rdi", "rsi", "rdx" );
+ if (__res < 0)=20
+ __res =3D -1;
+ return __res;
}
=20
static UInt local_sys_getpid ( void )
{
- return 0;
+ UInt __res;
+ __asm__ volatile (
+ "movq $39, %%rax\n" /* set %rax =3D __NR_getpid */
+ "syscall\n" /* getpid() */
+ "movl %%eax, %0\n" /* set __res =3D %eax */
+ : "=3Dmr" (__res)
+ :
+ : "rax" );
+ return __res;
}
=20
#else
|
|
From: <sv...@va...> - 2005-04-27 08:59:04
|
Author: tom
Date: 2005-04-27 09:58:53 +0100 (Wed, 27 Apr 2005)
New Revision: 3574
Modified:
trunk/coregrind/m_debuglog.c
Log:
Rework the inline assembly implementations of write and getpid for x86 to
work in PIE builds.
Modified: trunk/coregrind/m_debuglog.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_debuglog.c 2005-04-27 00:34:11 UTC (rev 3573)
+++ trunk/coregrind/m_debuglog.c 2005-04-27 08:58:53 UTC (rev 3574)
@@ -62,12 +62,15 @@
static UInt local_sys_write_stderr ( HChar* buf, Int n )
{
UInt __res;
- __asm__ volatile ("int $0x80"
- : "=3Da" (__res)
- : "0" (4), /* __NR_write */
- "b" (2), /* stderr */
- "c" (buf),
- "d" (n) );
+ __asm__ volatile (
+ "movl $4, %%eax\n" /* set %eax =3D __NR_write */
+ "movl $2, %%ebx\n" /* set %ebx =3D stderr */
+ "movl %1, %%ecx\n" /* set %ecx =3D buf */
+ "movl %2, %%edx\n" /* set %ecx =3D n */
+ "int $0x80\n" /* write(stderr, buf, n) */
+ "movl %%eax, %0\n" /* set __res =3D eax */
+ : "=3Dmr" (__res)
+ : "g" (buf), "g" (n) );
if (__res < 0)=20
__res =3D -1;
return __res;
@@ -76,9 +79,11 @@
static UInt local_sys_getpid ( void )
{
UInt __res;
- __asm__ volatile ("int $0x80"
- : "=3Da" (__res)
- : "0" (20) /* __NR_getpid */);
+ __asm__ volatile (
+ "movl $20, %%eax\n" /* set %eax =3D __NR_getpid */
+ "int $0x80\n" /* getpid() */
+ "movl %%eax, %0\n" /* set __res =3D eax */
+ : "=3Dmr" (__res) );
return __res;
}
=20
|