Bug 199186

Summary: Fix sysutils/i7z segfaults and warnings
Product: Ports & Packages Reporter: Dimitry Andric <dim>
Component: Individual Port(s)Assignee: Dmitry Marakasov <amdmi3>
Status: Closed FIXED    
Severity: Affects Some People CC: dim, vsasjason
Priority: --- Flags: bugzilla: maintainer-feedback? (zont)
Version: Latest   
Hardware: Any   
OS: Any   
See Also: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=193917
Attachments:
Description Flags
Fix sysutils/i7z segfaults and warnings none

Description Dimitry Andric freebsd_committer freebsd_triage 2015-04-05 20:20:24 UTC
Created attachment 155215 [details]
Fix sysutils/i7z segfaults and warnings

I found out that sysutils/i7z segfaults under various conditions, e.g. different compilers and compilation flags.  For example, compiling with clang -O0 almost always works, but as soon as you start optimizing, segfaults occur.
  
There is also a comment in the Makefile about having to disable several gcc optimizations to avoid segfaults.

I did some debugging, and it turns out that the inline cpuid() implementation can inadvertently clobber registers, causing the cpu_heirarchy_info struct in 'chi' to be destroyed.  Later on, this can lead to segfaults.

I replaced the cpuid() implementation by a more standard one, and that solves all crashes for me.  I tried compiling with:

* clang 3.4.1 (on stable/10), with default flags
* clang 3.4.1 (on stable/10), with CPUTYPE=core-avx2
* clang 3.4.1 (on stable/10), with CPUTYPE=core-avx2 and -O3
* gcc 4.2.1 (on stable/10), with default flags
* gcc 4.2.1 (on stable/10), with -O3

There was also no more need to use -fno-schedule-insns2 -fno-schedule-insns -fno-caller-saves for gcc.

In addition, I fixed a number of warnings about printf formats used for time_t, but that is mostly cosmetic.
Comment 1 Dimitry Andric freebsd_committer freebsd_triage 2015-04-05 20:21:20 UTC
I forgot to mention that I also compiled with clang trunk r234092, same result.
Comment 2 Dmitry Marakasov freebsd_committer freebsd_triage 2016-09-11 19:18:22 UTC
Maintainer timeout
Comment 3 commit-hook freebsd_committer freebsd_triage 2016-09-11 19:19:19 UTC
A commit references this bug:

Author: amdmi3
Date: Sun Sep 11 19:18:59 UTC 2016
New revision: 421871
URL: https://svnweb.freebsd.org/changeset/ports/421871

Log:
  - Fix broken cpuid implementation to fix segfaults and remove need of optimization removal hacks

  PR:		199186
  Submitted by:	dim
  Approved by:	maintainer timeout (zont, 1 year)

Changes:
  head/sysutils/i7z/Makefile
  head/sysutils/i7z/files/patch-helper_functions.c
  head/sysutils/i7z/files/patch-i7z.c
Comment 4 Dimitry Andric freebsd_committer freebsd_triage 2016-09-11 20:35:53 UTC
Dmitry, can you please also remove the USE_GCC= yes line?  It is no longer needed, the program works fine when compiled with clang.
Comment 5 Anton Saietskii 2016-09-15 14:08:38 UTC
(In reply to Dimitry Andric from comment #4)

I second this. It would be really good because I just don't want to install 200 MiB of crap like GCC just to run i7z.