Go to file
Simon Marchi 2b142a9f83 gdb/linux-nat: get core count using /sys/devices/system/cpu/possible
I get this test failure on my CI;

  FAIL: gdb.base/info-os.exp: get process list

The particularity of this setup is that builds are done in containers
who are allocated 4 CPUs on a machine that has 40.  The code in
nat/linux-osdata.c fails to properly fetch the core number for each
task.

linux_xfer_osdata_processes uses `sysconf (_SC_NPROCESSORS_ONLN)`, which
returns 4, so it allocates an array of 4 integers.  However, the core
numbers read from /proc/pid/task/tid/stat, by function
linux_common_core_of_thread, returns a value anywhere between 0 and 39.
The core numbers above 3 are therefore ignored, many processes end up
with no core value, and the regexp in the test doesn't match (it
requires an integer as the core field).

The way this the CPUs are exposed to the container is that the container
sees 40 CPUs "present" and "possible", but only 4 arbitrary CPUs
actually online:

    root@ci-node-jammy-amd64-04-08:~# cat /sys/devices/system/cpu/present
    0-39
    root@ci-node-jammy-amd64-04-08:~# cat /sys/devices/system/cpu/online
    5,11,24,31
    root@ci-node-jammy-amd64-04-08:~# cat /sys/devices/system/cpu/possible
    0-39

The solution proposed in this patch is to find out the number of
possible CPUs using /sys/devices/system/cpu/possible.  In practice, this
will probably always contain `0-N`, where N is the number of CPUs, minus
one.  But the documentation [1] doesn't such guarantee, so I'll assume
that it can contain a more complex range list such as `2,4-31,32-63`,
like the other files in that directory can have.  The solution is to
iterate over these numbers to find the highest possible CPU id, and
use that that value plus one as the size of the array to allocate.

[1] https://www.kernel.org/doc/Documentation/admin-guide/cputopology.rst

Change-Id: I7abce2e43b000c1327fa94cd7b99d46e49d7ccf3
2022-11-08 16:51:35 -05:00
bfd Automatic date update in version.in 2022-11-08 00:00:30 +00:00
binutils configure: require libzstd >= 1.4.0 2022-11-07 14:32:10 +01:00
config configure: require libzstd >= 1.4.0 2022-11-07 14:32:10 +01:00
contrib
cpu
elfcpp
etc
gas Support Intel RAO-INT 2022-11-08 10:24:59 +08:00
gdb gdb/linux-nat: get core count using /sys/devices/system/cpu/possible 2022-11-08 16:51:35 -05:00
gdbserver internal_error: remove need to pass __FILE__/__LINE__ 2022-10-19 15:32:36 +01:00
gdbsupport gdbsupport, gdb: add read_text_file_to_string, use it in linux_common_core_of_thread 2022-11-08 16:50:52 -05:00
gnulib
gold
gprof Updated Hungarian translation for the gprof sub-directory. 2022-10-21 10:55:57 +01:00
gprofng gprofng: no need to build version.texi 2022-10-11 00:14:06 -07:00
include sim: drop unused CORE_ADDR_TYPE 2022-11-08 14:09:06 +07:00
intl
ld configure: require libzstd >= 1.4.0 2022-11-07 14:32:10 +01:00
libbacktrace
libctf configure: require libzstd >= 1.4.0 2022-11-07 14:32:10 +01:00
libdecnumber
libiberty
opcodes PowerPC: Add XSP operand define 2022-11-08 12:15:06 -06:00
readline
sim sim: mips: call Unpredictable instead of setting bogus values [PR sim/29276] 2022-11-08 14:55:50 +07:00
texinfo
zlib
.cvsignore
.editorconfig
.gitattributes
.gitignore
ar-lib
ChangeLog Add ability to create reproducible source tarballs. 2022-10-10 11:28:45 +01:00
compile
config-ml.in
config.guess
config.rpath
config.sub
configure Reapply "Don't build readline/libreadline.a, when --with-system-readline is supplied" 2022-10-20 17:05:04 +02:00
configure.ac Reapply "Don't build readline/libreadline.a, when --with-system-readline is supplied" 2022-10-20 17:05:04 +02:00
COPYING
COPYING3
COPYING3.LIB
COPYING.LIB
COPYING.LIBGLOSS
COPYING.NEWLIB
depcomp
djunpack.bat
install-sh
libtool.m4
lt~obsolete.m4
ltgcc.m4
ltmain.sh
ltoptions.m4
ltsugar.m4
ltversion.m4
MAINTAINERS
Makefile.def
Makefile.in
Makefile.tpl
makefile.vms
missing
mkdep
mkinstalldirs
move-if-change
multilib.am
README
README-maintainer-mode Note that at least dejagnu version 1.5.3 is required in order to be ale to run the testsuites. 2022-10-04 10:54:19 +01:00
setup.com
src-release.sh Add ability to create reproducible source tarballs. 2022-10-10 11:28:45 +01:00
symlink-tree
test-driver
ylwrap

		   README for GNU development tools

This directory contains various GNU compilers, assemblers, linkers, 
debuggers, etc., plus their support routines, definitions, and documentation.

If you are receiving this as part of a GDB release, see the file gdb/README.
If with a binutils release, see binutils/README;  if with a libg++ release,
see libg++/README, etc.  That'll give you info about this
package -- supported targets, how to use it, how to report bugs, etc.

It is now possible to automatically configure and build a variety of
tools with one command.  To build all of the tools contained herein,
run the ``configure'' script here, e.g.:

	./configure 
	make

To install them (by default in /usr/local/bin, /usr/local/lib, etc),
then do:
	make install

(If the configure script can't determine your type of computer, give it
the name as an argument, for instance ``./configure sun4''.  You can
use the script ``config.sub'' to test whether a name is recognized; if
it is, config.sub translates it to a triplet specifying CPU, vendor,
and OS.)

If you have more than one compiler on your system, it is often best to
explicitly set CC in the environment before running configure, and to
also set CC when running make.  For example (assuming sh/bash/ksh):

	CC=gcc ./configure
	make

A similar example using csh:

	setenv CC gcc
	./configure
	make

Much of the code and documentation enclosed is copyright by
the Free Software Foundation, Inc.  See the file COPYING or
COPYING.LIB in the various directories, for a description of the
GNU General Public License terms under which you can copy the files.

REPORTING BUGS: Again, see gdb/README, binutils/README, etc., for info
on where and how to report problems.