[GHC] #8713: Avoid libraries if unneeded (librt, libdl, libpthread)

GHC ghc-devs at haskell.org
Tue Aug 19 18:24:00 UTC 2014


#8713: Avoid libraries if unneeded (librt, libdl, libpthread)
-------------------------------------+-------------------------------------
              Reporter:  ip1981      |            Owner:
                  Type:  bug         |           Status:  upstream
              Priority:  normal      |        Milestone:
             Component:  GHCi        |          Version:  7.6.3
            Resolution:              |         Keywords:
      Operating System:  Other       |     Architecture:  x86_64 (amd64)
       Type of failure:  GHCi crash  |       Difficulty:  Moderate (less
             Test Case:              |  than a day)
              Blocking:              |       Blocked By:
Differential Revisions:              |  Related Tickets:
-------------------------------------+-------------------------------------

Comment (by kgardas):

 Hi, sorry for getting to this rather later, but as Solaris user I'm
 curious how the patches will affect common Solaris 11/10. For example on
 Solaris 11.1 which I'm using now, I don't see this issue with GHC 7.6.3:
 {{{
 $ /opt/ghc-7.6.3/bin/ghci -threaded
 GHCi, version 7.6.3: http://www.haskell.org/ghc/  :? for help
 Warning: -debug, -threaded and -ticky are ignored by GHCi
 Loading package ghc-prim ... linking ... done.
 Loading package integer-gmp ... linking ... done.
 Loading package base ... linking ... done.
 Loading object (dynamic) /lib/librt.so ... done
 final link ... done
 Prelude>
 }}}
 it looks like dyson here diverges from common Solaris probably since if I
 for example check libdl, then I see it defined and containing functions:
 {{{
 $ nm /lib/libdl.so.1


 /lib/libdl.so.1:

 [Index]   Value      Size      Type  Bind  Other Shndx   Name

 [4]     |       476|         0|SECT |LOCL |0    |3      |
 [9]     |         0|         0|SECT |LOCL |0    |8      |
 [10]    |         0|         0|SECT |LOCL |0    |9      |
 [11]    |         0|         0|SECT |LOCL |0    |10     |
 [2]     |       116|         0|SECT |LOCL |0    |1      |
 [3]     |       340|         0|SECT |LOCL |0    |2      |
 [7]     |      2088|         0|SECT |LOCL |0    |6      |
 [5]     |       768|         0|SECT |LOCL |0    |4      |
 [6]     |      1312|         0|SECT |LOCL |0    |5      |
 [8]     |      2388|         0|SECT |LOCL |0    |7      |
 [31]    |         0|         0|FUNC |GLOB |0    |ABS    |_dladdr
 [35]    |         0|         0|FUNC |GLOB |0    |ABS    |_dladdr1
 [37]    |         0|         0|FUNC |GLOB |0    |ABS    |_dlclose
 [19]    |         0|         0|FUNC |GLOB |0    |ABS    |_dldump
 [15]    |         0|         0|FUNC |GLOB |0    |ABS    |_dlerror
 [20]    |         0|         0|FUNC |GLOB |0    |ABS    |_dlinfo
 [18]    |         0|         0|FUNC |GLOB |0    |ABS    |_dlmopen
 [38]    |         0|         0|FUNC |GLOB |0    |ABS    |_dlopen
 [44]    |         0|         0|FUNC |GLOB |0    |ABS    |_dlsym
 [17]    |       116|         0|OBJT |GLOB |0    |1      |_DYNAMIC
 [36]    |         0|         0|OBJT |GLOB |0    |ABS    |_edata
 [41]    |      4096|         0|OBJT |GLOB |0    |7      |_end
 [12]    |      4096|         0|OBJT |LOCL |2    |7      |_END_
 [39]    |      2456|         0|OBJT |GLOB |0    |7      |_etext
 [40]    |         0|         0|FUNC |GLOB |0    |ABS    |_ld_libc
 [46]    |         0|         0|OBJT |GLOB |0    |ABS
 |_PROCEDURE_LINKAGE_TABLE_
 [13]    |         0|         0|OBJT |LOCL |2    |1      |_START_
 [43]    |         0|         0|FUNC |GLOB |0    |ABS    |dl_iterate_phdr
 [42]    |         0|         0|FUNC |GLOB |0    |ABS    |dladdr
 [45]    |         0|         0|FUNC |GLOB |0    |ABS    |dladdr1
 [33]    |         0|         0|FUNC |GLOB |0    |ABS    |dlclose
 [28]    |         0|         0|FUNC |GLOB |0    |ABS    |dldump
 [22]    |         0|         0|FUNC |GLOB |0    |ABS    |dlerror
 [32]    |         0|         0|FUNC |GLOB |0    |ABS    |dlinfo
 [25]    |         0|         0|FUNC |GLOB |0    |ABS    |dlmopen
 [14]    |         0|         0|FUNC |GLOB |0    |ABS    |dlopen
 [16]    |         0|         0|FUNC |GLOB |0    |ABS    |dlsym
 [1]     |         0|         0|FILE |LOCL |0    |ABS    |libdl.so.1
 [27]    |         0|         0|OBJT |GLOB |0    |ABS    |SUNW_0.7
 [29]    |         0|         0|OBJT |GLOB |0    |ABS    |SUNW_0.8
 [21]    |         0|         0|OBJT |GLOB |0    |ABS    |SUNW_1.1
 [23]    |         0|         0|OBJT |GLOB |0    |ABS    |SUNW_1.2
 [24]    |         0|         0|OBJT |GLOB |0    |ABS    |SUNW_1.3
 [26]    |         0|         0|OBJT |GLOB |0    |ABS    |SUNW_1.4
 [30]    |         0|         0|OBJT |GLOB |0    |ABS    |SUNW_1.5
 [34]    |         0|         0|OBJT |GLOB |0    |ABS    |SUNWprivate_1.1
 }}}
 I understand the offered logic behind the change from AC_CHECK_LIB to
 AC_SEARCH_LIB, but I'm not sure if this is the best approach. Honestly I'm
 not sure if what Dyson does here is the correct thing or not.
 I'll try to merge your patches here and test on real Solaris 11 and see if
 breaks anything or not. Still if you are Dyson developer I would
 appreciate some in-depth info why you use libs this way, i.e. why you
 attempt to define libdl/librt as linker scripts instead of simply omitting
 them... Thanks Karel

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8713#comment:8>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list