1
0
Fork 0
mirror of git://git.code.sf.net/p/cdesktopenv/code synced 2025-03-09 15:50:02 +00:00
cde/src/lib/libast/string
Martijn Dekker 7afb30e15c libast: Work around gcc optimiser bug for strdup() (rhbz#1221766)
Red Hat erratum: https://bugzilla.redhat.com/1221766
"Previously, the gcc utility optimized out a non-NULL test in the
ksh implementation of the strdup() function. This caused an
unexpected termination when ksh was executed in a clean chroot
environment. With this update, ksh compilation parameters have been
updated to prevent optimizing out a non-NULL test, and ksh no
longer crashes in clean chroot environments."

The optimizer bug occurs in that function's single-line body:

  return (s && (t = oldof(0, char, n = strlen(s) + 1, 0))) ? (char*)memcpy(t, s, n) : (char*)0;

So it must be the test for non-NULL 's' that fails. And 's' is
declared in the function definition, as follows:

  extern char*
  strdup(register const char* s)

So that makes me wonder if we can work around the bug by simply
removing the 'const' (and the 'register' while we're at it).
However, I have no easy way to verify that at the moment. The Red
Hat patch instead tells gcc to disable optimization for this
function using a #pragma directive.

I have no idea if that gcc optimiser bug has been fixed in the
meantime, but experience from c258a04f has shown that we cannot
trust that it has been fixed (that other optimizer bug is at least
a decade old and still not fixed). So, in it goes, until someone
shows evidence that we no longer need it.

Original patch:
642af4d6/f/ksh-20120801-badgcc.patch

src/lib/libast/string/strdup.c:
- Tell GCC to disable all optimisations for strdup().
2020-09-29 19:45:46 +02:00
..
base64.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
ccmap.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
ccmapid.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
ccnative.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
chresc.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
chrtoi.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
fmtbase.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
fmtbuf.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
fmtclock.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
fmtdev.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
fmtelapsed.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
fmterror.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
fmtesc.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
fmtfmt.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
fmtfs.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
fmtgid.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
fmtident.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
fmtint.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
fmtip4.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
fmtip6.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
fmtls.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
fmtmatch.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
fmtmode.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
fmtnum.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
fmtperm.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
fmtre.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
fmtscale.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
fmtsignal.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
fmttime.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
fmttmx.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
fmttv.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
fmtuid.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
fmtversion.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
memdup.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
modedata.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
modei.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
modelib.h Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
modex.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
stracmp.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strcopy.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strdup.c libast: Work around gcc optimiser bug for strdup() (rhbz#1221766) 2020-09-29 19:45:46 +02:00
strelapsed.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strerror.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
stresc.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
streval.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strexpr.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strgid.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strlcat.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strlcpy.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strlook.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strmatch.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strmode.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strnacmp.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strncopy.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strnpcmp.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strntod.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strntol.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strntold.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strntoll.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strnton.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strntonll.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strntoul.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strntoull.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strnvcmp.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
stropt.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strpcmp.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strperm.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strpsearch.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strsearch.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strsort.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strtape.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strtoi.h Fix 39 spelling errors and a formatting issue 2020-06-12 01:45:18 +02:00
strtoip4.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strtoip6.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strton.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strtonll.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
struid.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
struniq.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
strvcmp.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
swapget.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
swapmem.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
swapop.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
swapput.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
tok.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
tokline.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
tokscan.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00
wc2utf8.c Version: 2012-08-01-master 2016-01-11 15:54:23 -05:00