-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmorse.asm
2492 lines (2418 loc) · 109 KB
/
morse.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
a.out: file format elf32-littlearc
SYMBOL TABLE:
00010154 l d .interp 00000000 .interp
0001016c l d .note.gnu.build-id 00000000 .note.gnu.build-id
00010190 l d .note.ABI-tag 00000000 .note.ABI-tag
000101b0 l d .hash 00000000 .hash
000101f8 l d .gnu.hash 00000000 .gnu.hash
00010254 l d .dynsym 00000000 .dynsym
00010324 l d .dynstr 00000000 .dynstr
0001039c l d .gnu.version 00000000 .gnu.version
000103b8 l d .gnu.version_r 00000000 .gnu.version_r
000103e8 l d .rela.plt 00000000 .rela.plt
00010478 l d .init 00000000 .init
00010484 l d .plt 00000000 .plt
00010564 l d .text 00000000 .text
000108b4 l d .fini 00000000 .fini
000108c0 l d .rodata 00000000 .rodata
00010bb0 l d .eh_frame_hdr 00000000 .eh_frame_hdr
00010bc4 l d .eh_frame 00000000 .eh_frame
00013f0c l d .init_array 00000000 .init_array
00013f10 l d .fini_array 00000000 .fini_array
00013f14 l d .dynamic 00000000 .dynamic
00013ffc l d .got.plt 00000000 .got.plt
00014038 l d .data 00000000 .data
00014040 l d .bss 00000000 .bss
00000000 l d .comment 00000000 .comment
00000000 l d .ARC.attributes 00000000 .ARC.attributes
00000000 l d .debug_aranges 00000000 .debug_aranges
00000000 l d .debug_info 00000000 .debug_info
00000000 l d .debug_abbrev 00000000 .debug_abbrev
00000000 l d .debug_line 00000000 .debug_line
00000000 l d .debug_frame 00000000 .debug_frame
00000000 l d .debug_str 00000000 .debug_str
00000000 l d .debug_loclists 00000000 .debug_loclists
00000000 l df *ABS* 00000000 crt1.o
00010190 l O .note.ABI-tag 00000020 __abi_tag
00000000 l df *ABS* 00000000 crtstuff.c
0001058c l F .text 00000000 deregister_tm_clones
000105ac l F .text 00000000 register_tm_clones
000105d8 l F .text 00000000 __do_global_dtors_aux
00014040 l O .bss 00000001 completed.0
00013f10 l O .fini_array 00000000 __do_global_dtors_aux_fini_array_entry
000105f8 l F .text 00000000 frame_dummy
00013f0c l O .init_array 00000000 __frame_dummy_init_array_entry
00000000 l df *ABS* 00000000 morse.c
00014044 l O .bss 00000004 fp
00010b20 l O .rodata 00000090 morse_tbl
00000000 l df *ABS* 00000000 crtstuff.c
00010bec l O .eh_frame 00000000 __FRAME_END__
00000000 l df *ABS* 00000000
00013f14 l O .dynamic 00000000 _DYNAMIC
00010bb0 l .eh_frame_hdr 00000000 __GNU_EH_FRAME_HDR
00013ffc l O .got.plt 00000000 _GLOBAL_OFFSET_TABLE_
000104a4 F *UND* 00000000 fopen@GLIBC_2.32
000104b4 F *UND* 00000000 __libc_start_main@GLIBC_2.34
00014038 w .data 00000000 data_start
00010738 g F .text 00000030 io_write
000104c4 F *UND* 00000000 fprintf@GLIBC_2.32
00010870 g F .text 0000001e morse
00014040 g .data 00000000 _edata
00010790 g F .text 000000e0 morse_letter
000108b8 g F .fini 00000000 _fini
000105fc g F .text 0000013c io_init
000104d4 F *UND* 00000000 fputc@GLIBC_2.32
00014038 g .data 00000000 __data_start
000104e4 F *UND* 00000000 fclose@GLIBC_2.32
000104f4 F *UND* 00000000 fwrite@GLIBC_2.32
0001403c g O .data 00000000 .hidden __dso_handle
000108c0 g O .rodata 00000004 _IO_stdin_used
00010504 F *UND* 00000000 fflush@GLIBC_2.32
00010768 g F .text 00000028 fsleep
00014048 g .bss 00000000 _end
00010514 F *UND* 00000000 nanosleep@GLIBC_2.32
00010524 F *UND* 00000000 printf@GLIBC_2.32
00014040 g .bss 00000000 __bss_start
00010890 g F .text 00000024 main
00010564 g F .text 00000026 __start
00010534 F *UND* 00000000 puts@GLIBC_2.32
00014040 g O .data 00000000 .hidden __TMC_END__
00010544 F *UND* 00000000 exit@GLIBC_2.32
00010554 F *UND* 00000000 sprintf@GLIBC_2.32
0001047c g F .init 00000000 _init
Disassembly of section .init:
00010478 <_init-0x4>:
10478: /-- 0000 0000 b 0 ;10478 <__abi_tag+0x2e8>
0001047c <_init>:
1047c: c0f1 push_s blink
1047e: c0d1 pop_s blink
10480: 7ee0 j_s [blink]
Disassembly of section .plt:
00010484 <.plt>:
10484: 1600 700b 0001 4000 ld r11,[0x14000]
1048c: 1600 700a 0001 4004 ld r10,[0x14004]
10494: 2020 0280 j [r10]
10498: 3ffc 0001 .word 0x3ffc0001
...
104a4: 2730 7f8c 0000 3b64 ld r12,[pcl,0x3b64] ;14008 <fopen@GLIBC_2.32>
104ac: 2021 0300 j.d [r12]
104b0: 240a 1fc0 mov r12,pcl
104b4: 2730 7f8c 0000 3b58 ld r12,[pcl,0x3b58] ;1400c <__libc_start_main@GLIBC_2.34>
104bc: 2021 0300 j.d [r12]
104c0: 240a 1fc0 mov r12,pcl
104c4: 2730 7f8c 0000 3b4c ld r12,[pcl,0x3b4c] ;14010 <fprintf@GLIBC_2.32>
104cc: 2021 0300 j.d [r12]
104d0: 240a 1fc0 mov r12,pcl
104d4: 2730 7f8c 0000 3b40 ld r12,[pcl,0x3b40] ;14014 <fputc@GLIBC_2.32>
104dc: 2021 0300 j.d [r12]
104e0: 240a 1fc0 mov r12,pcl
104e4: 2730 7f8c 0000 3b34 ld r12,[pcl,0x3b34] ;14018 <fclose@GLIBC_2.32>
104ec: 2021 0300 j.d [r12]
104f0: 240a 1fc0 mov r12,pcl
104f4: 2730 7f8c 0000 3b28 ld r12,[pcl,0x3b28] ;1401c <fwrite@GLIBC_2.32>
104fc: 2021 0300 j.d [r12]
10500: 240a 1fc0 mov r12,pcl
10504: 2730 7f8c 0000 3b1c ld r12,[pcl,0x3b1c] ;14020 <fflush@GLIBC_2.32>
1050c: 2021 0300 j.d [r12]
10510: 240a 1fc0 mov r12,pcl
10514: 2730 7f8c 0000 3b10 ld r12,[pcl,0x3b10] ;14024 <nanosleep@GLIBC_2.32>
1051c: 2021 0300 j.d [r12]
10520: 240a 1fc0 mov r12,pcl
10524: 2730 7f8c 0000 3b04 ld r12,[pcl,0x3b04] ;14028 <printf@GLIBC_2.32>
1052c: 2021 0300 j.d [r12]
10530: 240a 1fc0 mov r12,pcl
10534: 2730 7f8c 0000 3af8 ld r12,[pcl,0x3af8] ;1402c <puts@GLIBC_2.32>
1053c: 2021 0300 j.d [r12]
10540: 240a 1fc0 mov r12,pcl
10544: 2730 7f8c 0000 3aec ld r12,[pcl,0x3aec] ;14030 <exit@GLIBC_2.32>
1054c: 2021 0300 j.d [r12]
10550: 240a 1fc0 mov r12,pcl
10554: 2730 7f8c 0000 3ae0 ld r12,[pcl,0x3ae0] ;14034 <sprintf@GLIBC_2.32>
1055c: 2021 0300 j.d [r12]
10560: 240a 1fc0 mov r12,pcl
Disassembly of section .text:
00010564 <__start>:
10564: 234a 3000 mov fp,0
10568: 4187 ld_s r1,[sp,0]
1056a: 4500 mov_s r5,r0
1056c: c281 add_s r2,sp,0x4
1056e: 2484 3e3f and sp,sp,-8
10572: 260a 0700 mov r6,sp
10576: 706c mov_s r3,0
10578: 244a 0000 mov r4,0
1057c: 40c3 0001 0890 mov_s r0,0x10890
10582: 0f36 ffcf bl -204 ;104b4 <.plt+0x30>
10586: 2069 0040 flag 0x1
1058a: 78e0 nop_s
0001058c <deregister_tm_clones>:
1058c: 42c3 0001 4040 mov_s r2,0x14040
10592: 72d3 0001 4040 cmp_s r2,0x14040
10598: 7ce0 jeq_s [blink]
1059a: 42c3 0000 0000 mov_s r2,0
105a0: 7a4b tst_s r2,r2
105a2: 7ce0 jeq_s [blink]
105a4: 40c3 0001 4040 mov_s r0,0x14040
105aa: 7a00 j_s [r2]
000105ac <register_tm_clones>:
105ac: 41c3 0001 4040 mov_s r1,0x14040
105b2: 2102 0f81 0001 4040 sub r1,r1,0x14040
105ba: 693a asr_s r1,r1,0x2
105bc: 2944 0081 div r1,r1,0x2
105c0: 792b tst_s r1,r1
105c2: 7ce0 jeq_s [blink]
105c4: 42c3 0000 0000 mov_s r2,0
105ca: 7a4b tst_s r2,r2
105cc: 7ce0 jeq_s [blink]
105ce: 40c3 0001 4040 mov_s r0,0x14040
105d4: 7a00 j_s [r2]
105d6: 78e0 nop_s
000105d8 <__do_global_dtors_aux>:
105d8: 1600 7082 0001 4040 ldb r2,[0x14040]
105e0: 7a4b tst_s r2,r2
105e2: 7de0 jne_s [blink]
105e4: c0f1 push_s blink
105e6: 0faa ffcf bl -88 ;1058c <deregister_tm_clones>
105ea: 1e00 7043 0001 4040 stb 1,[0x14040]
105f2: c0d1 pop_s blink
105f4: 7ee0 j_s [blink]
105f6: 78e0 nop_s
000105f8 <frame_dummy>:
105f8: 07b5 ffcf b -76 ;105ac <register_tm_clones>
000105fc <io_init>:
# /*
# * IO Functions
# */
# static FILE* fp = NULL;
# void io_init(const int pin)
# {
105fc: c0f1 push_s blink
105fe: c5e1 push_s r13
10600: c1b0 sub_s sp,sp,0x40
10602: 4508 mov_s r13,r0
# char path[64];
# /* Open GPIO direction for writing */
# sprintf(path,"/sys/class/gpio/gpio%d/direction",pin);
10604: 4200 mov_s r2,r0
10606: 41c3 0001 08c4 mov_s r1,0x108c4
1060c: 0f4a ffef bl.d -184 ;10554 <.plt+0xd0>
10610: 4083 mov_s r0,sp
# printf("Opening Direction file %s\n",path);
10612: 40c3 0001 08e8 mov_s r0,0x108e8
10618: 0f0e ffef bl.d -244 ;10524 <.plt+0xa0>
1061c: 4183 mov_s r1,sp
# fp = fopen(path,"w");
1061e: 41c3 0001 0904 mov_s r1,0x10904
10624: 0e82 ffef bl.d -384 ;104a4 <.plt+0x20>
10628: 4083 mov_s r0,sp
1062a: 1e00 7000 0001 4044 st r0,[0x14044]
# if(!fp)
10632: /-- e83c breq_s r0,0,120 ;106a8 <io_init+0xac>
# printf("ERROR: Failed to open GPIO direction\n");
# exit(-1);
# }
# }
# /* Write direction */
# fprintf(fp,"out");
10634: /-----|-> 1600 7003 0001 4044 ld r3,[0x14044]
1063c: | | 734c mov_s r2,3
1063e: | | 40c3 0001 098c mov_s r0,0x1098c
10644: | | 0eb2 ffef bl.d -336 ;104f4 <.plt+0x70>
10648: | | 712c mov_s r1,1
# fclose(fp);
1064a: | | 1600 7000 0001 4044 ld r0,[0x14044]
10652: | | 0e96 ffcf bl -364 ;104e4 <.plt+0x60>
# /* Open 'value' file */
# sprintf(path,"/sys/class/gpio/gpio%d/value",pin);
10656: | | 42a1 mov_s r2,r13
10658: | | 41c3 0001 0990 mov_s r1,0x10990
1065e: | | 0efa ffef bl.d -264 ;10554 <.plt+0xd0>
10662: | | 4083 mov_s r0,sp
# printf("Opening Value file %s\n",path);
10664: | | 40c3 0001 09b0 mov_s r0,0x109b0
1066a: | | 0ebe ffef bl.d -324 ;10524 <.plt+0xa0>
1066e: | | 4183 mov_s r1,sp
# fp = fopen(path,"w");
10670: | | 41c3 0001 0904 mov_s r1,0x10904
10676: | | 0e32 ffef bl.d -464 ;104a4 <.plt+0x20>
1067a: | | 4083 mov_s r0,sp
1067c: | | 1e00 7000 0001 4044 st r0,[0x14044]
# if(!fp)
10684: | /--|-- 08a5 0030 breq.d.nt r0,0,164 ;10728 <io_init+0x12c>
10688: | | | 4100 mov_s r1,r0
# {
# printf("ERROR: Failed to open GPIO value\n");
# exit(-1);
# }
# /* Initialize LED to off */
# fprintf(fp,"0");
1068a: | | | 0e4e ffef bl.d -436 ;104d4 <.plt+0x50>
1068e: | | | d830 mov_s r0,0x30
# fflush(fp);
10690: | | | 1600 7000 0001 4044 ld r0,[0x14044]
10698: | | | 0e6e ffcf bl -404 ;10504 <.plt+0x80>
# }
1069c: | | | c0b0 add_s sp,sp,0x40
1069e: | | | 1404 301f ld blink,[sp,4]
106a2: | | | 7fe0 j_s.d [blink]
106a4: | | | 1408 340d ld.ab r13,[sp,8]
# printf("GPIO not exported yet... doing that\n");
106a8: | | \-> 40c3 0001 0908 mov_s r0,0x10908
106ae: | | 0e8a ffcf bl -376 ;10534 <.plt+0xb0>
# fp = fopen("/sys/class/gpio/export", "w");
106b2: | | 41c3 0001 0904 mov_s r1,0x10904
106b8: | | 40c3 0001 092c mov_s r0,0x1092c
106be: | | 0dea ffcf bl -536 ;104a4 <.plt+0x20>
106c2: | | 1e00 7000 0001 4044 st r0,[0x14044]
# if(!fp)
106ca: | | /-- e828 breq_s r0,0,80 ;10718 <io_init+0x11c>
# fprintf(fp, "%d", pin);
106cc: | | | 41c3 0001 0960 mov_s r1,0x10960
106d2: | | | 0df6 ffef bl.d -524 ;104c4 <.plt+0x40>
106d6: | | | 42a1 mov_s r2,r13
# fclose(fp);
106d8: | | | 1600 7000 0001 4044 ld r0,[0x14044]
106e0: | | | 0e06 ffcf bl -508 ;104e4 <.plt+0x60>
# printf("Opening Direction file %s\n",path);
106e4: | | | 40c3 0001 08e8 mov_s r0,0x108e8
106ea: | | | 0e3e ffef bl.d -452 ;10524 <.plt+0xa0>
106ee: | | | 4183 mov_s r1,sp
# fp = fopen(path,"w");
106f0: | | | 41c3 0001 0904 mov_s r1,0x10904
106f6: | | | 0db2 ffef bl.d -592 ;104a4 <.plt+0x20>
106fa: | | | 4083 mov_s r0,sp
106fc: | | | 1e00 7000 0001 4044 st r0,[0x14044]
# if(!fp)
10704: \--|--|-- 0831 8011 brne.nt r0,0,-208 ;10634 <io_init+0x38>
# printf("ERROR: Failed to open GPIO direction\n");
10708: | | 40c3 0001 0964 mov_s r0,0x10964
1070e: | | 0e2a ffcf bl -472 ;10534 <.plt+0xb0>
# exit(-1);
10712: | | 0e36 ffef bl.d -460 ;10544 <.plt+0xc0>
10716: | | 770c mov_s r0,-1
# printf("ERROR: Failed to export IO\n");
10718: | \-> 40c3 0001 0944 mov_s r0,0x10944
1071e: | 0e1a ffcf bl -488 ;10534 <.plt+0xb0>
# exit(-1);
10722: | 0e26 ffef bl.d -476 ;10544 <.plt+0xc0>
10726: | 770c mov_s r0,-1
# printf("ERROR: Failed to open GPIO value\n");
10728: \----> 40c3 0001 09c8 mov_s r0,0x109c8
1072e: 0e0a ffcf bl -504 ;10534 <.plt+0xb0>
# exit(-1);
10732: 0e16 ffef bl.d -492 ;10544 <.plt+0xc0>
10736: 770c mov_s r0,-1
00010738 <io_write>:
#
# void io_write(bool status)
# {
10738: c0f1 push_s blink
# fprintf(fp,(status) ? "1" : "0");
1073a: 262f f007 extb.f 0,r0
1073e: 41c3 0001 09ec mov_s r1,0x109ec
10744: 21ca 0f81 0001 09f0 mov.eq r1,0x109f0
1074c: 1600 7000 0001 4044 ld r0,[0x14044]
10754: 0d72 ffcf bl -656 ;104c4 <.plt+0x40>
# fflush(fp);
10758: 1600 7000 0001 4044 ld r0,[0x14044]
10760: 0da6 ffcf bl -604 ;10504 <.plt+0x80>
# }
10764: c0d1 pop_s blink
10766: 7ee0 j_s [blink]
00010768 <fsleep>:
#
# /* Float sleep function */
# void fsleep(double dur)
# {
10768: c0f1 push_s blink
1076a: c1a4 sub_s sp,sp,0x10
# struct timespec tim;
# tim.tv_sec = 0;
1076c: 1c00 3007 std 0,[sp]
# tim.tv_nsec = dur * 1000000000.0;
10770: 704c mov_s r2,0
10772: 43c3 41cd cd65 mov_s r3,0x41cdcd65
10778: 3030 0080 fdmul r0,r0,r2
1077c: 3079 02c0 fcvt64_32 r0,r0,0xb
10780: c042 st_s r0,[sp,0x8]
# nanosleep(&tim , NULL);
10782: 702c mov_s r1,0
10784: 0d92 ffef bl.d -624 ;10514 <.plt+0x90>
10788: 4083 mov_s r0,sp
# }
1078a: c0a4 add_s sp,sp,0x10
1078c: c0d1 pop_s blink
1078e: 7ee0 j_s [blink]
00010790 <morse_letter>:
# "----.", //9
# };
#
# /* Function is only correct for letters and numbers, nothing else */
# void morse_letter(const char let)
# {
10790: c0f1 push_s blink
10792: 1cf8 b40e std.aw r16r17,[sp,-8]
10796: 1cf8 b38e std.aw r14r15,[sp,-8]
1079a: c5e1 push_s r13
1079c: 790f extb_s r1,r0
# /* If it's a space, wait the space time and exit */
# if(let == ' ')
1079e: /-- 094d 0810 breq.nt r1,0x20,76 ;107e8 <morse_letter+0x58>
# return;
# }
#
# /* Find the string from the table */
# const char * pattern = ".";//Initialize to ensure it's always valid
# if(let >= '0' && let <= '9')
107a2: | 2142 0c02 sub r2,r1,0x30
107a6: | 7a4f extb_s r2,r2
107a8: /--|-- 0a5d 0295 brhs.nt r2,0xa,92 ;10804 <morse_letter+0x74>
# {
# pattern = morse_tbl[let - '0' + 26]; //For numbers
107ac: | | 2615 7042 ffff ffa8 add2 r2,0xffffffa8,r1
107b4: | | 2230 0f8d 0001 0b20 ld r13,[r2,0x10b20]
# else
# {
# printf("Invalid Letter %c\n",let);
# return;
# }
# printf("Letter %c to morse %s\n",let,pattern);
107bc: /-----|--|-> 40c3 0001 09fc mov_s r0,0x109fc
107c2: | | | 0d66 ffef bl.d -668 ;10524 <.plt+0xa0>
107c6: | | | 42a1 mov_s r2,r13
#
# /* Loop through remaining symbols and output them */
# while(pattern[0])
107c8: | | | 8d40 ldb_s r2,[r13,0]
107ca: /-----|-----|--|-- 0a89 0010 breq.nt r2,0,136 ;10850 <morse_letter+0xc0>
# {
# fsleep(time_dit);
# }
# else
# {
# fsleep(time_dah);
107ce: | | | | 40d3 7ae1 47ae mov_s r16,0x7ae147ae
107d4: | | | | 41d3 3fef ae14 mov_s r17,0x3fefae14
# fsleep(time_dit);
107da: | | | | 46cb 51eb 851f mov_s r14,0x51eb851f
107e0: | | | | 47cb 3fd5 1eb8 mov_s r15,0x3fd51eb8
107e6: | | /--|--|-- f02a b_s 84 ;10838 <morse_letter+0xa8>
# printf("Space\n");
107e8: | | | | \-> 40c3 0001 09f4 mov_s r0,0x109f4
107ee: | | | | 0d4a ffcf bl -696 ;10534 <.plt+0xb0>
# fsleep(time_word);
107f2: | | | | 40c3 51eb 851f mov_s r0,0x51eb851f
107f8: | | | | 41c3 3ff5 1eb8 mov_s r1,0x3ff51eb8
107fe: | | | | 0f6e ffcf bl -148 ;10768 <fsleep>
# return;
10802: | /--|--|--|----- f030 b_s 96 ;10860 <morse_letter+0xd0>
# pattern = morse_tbl[(let & 0x1F) - 1]; //For letters
10804: | | | | \----> 2144 07c2 and r2,r1,0x1f
10808: | | | | 2615 7082 ffff fffc add2 r2,0xfffffffc,r2
10810: | | | | 2230 0f8d 0001 0b20 ld r13,[r2,0x10b20]
10818: | | \--|-------- f1d2 b_s -92 ;107bc <morse_letter+0x2c>
1081a: | | | 78e0 nop_s
# fsleep(time_dit);
1081c: | | | /-> 2e7c 1000 vadd2 r0r1,r14r15,0
10820: | | | | 0f4a ffcf bl -184 ;10768 <fsleep>
# }
# /* Turn off output and wait off-time */
# io_write(0);
10824: | | | /--|-> 0f16 ffef bl.d -236 ;10738 <io_write>
10828: | | | | | 700c mov_s r0,0
# fsleep(time_space);
1082a: | | | | | 2e7c 1000 vadd2 r0r1,r14r15,0
1082e: | | | | | 0f3e ffcf bl -196 ;10768 <fsleep>
# while(pattern[0])
10832: | | | | | 1501 1282 ldb.aw r2,[r13,1]
10836: +--|-----|--|--|-- ea0e breq_s r2,0,28 ;10850 <morse_letter+0xc0>
# io_write(1);
10838: | | \--|--|-> 0f02 ffef bl.d -256 ;10738 <io_write>
1083c: | | | | 710c mov_s r0,1
# if(pattern[0] == '.')
1083e: | | | | 8d40 ldb_s r2,[r13,0]
10840: | | | \-- 0add 8b90 breq.nt r2,0x2e,-36 ;1081c <morse_letter+0x8c>
# fsleep(time_dah);
10844: | | | 287c 2000 vadd2 r0r1,r16r17,0
10848: | | | 0f22 ffcf bl -224 ;10768 <fsleep>
1084c: | | \----- f1ec b_s -40 ;10824 <morse_letter+0x94>
1084e: | | 78e0 nop_s
# /* Increment pointer */
# pattern++;
# };
# /* Wait additional character delay */
# fsleep(time_letter);
10850: \--|-------------> 40c3 51eb 851f mov_s r0,0x51eb851f
10856: | 41c3 3fe5 1eb8 mov_s r1,0x3fe51eb8
1085c: | 0f0e ffcf bl -244 ;10768 <fsleep>
# }
10860: \-------------> 1414 301f ld blink,[sp,20]
10864: c5c1 pop_s r13
10866: 1408 358e ldd.ab r14r15,[sp,8]
1086a: 140c 3590 ldd.ab r16r17,[sp,12]
1086e: 7ee0 j_s [blink]
00010870 <morse>:
#
# /* Output a string in morse code */
# void morse(const char * string)
# {
10870: c0f1 push_s blink
10872: c5e1 push_s r13
10874: 4508 mov_s r13,r0
# /* Output all letters in the string */
# while(string[0])
10876: 8800 ldb_s r0,[r0,0]
10878: /----- e806 breq_s r0,0,12 ;10884 <morse+0x14>
# {
# morse_letter(string[0]);
1087a: | /-> 0f1a ffcf bl -232 ;10790 <morse_letter>
# while(string[0])
1087e: | | 1501 1280 ldb.aw r0,[r13,1]
10882: | \-- e8fd brne_s r0,0,-6 ;1087a <morse+0xa>
# string++;
# }
# }
10884: \----> 1404 301f ld blink,[sp,4]
10888: 7fe0 j_s.d [blink]
1088a: 1408 340d ld.ab r13,[sp,8]
1088e: 78e0 nop_s
00010890 <main>:
# int main (int argc, char** argv) {
10890: c0f1 push_s blink
#
# printf("Hello from RISC-V!\n");
10892: 40c3 0001 0a14 mov_s r0,0x10a14
10898: 0c9e ffcf bl -868 ;10534 <.plt+0xb0>
# io_init(blinky);
1089c: 0d62 ffef bl.d -672 ;105fc <io_init>
108a0: 208a 0e06 mov r0,440
# morse("Hello World from RISC V");
108a4: 40c3 0001 0a28 mov_s r0,0x10a28
108aa: 0fca ffcf bl -56 ;10870 <morse>
# return 0;
108ae: 700c mov_s r0,0
108b0: c0d1 pop_s blink
108b2: 7ee0 j_s [blink]
Disassembly of section .fini:
000108b4 <_fini-0x4>:
108b4: /-- 0000 0000 b 0 ;108b4 <main+0x24>
000108b8 <_fini>:
108b8: c0f1 push_s blink
108ba: c0d1 pop_s blink
108bc: 7ee0 j_s [blink]
Contents of the .eh_frame section (loaded from a.out):
00000000 00000010 00000000 CIE
Version: 1
Augmentation: "zR"
Code alignment factor: 1
Data alignment factor: -4
Return address column: 31
Augmentation data: 1b
DW_CFA_def_cfa: r28 ofs 0
00000014 00000010 00000018 FDE cie=00000000 pc=00010564..0001058a
DW_CFA_undefined: r31
DW_CFA_nop
00000028 ZERO terminator
Contents of the .debug_aranges section (loaded from a.out):
Length: 28
Version: 2
Offset into .debug_info: 0
Pointer Size: 4
Segment Size: 0
Address Length
000105fc 000002b8
00000000 00000000
Contents of the .debug_info section (loaded from a.out):
Compilation Unit @ offset 0:
Length: 0x927 (32-bit)
Version: 5
Unit Type: DW_UT_compile (1)
Abbrev Offset: 0
Pointer Size: 4
<0><c>: Abbrev Number: 26 (DW_TAG_compile_unit)
<d> DW_AT_producer : (indirect string, offset: 0x91): GNU C99 12.2.0 -g -O1 -std=gnu99
<11> DW_AT_language : 12 (ANSI C99)
<12> DW_AT_name : (indirect string, offset: 0x126): ../morse.c
<16> DW_AT_comp_dir : (indirect string, offset: 0x71): /root/hello-world/arc-linux-gnu
<1a> DW_AT_low_pc : 0x105fc
<1e> DW_AT_high_pc : 0x2b8
<22> DW_AT_stmt_list : 0
<1><26>: Abbrev Number: 4 (DW_TAG_base_type)
<27> DW_AT_byte_size : 8
<28> DW_AT_encoding : 4 (float)
<29> DW_AT_name : (indirect string, offset: 0x13d): double
<1><2d>: Abbrev Number: 8 (DW_TAG_typedef)
<2e> DW_AT_name : (indirect string, offset: 0x26): size_t
<32> DW_AT_decl_file : 2
<33> DW_AT_decl_line : 214
<34> DW_AT_decl_column : 23
<35> DW_AT_type : <0x39>
<1><39>: Abbrev Number: 4 (DW_TAG_base_type)
<3a> DW_AT_byte_size : 4
<3b> DW_AT_encoding : 7 (unsigned)
<3c> DW_AT_name : (indirect string, offset: 0x5a): unsigned int
<1><40>: Abbrev Number: 4 (DW_TAG_base_type)
<41> DW_AT_byte_size : 1
<42> DW_AT_encoding : 8 (unsigned char)
<43> DW_AT_name : (indirect string, offset: 0x26c): unsigned char
<1><47>: Abbrev Number: 4 (DW_TAG_base_type)
<48> DW_AT_byte_size : 2
<49> DW_AT_encoding : 7 (unsigned)
<4a> DW_AT_name : (indirect string, offset: 0x186): short unsigned int
<1><4e>: Abbrev Number: 4 (DW_TAG_base_type)
<4f> DW_AT_byte_size : 4
<50> DW_AT_encoding : 7 (unsigned)
<51> DW_AT_name : (indirect string, offset: 0x55): long unsigned int
<1><55>: Abbrev Number: 4 (DW_TAG_base_type)
<56> DW_AT_byte_size : 1
<57> DW_AT_encoding : 6 (signed char)
<58> DW_AT_name : (indirect string, offset: 0x26e): signed char
<1><5c>: Abbrev Number: 4 (DW_TAG_base_type)
<5d> DW_AT_byte_size : 2
<5e> DW_AT_encoding : 5 (signed)
<5f> DW_AT_name : (indirect string, offset: 0x27a): short int
<1><63>: Abbrev Number: 27 (DW_TAG_base_type)
<64> DW_AT_byte_size : 4
<65> DW_AT_encoding : 5 (signed)
<66> DW_AT_name : int
<1><6a>: Abbrev Number: 12 (DW_TAG_const_type)
<6b> DW_AT_type : <0x63>
<1><6f>: Abbrev Number: 8 (DW_TAG_typedef)
<70> DW_AT_name : (indirect string, offset: 0xb2): __int64_t
<74> DW_AT_decl_file : 3
<75> DW_AT_decl_line : 47
<76> DW_AT_decl_column : 44
<77> DW_AT_type : <0x7b>
<1><7b>: Abbrev Number: 4 (DW_TAG_base_type)
<7c> DW_AT_byte_size : 8
<7d> DW_AT_encoding : 5 (signed)
<7e> DW_AT_name : (indirect string, offset: 0xbc): long long int
<1><82>: Abbrev Number: 4 (DW_TAG_base_type)
<83> DW_AT_byte_size : 8
<84> DW_AT_encoding : 7 (unsigned)
<85> DW_AT_name : (indirect string, offset: 0x50): long long unsigned int
<1><89>: Abbrev Number: 8 (DW_TAG_typedef)
<8a> DW_AT_name : (indirect string, offset: 0): __off_t
<8e> DW_AT_decl_file : 3
<8f> DW_AT_decl_line : 152
<90> DW_AT_decl_column : 25
<91> DW_AT_type : <0x6f>
<1><95>: Abbrev Number: 8 (DW_TAG_typedef)
<96> DW_AT_name : (indirect string, offset: 0x2c0): __off64_t
<9a> DW_AT_decl_file : 3
<9b> DW_AT_decl_line : 153
<9c> DW_AT_decl_column : 27
<9d> DW_AT_type : <0x6f>
<1><a1>: Abbrev Number: 4 (DW_TAG_base_type)
<a2> DW_AT_byte_size : 4
<a3> DW_AT_encoding : 5 (signed)
<a4> DW_AT_name : (indirect string, offset: 0xc1): long int
<1><a8>: Abbrev Number: 8 (DW_TAG_typedef)
<a9> DW_AT_name : (indirect string, offset: 0x2f3): __time_t
<ad> DW_AT_decl_file : 3
<ae> DW_AT_decl_line : 160
<af> DW_AT_decl_column : 26
<b0> DW_AT_type : <0x6f>
<1><b4>: Abbrev Number: 28 (DW_TAG_pointer_type)
<b5> DW_AT_byte_size : 4
<1><b6>: Abbrev Number: 6 (DW_TAG_pointer_type)
<b7> DW_AT_byte_size : 4
<b7> DW_AT_type : <0xbb>
<1><bb>: Abbrev Number: 4 (DW_TAG_base_type)
<bc> DW_AT_byte_size : 1
<bd> DW_AT_encoding : 8 (unsigned char)
<be> DW_AT_name : (indirect string, offset: 0x275): char
<1><c2>: Abbrev Number: 12 (DW_TAG_const_type)
<c3> DW_AT_type : <0xbb>
<1><c7>: Abbrev Number: 21 (DW_TAG_structure_type)
<c8> DW_AT_name : (indirect string, offset: 0x212): _IO_FILE
<cc> DW_AT_byte_size : 152
<cd> DW_AT_decl_file : 4
<ce> DW_AT_decl_line : 49
<cf> DW_AT_decl_column : 8
<cf> DW_AT_sibling : <0x24d>
<2><d3>: Abbrev Number: 2 (DW_TAG_member)
<d4> DW_AT_name : (indirect string, offset: 0x107): _flags
<d8> DW_AT_decl_file : 4
<d9> DW_AT_decl_line : 51
<da> DW_AT_decl_column : 7
<db> DW_AT_type : <0x63>
<df> DW_AT_data_member_location: 0
<2><e0>: Abbrev Number: 2 (DW_TAG_member)
<e1> DW_AT_name : (indirect string, offset: 0x8): _IO_read_ptr
<e5> DW_AT_decl_file : 4
<e6> DW_AT_decl_line : 54
<e7> DW_AT_decl_column : 9
<e8> DW_AT_type : <0xb6>
<ec> DW_AT_data_member_location: 4
<2><ed>: Abbrev Number: 2 (DW_TAG_member)
<ee> DW_AT_name : (indirect string, offset: 0xfa): _IO_read_end
<f2> DW_AT_decl_file : 4
<f3> DW_AT_decl_line : 55
<f4> DW_AT_decl_column : 9
<f5> DW_AT_type : <0xb6>
<f9> DW_AT_data_member_location: 8
<2><fa>: Abbrev Number: 2 (DW_TAG_member)
<fb> DW_AT_name : (indirect string, offset: 0x2ca): _IO_read_base
<ff> DW_AT_decl_file : 4
<100> DW_AT_decl_line : 56
<101> DW_AT_decl_column : 9
<102> DW_AT_type : <0xb6>
<106> DW_AT_data_member_location: 12
<2><107>: Abbrev Number: 2 (DW_TAG_member)
<108> DW_AT_name : (indirect string, offset: 0x339): _IO_write_base
<10c> DW_AT_decl_file : 4
<10d> DW_AT_decl_line : 57
<10e> DW_AT_decl_column : 9
<10f> DW_AT_type : <0xb6>
<113> DW_AT_data_member_location: 16
<2><114>: Abbrev Number: 2 (DW_TAG_member)
<115> DW_AT_name : (indirect string, offset: 0x178): _IO_write_ptr
<119> DW_AT_decl_file : 4
<11a> DW_AT_decl_line : 58
<11b> DW_AT_decl_column : 9
<11c> DW_AT_type : <0xb6>
<120> DW_AT_data_member_location: 20
<2><121>: Abbrev Number: 2 (DW_TAG_member)
<122> DW_AT_name : (indirect string, offset: 0x1e7): _IO_write_end
<126> DW_AT_decl_file : 4
<127> DW_AT_decl_line : 59
<128> DW_AT_decl_column : 9
<129> DW_AT_type : <0xb6>
<12d> DW_AT_data_member_location: 24
<2><12e>: Abbrev Number: 2 (DW_TAG_member)
<12f> DW_AT_name : (indirect string, offset: 0x43): _IO_buf_base
<133> DW_AT_decl_file : 4
<134> DW_AT_decl_line : 60
<135> DW_AT_decl_column : 9
<136> DW_AT_type : <0xb6>
<13a> DW_AT_data_member_location: 28
<2><13b>: Abbrev Number: 2 (DW_TAG_member)
<13c> DW_AT_name : (indirect string, offset: 0x10e): _IO_buf_end
<140> DW_AT_decl_file : 4
<141> DW_AT_decl_line : 61
<142> DW_AT_decl_column : 9
<143> DW_AT_type : <0xb6>
<147> DW_AT_data_member_location: 32
<2><148>: Abbrev Number: 2 (DW_TAG_member)
<149> DW_AT_name : (indirect string, offset: 0x199): _IO_save_base
<14d> DW_AT_decl_file : 4
<14e> DW_AT_decl_line : 64
<14f> DW_AT_decl_column : 9
<150> DW_AT_type : <0xb6>
<154> DW_AT_data_member_location: 36
<2><155>: Abbrev Number: 2 (DW_TAG_member)
<156> DW_AT_name : (indirect string, offset: 0x311): _IO_backup_base
<15a> DW_AT_decl_file : 4
<15b> DW_AT_decl_line : 65
<15c> DW_AT_decl_column : 9
<15d> DW_AT_type : <0xb6>
<161> DW_AT_data_member_location: 40
<2><162>: Abbrev Number: 2 (DW_TAG_member)
<163> DW_AT_name : (indirect string, offset: 0x2d8): _IO_save_end
<167> DW_AT_decl_file : 4
<168> DW_AT_decl_line : 66
<169> DW_AT_decl_column : 9
<16a> DW_AT_type : <0xb6>
<16e> DW_AT_data_member_location: 44
<2><16f>: Abbrev Number: 2 (DW_TAG_member)
<170> DW_AT_name : (indirect string, offset: 0x23c): _markers
<174> DW_AT_decl_file : 4
<175> DW_AT_decl_line : 68
<176> DW_AT_decl_column : 22
<177> DW_AT_type : <0x266>
<17b> DW_AT_data_member_location: 48
<2><17c>: Abbrev Number: 2 (DW_TAG_member)
<17d> DW_AT_name : (indirect string, offset: 0x15): _chain
<181> DW_AT_decl_file : 4
<182> DW_AT_decl_line : 70
<183> DW_AT_decl_column : 20
<184> DW_AT_type : <0x26b>
<188> DW_AT_data_member_location: 52
<2><189>: Abbrev Number: 2 (DW_TAG_member)
<18a> DW_AT_name : (indirect string, offset: 0xe2): _fileno
<18e> DW_AT_decl_file : 4
<18f> DW_AT_decl_line : 72
<190> DW_AT_decl_column : 7
<191> DW_AT_type : <0x63>
<195> DW_AT_data_member_location: 56
<2><196>: Abbrev Number: 2 (DW_TAG_member)
<197> DW_AT_name : (indirect string, offset: 0x1b5): _flags2
<19b> DW_AT_decl_file : 4
<19c> DW_AT_decl_line : 73
<19d> DW_AT_decl_column : 7
<19e> DW_AT_type : <0x63>
<1a2> DW_AT_data_member_location: 60
<2><1a3>: Abbrev Number: 2 (DW_TAG_member)
<1a4> DW_AT_name : (indirect string, offset: 0x144): _old_offset
<1a8> DW_AT_decl_file : 4
<1a9> DW_AT_decl_line : 74
<1aa> DW_AT_decl_column : 11
<1ab> DW_AT_type : <0x89>
<1af> DW_AT_data_member_location: 64
<2><1b0>: Abbrev Number: 2 (DW_TAG_member)
<1b1> DW_AT_name : (indirect string, offset: 0x11a): _cur_column
<1b5> DW_AT_decl_file : 4
<1b6> DW_AT_decl_line : 77
<1b7> DW_AT_decl_column : 18
<1b8> DW_AT_type : <0x47>
<1bc> DW_AT_data_member_location: 72
<2><1bd>: Abbrev Number: 2 (DW_TAG_member)
<1be> DW_AT_name : (indirect string, offset: 0x2a5): _vtable_offset
<1c2> DW_AT_decl_file : 4
<1c3> DW_AT_decl_line : 78
<1c4> DW_AT_decl_column : 15
<1c5> DW_AT_type : <0x55>
<1c9> DW_AT_data_member_location: 74
<2><1ca>: Abbrev Number: 2 (DW_TAG_member)
<1cb> DW_AT_name : (indirect string, offset: 0x2d): _shortbuf
<1cf> DW_AT_decl_file : 4
<1d0> DW_AT_decl_line : 79
<1d1> DW_AT_decl_column : 8
<1d2> DW_AT_type : <0x270>
<1d6> DW_AT_data_member_location: 75
<2><1d7>: Abbrev Number: 2 (DW_TAG_member)
<1d8> DW_AT_name : (indirect string, offset: 0x1a7): _lock
<1dc> DW_AT_decl_file : 4
<1dd> DW_AT_decl_line : 81
<1de> DW_AT_decl_column : 15
<1df> DW_AT_type : <0x280>
<1e3> DW_AT_data_member_location: 76
<2><1e4>: Abbrev Number: 2 (DW_TAG_member)
<1e5> DW_AT_name : (indirect string, offset: 0x148): _offset
<1e9> DW_AT_decl_file : 4
<1ea> DW_AT_decl_line : 89
<1eb> DW_AT_decl_column : 13
<1ec> DW_AT_type : <0x95>
<1f0> DW_AT_data_member_location: 80
<2><1f1>: Abbrev Number: 2 (DW_TAG_member)
<1f2> DW_AT_name : (indirect string, offset: 0x134): _codecvt
<1f6> DW_AT_decl_file : 4
<1f7> DW_AT_decl_line : 91
<1f8> DW_AT_decl_column : 23
<1f9> DW_AT_type : <0x28a>
<1fd> DW_AT_data_member_location: 88
<2><1fe>: Abbrev Number: 2 (DW_TAG_member)
<1ff> DW_AT_name : (indirect string, offset: 0x287): _wide_data
<203> DW_AT_decl_file : 4
<204> DW_AT_decl_line : 92
<205> DW_AT_decl_column : 25
<206> DW_AT_type : <0x294>
<20a> DW_AT_data_member_location: 92
<2><20b>: Abbrev Number: 2 (DW_TAG_member)
<20c> DW_AT_name : (indirect string, offset: 0x326): _freeres_list
<210> DW_AT_decl_file : 4
<211> DW_AT_decl_line : 93
<212> DW_AT_decl_column : 20
<213> DW_AT_type : <0x26b>
<217> DW_AT_data_member_location: 96
<2><218>: Abbrev Number: 2 (DW_TAG_member)
<219> DW_AT_name : (indirect string, offset: 0x163): _freeres_buf
<21d> DW_AT_decl_file : 4
<21e> DW_AT_decl_line : 94
<21f> DW_AT_decl_column : 9
<220> DW_AT_type : <0xb4>
<224> DW_AT_data_member_location: 100
<2><225>: Abbrev Number: 2 (DW_TAG_member)
<226> DW_AT_name : (indirect string, offset: 0x2ec): __pad5
<22a> DW_AT_decl_file : 4
<22b> DW_AT_decl_line : 95
<22c> DW_AT_decl_column : 10
<22d> DW_AT_type : <0x2d>
<231> DW_AT_data_member_location: 104
<2><232>: Abbrev Number: 2 (DW_TAG_member)
<233> DW_AT_name : (indirect string, offset: 0x1bd): _mode
<237> DW_AT_decl_file : 4
<238> DW_AT_decl_line : 96
<239> DW_AT_decl_column : 7
<23a> DW_AT_type : <0x63>
<23e> DW_AT_data_member_location: 108
<2><23f>: Abbrev Number: 2 (DW_TAG_member)
<240> DW_AT_name : (indirect string, offset: 0x2fc): _unused2
<244> DW_AT_decl_file : 4
<245> DW_AT_decl_line : 98
<246> DW_AT_decl_column : 8
<247> DW_AT_type : <0x299>
<24b> DW_AT_data_member_location: 112
<2><24c>: Abbrev Number: 0
<1><24d>: Abbrev Number: 8 (DW_TAG_typedef)
<24e> DW_AT_name : (indirect string, offset: 0x216): FILE
<252> DW_AT_decl_file : 5
<253> DW_AT_decl_line : 7
<254> DW_AT_decl_column : 25
<255> DW_AT_type : <0xc7>
<1><259>: Abbrev Number: 29 (DW_TAG_typedef)
<25a> DW_AT_name : (indirect string, offset: 0x1fe): _IO_lock_t
<25e> DW_AT_decl_file : 4
<25f> DW_AT_decl_line : 43
<260> DW_AT_decl_column : 14
<1><261>: Abbrev Number: 16 (DW_TAG_structure_type)
<262> DW_AT_name : (indirect string, offset: 0x158): _IO_marker
<266> DW_AT_declaration : 1
<1><266>: Abbrev Number: 6 (DW_TAG_pointer_type)
<267> DW_AT_byte_size : 4
<267> DW_AT_type : <0x261>
<1><26b>: Abbrev Number: 6 (DW_TAG_pointer_type)
<26c> DW_AT_byte_size : 4
<26c> DW_AT_type : <0xc7>
<1><270>: Abbrev Number: 13 (DW_TAG_array_type)
<271> DW_AT_type : <0xbb>
<275> DW_AT_sibling : <0x280>
<2><279>: Abbrev Number: 14 (DW_TAG_subrange_type)
<27a> DW_AT_type : <0x39>
<27e> DW_AT_upper_bound : 0
<2><27f>: Abbrev Number: 0
<1><280>: Abbrev Number: 6 (DW_TAG_pointer_type)
<281> DW_AT_byte_size : 4
<281> DW_AT_type : <0x259>
<1><285>: Abbrev Number: 16 (DW_TAG_structure_type)
<286> DW_AT_name : (indirect string, offset: 0x131): _IO_codecvt
<28a> DW_AT_declaration : 1
<1><28a>: Abbrev Number: 6 (DW_TAG_pointer_type)
<28b> DW_AT_byte_size : 4
<28b> DW_AT_type : <0x285>
<1><28f>: Abbrev Number: 16 (DW_TAG_structure_type)
<290> DW_AT_name : (indirect string, offset: 0x284): _IO_wide_data
<294> DW_AT_declaration : 1
<1><294>: Abbrev Number: 6 (DW_TAG_pointer_type)
<295> DW_AT_byte_size : 4
<295> DW_AT_type : <0x28f>
<1><299>: Abbrev Number: 13 (DW_TAG_array_type)
<29a> DW_AT_type : <0xbb>
<29e> DW_AT_sibling : <0x2a9>
<2><2a2>: Abbrev Number: 14 (DW_TAG_subrange_type)
<2a3> DW_AT_type : <0x39>
<2a7> DW_AT_upper_bound : 39
<2><2a8>: Abbrev Number: 0
<1><2a9>: Abbrev Number: 6 (DW_TAG_pointer_type)
<2aa> DW_AT_byte_size : 4
<2aa> DW_AT_type : <0x24d>
<1><2ae>: Abbrev Number: 22 (DW_TAG_restrict_type)
<2af> DW_AT_type : <0x2a9>
<1><2b3>: Abbrev Number: 21 (DW_TAG_structure_type)
<2b4> DW_AT_name : (indirect string, offset: 0x29c): timespec
<2b8> DW_AT_byte_size : 16
<2b9> DW_AT_decl_file : 6
<2ba> DW_AT_decl_line : 11
<2bb> DW_AT_decl_column : 8
<2bb> DW_AT_sibling : <0x2da>
<2><2bf>: Abbrev Number: 2 (DW_TAG_member)
<2c0> DW_AT_name : (indirect string, offset: 0x1e0): tv_sec
<2c4> DW_AT_decl_file : 6
<2c5> DW_AT_decl_line : 16
<2c6> DW_AT_decl_column : 12
<2c7> DW_AT_type : <0xa8>
<2cb> DW_AT_data_member_location: 0
<2><2cc>: Abbrev Number: 2 (DW_TAG_member)
<2cd> DW_AT_name : (indirect string, offset: 0x1d8): tv_nsec
<2d1> DW_AT_decl_file : 6
<2d2> DW_AT_decl_line : 27
<2d3> DW_AT_decl_column : 12
<2d4> DW_AT_type : <0xa1>
<2d8> DW_AT_data_member_location: 8
<2><2d9>: Abbrev Number: 0
<1><2da>: Abbrev Number: 12 (DW_TAG_const_type)
<2db> DW_AT_type : <0x2b3>
<1><2df>: Abbrev Number: 6 (DW_TAG_pointer_type)
<2e0> DW_AT_byte_size : 4
<2e0> DW_AT_type : <0xc2>
<1><2e4>: Abbrev Number: 22 (DW_TAG_restrict_type)
<2e5> DW_AT_type : <0x2df>
<1><2e9>: Abbrev Number: 30 (DW_TAG_variable)
<2ea> DW_AT_name : (indirect string, offset: 0xdb): blinky
<2ee> DW_AT_decl_file : 1
<2ef> DW_AT_decl_line : 12
<2f0> DW_AT_decl_column : 18
<2f1> DW_AT_type : <0x6a>
<2f5> DW_AT_const_value : 440
<1><2f7>: Abbrev Number: 23 (DW_TAG_variable)
<2f8> DW_AT_name : fp
<2fb> DW_AT_decl_file : 1
<2fb> DW_AT_decl_line : 17
<2fc> DW_AT_decl_column : 14
<2fd> DW_AT_type : <0x2a9>
<301> DW_AT_location : 5 byte block: 3 44 40 1 0 (DW_OP_addr: 14044)
<1><307>: Abbrev Number: 9 (DW_TAG_variable)
<308> DW_AT_name : (indirect string, offset: 0x252): time_dit
<30c> DW_AT_decl_file : 1
<30c> DW_AT_decl_line : 85
<30d> DW_AT_decl_column : 21
<30d> DW_AT_type : <0x31a>
<311> DW_AT_const_value : 8 byte block: 1f 85 eb 51 b8 1e d5 3f
<1><31a>: Abbrev Number: 12 (DW_TAG_const_type)
<31b> DW_AT_type : <0x26>
<1><31f>: Abbrev Number: 9 (DW_TAG_variable)
<320> DW_AT_name : (indirect string, offset: 0x1f5): time_dah
<324> DW_AT_decl_file : 1
<324> DW_AT_decl_line : 86
<325> DW_AT_decl_column : 21
<325> DW_AT_type : <0x31a>
<329> DW_AT_const_value : 8 byte block: ae 47 e1 7a 14 ae ef 3f
<1><332>: Abbrev Number: 9 (DW_TAG_variable)
<333> DW_AT_name : (indirect string, offset: 0x25b): time_space
<337> DW_AT_decl_file : 1
<337> DW_AT_decl_line : 88
<338> DW_AT_decl_column : 21
<338> DW_AT_type : <0x31a>
<33c> DW_AT_const_value : 8 byte block: 1f 85 eb 51 b8 1e d5 3f
<1><345>: Abbrev Number: 9 (DW_TAG_variable)
<346> DW_AT_name : (indirect string, offset: 0x21b): time_letter
<34a> DW_AT_decl_file : 1
<34a> DW_AT_decl_line : 90
<34b> DW_AT_decl_column : 21
<34b> DW_AT_type : <0x31a>
<34f> DW_AT_const_value : 8 byte block: 1f 85 eb 51 b8 1e e5 3f
<1><358>: Abbrev Number: 9 (DW_TAG_variable)
<359> DW_AT_name : (indirect string, offset: 0x1c): time_word
<35d> DW_AT_decl_file : 1