Open misaka00251 opened 8 months ago
FYI: https://github.com/golang/go/issues/62465
似乎是一个 go 1.21 的一个 backport issue,1.20 可以正常编译,用了 @randall77 的一句魔法咒语:-gcflags=all=-d=wrapglobalmapctl=1
后,本地可以通过 osc build 了。
似乎这个问题也没有完全修复好:https://github.com/golang/go/issues/62465#issuecomment-1936338270
是否可以这样修复?
alertmanager.spec
:
40c40
< export GOFLAGS="-mod=vendor -buildmode=pie"
---
> export GOFLAGS="-mod=vendor -buildmode=pie -gcflags=all=-d=wrapglobalmapctl=1"
@iGxnon Sure, if you want to do this I'll assign you. Please submit your PRs to src-openeuler.
需要分析这个修改有破坏性影响吗
需要分析这个修改有破坏性影响吗
不好说,-gcflags=all=-d=wrapglobalmapctl=1
中的 wrapglobalmapctl
是个 debug 参数:https://github.com/golang/go/blob/c2c4a32f9e57ac9f7102deeba8273bcd2b205d3c/src/cmd/compile/internal/base/debug.go#L67
应该还是最好不要打开,关于这个参数几乎没有可以查阅的文档,不清楚有啥后果。
官方的 workaround: https://go-review.googlesource.com/c/go/+/520095
找到了另外一个 workaround:https://github.com/felixonmars/archriscv-packages/pull/2957 , 想法来自 https://github.com/golang/go/issues/62465#issuecomment-1714211786
注释掉了 IsDirectCall()
,从源头掐掉了问题(
根据
This workaround skips the check which would disable the deadcode optimization (in some cases).
我猜测这个修改的后果可能会导致编译的时间变长,更多 case 会尝试 deadcode optimization
作为临时解决方案,你给 openeuler 的 pr 里面应该通过架构宏把修改隔离掉。这个是 easywork 追踪后面的原因,并且解决 golang 对 riscv支持的缺陷,这个是 hardwork,可以选择接
export GOFLAGS="-mod=vendor -buildmode=pie -gcflags=all=-d=wrapglobalmapctl=1"
export GOFLAGS="-mod=vendor -buildmode=pie \ %ifarch riscv64 -gcflags=all=-d=wrapglobalmapctl=1 \ %endif " @iGxnon
export GOFLAGS="-mod=vendor -buildmode=pie -gcflags=all=-d=wrapglobalmapctl=1"
export GOFLAGS="-mod=vendor -buildmode=pie %ifarch riscv64 -gcflags=all=-d=wrapglobalmapctl=1 %endif " @iGxnon
感谢,已经处理完毕
追踪后面的原因,并且解决 golang 对 riscv支持的缺陷,这个是 hardwork,可以选择接
我想试试,可以在看板里另开一条 issue 么?
软件包信息
软件包名称: alertmanager
openEuler 仓库地址: https://gitee.com/src-openeuler/alertmanager
构建仓库地址: https://build.tarsier-infra.isrc.ac.cn/package/show/openEuler:24.03:Epol/alertmanager
说明
问题背景: 编译失败,需要更新 vendor.tar.gz 内的 rv 相关支持
所需技能:
其它: