gcc/libiberty
Jakub Jelinek 2f59f06761 libiberty: Fix up debug.temp.o creation if *.o has 64K+ sections [PR104617]
On
 #define A(n) int foo1##n(void) { return 1##n; }
 #define B(n) A(n##0) A(n##1) A(n##2) A(n##3) A(n##4) A(n##5) A(n##6) A(n##7) A(n##8) A(n##9)
 #define C(n) B(n##0) B(n##1) B(n##2) B(n##3) B(n##4) B(n##5) B(n##6) B(n##7) B(n##8) B(n##9)
 #define D(n) C(n##0) C(n##1) C(n##2) C(n##3) C(n##4) C(n##5) C(n##6) C(n##7) C(n##8) C(n##9)
 #define E(n) D(n##0) D(n##1) D(n##2) D(n##3) D(n##4) D(n##5) D(n##6) D(n##7) D(n##8) D(n##9)
 E(0) E(1) E(2) D(30) D(31) C(320) C(321) C(322) C(323) C(324) C(325)
 B(3260) B(3261) B(3262) B(3263) A(32640) A(32641) A(32642)
testcase with
./xgcc -B ./ -c -g -fpic -ffat-lto-objects -flto  -O0 -o foo1.o foo1.c -ffunction-sections
./xgcc -B ./ -shared -g -fpic -flto -O0 -o foo1.so foo1.o
/tmp/ccTW8mBm.debug.temp.o: file not recognized: file format not recognized
(testcase too slow to be included into testsuite).
The problem is clearly reported by readelf:
readelf: foo1.o.debug.temp.o: Warning: Section 2 has an out of range sh_link value of 65321
readelf: foo1.o.debug.temp.o: Warning: Section 5 has an out of range sh_link value of 65321
readelf: foo1.o.debug.temp.o: Warning: Section 10 has an out of range sh_link value of 65323
readelf: foo1.o.debug.temp.o: Warning: [ 2]: Link field (65321) should index a symtab section.
readelf: foo1.o.debug.temp.o: Warning: [ 5]: Link field (65321) should index a symtab section.
readelf: foo1.o.debug.temp.o: Warning: [10]: Link field (65323) should index a string section.
because simple_object_elf_copy_lto_debug_sections doesn't adjust sh_info and
sh_link fields in ElfNN_Shdr if they are in between SHN_{LO,HI}RESERVE
inclusive.  Not adjusting those is incorrect though, SHN_{LO,HI}RESERVE
range is only relevant to the 16-bit fields, mainly st_shndx in ElfNN_Sym
where if one needs >= SHN_LORESERVE section number, SHN_XINDEX should be
used instead and .symtab_shndx section should contain the real section
index, and in ElfNN_Ehdr e_shnum and e_shstrndx fields, where if >=
SHN_LORESERVE value is needed it should put those into
Shdr[0].sh_{size,link}.  But, sh_{link,info} are 32-bit fields which can
contain any section index.

Note, as simple-object-elf.c mentions, binutils from 2.12 to 2.18 (so before
2011) used to mishandle the > 63.75K sections case and assumed there is a
hole in between the sections, but what
simple_object_elf_copy_lto_debug_sections does wouldn't help in that case
for the debug temp object creation, we'd need to detect the case also in
that routine and take it into account in the remapping etc.  I think
it is not worth it given that it is over 10 years, if somebody needs
63.75K or more sections, better use more recent binutils.

2022-02-22  Jakub Jelinek  <jakub@redhat.com>

	PR lto/104617
	* simple-object-elf.c (simple_object_elf_match): Fix up URL
	in comment.
	(simple_object_elf_copy_lto_debug_sections): Remap sh_info and
	sh_link even if they are in the SHN_LORESERVE .. SHN_HIRESERVE
	range (inclusive).
2022-02-22 11:33:45 +01:00
..
config
testsuite libiberty rust-demangle, ignore .suffix 2022-02-17 18:06:24 +01:00
_doprnt.c Update copyright years. 2022-01-03 10:42:10 +01:00
.gitignore
acinclude.m4 Update copyright years. 2022-01-03 10:42:10 +01:00
aclocal.m4 Revert "Sync with binutils: GCC: Pass --plugin to AR and RANLIB" 2021-12-15 20:45:58 -08:00
alloca.c
argv.c Update copyright years. 2022-01-03 10:42:10 +01:00
asprintf.c Update copyright years. 2022-01-03 10:42:10 +01:00
at-file.texi
atexit.c
basename.c
bcmp.c
bcopy.c
bsearch_r.c This patch removes the use of the "register" keyword from the bsearch() and bsearch_r() functions supplied by libiberty. The register keyword is deprecated in C++17. 2020-06-26 10:06:48 +01:00
bsearch.c This patch removes the use of the "register" keyword from the bsearch() and bsearch_r() functions supplied by libiberty. The register keyword is deprecated in C++17. 2020-06-26 10:06:48 +01:00
bzero.c
calloc.c
ChangeLog Daily bump. 2022-02-18 00:16:39 +00:00
ChangeLog.jit
choose-temp.c Update copyright years. 2022-01-03 10:42:10 +01:00
clock.c Update copyright years. 2022-01-03 10:42:10 +01:00
concat.c Update copyright years. 2022-01-03 10:42:10 +01:00
config.h-vms
config.in
configure Revert "Sync with binutils: GCC: Pass --plugin to AR and RANLIB" 2021-12-15 20:45:58 -08:00
configure.ac Revert "Sync with binutils: GCC: Pass --plugin to AR and RANLIB" 2021-12-15 20:45:58 -08:00
configure.com
copying-lib.texi Update copyright years. 2022-01-03 10:42:10 +01:00
COPYING.LIB
copysign.c
cp-demangle.c Update copyright years. 2022-01-03 10:42:10 +01:00
cp-demangle.h Update copyright years. 2022-01-03 10:42:10 +01:00
cp-demint.c Update copyright years. 2022-01-03 10:42:10 +01:00
cplus-dem.c Update copyright years. 2022-01-03 10:42:10 +01:00
crc32.c Update copyright years. 2022-01-03 10:42:10 +01:00
d-demangle.c Update copyright years. 2022-01-03 10:42:10 +01:00
dwarfnames.c Update copyright years. 2022-01-03 10:42:10 +01:00
dyn-string.c Update copyright years. 2022-01-03 10:42:10 +01:00
fdmatch.c Update copyright years. 2022-01-03 10:42:10 +01:00
ffs.c
fibheap.c Update copyright years. 2022-01-03 10:42:10 +01:00
filedescriptor.c Update copyright years. 2022-01-03 10:42:10 +01:00
filename_cmp.c Update copyright years. 2022-01-03 10:42:10 +01:00
floatformat.c Update copyright years. 2022-01-03 10:42:10 +01:00
fnmatch.c Update copyright years. 2022-01-03 10:42:10 +01:00
fnmatch.txh
fopen_unlocked.c Update copyright years. 2022-01-03 10:42:10 +01:00
functions.texi libiberty, include: add bsearch_r 2020-06-23 18:39:38 +02:00
gather-docs Update copyright years. 2022-01-03 10:42:10 +01:00
getcwd.c
getopt1.c Update copyright years. 2022-01-03 10:42:10 +01:00
getopt.c Update copyright years. 2022-01-03 10:42:10 +01:00
getpagesize.c
getpwd.c
getruntime.c Update copyright years. 2022-01-03 10:42:10 +01:00
gettimeofday.c
hashtab.c Update copyright years. 2022-01-03 10:42:10 +01:00
hex.c Update copyright years. 2022-01-03 10:42:10 +01:00
index.c
insque.c
lbasename.c Update copyright years. 2022-01-03 10:42:10 +01:00
libiberty.texi Update copyright years. 2022-01-03 10:42:10 +01:00
lrealpath.c Update copyright years. 2022-01-03 10:42:10 +01:00
maint-tool Update copyright years. 2022-01-03 10:42:10 +01:00
make-relative-prefix.c Update copyright years. 2022-01-03 10:42:10 +01:00
make-temp-file.c Update copyright years. 2022-01-03 10:42:10 +01:00
Makefile.in Update copyright years. 2022-01-03 10:42:10 +01:00
makefile.vms
md5.c Update copyright years. 2022-01-03 10:42:10 +01:00
memchr.c
memcmp.c
memcpy.c
memmem.c Update copyright years. 2022-01-03 10:42:10 +01:00
memmove.c
mempcpy.c Update copyright years. 2022-01-03 10:42:10 +01:00
memset.c
mkstemps.c Update copyright years. 2022-01-03 10:42:10 +01:00
msdos.c
objalloc.c Update copyright years. 2022-01-03 10:42:10 +01:00
obstack.c Update copyright years. 2022-01-03 10:42:10 +01:00
obstacks.texi
partition.c Update copyright years. 2022-01-03 10:42:10 +01:00
pex-common.c Update copyright years. 2022-01-03 10:42:10 +01:00
pex-common.h Update copyright years. 2022-01-03 10:42:10 +01:00
pex-djgpp.c Update copyright years. 2022-01-03 10:42:10 +01:00
pex-msdos.c Update copyright years. 2022-01-03 10:42:10 +01:00
pex-one.c Update copyright years. 2022-01-03 10:42:10 +01:00
pex-unix.c Update copyright years. 2022-01-03 10:42:10 +01:00
pex-win32.c Update copyright years. 2022-01-03 10:42:10 +01:00
pexecute.c Update copyright years. 2022-01-03 10:42:10 +01:00
pexecute.txh
physmem.c Update copyright years. 2022-01-03 10:42:10 +01:00
putenv.c Update copyright years. 2022-01-03 10:42:10 +01:00
random.c
README
regex.c Add -Wuse-after-free [PR80532]. 2022-01-15 16:45:24 -07:00
rename.c
rindex.c
rust-demangle.c libiberty rust-demangle, ignore .suffix 2022-02-17 18:06:24 +01:00
safe-ctype.c Update copyright years. 2022-01-03 10:42:10 +01:00
setenv.c Update copyright years. 2022-01-03 10:42:10 +01:00
setproctitle.c Update copyright years. 2022-01-03 10:42:10 +01:00
sha1.c Update copyright years. 2022-01-03 10:42:10 +01:00
sigsetmask.c
simple-object-coff.c Update copyright years. 2022-01-03 10:42:10 +01:00
simple-object-common.h Update copyright years. 2022-01-03 10:42:10 +01:00
simple-object-elf.c libiberty: Fix up debug.temp.o creation if *.o has 64K+ sections [PR104617] 2022-02-22 11:33:45 +01:00
simple-object-mach-o.c Update copyright years. 2022-01-03 10:42:10 +01:00
simple-object-xcoff.c Update copyright years. 2022-01-03 10:42:10 +01:00
simple-object.c Update copyright years. 2022-01-03 10:42:10 +01:00
simple-object.txh
snprintf.c Update copyright years. 2022-01-03 10:42:10 +01:00
sort.c Update copyright years. 2022-01-03 10:42:10 +01:00
spaces.c Update copyright years. 2022-01-03 10:42:10 +01:00
splay-tree.c Update copyright years. 2022-01-03 10:42:10 +01:00
stack-limit.c Update copyright years. 2022-01-03 10:42:10 +01:00
stpcpy.c Update copyright years. 2022-01-03 10:42:10 +01:00
stpncpy.c Update copyright years. 2022-01-03 10:42:10 +01:00
strcasecmp.c
strchr.c
strdup.c
strerror.c
strncasecmp.c
strncmp.c
strndup.c Update copyright years. 2022-01-03 10:42:10 +01:00
strnlen.c
strrchr.c
strsignal.c
strstr.c Make strstr.c in libiberty ANSI compliant 2020-11-13 11:53:16 -07:00
strtod.c Update copyright years. 2022-01-03 10:42:10 +01:00
strtol.c
strtoll.c
strtoul.c
strtoull.c
strverscmp.c Update copyright years. 2022-01-03 10:42:10 +01:00
timeval-utils.c Update copyright years. 2022-01-03 10:42:10 +01:00
tmpnam.c
unlink-if-ordinary.c Update copyright years. 2022-01-03 10:42:10 +01:00
vasprintf.c Update copyright years. 2022-01-03 10:42:10 +01:00
vfork.c
vfprintf.c Update copyright years. 2022-01-03 10:42:10 +01:00
vprintf-support.c Update copyright years. 2022-01-03 10:42:10 +01:00
vprintf-support.h Update copyright years. 2022-01-03 10:42:10 +01:00
vprintf.c
vsnprintf.c Update copyright years. 2022-01-03 10:42:10 +01:00
vsprintf.c Update copyright years. 2022-01-03 10:42:10 +01:00
waitpid.c
xasprintf.c Update copyright years. 2022-01-03 10:42:10 +01:00
xatexit.c
xexit.c Update copyright years. 2022-01-03 10:42:10 +01:00
xmalloc.c Update copyright years. 2022-01-03 10:42:10 +01:00
xmemdup.c
xstrdup.c
xstrerror.c
xstrndup.c Update copyright years. 2022-01-03 10:42:10 +01:00
xvasprintf.c Update copyright years. 2022-01-03 10:42:10 +01:00

This directory contains the -liberty library of free software.
It is a collection of subroutines used by various GNU programs.
Current members include:

	getopt -- get options from command line
	obstack -- stacks of arbitrarily-sized objects
	strerror -- error message strings corresponding to errno
	strtol -- string-to-long conversion
	strtoul -- string-to-unsigned-long conversion

We expect many of the GNU subroutines that are floating around to
eventually arrive here.

The library must be configured from the top source directory.  Don't
try to run configure in this directory.  Follow the configuration
instructions in ../README.

Please report bugs to "gcc-bugs@gcc.gnu.org" and send fixes to
"gcc-patches@gcc.gnu.org".  Thank you.

ADDING A NEW FILE
=================

There are two sets of files:  Those that are "required" will be
included in the library for all configurations, while those
that are "optional" will be included in the library only if "needed."

To add a new required file, edit Makefile.in to add the source file
name to CFILES and the object file to REQUIRED_OFILES.

To add a new optional file, it must provide a single function, and the
name of the function must be the same as the name of the file.

    * Add the source file name to CFILES in Makefile.in and the object
      file to CONFIGURED_OFILES.

    * Add the function to name to the funcs shell variable in
      configure.ac.

    * Add the function to the AC_CHECK_FUNCS lists just after the
      setting of the funcs shell variable.  These AC_CHECK_FUNCS calls
      are never executed; they are there to make autoheader work
      better.

    * Consider the special cases of building libiberty; as of this
      writing, the special cases are newlib and VxWorks.  If a
      particular special case provides the function, you do not need
      to do anything.  If it does not provide the function, add the
      object file to LIBOBJS, and add the function name to the case
      controlling whether to define HAVE_func.

Finally, in the build directory of libiberty, configure with
"--enable-maintainer-mode", run "make maint-deps" to update
Makefile.in, and run 'make stamp-functions' to regenerate
functions.texi.

The optional file you've added (e.g. getcwd.c) should compile and work
on all hosts where it is needed.  It does not have to work or even
compile on hosts where it is not needed.

ADDING A NEW CONFIGURATION
==========================

On most hosts you should be able to use the scheme for automatically
figuring out which files are needed.  In that case, you probably
don't need a special Makefile stub for that configuration.

If the fully automatic scheme doesn't work, you may be able to get
by with defining EXTRA_OFILES in your Makefile stub.  This is
a list of object file names that should be treated as required
for this configuration - they will be included in libiberty.a,
regardless of whatever might be in the C library.