@@ -170,7 +170,7 @@ CREATE temp_symbol /symbol ALLOT
170
170
171
171
: add_file_symbol ( a u -- ) \ add file name
172
172
0 0 2SWAP
173
- STB_LOCAL STT_FILE ELF32_ST_INFO
173
+ STB_GLOBAL STT_FILE ELF32_ST_INFO
174
174
SHN_ABS
175
175
add_symbol
176
176
;
@@ -275,7 +275,7 @@ CREATE temp_symbol /symbol ALLOT
275
275
: DWARF_ERROR ( f a u -- ) \ if true show string and error message using dwarf_errmsg
276
276
ROT IF
277
277
." ERROR! " TYPE SPACE
278
- (( error @ )) dwarf_errmsg ASCIIZ> TYPE SPACE BYE
278
+ (( error @ )) dwarf_errmsg ASCIIZ> TYPE CR BYE
279
279
ELSE 2DROP THEN
280
280
;
281
281
@@ -450,6 +450,22 @@ CREATE LAST_SUB /sd ALLOT \ last subprogram data
450
450
451
451
CREATE init_bytes \ taken from c-code compiled elf
452
452
0x0C C, 0x0D C, 0 C, \ equals DW_CFA_def_cfa: r13 ofs 0
453
+ 0x07 C, 0x00 C, 0 C, \ equals DW_CFA_undefined: r0 undefined
454
+ 0x07 C, 0x01 C, 0 C, \ equals DW_CFA_undefined: r1 undefined
455
+ 0x07 C, 0x02 C, 0 C, \ equals DW_CFA_undefined: r2 undefined
456
+ 0x07 C, 0x03 C, 0 C, \ equals DW_CFA_undefined: r3 undefined
457
+ 0x07 C, 0x04 C, 0 C, \ equals DW_CFA_undefined: r4 undefined
458
+ 0x07 C, 0x05 C, 0 C, \ equals DW_CFA_undefined: r5 undefined
459
+ 0x07 C, 0x06 C, 0 C, \ equals DW_CFA_undefined: r6 undefined
460
+ 0x07 C, 0x07 C, 0 C, \ equals DW_CFA_undefined: r7 undefined
461
+ 0x07 C, 0x08 C, 0 C, \ equals DW_CFA_undefined: r8 undefined
462
+ 0x07 C, 0x09 C, 0 C, \ equals DW_CFA_undefined: r9 undefined
463
+ 0x07 C, 0x0A C, 0 C, \ equals DW_CFA_undefined: r10 undefined
464
+ 0x07 C, 0x0B C, 0 C, \ equals DW_CFA_undefined: r11 undefined
465
+ 0x07 C, 0x0C C, 0 C, \ equals DW_CFA_undefined: r12 undefined
466
+ 0x0C C, 0x0D C, 0 C, \ equals DW_CFA_def_cfa: r13 ofs 0
467
+ \ r14 is specified in dwarf_add_frame_cie
468
+ \ r15 is pc, no need to specify init state
453
469
HERE init_bytes - CONSTANT init_bytes_len
454
470
455
471
: dwarf_add_frame_cie ( -- )
@@ -505,6 +521,7 @@ EXPORT
505
521
\ ========================= create new file with debugging info ============================
506
522
507
523
O_ELF [IF]
524
+ VARIABLE _dw
508
525
509
526
: DWARF_INIT ( load_addr addr a u -- ) \ create new file
510
527
\ load_addr - load address
@@ -521,14 +538,20 @@ O_ELF [IF]
521
538
create_section_text \ create .text section
522
539
523
540
\ init dwarf producer
524
- (( DW_DLC_WRITE DW_DLC_SYMBOLIC_RELOCATIONS OR 0
541
+ ((
542
+ DW_DLC_WRITE DW_DLC_SYMBOLIC_RELOCATIONS OR 0 \ DWORD
525
543
['] dwarf_callback_func_c \ function to create elf sections
526
- 0
527
- 0
528
- 0
529
- 0
530
- )) dwarf_producer_init_c DUP TO dw
531
- -1 = S" Dwarf producer init failed!" DWARF_ERROR
544
+ 0 \ errhand
545
+ 0 \ errarg
546
+ 0 \ user_data
547
+ S" arm" >ASCIIZ \ *isa_name
548
+ S" V2" >ASCIIZ \ *dwarf_version
549
+ 0 \ *extra
550
+ _dw \ dw
551
+ error \ error
552
+ )) dwarf_producer_init
553
+ DW_DLV_ERROR = S" Dwarf producer init failed!" DWARF_ERROR
554
+ _dw @ TO dw
532
555
533
556
dwarf_new_CU \ create main CU
534
557
0 commit comments