Strange linker problem after updating binutils and gcc
Jan Pohanka
xhpohanka@gmail.com
Mon Feb 21 07:33:00 GMT 2011
More information about the Binutils mailing list
Mon Feb 21 07:33:00 GMT 2011
- Previous message (by thread): Strange linker problem after updating binutils and gcc
- Next message (by thread): Strange linker problem after updating binutils and gcc
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
No clue? rgds Jan 2011/2/17 Jan Pohanka <xhpohanka@gmail.com>: > Hello, > I'm using gcc with binutils in Rowley Crossworks for ARM 1.7 IDE for > arm development. Unfortunately there is very old version of gcc > (4.1.1) and binutils (2.17) in this IDE, so I decided to upgrade to > gcc 4.4.4 and binutils 20.20.51 (I tried more versions but all are > affected) > > Unfortunately there is a problem with linking in new version. > In first try, linker generated warning "dot moved backwards before..." > so I solved it with proper ordering of sections in ld script, > unfortunately there is still an error because the generated elf file > is wrong - some data are written in high addresses, resulting bin file > has size of 500MB instead of 500kB. > > ld is invoked with following params: > > ld -X -nostdlib -ereset_handler --omagic --fatal-warnings -EL > -Te:/_dev/_kamera/JR1_git/_tmp_JR615 Flash Debug/JR615 Flash > Debug.1.8.23.2.h263.ld -Map _JR615 Flash Debug//JR615 Flash > Debug.1.8.23.2.h263.map -u_vectors -o _JR615 Flash Debug//JR615 Flash > Debug.1.8.23.2.h263.elf --start-group ... > > and ld script: > MEMORY > { > UNPLACED_SECTIONS (wx) : ORIGIN = 0x100000000, LENGTH = 0 > SDRAM (wx) : ORIGIN = 0x20000000, LENGTH = 0x02000000 > Reserved (wx) : ORIGIN = 0x90000000, LENGTH = 0x60000000 > SRAM1 (wx) : ORIGIN = 0x00300000, LENGTH = 0x00001000 > SRAM0 (wx) : ORIGIN = 0x00200000, LENGTH = 0x00001000 > } > > INTERNAL_SRAM_START_ADDRESS = 0x00200000; > SDRAM_START_ADDRESS = 0x20000000; > SDRAM_LENGTH = 0x02000000; > > SECTIONS > { > __SDRAM_segment_start__ = 0x20000000; > __SDRAM_segment_end__ = 0x22000000; > __Reserved_segment_start__ = 0x90000000; > __Reserved_segment_end__ = 0xf0000000; > __SRAM1_segment_start__ = 0x00300000; > __SRAM1_segment_end__ = 0x00301000; > __SRAM0_segment_start__ = 0x00200000; > __SRAM0_segment_end__ = 0x00201000; > > __STACKSIZE__ = 512000; > __STACKSIZE_IRQ__ = 128000; > __STACKSIZE_FIQ__ = 4096; > __STACKSIZE_SVC__ = 4096; > __STACKSIZE_ABT__ = 4096; > __STACKSIZE_UND__ = 4096; > __HEAPSIZE__ = 4000000; > > __vectors_ram_load_start__ = 0x00200000; > .vectors_ram 0x00200000 (NOLOAD) : > { > __vectors_ram_start__ = .; > *(.vectors_ram) > . = MAX(__vectors_ram_start__ + 0x3C , .); > } > __vectors_ram_end__ = __vectors_ram_start__ + SIZEOF(.vectors_ram); > > . = ASSERT(__vectors_ram_end__ >= __SRAM0_segment_start__ && > __vectors_ram_end__ <= (__SRAM0_segment_start__ + 0x00001000) , > "error: .vectors_ram is too large to fit in SRAM0 memory segment"); > > __sram_noninit_data_load_start__ = 0x00200040; > .sram_noninit_data 0x00200040 (NOLOAD) : > { > __sram_noninit_data_start__ = .; > *(.sram_noninit_data) > . = MAX(__sram_noninit_data_start__ + 0xbb8 , .); > } > __sram_noninit_data_end__ = __sram_noninit_data_start__ + > SIZEOF(.sram_noninit_data); > > . = ASSERT(__sram_noninit_data_end__ >= __SRAM0_segment_start__ && > __sram_noninit_data_end__ <= (__SRAM0_segment_start__ + 0x00001000) , > "error: .sram_noninit_data is too large to fit in SRAM0 memory > segment"); > > . = ASSERT(__vectors_ram_end__ <= __sram_noninit_data_start__ , > "error: section .vectors_ram overlaps absolute placed section > .sram_noninit_data"); > > __reserved_debug_handler_load_start__ = 0x00200c00; > .reserved_debug_handler 0x00200c00 (NOLOAD) : > { > __reserved_debug_handler_start__ = .; > *(.reserved_debug_handler) > . = MAX(__reserved_debug_handler_start__ + 0x400 , .); > } > __reserved_debug_handler_end__ = __reserved_debug_handler_start__ + > SIZEOF(.reserved_debug_handler); > > __SRAM0_segment_used_end__ = 0x00200c00 + SIZEOF(.reserved_debug_handler); > > . = ASSERT(__reserved_debug_handler_end__ >= __SRAM0_segment_start__ > && __reserved_debug_handler_end__ <= (__SRAM0_segment_start__ + > 0x00001000) , "error: .reserved_debug_handler is too large to fit in > SRAM0 memory segment"); > > . = ASSERT(__sram_noninit_data_end__ <= > __reserved_debug_handler_start__ , "error: section .sram_noninit_data > overlaps absolute placed section .reserved_debug_handler"); > > __reserved_mmu_load_start__ = ALIGN(__SDRAM_segment_start__ , 4); > .reserved_mmu ALIGN(__SDRAM_segment_start__ , 4) (NOLOAD) : > { > __reserved_mmu_start__ = .; > *(.reserved_mmu) > . = ALIGN(MAX(__reserved_mmu_start__ + 0x4000 , .), 4); > } > __reserved_mmu_end__ = __reserved_mmu_start__ + SIZEOF(.reserved_mmu); > > . = ASSERT(__reserved_mmu_end__ >= __SDRAM_segment_start__ && > __reserved_mmu_end__ <= (__SDRAM_segment_start__ + 0x02000000) , > "error: .reserved_mmu is too large to fit in SDRAM memory segment"); > > __boot_load_start__ = __reserved_mmu_end__; > .boot __reserved_mmu_end__ : > { > __boot_start__ = .; > *(.boot) > . = MAX(__boot_start__ + 0x80e8 , .); > } > __boot_end__ = __boot_start__ + SIZEOF(.boot); > > . = ASSERT(__boot_end__ >= __SDRAM_segment_start__ && __boot_end__ > <= (__SDRAM_segment_start__ + 0x02000000) , "error: .boot is too large > to fit in SDRAM memory segment"); > > __vectors_load_start__ = ALIGN(__boot_end__ , 4); > .vectors ALIGN(__boot_end__ , 4) : > { > __vectors_start__ = .; > *(.vectors .vectors.*) > . = ALIGN(MAX(__vectors_start__ + 0x108 , .), 4); > } > __vectors_end__ = __vectors_start__ + SIZEOF(.vectors); > > . = ASSERT(__vectors_end__ >= __SDRAM_segment_start__ && > __vectors_end__ <= (__SDRAM_segment_start__ + 0x02000000) , "error: > .vectors is too large to fit in SDRAM memory segment"); > > __localization_load_start__ = __vectors_end__; > .localization __vectors_end__ : > { > __localization_start__ = .; > *(.localization) > . = MAX(__localization_start__ + 0x40f8 , .); > } > __localization_end__ = __localization_start__ + SIZEOF(.localization); > > . = ASSERT(__localization_end__ >= __SDRAM_segment_start__ && > __localization_end__ <= (__SDRAM_segment_start__ + 0x02000000) , > "error: .localization is too large to fit in SDRAM memory segment"); > > __init_load_start__ = ALIGN(__localization_end__ , 4); > .init ALIGN(__localization_end__ , 4) : > { > __init_start__ = .; > *(.init .init.*) > } > __init_end__ = __init_start__ + SIZEOF(.init); > > . = ASSERT(__init_end__ >= __SDRAM_segment_start__ && __init_end__ > <= (__SDRAM_segment_start__ + 0x02000000) , "error: .init is too large > to fit in SDRAM memory segment"); > > __text_load_start__ = ALIGN(__init_end__ , 4); > .text ALIGN(__init_end__ , 4) : > { > __text_start__ = .; > *(.text .text.* .glue_7t .glue_7 .gnu.linkonce.t.*) > } > __text_end__ = __text_start__ + SIZEOF(.text); > > . = ASSERT(__text_end__ >= __SDRAM_segment_start__ && __text_end__ > <= (__SDRAM_segment_start__ + 0x02000000) , "error: .text is too large > to fit in SDRAM memory segment"); > > __dtors_load_start__ = ALIGN(__text_end__ , 4); > .dtors ALIGN(__text_end__ , 4) : > { > __dtors_start__ = .; > KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) > } > __dtors_end__ = __dtors_start__ + SIZEOF(.dtors); > > . = ASSERT(__dtors_end__ >= __SDRAM_segment_start__ && __dtors_end__ > <= (__SDRAM_segment_start__ + 0x02000000) , "error: .dtors is too > large to fit in SDRAM memory segment"); > > __ctors_load_start__ = ALIGN(__dtors_end__ , 4); > .ctors ALIGN(__dtors_end__ , 4) : > { > __ctors_start__ = .; > KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) > } > __ctors_end__ = __ctors_start__ + SIZEOF(.ctors); > > . = ASSERT(__ctors_end__ >= __SDRAM_segment_start__ && __ctors_end__ > <= (__SDRAM_segment_start__ + 0x02000000) , "error: .ctors is too > large to fit in SDRAM memory segment"); > > __fast_load_start__ = ALIGN(__ctors_end__ , 4); > .fast ALIGN(__SRAM1_segment_start__ , 4) : AT(ALIGN(__ctors_end__ , 4)) > { > __fast_start__ = .; > *(.fast .fast.*) > } > __fast_end__ = __fast_start__ + SIZEOF(.fast); > > __fast_load_end__ = __fast_load_start__ + SIZEOF(.fast); > > . = ASSERT((__fast_load_start__ + SIZEOF(.fast)) >= > __SDRAM_segment_start__ && (__fast_load_start__ + SIZEOF(.fast)) <= > (__SDRAM_segment_start__ + 0x02000000) , "error: .fast is too large to > fit in SDRAM memory segment"); > > .fast_run ALIGN(__SRAM1_segment_start__ , 4) (NOLOAD) : > { > __fast_run_start__ = .; > . = MAX(__fast_run_start__ + SIZEOF(.fast), .); > } > __fast_run_end__ = __fast_run_start__ + SIZEOF(.fast_run); > > __SRAM1_segment_used_end__ = ALIGN(__SRAM1_segment_start__ , 4) + > SIZEOF(.fast_run); > > . = ASSERT(__fast_run_end__ >= __SRAM1_segment_start__ && > __fast_run_end__ <= (__SRAM1_segment_start__ + 0x00001000) , "error: > .fast_run is too large to fit in SRAM1 memory segment"); > > __data_load_start__ = ALIGN(__fast_load_start__ + SIZEOF(.fast) , 4); > .data ALIGN(__fast_load_start__ + SIZEOF(.fast) , 4) : > { > __data_start__ = .; > *(.data .data.* .gnu.linkonce.d.*) > } > __data_end__ = __data_start__ + SIZEOF(.data); > > . = ASSERT(__data_end__ >= __SDRAM_segment_start__ && __data_end__ > <= (__SDRAM_segment_start__ + 0x02000000) , "error: .data is too large > to fit in SDRAM memory segment"); > > __rodata_load_start__ = ALIGN(__data_end__ , 4); > .rodata ALIGN(__data_end__ , 4) : > { > __rodata_start__ = .; > *(.rodata .rodata.* .gnu.linkonce.r.*) > } > __rodata_end__ = __rodata_start__ + SIZEOF(.rodata); > > . = ASSERT(__rodata_end__ >= __SDRAM_segment_start__ && > __rodata_end__ <= (__SDRAM_segment_start__ + 0x02000000) , "error: > .rodata is too large to fit in SDRAM memory segment"); > > __bss_load_start__ = ALIGN(__rodata_end__ , 4); > .bss ALIGN(__rodata_end__ , 4) (NOLOAD) : > { > __bss_start__ = .; > *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) > } > __bss_end__ = __bss_start__ + SIZEOF(.bss); > > . = ASSERT(__bss_end__ >= __SDRAM_segment_start__ && __bss_end__ <= > (__SDRAM_segment_start__ + 0x02000000) , "error: .bss is too large to > fit in SDRAM memory segment"); > > __text_user_load_start__ = ALIGN(__bss_end__ , 4); > .text_user ALIGN(__bss_end__ , 4) (NOLOAD) : > { > __text_user_start__ = .; > *(.text_user) > } > __text_user_end__ = __text_user_start__ + SIZEOF(.text_user); > > . = ASSERT(__text_user_end__ >= __SDRAM_segment_start__ && > __text_user_end__ <= (__SDRAM_segment_start__ + 0x02000000) , "error: > .text_user is too large to fit in SDRAM memory segment"); > > __non_init_load_start__ = ALIGN(__text_user_end__ , 4); > .non_init ALIGN(__text_user_end__ , 4) (NOLOAD) : > { > __non_init_start__ = .; > *(.non_init .non_init.*) > } > __non_init_end__ = __non_init_start__ + SIZEOF(.non_init); > > . = ASSERT(__non_init_end__ >= __SDRAM_segment_start__ && > __non_init_end__ <= (__SDRAM_segment_start__ + 0x02000000) , "error: > .non_init is too large to fit in SDRAM memory segment"); > > __heap_load_start__ = ALIGN(__non_init_end__ , 4); > .heap ALIGN(__non_init_end__ , 4) (NOLOAD) : > { > __heap_start__ = .; > *(.heap) > . = ALIGN(MAX(__heap_start__ + __HEAPSIZE__ , .), 4); > } > __heap_end__ = __heap_start__ + SIZEOF(.heap); > > . = ASSERT(__heap_end__ >= __SDRAM_segment_start__ && __heap_end__ > <= (__SDRAM_segment_start__ + 0x02000000) , "error: .heap is too large > to fit in SDRAM memory segment"); > > __stack_load_start__ = ALIGN(__heap_end__ , 4); > .stack ALIGN(__heap_end__ , 4) (NOLOAD) : > { > __stack_start__ = .; > *(.stack) > . = ALIGN(MAX(__stack_start__ + __STACKSIZE__ , .), 4); > } > __stack_end__ = __stack_start__ + SIZEOF(.stack); > > . = ASSERT(__stack_end__ >= __SDRAM_segment_start__ && __stack_end__ > <= (__SDRAM_segment_start__ + 0x02000000) , "error: .stack is too > large to fit in SDRAM memory segment"); > > __stack_irq_load_start__ = ALIGN(__stack_end__ , 4); > .stack_irq ALIGN(__stack_end__ , 4) (NOLOAD) : > { > __stack_irq_start__ = .; > *(.stack_irq) > . = ALIGN(MAX(__stack_irq_start__ + __STACKSIZE_IRQ__ , .), 4); > } > __stack_irq_end__ = __stack_irq_start__ + SIZEOF(.stack_irq); > > . = ASSERT(__stack_irq_end__ >= __SDRAM_segment_start__ && > __stack_irq_end__ <= (__SDRAM_segment_start__ + 0x02000000) , "error: > .stack_irq is too large to fit in SDRAM memory segment"); > > __stack_fiq_load_start__ = ALIGN(__stack_irq_end__ , 4); > .stack_fiq ALIGN(__stack_irq_end__ , 4) (NOLOAD) : > { > __stack_fiq_start__ = .; > *(.stack_fiq) > . = ALIGN(MAX(__stack_fiq_start__ + __STACKSIZE_FIQ__ , .), 4); > } > __stack_fiq_end__ = __stack_fiq_start__ + SIZEOF(.stack_fiq); > > . = ASSERT(__stack_fiq_end__ >= __SDRAM_segment_start__ && > __stack_fiq_end__ <= (__SDRAM_segment_start__ + 0x02000000) , "error: > .stack_fiq is too large to fit in SDRAM memory segment"); > > __stack_svc_load_start__ = ALIGN(__stack_fiq_end__ , 4); > .stack_svc ALIGN(__stack_fiq_end__ , 4) (NOLOAD) : > { > __stack_svc_start__ = .; > *(.stack_svc) > . = ALIGN(MAX(__stack_svc_start__ + __STACKSIZE_SVC__ , .), 4); > } > __stack_svc_end__ = __stack_svc_start__ + SIZEOF(.stack_svc); > > . = ASSERT(__stack_svc_end__ >= __SDRAM_segment_start__ && > __stack_svc_end__ <= (__SDRAM_segment_start__ + 0x02000000) , "error: > .stack_svc is too large to fit in SDRAM memory segment"); > > __stack_abt_load_start__ = ALIGN(__stack_svc_end__ , 4); > .stack_abt ALIGN(__stack_svc_end__ , 4) (NOLOAD) : > { > __stack_abt_start__ = .; > *(.stack_abt) > . = ALIGN(MAX(__stack_abt_start__ + __STACKSIZE_ABT__ , .), 4); > } > __stack_abt_end__ = __stack_abt_start__ + SIZEOF(.stack_abt); > > . = ASSERT(__stack_abt_end__ >= __SDRAM_segment_start__ && > __stack_abt_end__ <= (__SDRAM_segment_start__ + 0x02000000) , "error: > .stack_abt is too large to fit in SDRAM memory segment"); > > __stack_und_load_start__ = ALIGN(__stack_abt_end__ , 4); > .stack_und ALIGN(__stack_abt_end__ , 4) (NOLOAD) : > { > __stack_und_start__ = .; > *(.stack_und) > . = ALIGN(MAX(__stack_und_start__ + __STACKSIZE_UND__ , .), 4); > } > __stack_und_end__ = __stack_und_start__ + SIZEOF(.stack_und); > > . = ASSERT(__stack_und_end__ >= __SDRAM_segment_start__ && > __stack_und_end__ <= (__SDRAM_segment_start__ + 0x02000000) , "error: > .stack_und is too large to fit in SDRAM memory segment"); > > __exceptions_log_load_start__ = 0x21eff000; > .exceptions_log 0x21eff000 (NOLOAD) : > { > __exceptions_log_start__ = .; > *(.exceptions_log) > . = MAX(__exceptions_log_start__ + 0x1000 , .); > } > __exceptions_log_end__ = __exceptions_log_start__ + SIZEOF(.exceptions_log); > > . = ASSERT(__exceptions_log_end__ >= __SDRAM_segment_start__ && > __exceptions_log_end__ <= (__SDRAM_segment_start__ + 0x02000000) , > "error: .exceptions_log is too large to fit in SDRAM memory segment"); > > . = ASSERT(__stack_und_end__ <= __exceptions_log_start__ , "error: > section .stack_und overlaps absolute placed section .exceptions_log"); > > __nocache_load_start__ = 0x21f00000; > .nocache 0x21f00000 (NOLOAD) : > { > __nocache_start__ = .; > *(.nocache) > } > __nocache_end__ = __nocache_start__ + SIZEOF(.nocache); > > __SDRAM_segment_used_end__ = 0x21f00000 + SIZEOF(.nocache); > > . = ASSERT(__nocache_end__ >= __SDRAM_segment_start__ && > __nocache_end__ <= (__SDRAM_segment_start__ + 0x02000000) , "error: > .nocache is too large to fit in SDRAM memory segment"); > > . = ASSERT(__exceptions_log_end__ <= __nocache_start__ , "error: > section .exceptions_log overlaps absolute placed section .nocache"); > > } > > Could anyone please give me any hint how to solve this problem? > > best regards > Jan >
- Previous message (by thread): Strange linker problem after updating binutils and gcc
- Next message (by thread): Strange linker problem after updating binutils and gcc
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Binutils mailing list