From c3efc81658bf0423edf6f6e07824f745c08e9ec7 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Sat, 5 Feb 2022 10:41:35 +0100 Subject: [PATCH] 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 --- winsup/cygwin/Makefile.am | 26 ++++++++++++- winsup/cygwin/dllfixdbg | 80 --------------------------------------- 2 files changed, 24 insertions(+), 82 deletions(-) delete mode 100755 winsup/cygwin/dllfixdbg 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 () { - # 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);