php / php/php-src

`sapi/phpdbg/tests/watch_006.phpt` fails on ppc64le

未关闭
#14,879 2 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

Bug SAPI: phpdbg Status: Needs Triage
主要语言
C
星标
40.4k
派生
8.2k
平均合并
2 天 13 小时
30 天内合并 PR
96

描述

Description

The test is failing on ppc64le Linux (at least, I can't repro on arm64 macOS) like so:

$ cat sapi/phpdbg/tests/watch_006.diff
--
     prompt> [Breaking on watchpoint $b]
     Old value: 
     New value (reference): Array ([0] => 1)
018+ 
019+ [Element 0 has been added to watchpoint]
     >00006: $a[0] = 2;
      00007: $a[1] = 3;
      00008: $c = [1];
--

Essentially, a (spurious?) message about a watchpoint being added occurs, that doesn't seem to happen on other platforms.

GDB stack trace:

(gdb) b phpdbg_watch.c:1038
Breakpoint 1 at 0x7a434c: file /home/cb/php-src/sapi/phpdbg/phpdbg_watch.c, line 1038.
(gdb) handle SIGSEGV nostop noprint
Signal        Stop	Print	Pass to program	Description
SIGSEGV       No	No	Yes		Segmentation fault
(gdb) run -qIb  -n sapi/phpdbg/tests/watch_006.php < ~/phpdbg.cmd
Starting program: /home/cb/php-src/sapi/phpdbg/phpdbg -qIb  -n sapi/phpdbg/tests/watch_006.php < ~/phpdbg.cmd
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
[Successful compilation of /home/cb/php-src/sapi/phpdbg/tests/watch_006.php]
prompt> [Breakpoint #0 added at /home/cb/php-src/sapi/phpdbg/tests/watch_006.php:4]
prompt> [Breakpoint #0 at /home/cb/php-src/sapi/phpdbg/tests/watch_006.php:4, hits: 1]
>00004: $a[0] = 1;
 00005: $b = &$a;
 00006: $a[0] = 2;
prompt> [Added watchpoint #0 for $a[0]]
prompt> [Added recursive watchpoint #1 for $b]
prompt> [Breaking on watchpoint $a[0]]
Old value: 0
New value: 1
>00005: $b = &$a;
 00006: $a[0] = 2;
 00007: $a[1] = 3;
prompt> [Breaking on watchpoint $b]
Old value: 
New value (reference): Array ([0] => 1)

Breakpoint 1, phpdbg_check_watchpoint (watch=0x7ffff7860840) at /home/cb/php-src/sapi/phpdbg/phpdbg_watch.c:1038
1038						phpdbg_notice("Element %.*s has been added to watchpoint", (int) ZSTR_LEN(str), ZSTR_VAL(str));
(gdb) bt
#0  phpdbg_check_watchpoint (watch=0x7ffff7860840) at /home/cb/php-src/sapi/phpdbg/phpdbg_watch.c:1038
#1  0x00000001007a4c24 in phpdbg_print_changed_zvals () at /home/cb/php-src/sapi/phpdbg/phpdbg_watch.c:1176
#2  0x000000010078515c in phpdbg_execute_ex (execute_data=0x7ffff7817020) at /home/cb/php-src/sapi/phpdbg/phpdbg_prompt.c:1781
#3  0x00000001006aa75c in zend_execute (op_array=0x7ffff786d000, return_value=0x100a307d8 <phpdbg_globals+1360>)
    at /home/cb/php-src/Zend/zend_vm_execute.h:63001
#4  0x0000000100781524 in phpdbg_do_run (param=0x0) at /home/cb/php-src/sapi/phpdbg/phpdbg_prompt.c:884
#5  0x000000010079c1e0 in phpdbg_internal_stack_execute (stack=0x7fffffffcc28, allow_async_unsafe=true) at /home/cb/php-src/sapi/phpdbg/phpdbg_cmd.c:702
#6  0x000000010079c334 in phpdbg_stack_execute (stack=0x7fffffffcc28, allow_async_unsafe=true) at /home/cb/php-src/sapi/phpdbg/phpdbg_cmd.c:732
#7  0x000000010078434c in phpdbg_interactive (allow_async_unsafe=true, input=0x7ffff78050f0 "r\n") at /home/cb/php-src/sapi/phpdbg/phpdbg_prompt.c:1547
#8  0x000000010077595c in main (argc=4, argv=0x7ffffffff078) at /home/cb/php-src/sapi/phpdbg/phpdbg.c:1610

Very interestingly, it does not reproduce with USE_ZEND_ALLOC=0 set.

Valgrind memcheck output: https://gist.github.com/NattyNarwhal/19a11906157ff459e9592041293d6312

PHP Version

PHP 8.4.0-DEV

Operating System

Gentoo

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

调研方向

从 sapi/phpdbg/tests/watch_006.phpt 开始,在 ppc64le Linux 上重现失败,并将行为与 USE_ZEND_ALLOC=0 进行比较。阅读 sapi/phpdbg/phpdbg_watch.c 中 phpdbg_check_watchpoint() 附近的代码,并查看链接的 Valgrind 输出和 GDB 跟踪。完成的标准是测试不再报告虚假的 watchpoint 元素,并且在没有所报告的内存问题的情况下通过。

由索引模型根据 Issue 内容生成。

评估

技术栈
c, php
领域
cli, devtools, testing-qa
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
停滞
描述清晰度
基本清楚
新手友好度
35/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。