Skip to content

Commit

Permalink
app-benchmarks/i7z: Apply Debian patches fixing multiple bugs, drop d…
Browse files Browse the repository at this point in the history
…eprecated qt4 support (https://wiki.gentoo.org/wiki/Project:Qt/Policies#Handling_different_versions_of_Qt), allow -Ox for now as it looks to work ok for me with this version.

Package-Manager: Portage-2.3.6, Repoman-2.3.2
  • Loading branch information
pacho2 committed May 31, 2017
1 parent 3e7fed3 commit e417717
Show file tree
Hide file tree
Showing 6 changed files with 258 additions and 0 deletions.
76 changes: 76 additions & 0 deletions app-benchmarks/i7z/files/fix-insecure-tempfile.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
Author: Andreas Beckmann <[email protected]>
Description: fix insecure temfile usage: /tmp/cpufreq.txt
switch from system() + fopen() to popen()
disable other insecure tempfiles that may be generated but not used
Bug-Debian: http://bugs.debian.org/718418

diff --git a/GUI/i7z_GUI.cpp b/GUI/i7z_GUI.cpp
index 2705e84..60eaeb2 100644
--- a/GUI/i7z_GUI.cpp
+++ b/GUI/i7z_GUI.cpp
@@ -171,18 +171,17 @@ MyThread::run ()
//CPUINFO is wrong for i7 but correct for the number of physical and logical cores present
//If Hyperthreading is enabled then, multiple logical processors will share a common CORE ID
//http://www.redhat.com/magazine/022aug06/departments/tips_tricks/
- system ("cat /proc/cpuinfo |grep MHz|sed 's/cpu\\sMHz\\s*:\\s//'|tail -n 1 > /tmp/cpufreq.txt");
- system ("grep \"core id\" /proc/cpuinfo |sort -|uniq -|wc -l > /tmp/numPhysical.txt");
- system ("grep \"processor\" /proc/cpuinfo |sort -|uniq -|wc -l > /tmp/numLogical.txt");
+ //system ("grep \"core id\" /proc/cpuinfo |sort -|uniq -|wc -l > /tmp/numPhysical.txt");
+ //system ("grep \"processor\" /proc/cpuinfo |sort -|uniq -|wc -l > /tmp/numLogical.txt");


- //Open the parsed cpufreq file and obtain the cpufreq from /proc/cpuinfo
+ // obtain the cpufreq from /proc/cpuinfo
FILE *tmp_file;
- tmp_file = fopen ("/tmp/cpufreq.txt", "r");
+ tmp_file = popen ("sed -n '/MHz/ { s/cpu\\sMHz\\s*:\\s//p; q }' /proc/cpuinfo", "r");
char tmp_str[30];
fgets (tmp_str, 30, tmp_file);
+ pclose (tmp_file);
double cpu_freq_cpuinfo = atof (tmp_str);
- fclose (tmp_file);

unsigned int numPhysicalCores, numLogicalCores;
numPhysicalCores = socket_0.num_physical_cores + socket_1.num_physical_cores;
diff --git a/helper_functions.c b/helper_functions.c
index 2f8da87..906c298 100644
--- a/helper_functions.c
+++ b/helper_functions.c
@@ -531,16 +531,13 @@ double cpufreq_info()
//CPUINFO is wrong for i7 but correct for the number of physical and logical cores present
//If Hyperthreading is enabled then, multiple logical processors will share a common CORE ID
//http://www.redhat.com/magazine/022aug06/departments/tips_tricks/
- system
- ("cat /proc/cpuinfo |grep MHz|sed 's/cpu\\sMHz\\s*:\\s//'|tail -n 1 > /tmp/cpufreq.txt");

-
- //Open the parsed cpufreq file and obtain the cpufreq from /proc/cpuinfo
+ // obtain the cpufreq from /proc/cpuinfo
FILE *tmp_file;
- tmp_file = fopen ("/tmp/cpufreq.txt", "r");
+ tmp_file = popen ("sed -n '/MHz/ { s/cpu\\sMHz\\s*:\\s//p; q }' /proc/cpuinfo", "r");
char tmp_str[30];
fgets (tmp_str, 30, tmp_file);
- fclose (tmp_file);
+ pclose (tmp_file);
return atof(tmp_str);
}

diff --git a/i7z_Single_Socket.c b/i7z_Single_Socket.c
index 015f154..d0afee0 100644
--- a/i7z_Single_Socket.c
+++ b/i7z_Single_Socket.c
@@ -823,10 +823,13 @@ void print_i7z_single ()
//CPUINFO is wrong for i7 but correct for the number of physical and logical cores present
//If Hyperthreading is enabled then, multiple logical processors will share a common CORE ID
//http://www.redhat.com/magazine/022aug06/departments/tips_tricks/
+ERROR INSECURE TMPFILE
system
("cat /proc/cpuinfo |grep MHz|sed 's/cpu\\sMHz\\s*:\\s//'|tail -n 1 > /tmp/cpufreq.txt");
+ERROR INSECURE TMPFILE
system
("grep \"core id\" /proc/cpuinfo |sort -|uniq -|wc -l > /tmp/numPhysical.txt");
+ERROR INSECURE TMPFILE
system
("grep \"processor\" /proc/cpuinfo |sort -|uniq -|wc -l > /tmp/numLogical.txt");
//At this step, /tmp/numPhysical contains number of physical cores in machine and
21 changes: 21 additions & 0 deletions app-benchmarks/i7z/files/fix_cpuid_asm.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
Author: Andreas Beckmann <[email protected]>
Description: fix cpuid inline assembly
the old code zeroed the upper half of %rbx

--- a/helper_functions.c
+++ b/helper_functions.c
@@ -101,13 +101,7 @@ static inline void cpuid (unsigned int i
unsigned int *ecx, unsigned int *edx)
{
unsigned int _eax = info, _ebx, _ecx, _edx;
- asm volatile ("mov %%ebx, %%edi;" // save ebx (for PIC)
- "cpuid;"
- "mov %%ebx, %%esi;" // pass to caller
- "mov %%edi, %%ebx;" // restore ebx
- :"+a" (_eax), "=S" (_ebx), "=c" (_ecx), "=d" (_edx)
- : /* inputs: eax is handled above */
- :"edi" /* clobbers: we hit edi directly */);
+ asm volatile ("cpuid\n\t" : "+a" (_eax), "=b" (_ebx), "=c" (_ecx), "=d" (_edx) : : );
if (eax) *eax = _eax;
if (ebx) *ebx = _ebx;
if (ecx) *ecx = _ecx;
26 changes: 26 additions & 0 deletions app-benchmarks/i7z/files/hyphen-used-as-minus-sign.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
Author: Andreas Beckmann <[email protected]>
Description: fix hyphen abuse

--- a/doc/i7z.man
+++ b/doc/i7z.man
@@ -7,15 +7,15 @@
i7z runs the i7z, ncurses based, program without any options. i7z will print out the C-states and temperature for i3, i5 and i7 based Core processors from Intel (including Nehalems, Sandy Bridge and Ivy Bridge).
.SH OPTIONS
.TP
-\fB-h, --help \fPshow the list of options available with the i7z tool.
+\fB\-h, \-\-help \fPshow the list of options available with the i7z tool.
.TP
-\fB-w [a|l], --write [a,l] \fPLogging of the frequencies can be turned on with this options. Option "-w a" or "--write a" will append to the log file. Option "-w l" or "--write l" will replace the log file.
+\fB\-w [a|l], \-\-write [a,l] \fPLogging of the frequencies can be turned on with this options. Option "\-w a" or "\-\-write a" will append to the log file. Option "\-w l" or "\-\-write l" will replace the log file.
.TP
-\fB-l, --logfile [FILENAME] \fPChange the log file name to the specified FILENAME. Default logging file is cpu_freq_log.txt (single socket) or cpu_freq_log_dual%d.txt (dual socket, %d is either 0, 1).
+\fB\-l, \-\-logfile [FILENAME] \fPChange the log file name to the specified FILENAME. Default logging file is cpu_freq_log.txt (single socket) or cpu_freq_log_dual%d.txt (dual socket, %d is either 0, 1).
.TP
-\fB--socket0 [SOCKETNUM], --socket1 [SOCKETNUM] \fPThe tool can print information for about 2 sockets at once at the most. The top view will be, by default, of the first socket (controlled by --socket0) and the bottom view will be of the second socket (controlled by --socket1). Supply the appropriate value of 0 or 1 or more for SOCKETNUM (if there are more sockets on the machine) to show in the top and bottom view.
+\fB\-\-socket0 [SOCKETNUM], \-\-socket1 [SOCKETNUM] \fPThe tool can print information for about 2 sockets at once at the most. The top view will be, by default, of the first socket (controlled by \-\-socket0) and the bottom view will be of the second socket (controlled by \-\-socket1). Supply the appropriate value of 0 or 1 or more for SOCKETNUM (if there are more sockets on the machine) to show in the top and bottom view.
.TP
-\fB--nogui \fPDisable the GUI. Useful when the only need is logging.
+\fB\-\-nogui \fPDisable the GUI. Useful when the only need is logging.
.SH Example
To print for two sockets and also change the log file (log to /tmp/logfilei7z)

26 changes: 26 additions & 0 deletions app-benchmarks/i7z/files/install-i7z_rw_registers.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
Author: Andreas Beckmann <[email protected]>
Description: install the i7z_rw_registers script and fix the hashbang

--- a/i7z_rw_registers.rb
+++ b/i7z_rw_registers.rb
@@ -1,3 +1,5 @@
+#!/usr/bin/ruby
+
#* ----------------------------------------------------------------------- *
# *
# * Under GPL v3
@@ -7,7 +9,6 @@
# *
# * ----------------------------------------------------------------------- */

-#!/usr/bin/ruby

def print_command_list()
print "Do you need help? \n"
--- a/Makefile
+++ b/Makefile
@@ -61,3 +61,4 @@
install -D -m 755 $(BIN) $(DESTDIR)$(sbindir)$(BIN)
install -d $(DESTDIR)$(docdir)
install -m 0644 README.txt put_cores_offline.sh put_cores_online.sh MAKEDEV-cpuid-msr $(DESTDIR)$(docdir)
+ install -m 0755 i7z_rw_registers.rb $(DESTDIR)$(sbindir)/i7z_rw_registers
40 changes: 40 additions & 0 deletions app-benchmarks/i7z/files/use_stdbool.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
Author: Andreas Beckmann <[email protected]>
Description: use a consistent bool type
Bug-Debian: #749724

--- a/i7z.h
+++ b/i7z.h
@@ -11,18 +11,13 @@
* ----------------------------------------------------------------------- */

#include <sys/time.h>
+#include <stdbool.h>

#define i7z_VERSION_INFO "svn-r93-(27-MAY-2013)"

//structure to store the information about the processor
#define proccpuinfo "/proc/cpuinfo"

-#ifndef bool
-#define bool int
-#endif
-#define false 0
-#define true 1
-
#define MAX_PROCESSORS 128
#define MAX_HI_PROCESSORS MAX_PROCESSORS
#define MAX_SK_PROCESSORS (MAX_PROCESSORS/4)
--- a/cpuinfo.c
+++ b/cpuinfo.c
@@ -2,10 +2,8 @@
#include "string.h"
#include "stdlib.h"
#include "assert.h"
+#include <stdbool.h>
#define MAX_PROCESSORS 32
-#define bool int
-#define false 0
-#define true 1

#define MAX_HI_PROCESSORS MAX_PROCESSORS

69 changes: 69 additions & 0 deletions app-benchmarks/i7z/i7z-93_p20131012-r1.ebuild
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# Copyright 1999-2017 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

EAPI=6

inherit flag-o-matic qmake-utils toolchain-funcs

COMMIT="5023138d7c35c4667c938b853e5ea89737334e92"
DESCRIPTION="A better i7 (and now i3, i5) reporting tool for Linux"
HOMEPAGE="https://github.com/ajaiantilal/i7z"
SRC_URI="https://github.com/ajaiantilal/${PN}/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"
SLOT="0"
LICENSE="GPL-2"
KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux"
IUSE="qt5"

RDEPEND="
sys-libs/ncurses:0=
qt5? (
dev-qt/qtcore:5=
dev-qt/qtgui:5=
dev-qt/qtwidgets:5=
)
"
DEPEND="${RDEPEND}"

PATCHES=(
"${FILESDIR}"/i7z-0.27.2-ncurses.patch
"${FILESDIR}"/qt5.patch
"${FILESDIR}"/gcc5.patch

# From Debian
"${FILESDIR}"/fix-insecure-tempfile.patch
"${FILESDIR}"/fix_cpuid_asm.patch
"${FILESDIR}"/hyphen-used-as-minus-sign.patch
"${FILESDIR}"/install-i7z_rw_registers.patch
"${FILESDIR}"/use_stdbool.patch
)

S="${WORKDIR}/${PN}-${COMMIT}"

src_configure() {
# The GUI segfaults with -O1. None of the documented flags make a
# difference. There may not be a specific flag for the culprit.
# Looks to work fine for me with -O2 (pacho - 20170530)
# filter-flags "-O*"

tc-export CC
cd GUI || die

use qt5 && eqmake5 ${PN}_GUI.pro
}

src_compile() {
default

if use qt5; then
emake -C GUI clean
emake -C GUI
fi
}

src_install() {
emake DESTDIR="${ED}" docdir=/usr/share/doc/${PF} install

if use qt5; then
dosbin GUI/i7z_GUI
fi
}

0 comments on commit e417717

Please sign in to comment.