gcc 中的共享库是否可以进行配置文件引导优化?

发布于 2024-09-04 11:49:10 字数 624 浏览 7 评论 0原文

我最近在 Linux 上推出了一个新的工具链,其中包括 gcc 4.5.0 和 binutils 2.20 with gold。现在我对PGO这个新东西很好奇。虽然很清楚它如何与可执行文件一起工作,但我无法找到有关共享库的答案。我通过谷歌在海湾合作委员会邮件列表上找到了两个未答复的帖子,仅此而已。

所以这就是我尝试过的: 只要我不标记 -fprofile-generate ,一切都会很好,并且我的 .so 由主程序进行 dlopen() 编辑,并且可以完美运行。 当使用 -fprofile-generate 编译和链接时,库被加载,一切正常,但是当我结束主程序时,我得到带有 coredump 的 sigsegv 。

我将 corefile 提供给 gdb 并得到以下结果:

#0 0x00000000 in ?? ()
No symbol table info available.
#1 0x1f32bc2f in ?? ()
No symbol table info available.
Backtrace stopped: previous frame inner to this frame (corrupt stack?)

当然,没有保存 .cdda 文件。

有什么想法吗?

菲利普

I recently rolled out a new Toolchain on Linux, with gcc 4.5.0 and binutils 2.20 with gold. Now I was curious about this new thing PGO. While it's clear how it works with executables, I've not been able to find an answer on shared libraries. I found two unanswered posts on the gcc mailing list via google, that's all.

So here's what I tried:
As long as I don't flag -fprofile-generate everything is well and my .so is dlopen()'ed by the main program and works flawlessly.
When compiled and linked with -fprofile-generate the library gets loaded, everything works, but when I end the main program I get a sigsegv with coredump.

I fed the corefile to gdb and got this:

#0 0x00000000 in ?? ()
No symbol table info available.
#1 0x1f32bc2f in ?? ()
No symbol table info available.
Backtrace stopped: previous frame inner to this frame (corrupt stack?)

And of course no .cdda files are saved.

Any ideas?

Philipp

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

节枝 2024-09-11 11:49:10

我与 PGO 建立了一个共享库。

我所做的是使用 profile-generate 构建一个包含所有 .o 文件的“profile”目录。然后我将它们链接到共享库中。然后,我使用链接到同样使用 profile-generate 构建的可执行文件的库进行分析运行。

之后,我构建了一个“release”目录,其中包含使用配置文件使用构建的所有 .o 文件,将它们链接到共享库中,并且我有一个使用 PGO 构建的共享库。

I build a shared library with PGO.

What I do is to build a "profile" directory with all the .o files with profile-generate. Then I link those into a shared library. Then I do a profiling run with the library linked to an executable also built with profile-generate.

After that I build a "release" directory with all the .o files built with profile-use, link those into a shared library and I have a shared library built with PGO.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文