Repository : ssh://darcs.haskell.org//srv/darcs/ghc

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/5ddc841a547d2d37428280b04c071a1d4b83e10d

>---------------------------------------------------------------

commit 5ddc841a547d2d37428280b04c071a1d4b83e10d
Author: Ian Lynagh <[email protected]>
Date:   Fri Jun 29 01:33:17 2012 +0100

    On Windows, detect if DLLs have too many symbols; trac #5987
    
    The test isn't very pretty; it involves trawling through the
    objdump -p output. I couldn't find an easier way, unfortuantely.

>---------------------------------------------------------------

 configure.ac               |    7 +++++++
 mk/config.mk.in            |    1 +
 rules/build-package-way.mk |    3 +++
 3 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/configure.ac b/configure.ac
index e1b4db0..f7862ec 100644
--- a/configure.ac
+++ b/configure.ac
@@ -336,6 +336,7 @@ then
     CC="${mingwbin}gcc.exe"
     LD="${mingwbin}ld.exe"
     NM="${mingwbin}nm.exe"
+    OBJDUMP="${mingwbin}objdump.exe"
     fp_prog_ar="${mingwbin}ar.exe"
 
     if ! test -d inplace/perl ||
@@ -446,6 +447,12 @@ FP_ARG_WITH_PATH_GNU_PROG([NM], [nm], [nm])
 NmCmd="$NM"
 AC_SUBST([NmCmd])
 
+dnl ** Which objdump to use?
+dnl --------------------------------------------------------------
+FP_ARG_WITH_PATH_GNU_PROG([OBJDUMP], [objdump], [objdump])
+ObjdumpCmd="$OBJDUMP"
+AC_SUBST([ObjdumpCmd])
+
 dnl ** Which LLVM llc to use?
 dnl --------------------------------------------------------------
 FP_ARG_WITH_PATH_GNU_PROG_OPTIONAL([LLC], [llc])
diff --git a/mk/config.mk.in b/mk/config.mk.in
index 36b277b..81298e4 100644
--- a/mk/config.mk.in
+++ b/mk/config.mk.in
@@ -714,6 +714,7 @@ DTRACE                      = @DtraceCmd@
 
 LD = @LdCmd@
 NM = @NmCmd@
+OBJDUMP = @ObjdumpCmd@
 
 LLC = @LlcCmd@
 OPT = @OptCmd@
diff --git a/rules/build-package-way.mk b/rules/build-package-way.mk
index 9919d3b..176dc9b 100644
--- a/rules/build-package-way.mk
+++ b/rules/build-package-way.mk
@@ -69,6 +69,9 @@ $$($1_$2_$3_LIB) : $$($1_$2_$3_ALL_OBJS) $$(ALL_RTS_LIBS) 
$$($1_$2_$3_DEPS_LIBS)
         $$(addprefix -l,$$($1_$2_EXTRA_LIBRARIES)) \
          -no-auto-link-packages \
          -o $$@
+# Now check that the DLL doesn't have too many symbols. See trac #5987.
+       case `$$(OBJDUMP) -p $$@ | sed -n "1,/^.Ordinal\/Name Pointer/ D; p; 
/^$$$$/ q" | grep "\[ *0\]" | wc -l` in 1) echo DLL $$@ OK;; 0) echo No symbols 
in DLL $$@; exit 1;; [0-9]*) echo Too many symbols in DLL $$@; exit 1;; *) echo 
bad DLL $$@; exit 1;; esac
+
 else
 $$($1_$2_$3_LIB) : $$($1_$2_$3_ALL_OBJS) $$(ALL_RTS_LIBS) 
$$($1_$2_$3_DEPS_LIBS)
        $$(call cmd,$1_$2_HC) $$($1_$2_$3_ALL_HC_OPTS) $$($1_$2_$3_ALL_OBJS) \



_______________________________________________
Cvs-ghc mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-ghc

Reply via email to