[8u] Request for enhancement backport approval for 8036003: Add --with-native-debug-symbols=[none|internal|external|zipped]
Severin Gehwolf
sgehwolf at redhat.com
Thu Jul 19 08:09:37 UTC 2018
Please approve this enhancement backport request for JDK 8u.
Bug: https://bugs.openjdk.java.net/browse/JDK-8036003
Description of the change:
--------------------------
It adds a new configure option:
--with-native-debug-symbols=[none|internal|external|zipped]
Valid values for --with-native-debug-symbols are:
none = No native debug symbols will get produced at all for
binaries and libraries.
internal = All native debug symbols get produced, but do not get
stripped at all from binary files during the build.
external = All native debug symbols get produced. During the
build (most of) the native debug symbols get stripped from
the original binaries and get copied to an external file
with <name>.debuginfo placed next to stripped binaries.
cf. $ objcopy --only-keep-debug <name> <name>.debuginfo && \
strip -g <name>
zipped = Like 'external', but with debuginfo files zipped. Files
with debug information are called <name>.diz and get
placed next to stripped binaries.
Why should this enhancement be backported?
------------------------------------------
While mechanisms equivalent to --with-native-debug-
symbols=[none|external|zipped] exist today in JDK 8u, the use case of
--with-native-debug-symbols=internal is currently missing. There is no
way to achieve the same result of 'internal' without also patching the
JDK 8u tree. This use case is very important for distributions which
produce their own builds of OpenJDK. In many cases distributions have
built-in mechanisms for getting debug info stripped during RPM/DPKG
builds. For this to work the OpenJDK build needs to keep debug info in
the files and not strip them at all.
What's more, the current OpenJDK build produces .gnu_debuglink sections
in all libraries and binaries if debug symbols are being turned on.
This causes bugs, such as JDK-8207234[1].
Risks:
------
It is believed that the risk of backporting this enhancement is
minimal, since it preserves backwards-compatibilty with existing
switches, --disable-debug-symbols and --disable-zip-debug-info. Users
who aren't aware of the new --with-native-debug-symbols switch won't be
using it, but may be using --disable-debug-symbols and --disable-zip-
debug-info. For them the build output isn't changed. Users who are
aware of the new switch, will likely use --with-native-debug-symbols
only. If they'd also use old --disable-debug-symbols and --disable-zip-
debug-info, --with-native-debug-symbols will override the former
switches. This behaviour is clearly shown in configure output. If none
of those switches are present the default of --with-native-debug-
symbols=zipped will be produced, as before.
Examples:
configure output post-patch with flags --disable-zip-debug-info, --
disable-debug-symbols:
[...]
checking if we should generate debug symbols... false
checking if we should zip debug-info files... no
checking what type of native debug symbols to use (this will override previous settings)... not specified
configure: --with-native-debug-symbols not specified. Using values from --disable-debug-symbols and --disable-zip-debug-info
[...]
configure output post-patch with flags --with-native-debug-
symbols=internal:
[...]
checking if we should generate debug symbols... true
checking if we should zip debug-info files... yes
checking what type of native debug symbols to use (this will override previous settings)... internal
[...]
configure output post-patch with flags --with-native-debug-
symbols=foobar:
[...]
checking if we should generate debug symbols... true
checking if we should zip debug-info files... yes
checking what type of native debug symbols to use (this will override previous settings)... foobar
configure: error: Allowed native debug symbols are: none, internal, external, zipped
configure exiting with result code 1
Testing:
--------
Tested all build configs that I could think of (on Linux x86_64):
* Old config is being preserved (default build of debug symbols +
zipped; no --disable-zip-debug-info, --disable-debug-symbols, --
with-native-debug-symbols flags)
* Plain external debug symbols (flag --disable-zip-debug-info)
* No debug-symbols build (flags --disable-zip-debug-info, --disable-
debug-symbols)
* Only using --with-native-debug-
symbols={none,zipped,external,internal} (no flags --disable-zip-
debug-info, --disable-debug-symbols). Where "internal" passes tests
in JDK-8207234
Also note that such a configure option exists in JDK 9+ already and
we've been using the --with-native-debug-symbols=internal switch for
our distribution's OpenJDK builds ever since.
Thanks,
Severin
[1] https://bugs.openjdk.java.net/browse/JDK-8207234
More information about the jdk8u-dev
mailing list