RFR: 8214796: Create a jlink plugin for stripping debug info symbols from native libraries

Severin Gehwolf sgehwolf at redhat.com
Thu Feb 28 16:35:53 UTC 2019


Hi Mandy,

Thanks for the review! I'll update the webrev ASAP and will get back to
you once ready.

Thanks,
Severin

On Tue, 2019-02-26 at 13:35 -0800, Mandy Chung wrote:
> Hi Severin,
> 
> This is my initial set of comments. 
> 
> On 2/26/19 3:01 AM, Severin Gehwolf wrote:
> > --list-plugins output for --strip-native-debug-symbols:
> > 
> > Plugin Name: strip-native-debug-symbols
> > Option: --strip-native-debug-symbols=<exclude-debuginfo-files|keep-
> > debuginfo-files>
> > Description: Strip debug symbols from native libraries (if any).
> >  This plugin requires at least one option:
> >    objcopy: The path to the objcopy binary. Defaults to objcopy in
> > PATH.
> >    exclude-debuginfo-files: Omit debug info files. Defaults to
> > true.
>  
> s/Omit/Exclude/
> >    keep-debuginfo-files[=<ext>]: Keep debug info files in
> > <file>.<ext>.
> >                                  Defaults to <file>.debuginfo
> >  Examples: --strip-native-debug-symbols objcopy=/usr/bin/objcopy
>  
> This is a little awkward that this defaults to exclude-debuginfo-
> files.  As described above, I would expect "exclude-debuginfo-files"
> or "keep-debuginfo-files" must be specified.  It means that the
> command would be:
>     --strip-native-debug-symbols exclude-debuginfo-
> files:objcopy=/usr/bin/objcopy
> >            --strip-native-debug-symbols=exclude-debuginfo-files
> >            --strip-native-debug-symbols keep-debuginfo-
> > files:objcopy=objcopy
> > 
>  
> What is the expected behavior when jlink --strip-debug --strip-
> native-debug-symbols keep-debuginfo-files is specified?   Should it
> be accepted?  This should be specified in the CSR. 
> > Latest webrev which implements this:
> > http://cr.openjdk.java.net/~sgehwolf/webrevs/JDK-8214796/08/webrev/
> > 
>  
> DefaultStripDebugPlugin.java
> 
> I still think that conceptually it's more straight-forward to treat
> --strip-debug option to imply as if --strip-java-debug-attributes and
> --strip-native-debug-symbols option, if available and not specified,
> were specified on the command line.  These plugins will be invoked
> accordingly rather than an explicit invocation of these 2 plugins.  
> But we don't have such precedence to follow.   W.r.t. your current
> implementation:
> 
> I think this can be simplfied to keep Optional<Plugin> field and
> replace
> DefaultNativePluginFactory and NativePluginFactory with a simple
> static
> method to return Optional.ofNullable(...).
>  
>   47     private static final String OMIT_DEBUGINFO = "exclude-
> debuginfo-files";
> 
> Nit: rename OMIT_ to EXCLUDE_ to match the name
> 
>   77             Map<String, String> stripNativeConfig = Map.<String,
> String>of(
> 
> drop the diamond operation.
> 
> StripNativeDebugSymbolsPlugin.java
> 
>   56     public static final String NAME = "strip-native-debug-
> symbols";
> 
> Does this need to be public?  Should it be private static field?
> 
>  101             if (resource.type() ==
> ResourcePoolEntry.Type.NATIVE_LIB ||
>  102                 resource.type() ==
> ResourcePoolEntry.Type.NATIVE_CMD) {
>  103                 String moduleName = resource.moduleName();
>  104                 if (resource.path().endsWith(SHARED_LIBS_EXT) ||
>  105                     resource.path().startsWith("/" + moduleName
> + "/bin")) {
> 
> 
> Alternatively:
> 
>  if ((resource.type() == ResourcePoolEntry.Type.NATIVE_LIB 
>         && resource.path().endsWith(SHARED_LIBS_EXT)) ||
>     resource.type() == ResourcePoolEntry.Type.NATIVE_CMD) 
> 
> 
> If --strip-native-commands is specified, this may want to skip
> processing NATIVE_CMD?  Alternatively it should ensure -strip-native-
> commands is invoked before --strip-native-debug-symbols; otherwise,
> debuginfo files might have left behind if keep-debuginfo-files is
> specified while the native commands are stripped later.
> 
> doConfigure compares if arg matches one of the expected argument
> names.  I think it does not report if any invalid argument?   
> 
> Looks like it also accepts --strip-native-debug-symbols=exclude-
> debuginfo-files=abc:keep-debuginfo-files=cde.  This might be a jlink
> plugin parsing bug?
> 
> createDebugSymbolsFile, addGnuDebugLink and stripBinary
> 
> - if the command fails, should the plugin fail instead? you currently
> silently ignore any error.
> 
> ObjCopyCmdBuilder.build(String objCopy) can be changed to 
> ObjCopyCmdBuilder.build(String objCopy, String... opts) to build the
> entire command line in one go.
> 
> Nit: StrippedDebugInfoBinary can be made immutable.  It might be
> cleaner to refactor the createDebugSymbolsFile, addGnuDebugLink and
> stripBinary methods in a builder class to build a
> StrippedDebugInfoBinary for a given ResourcePoolEntry.
> 
> I suggest to place the tests under
> test/jdk/tools/jlink/plugins/StripNativeDebugSymbolsPlugin/ which I
> think jlink tests are organized with plugin class name rather than
> plugin option name.
> 
> Mandy



More information about the jigsaw-dev mailing list