[mythtv] Seg Fault on HEAD build under win32

buzz davidbuzz at gmail.com
Fri May 16 07:31:49 UTC 2008


Arnonm,
There was a mention in one of the references of a  shell script that
could be run across all the DLL's  to determine of they contain .rdata
areas (ie read-only data areas populated by use of the 'const'
keyword).   perhaps doing that will help identify which dll's are
likely candidates for re-compiling using this script?  Cause there are
a LOT of dll's in there that could be the cause, including all the QT4
ones.!   (my suspicion!)

Buzz.

On Fri, May 16, 2008 at 4:31 PM, Arnon Meshoulam
<arnon.meshoulam at googlemail.com> wrote:
> Same conclusion. I played last night with just linking mythfrontend with
> this script, with no effect. I'll try today to do the whole chain of DLLs
> and see.
>
> arnon
>
>
> On 5/16/08, buzz <davidbuzz at gmail.com> wrote:
>>
>> >Totally beyond me, but does it help?
>> >http://readlist.com/lists/lists.sourceforge.net/mingw-users/0/4210.html
>>
>>
>> Yes, that helps.   (especially the first link that they refer to:
>> http://www.cygwin.com/ml/cygwin/2004-09/msg01101.html )
>>
>> Basically it means that (at least under mingw/msys) that 'extern
>> const'  is NOT allowed to refer to a DATA section (eg: extern const
>> struct )  if any/all of the data comes from a DLL.
>>
>> posible solutions:
>> 1) search through all mythtv code for 'extern const'  and if its
>> referring to data (like a struct) then it MIGHT be suspicious,
>> especially if the code and data refered to is in different DLL's.
>> Remove the offending 'const' keyword where relevant to fix each
>> instance.
>>
>> 2) Link all DLL's without .rdata sections, by using a specific linker
>> script, which avoids rdata
>> sections. (script is appended).
>> Copy the linker script for example to /usr/lib/ldscripts and run the
>> following
>> line to link a dll.
>> gcc -Wl,--script,/usr/lib/ldscripts/i386pe.x-no-rdata
>>
>> Please note, I have not tried either of these, yet.   I'm just
>> summarizing the research.
>>
>> taken from:
>> http://www.cygwin.com/ml/cygwin/2004-09/msg01101.html
>> http://www.cygwin.com/ml/cygwin/2007-07/msg00470.html
>> http://www.cygwin.com/ml/cygwin/2004-10/msg01052.html
>>
>> Buzz.
>>
>>
>>
>> /* specific linker script avoiding .rdata sections, for normal executables
>> for a reference see
>> http://www.cygwin.com/ml/cygwin/2004-09/msg01101.html
>> http://www.cygwin.com/ml/cygwin-apps/2004-09/msg00309.html
>> */
>> OUTPUT_FORMAT(pei-i386)
>> SEARCH_DIR("/usr/i686-pc-cygwin/lib"); SEARCH_DIR("/usr/lib");
>> SEARCH_DIR("/usr/lib/w32api");
>> ENTRY(_mainCRTStartup)
>> SECTIONS
>> {
>> .text  __image_base__ + __section_alignment__  :
>> {
>>     *(.init)
>>    *(.text)
>>    *(SORT(.text$*))
>>    *(.glue_7t)
>>    *(.glue_7)
>>     ___CTOR_LIST__ = .; __CTOR_LIST__ = . ;
>>                        LONG (-1);*(.ctors); *(.ctor);
>> *(SORT(.ctors.*));  LONG (0);
>>     ___DTOR_LIST__ = .; __DTOR_LIST__ = . ;
>>                        LONG (-1); *(.dtors); *(.dtor);
>> *(SORT(.dtors.*));  LONG (0);
>>     *(.fini)
>>    /* ??? Why is .gcc_exc here?  */
>>     *(.gcc_exc)
>>    PROVIDE (etext = .);
>>    *(.gcc_except_table)
>> }
>> /* The Cygwin32 library uses a section to avoid copying certain data
>>     on fork.  This used to be named ".data".  The linker used
>>     to include this between __data_start__ and __data_end__, but that
>>     breaks building the cygwin32 dll.  Instead, we name the section
>>     ".data_cygwin_nocopy" and explictly include it after __data_end__. */
>> .data BLOCK(__section_alignment__) :
>> {
>>    __data_start__ = . ;
>>    *(.data)
>>    *(.data2)
>>    *(SORT(.data$*))
>>    *(.rdata)
>>    *(SORT(.rdata$*))
>>    *(.eh_frame)
>>    ___RUNTIME_PSEUDO_RELOC_LIST__ = .;
>>    __RUNTIME_PSEUDO_RELOC_LIST__ = .;
>>    *(.rdata_runtime_pseudo_reloc)
>>    ___RUNTIME_PSEUDO_RELOC_LIST_END__ = .;
>>    __RUNTIME_PSEUDO_RELOC_LIST_END__ = .;
>>    __data_end__ = . ;
>>    *(.data_cygwin_nocopy)
>> }
>> .rdata BLOCK(__section_alignment__) :
>> {
>> }
>> .pdata BLOCK(__section_alignment__) :
>> {
>>    *(.pdata)
>> }
>> .bss BLOCK(__section_alignment__) :
>> {
>>    __bss_start__ = . ;
>>    *(.bss)
>>    *(COMMON)
>>    __bss_end__ = . ;
>> }
>> .edata BLOCK(__section_alignment__) :
>> {
>>    *(.edata)
>> }
>> /DISCARD/ :
>> {
>>    *(.debug$S)
>>    *(.debug$T)
>>    *(.debug$F)
>>    *(.drectve)
>> }
>> .idata BLOCK(__section_alignment__) :
>> {
>>    /* This cannot currently be handled with grouped sections.
>>        See pe.em:sort_sections.  */
>>    SORT(*)(.idata$2)
>>    SORT(*)(.idata$3)
>>    /* These zeroes mark the end of the import list.  */
>>    LONG (0); LONG (0); LONG (0); LONG (0); LONG (0);
>>    SORT(*)(.idata$4)
>>    SORT(*)(.idata$5)
>>    SORT(*)(.idata$6)
>>    SORT(*)(.idata$7)
>> }
>> .CRT BLOCK(__section_alignment__) :
>> {
>>    ___crt_xc_start__ = . ;
>>    *(SORT(.CRT$XC*))  /* C initialization */
>>    ___crt_xc_end__ = . ;
>>    ___crt_xi_start__ = . ;
>>    *(SORT(.CRT$XI*))  /* C++ initialization */
>>    ___crt_xi_end__ = . ;
>>    ___crt_xl_start__ = . ;
>>    *(SORT(.CRT$XL*))  /* TLS callbacks */
>>    /* ___crt_xl_end__ is defined in the TLS Directory support code */
>>    ___crt_xp_start__ = . ;
>>    *(SORT(.CRT$XP*))  /* Pre-termination */
>>    ___crt_xp_end__ = . ;
>>    ___crt_xt_start__ = . ;
>>    *(SORT(.CRT$XT*))  /* Termination */
>>    ___crt_xt_end__ = . ;
>> }
>> .tls BLOCK(__section_alignment__) :
>> {
>>    ___tls_start__ = . ;
>>    *(.tls)
>>    *(.tls$)
>>    *(SORT(.tls$*))
>>    ___tls_end__ = . ;
>> }
>> .endjunk BLOCK(__section_alignment__) :
>> {
>>    /* end is deprecated, don't use it */
>>    PROVIDE (end = .);
>>    PROVIDE ( _end = .);
>>     __end__ = .;
>> }
>> .rsrc BLOCK(__section_alignment__) :
>> {
>>    *(.rsrc)
>>    *(SORT(.rsrc$*))
>> }
>> .reloc BLOCK(__section_alignment__) :
>> {
>>    *(.reloc)
>> }
>> .stab BLOCK(__section_alignment__) (NOLOAD) :
>> {
>>    *(.stab)
>> }
>> .stabstr BLOCK(__section_alignment__) (NOLOAD) :
>> {
>>    *(.stabstr)
>> }
>> /* DWARF debug sections.
>>     Symbols in the DWARF debugging sections are relative to the beginning
>>     of the section.  Unlike other targets that fake this by putting the
>>     section VMA at 0, the PE format will not allow it.  */
>> /* DWARF 1.1 and DWARF 2.  */
>> .debug_aranges BLOCK(__section_alignment__) (NOLOAD) :
>> {
>>    *(.debug_aranges)
>> }
>> .debug_pubnames BLOCK(__section_alignment__) (NOLOAD) :
>> {
>>    *(.debug_pubnames)
>> }
>> /* DWARF 2.  */
>> .debug_info BLOCK(__section_alignment__) (NOLOAD) :
>> {
>>    *(.debug_info) *(.gnu.linkonce.wi.*)
>> }
>> .debug_abbrev BLOCK(__section_alignment__) (NOLOAD) :
>> {
>>    *(.debug_abbrev)
>> }
>> .debug_line BLOCK(__section_alignment__) (NOLOAD) :
>> {
>>    *(.debug_line)
>> }
>> .debug_frame BLOCK(__section_alignment__) (NOLOAD) :
>> {
>>    *(.debug_frame)
>> }
>> .debug_str BLOCK(__section_alignment__) (NOLOAD) :
>> {
>>    *(.debug_str)
>> }
>> .debug_loc BLOCK(__section_alignment__) (NOLOAD) :
>> {
>>    *(.debug_loc)
>> }
>> .debug_macinfo BLOCK(__section_alignment__) (NOLOAD) :
>> {
>>    *(.debug_macinfo)
>> }
>> /* SGI/MIPS DWARF 2 extensions.  */
>> .debug_weaknames BLOCK(__section_alignment__) (NOLOAD) :
>> {
>>    *(.debug_weaknames)
>> }
>> .debug_funcnames BLOCK(__section_alignment__) (NOLOAD) :
>> {
>>    *(.debug_funcnames)
>> }
>> .debug_typenames BLOCK(__section_alignment__) (NOLOAD) :
>> {
>>    *(.debug_typenames)
>> }
>> .debug_varnames BLOCK(__section_alignment__) (NOLOAD) :
>> {
>>    *(.debug_varnames)
>> }
>> /* DWARF 3.  */
>> .debug_ranges BLOCK(__section_alignment__) (NOLOAD) :
>> {
>>    *(.debug_ranges)
>> }
>> }
>
>


More information about the mythtv-dev mailing list