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
