< prev index next >
src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/DefaultStripDebugPlugin.java
Print this page
@ rev 53690 : 8214796: Create a jlink plugin for stripping debug info symbols from native libraries
| Reviewed-by: alanb, mchung, erikj
o rev 53689 : 8218913: Rename --strip-debug jlink plugin
| Reviewed-by: duke
~
@@ -23,10 +23,15 @@
* questions.
*/
package jdk.tools.jlink.internal.plugins;
+import java.util.Map;
+
+import jdk.tools.jlink.internal.PluginRepository;
+import jdk.tools.jlink.internal.ResourcePoolManager;
+import jdk.tools.jlink.internal.ResourcePoolManager.ResourcePoolImpl;
import jdk.tools.jlink.plugin.Plugin;
import jdk.tools.jlink.plugin.ResourcePool;
import jdk.tools.jlink.plugin.ResourcePoolBuilder;
/**
@@ -36,12 +41,26 @@
* @author Severin Gehwolf
*/
public final class DefaultStripDebugPlugin implements Plugin {
public static final String NAME = "strip-debug";
+ private static final String STRIP_NATIVE_DEBUG_PLUGIN = "strip-native-debug-symbols";
+ private static final String OMIT_DEBUGINFO = "omit-debuginfo";
+
+ private final Plugin javaStripPlugin;
+ private final NativePluginFactory stripNativePluginFactory;
- private final Plugin javaStripPlugin = new StripJavaDebugAttributesPlugin();
+ public DefaultStripDebugPlugin() {
+ this(new StripJavaDebugAttributesPlugin(),
+ new DefaultNativePluginFactory());
+ }
+
+ public DefaultStripDebugPlugin(Plugin javaStripPlugin,
+ NativePluginFactory nativeStripPluginFact) {
+ this.javaStripPlugin = javaStripPlugin;
+ this.stripNativePluginFactory = nativeStripPluginFact;
+ }
@Override
public String getName() {
return NAME;
}
@@ -51,9 +70,36 @@
return PluginsResourceBundle.getDescription(NAME);
}
@Override
public ResourcePool transform(ResourcePool in, ResourcePoolBuilder out) {
+ Plugin stripNativePlugin = stripNativePluginFactory.create();
+ if (stripNativePlugin != null) {
+ Map<String, String> stripNativeConfig = Map.<String, String>of(
+ STRIP_NATIVE_DEBUG_PLUGIN, OMIT_DEBUGINFO);
+ stripNativePlugin.configure(stripNativeConfig);
+ ResourcePoolManager outRes =
+ new ResourcePoolManager(in.byteOrder(),
+ ((ResourcePoolImpl)in).getStringTable());
+ ResourcePool strippedJava = javaStripPlugin.transform(in,
+ outRes.resourcePoolBuilder());
+ return stripNativePlugin.transform(strippedJava, out);
+ } else {
return javaStripPlugin.transform(in, out);
}
+ }
+
+ public interface NativePluginFactory {
+ Plugin create();
+ }
+
+ private static class DefaultNativePluginFactory implements NativePluginFactory {
+
+ @Override
+ public Plugin create() {
+ return PluginRepository.getPlugin(STRIP_NATIVE_DEBUG_PLUGIN,
+ ModuleLayer.boot());
+ }
+
+ }
}
< prev index next >