[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