Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: откуда взялась секция .debug_frame
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
adax
Получаю .bin для загрузки в память процессора в Release конфигурации. Опции отладки отключены. В листинге вижу секцию .debug_frame.
и загруженный проект не стартует. Не знаю в этой ли секции дело, но предыдущий проект, скомпилированный с аналогичными галками в Eclips-e
стартует и этой секции в листинге не имеет.

Возникает подозрение что Eclipse использует какие-то свои настройки которые я не вижу.

Или наличие секции .debug_frame не должно мешать нормальной работе . ( В листинге debug конфигурации кроме этой много разных секций с debug в названиях.)
klen
наверно проблема в другом, в ELF файле эти секции присутствуют для чотоб хранить инфу для отладчика, а когда из него делается уже файл прошивки берется обычно если ld сскрипт не навороченный только text bss data, все отсальное отбрасывается. это в самом ld скрипте написано что эти секции нигде не должны быть размешены(тоесть не указано что их нада размещать в памяти контроллера как например text).

еклипса сама ничего не делает sm.gif - ее пнуть нада, посмотрите лог компиляции и все увидите. а вообще makefile нада смотреть если он у Вас есть - там все настройки.
Дайте больше информации, а то мы пациента с завязанными глазами оперировать будем.
adax
Цитата(klen @ Mar 15 2011, 08:16) *
наверно проблема в другом, в ELF файле эти секции присутствуют для чотоб хранить инфу для отладчика, а когда из него делается уже файл прошивки берется обычно если ld сскрипт не навороченный только text bss data, все остальное отбрасывается. это в самом ld скрипте написано что эти секции нигде не должны быть размешены(то есть не указано что их нада размещать в памяти контроллера как например text).

еклипса сама ничего не делает sm.gif - ее пнуть нада, посмотрите лог компиляции и все увидите. а вообще makefile нада смотреть если он у Вас есть - там все настройки.
Дайте больше информации, а то мы пациента с завязанными глазами оперировать будем.


Прикладываю вывод, начало листинга и make файл.
Вообще я пока не очень врубился в тему о том, как Eclipse использует маке файл, у меня возникают смутные сомнения
использует ли он именно этот

Вывод:

CODE
**** Build of configuration Release for project Program6 ****

make all
'Building file: ../APB_GPIO.c'
'Invoking: GNU C Compiler'
arm-none-eabi-gcc -mthumb -mcpu=cortex-m1 -DTOP_OF_MEMORY=0x08100000 -O3 -Wall -c -fmessage-length=0 -MMD -MP -MF"APB_GPIO.d" -MT"APB_GPIO.d" -o"APB_GPIO.o" "../APB_GPIO.c"
'Finished building: ../APB_GPIO.c'
' '
'Building file: ../APB_Interrupt.c'
'Invoking: GNU C Compiler'
arm-none-eabi-gcc -mthumb -mcpu=cortex-m1 -DTOP_OF_MEMORY=0x08100000 -O3 -Wall -c -fmessage-length=0 -MMD -MP -MF"APB_Interrupt.d" -MT"APB_Interrupt.d" -o"APB_Interrupt.o" "../APB_Interrupt.c"
'Finished building: ../APB_Interrupt.c'
' '
'Building file: ../APB_Timer.c'
'Invoking: GNU C Compiler'
arm-none-eabi-gcc -mthumb -mcpu=cortex-m1 -DTOP_OF_MEMORY=0x08100000 -O3 -Wall -c -fmessage-length=0 -MMD -MP -MF"APB_Timer.d" -MT"APB_Timer.d" -o"APB_Timer.o" "../APB_Timer.c"
'Finished building: ../APB_Timer.c'
' '
'Building file: ../APB_UART.c'
'Invoking: GNU C Compiler'
arm-none-eabi-gcc -mthumb -mcpu=cortex-m1 -DTOP_OF_MEMORY=0x08100000 -O3 -Wall -c -fmessage-length=0 -MMD -MP -MF"APB_UART.d" -MT"APB_UART.d" -o"APB_UART.o" "../APB_UART.c"
'Finished building: ../APB_UART.c'
' '
'Building file: ../Coord_Func.c'
'Invoking: GNU C Compiler'
arm-none-eabi-gcc -mthumb -mcpu=cortex-m1 -DTOP_OF_MEMORY=0x08100000 -O3 -Wall -c -fmessage-length=0 -MMD -MP -MF"Coord_Func.d" -MT"Coord_Func.d" -o"Coord_Func.o" "../Coord_Func.c"
../Coord_Func.c: In function 'CalcKoord_AKI':
../Coord_Func.c:150: warning: implicit declaration of function 'gpio_out'
'Finished building: ../Coord_Func.c'
' '
'Building file: ../P6_Main.c'
'Invoking: GNU C Compiler'
arm-none-eabi-gcc -mthumb -mcpu=cortex-m1 -DTOP_OF_MEMORY=0x08100000 -O3 -Wall -c -fmessage-length=0 -MMD -MP -MF"P6_Main.d" -MT"P6_Main.d" -o"P6_Main.o" "../P6_Main.c"
../P6_Main.c: In function 'main':
../P6_Main.c:423: warning: implicit declaration of function 'CalcKoord_AKI'
../P6_Main.c:504: warning: passing argument 2 of 'uart_puts' from incompatible pointer type
../externals.h:7: note: expected 'unsigned char *' but argument is of type 'int *'
'Finished building: ../P6_Main.c'
' '
'Building file: ../HAL/CortexM1/GNU/default_handlers.c'
'Invoking: GNU C Compiler'
arm-none-eabi-gcc -mthumb -mcpu=cortex-m1 -DTOP_OF_MEMORY=0x08100000 -O3 -Wall -c -fmessage-length=0 -MMD -MP -MF"HAL/CortexM1/GNU/default_handlers.d" -MT"HAL/CortexM1/GNU/default_handlers.d" -o"HAL/CortexM1/GNU/default_handlers.o" "../HAL/CortexM1/GNU/default_handlers.c"
'Finished building: ../HAL/CortexM1/GNU/default_handlers.c'
' '
'Building file: ../HAL/CortexM1/GNU/sys_boot.c'
'Invoking: GNU C Compiler'
arm-none-eabi-gcc -mthumb -mcpu=cortex-m1 -DTOP_OF_MEMORY=0x08100000 -O3 -Wall -c -fmessage-length=0 -MMD -MP -MF"HAL/CortexM1/GNU/sys_boot.d" -MT"HAL/CortexM1/GNU/sys_boot.d" -o"HAL/CortexM1/GNU/sys_boot.o" "../HAL/CortexM1/GNU/sys_boot.c"
'Finished building: ../HAL/CortexM1/GNU/sys_boot.c'
' '
'Building target: Program6'
'Invoking: GNU C Linker'
arm-none-eabi-gcc -mthumb -mcpu=cortex-m1 -specs=bare.specs -nostartfiles -nodefaultlibs -nostdlib -T ../HAL/CortexM1/GNU/run-from-nvm.ld -Wl,-Map=Program6.map -o"Program6" ./APB_GPIO.o ./APB_Interrupt.o ./APB_Timer.o ./APB_UART.o ./Coord_Func.o ./P6_Main.o ./HAL/CortexM1/GNU/default_handlers.o ./HAL/CortexM1/GNU/sys_boot.o
'Finished building target: Program6'
' '
make --no-print-directory post-build
arm-none-eabi-objcopy -O binary Program6 Program6.bin
' '
'Invoking: Memory map generator'
actel-map -o "memory-map.xml" Program6 arm-none-eabi-gcc -mthumb -mcpu=cortex-m1 -specs=bare.specs -nostartfiles -nodefaultlibs -nostdlib -T ../HAL/CortexM1/GNU/run-from-nvm.ld -Wl,-Map=Program6.map
Generated file memory-map.xml
'Finished building: memory-map.xml'
' '
'Invoking: GNU Intel Hex File Generator'
arm-none-eabi-objcopy -O ihex Program6 "Program6.hex"
'Finished building: Program6.hex'
' '
'Invoking: GNU S-Record Generator'
arm-none-eabi-objcopy -O srec Program6 "Program6.srec"
'Finished building: Program6.srec'
' '
'Invoking: GNU Listing Generator'
arm-none-eabi-objdump -h -S Program6 > "Program6.lst"
'Finished building: Program6.lst'
' '



CODE
Program6: file format elf32-littlearm

Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00002914 00000000 00000000 00008000 2**3
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00000004 08000000 00002914 00010000 2**2
CONTENTS, ALLOC, LOAD, DATA
2 .bss 000c0fd4 08000004 00002918 00010004 2**2
ALLOC
3 .comment 00000158 00000000 00000000 00010004 2**0
CONTENTS, READONLY
4 .debug_frame 000001c4 00000000 00000000 0001015c 2**2
CONTENTS, READONLY, DEBUGGING
5 .ARM.attributes 00000033 00000000 00000000 00010320 2**0
CONTENTS, READONLY

Disassembly of section .text:

00000000 <__text_start>:
0: 08100000 .word 0x08100000
4: 00001471 .word 0x00001471
8: 00001459 .word 0x00001459
c: 0000145d .word 0x0000145d
...
2c: 00001461 .word 0x00001461
...
38: 00001465 .word 0x00001465
3c: 00001469 .word 0x00001469
40: 00000fb5 .word 0x00000fb5
44: 0000146d .word 0x0000146d
48: 0000146d .word 0x0000146d
4c: 0000146d .word 0x0000146d
50: 0000146d .word 0x0000146d
54: 0000146d .word 0x0000146d
58: 0000146d .word 0x0000146d
5c: 0000146d .word 0x0000146d

00000060 <gpio_out>:
60: 6001 str r1, [r0, #0]
62: 4770 bx lr

00000064 <gpio_in>:
64: 6800 ldr r0, [r0, #0]
66: 4770 bx lr

00000068 <interrupt_irq_enable>:
68: 6201 str r1, [r0, #32]
6a: 4770 bx lr

0000006c <interrupt_irq_disable>:
6c: 6241 str r1, [r0, #36]; 0x24
6e: 4770 bx lr

00000070 <interrupt_irq_status>:
70: 6ac0 ldr r0, [r0, #44]; 0x2c
72: 4770 bx lr

00000074 <cm1_irq_enable>:
74: 4b01 ldr r3, [pc, #4]; (7c <cm1_irq_enable+0x8>)
76: 6018 str r0, [r3, #0]
78: 4770 bx lr
7a: 46c0 nop ; (mov r8, r8)
7c: e000e100 .word 0xe000e100

00000080 <cm1_irq_disable>:
80: 4b01 ldr r3, [pc, #4]; (88 <cm1_irq_disable+0x8>)
82: 6018 str r0, [r3, #0]
84: 4770 bx lr
86: 46c0 nop ; (mov r8, r8)
88: e000e180 .word 0xe000e180

0000008c <timer_cfg>:
8c: 60c2 str r2, [r0, #12]
8e: 6081 str r1, [r0, #8]
90: 4770 bx lr
92: 46c0 nop ; (mov r8, r8)

00000094 <timer_load>:
94: 6001 str r1, [r0, #0]
96: 4770 bx lr

00000098 <timer_irq_clear>:
98: 2301 movs r3, #1
9a: 6103 str r3, [r0, #16]
9c: 4770 bx lr
9e: 46c0 nop ; (mov r8, r8)

000000a0 <uartWaitXmt>:
a0: b500 push {lr}
a2: 3010 adds r0, #16
a4: 2201 movs r2, #1
a6: 7803 ldrb r3, [r0, #0]
a8: 4213 tst r3, r2
aa: d0fc beq.n a6 <uartWaitXmt+0x6>
ac: bd00 pop {pc}
ae: 46c0 nop ; (mov r8, r8)

000000b0 <uart_puts>:
b0: b5f0 push {r4, r5, r6, r7, lr}
b2: 2a00 cmp r2, #0
b4: d00d beq.n d2 <uart_puts+0x22>
b6: 1c05 adds r5, r0, #0
b8: 3510 adds r5, #16
ba: 2700 movs r7, #0
bc: 2600 movs r6, #0
be: 2401 movs r4, #1
c0: 782b ldrb r3, [r5, #0]
c2: 4223 tst r3, r4
c4: d0fc beq.n c0 <uart_puts+0x10>
c6: 5dcb ldrb r3, [r1, r7]
c8: 3601 adds r6, #1
ca: 7003 strb r3, [r0, #0]
cc: 1c37 adds r7, r6, #0
ce: 4296 cmp r6, r2
d0: d1f6 bne.n c0 <uart_puts+0x10>
d2: bdf0 pop {r4, r5, r6, r7, pc}

000000d4 <uart_cfg>:
d4: b2c9 uxtb r1, r1
d6: 2301 movs r3, #1
d8: 7201 strb r1, [r0, #8]
da: 7303 strb r3, [r0, #12]
dc: 4770 bx lr
de: 46c0 nop ; (mov r8, r8)

000000e0 <uart_getchar>:
e0: 6840 ldr r0, [r0, #4]
e2: b2c0 uxtb r0, r0
e4: 4770 bx lr
e6: 46c0 nop ; (mov r8, r8)

000000e8 <CalcKoord_CT>:
e8: b5f0 push {r4, r5, r6, r7, lr}
ea: 465f mov r7, fp


Вот make файл, который автоматически генерится в папку для Release

CODE
#######################################################################
#########
# Automatically-generated file. Do not edit!
################################################################################

-include ../makefile.init

RM := rm -rf

# All of the sources participating in the build are defined here
-include sources.mk
-include subdir.mk
-include HAL/CortexM1/GNU/subdir.mk
-include objects.mk

ifneq ($(MAKECMDGOALS),clean)
ifneq ($(strip $(C_DEPS)),)
-include $(C_DEPS)
endif
endif

-include ../makefile.defs

# Add inputs and outputs from these tool invocations to the build variables
MEMORYMAP += \
memory-map.xml \

IHEXFILES += \
Program6.hex \

SRECFILES += \
Program6.srec \

LISTINGS += \
Program6.lst \


# All Target
all: Program6 secondary-outputs

# Tool invocations
Program6: $(OBJS) $(USER_OBJS)
@echo 'Building target: $@'
@echo 'Invoking: GNU C Linker'
arm-none-eabi-gcc -mthumb -mcpu=cortex-m1 -specs=bare.specs -nostartfiles -nodefaultlibs -nostdlib -T ../HAL/CortexM1/GNU/run-from-nvm.ld -Wl,-Map=$(EXECUTABLE).map -o"Program6" $(OBJS) $(USER_OBJS) $(LIBS)
@echo 'Finished building target: $@'
@echo ' '
$(MAKE) --no-print-directory post-build

memory-map.xml: $(EXECUTABLE)
@echo 'Invoking: Memory map generator'
actel-map -o "memory-map.xml" $(EXECUTABLE) $(BUILDCMD)
@echo 'Finished building: $@'
@echo ' '

Program6.hex: $(EXECUTABLE)
@echo 'Invoking: GNU Intel Hex File Generator'
arm-none-eabi-objcopy -O ihex $(EXECUTABLE) "Program6.hex"
@echo 'Finished building: $@'
@echo ' '

Program6.srec: $(EXECUTABLE)
@echo 'Invoking: GNU S-Record Generator'
arm-none-eabi-objcopy -O srec $(EXECUTABLE) "Program6.srec"
@echo 'Finished building: $@'
@echo ' '

Program6.lst: $(EXECUTABLE)
@echo 'Invoking: GNU Listing Generator'
arm-none-eabi-objdump -h -S $(EXECUTABLE) > "Program6.lst"
@echo 'Finished building: $@'
@echo ' '

# Other Targets
clean::
-$(RM) $(MEMORYMAP)$(OBJS)$(C_DEPS)$(SRECFILES)$(IHEXFILES)$(LISTINGS)$(EXECUTABLE) Program6
-@echo ' '

post-build:
-arm-none-eabi-objcopy -O binary Program6 Program6.bin
-@echo ' '

secondary-outputs: $(MEMORYMAP) $(IHEXFILES) $(SRECFILES) $(LISTINGS)

.PHONY: all clean dependents
.SECONDARY: post-build

-include ../makefile.targets


А вот скрипт линкера


CODE
/*******************************************************************************
* © Copyright 2007 Actel Corporation. All rights reserved.
*
* Cortex-M1 linker script for executing code from NVM.
*
* SVN $Revision: 1 $
* SVN $Date: 2007-10-02 16:00:58 +0100 (Tue, 02 Oct 2007) $
*/
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
"elf32-littlearm")
GROUP(-lc -lrdimon -lgcc)
OUTPUT_ARCH(arm)
ENTRY(_start)
SEARCH_DIR(.)
__DYNAMIC = 0;

MEMORY
{
rom (rx) : ORIGIN = 0x000000000, LENGTH = 1024k
ram (rwx) : ORIGIN = 0x08000000, LENGTH = 1024k
}

/* Place the stack at the end of memory, unless specified otherwise. */


SECTIONS
{
.text :
{
CREATE_OBJECT_SYMBOLS
__text_load = LOADADDR(.text);
__text_start = .;
*(.isr_vector)
*(.text .text.* .gnu.linkonce.t.*)
*(.plt)
*(.gnu.warning)
*(.glue_7t) *(.glue_7) *(.vfp11_veneer)

. = ALIGN(0x4);
/* These are for running static constructors and destructors under ELF. */
KEEP (*crtbegin.o(.ctors))
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*crtend.o(.ctors))
KEEP (*crtbegin.o(.dtors))
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*crtend.o(.dtors))

*(.rodata .rodata.* .gnu.linkonce.r.*)

*(.ARM.extab* .gnu.linkonce.armextab.*)
*(.gcc_except_table)
*(.eh_frame_hdr)
*(.eh_frame)

KEEP (*(.init))
KEEP (*(.fini))

PROVIDE_HIDDEN (__preinit_array_start = .);
KEEP (*(.preinit_array))
PROVIDE_HIDDEN (__preinit_array_end = .);
PROVIDE_HIDDEN (__init_array_start = .);
KEEP (*(SORT(.init_array.*)))
KEEP (*(.init_array))
PROVIDE_HIDDEN (__init_array_end = .);
PROVIDE_HIDDEN (__fini_array_start = .);
KEEP (*(.fini_array))
KEEP (*(SORT(.fini_array.*)))
PROVIDE_HIDDEN (__fini_array_end = .);
} >rom
/* .ARM.exidx is sorted, so has to go in its own output section. */
__exidx_start = .;
.ARM.exidx :
{
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
} >rom
__exidx_end = .;
_etext = .;

.data :
{
__data_load = LOADADDR (.data);
__data_start = .;
KEEP(*(.jcr))
*(.got.plt) *(.got)
*(.shdata)
*(.data .data.* .gnu.linkonce.d.*)
. = ALIGN (4);
_edata = .;
} >ram AT>rom

.bss :
{
__bss_start__ = .;
*(.shbss)
*(.bss .bss.* .gnu.linkonce.b.*)
*(COMMON)
. = ALIGN (8);
__bss_end__ = .;
_end = .;
__end = _end;
PROVIDE(end = .);
} >ram AT>rom

.stab 0 (NOLOAD) :
{
*(.stab)
}

.stabstr 0 (NOLOAD) :
{
*(.stabstr)
}
/* DWARF debug sections.
Symbols in the DWARF debugging sections are relative to the beginning
of the section so we begin them at 0. */
/* DWARF 1 */
.debug 0 : { *(.debug) }
.line 0 : { *(.line) }
/* GNU DWARF 1 extensions */
.debug_srcinfo 0 : { *(.debug_srcinfo) }
.debug_sfnames 0 : { *(.debug_sfnames) }
/* DWARF 1.1 and DWARF 2 */
.debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) }
/* DWARF 2 */
.debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line) }
.debug_frame 0 : { *(.debug_frame) }
.debug_str 0 : { *(.debug_str) }
.debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) }
/* SGI/MIPS DWARF 2 extensions */
.debug_weaknames 0 : { *(.debug_weaknames) }
.debug_funcnames 0 : { *(.debug_funcnames) }
.debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) }
.note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
.ARM.attributes 0 : { KEEP (*(.ARM.attributes)) }
/DISCARD/ : { *(.note.GNU-stack) }
}
adax

Проблема в основном решилась, остался теоретический интерес. Проект не стартовал из-за включенной оптимизации (O3) в настройках Release.
При O1 заработало. Наличие секции debug_frame не мешает работе, но причина ее возникновения осталась непонятной.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.