public inbox for cygwin-cvs@sourceware.org
help / color / mirror / Atom feed
* [newlib-cygwin] Cygwin: drop dllfixdbg script
@ 2022-02-05  9:48 Corinna Vinschen
  0 siblings, 0 replies; only message in thread
From: Corinna Vinschen @ 2022-02-05  9:48 UTC (permalink / raw)
  To: cygwin-cvs

https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=c3efc81658bf0423edf6f6e07824f745c08e9ec7

commit c3efc81658bf0423edf6f6e07824f745c08e9ec7
Author: Corinna Vinschen <corinna@vinschen.de>
Date:   Sat Feb 5 10:41:35 2022 +0100

    Cygwin: drop dllfixdbg script
    
    On second thought, we don't actually need this script.
    Express the entire action as sufficiently simple Makefile rule.
    
    Signed-off-by: Corinna Vinschen <corinna@vinschen.de>

Diff:
---
 winsup/cygwin/Makefile.am | 26 +++++++++++++--
 winsup/cygwin/dllfixdbg   | 80 -----------------------------------------------
 2 files changed, 24 insertions(+), 82 deletions(-)

diff --git a/winsup/cygwin/Makefile.am b/winsup/cygwin/Makefile.am
index ff177454a..ad38fb220 100644
--- a/winsup/cygwin/Makefile.am
+++ b/winsup/cygwin/Makefile.am
@@ -639,8 +639,30 @@ $(PRE_DLL_NAME): $(LDSCRIPT) libdll.a $(VERSION_OFILES) $(LIBSERVER)\
 	$(newlib_build)/libc/libc.a \
 	-lgcc -lkernel32 -lntdll -Wl,-Map,cygwin.map
 
-$(DBG_DLL_NAME) $(NEW_DLL_NAME): dllfixdbg $(PRE_DLL_NAME)
-	$(AM_V_GEN)$(srcdir)/dllfixdbg $(OBJDUMP) $(OBJCOPY) $(PRE_DLL_NAME) $(DBG_DLL_NAME) $(NEW_DLL_NAME) $(V)
+# create cygwin1.dbg file
+$(DBG_DLL_NAME): $(PRE_DLL_NAME)
+	$(AM_V_GEN)$(OBJCOPY) -R .gnu_debuglink_overlay \
+			      --add-gnu-debuglink=/dev/null \
+			      --only-keep-debug \
+			      $(PRE_DLL_NAME) \
+			      $(DBG_DLL_NAME)
+
+# create stripped, temporary DLL, append .gnu_debuglink section, move
+# .gnu_debuglink section in place of .gnu_debuglink_overlay placeholder
+# section and store result in new-cygwin1.dll
+$(NEW_DLL_NAME): $(PRE_DLL_NAME) $(DBG_DLL_NAME)
+	$(AM_V_GEN)TMP_DLL_NAME=$$( mktemp --suffix=.dll ) && \
+	$(OBJCOPY) -g \
+		   --keep-section=.gnu_debuglink_overlay \
+		   --add-gnu-debuglink=$(DBG_DLL_NAME) \
+		   $(PRE_DLL_NAME) $${TMP_DLL_NAME} && \
+	vma=$$( objdump --headers $${TMP_DLL_NAME} | \
+	       awk '/.gnu_debuglink_overlay/{print $$4;}' ) && \
+	$(OBJCOPY) -R .gnu_debuglink_overlay \
+		   --change-section-address .gnu_debuglink=0x$${vma} \
+		   --set-section-flag .gnu_debuglink=contents,readonly,debug,noload \
+		   $${TMP_DLL_NAME} $(NEW_DLL_NAME) && \
+	rm $${TMP_DLL_NAME}
 
 # cygwin import library
 toolopts=--cpu=@target_cpu@ --ar=@AR@ --as=@AS@ --nm=@NM@ --objcopy=@OBJCOPY@
diff --git a/winsup/cygwin/dllfixdbg b/winsup/cygwin/dllfixdbg
deleted file mode 100755
index 669ea92dd..000000000
--- a/winsup/cygwin/dllfixdbg
+++ /dev/null
@@ -1,80 +0,0 @@
-#!/usr/bin/perl
-#
-# This file is part of Cygwin.
-#
-# This software is a copyrighted work licensed under the terms of the
-# Cygwin license.  Please consult the file "CYGWIN_LICENSE" for
-# details.
-#
-use integer;
-use strict;
-
-sub xit {
-    my ( $execit, $cmdline, $verbose ) = @_;
-    print "+ ", join (' ', @$cmdline), "\n" if ($verbose);
-    if ($execit) {
-	exec @{$cmdline} or die "$0: couldn't exec @{$cmdline}[0] - $!\n";
-    } else {
-	system @{$cmdline} and die "$0: couldn't exec @{$cmdline}[0] - $!\n";
-    }
-}
-
-my $objdump = shift;	# path to objdump
-my $objcopy = shift;	# path to objcopy
-my $pre_dll = shift;	# name of input DLL, usually cygwin0.dll
-my $dbg_dll = shift;	# name of debug section file, usually cygwin1.dbg
-my $new_dll = shift;	# name of stripped DLL, usually new-cygwin1.dll
-my $verbose = shift;	# verbose flag, taken from Makefile's $(V)
-
-# Create cygwin1.dbg file
-my @create_dbgfile = ( $objcopy,
-		       '-R',
-		       '.gnu_debuglink_overlay',
-		       '--add-gnu-debuglink=/dev/null',
-		       '--only-keep-debug',
-		       $pre_dll,
-		       $dbg_dll );
-&xit (0, \@create_dbgfile, $verbose);
-# Create stripped new-cygwin1.dll
-# The .gnu_debuglink section gets appended
-my @create_stripped_dll = ( $objcopy,
-			    '-g',
-			    '--keep-section=.gnu_debuglink_overlay',
-			    '--add-gnu-debuglink=' . $dbg_dll,
-			    $pre_dll,
-			    $new_dll );
-&xit (0, \@create_stripped_dll, $verbose);
-# Fixup .gnu_debuglink section
-my @fixup_debuglink = ( $objcopy );
-open (OBJDUMP, '-|', "$objdump --headers $new_dll");
-my $overlay_vma;
-while (<OBJDUMP>) {
-    # Fetch line and split
-    my ($idx, $name, $size, $vma, $lma, $fileoff, $algn)
-      = /^\s*(\d+)\s+(\.\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s*$/;
-    # skip section flag lines
-    next if !defined ($idx);
-    # If we see a .gnu_debuglink_overlay section, use its section vma
-    # as vma of the .gnu_debuglink section.
-    if ($name eq '.gnu_debuglink_overlay') {
-	$overlay_vma = $vma;
-	# remove .gnu_debuglink_overlay section
-	push (@fixup_debuglink,
-	      '-R',
-	      '.gnu_debuglink_overlay');
-	# move .gnu_debuglink to .gnu_debuglink_overlay section slot
-	push (@fixup_debuglink,
-	      '--change-section-address',
-	      '.gnu_debuglink=0x' . $overlay_vma);
-	# fix up section flags
-	push (@fixup_debuglink,
-	      '--set-section-flag',
-	      '.gnu_debuglink=contents,readonly,debug,noload');
-    }
-}
-close OBJDUMP;
-# If we didn't find a .gnu_debuglink_overlay section, bail out
-defined ($overlay_vma) or die "$0: no .gnu_debuglink_overlay section!\n";
-
-push (@fixup_debuglink, $new_dll);
-&xit (1, \@fixup_debuglink, $verbose);


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-02-05  9:48 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-02-05  9:48 [newlib-cygwin] Cygwin: drop dllfixdbg script Corinna Vinschen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).