The enclosed program (extract.c) is an extract from my larger code. When compiled this way:
msp430-elf-gcc -Os -g -c extract.c
the resulting object code ends up incorrect. See the enclosed object dump file (dump.txt) with my annotations.
Description:
The program (function qfree) amounts to two loops. When the second loop is entered, variable chunk (held in r14) is not initialized properly, but its value as left by the previous loop is incorrectly assumed. The problem disappears when chunk is declared as volatile.
typedef unsigned int word;
typedef word *address;
static address *mpools;
#define m_nextp(c) ((address)(*(c)))
#define m_setnextp(c,p) (*(c) = (word)(p))
#define m_size(c) (*((c)-1))
#define m_magic(c) (*((c)+1))
#define m_hdrlen 1
#define MA_NP 0
#define NULL 0
static void qfree (address ch) {
#if 0
// Trying to circumvent a bug in TI MSPGCC
volatile
#endif
address chunk, cc;
cc = (address)(mpools + MA_NP);
for (chunk = mpools [MA_NP]; chunk != NULL; chunk = m_nextp (chunk)) {
if (chunk + m_size (chunk) + m_hdrlen == ch) {
/* Merge at the front */
m_setnextp (cc, m_nextp (chunk));
m_size (chunk) += m_hdrlen + m_size (ch);
ch = chunk;
} else if (ch + m_size (ch) + m_hdrlen == chunk) {
/* Merge at the back */
m_setnextp (cc, m_nextp (chunk));
m_size (ch) += m_hdrlen + m_size (chunk);
} else {
/* Skip */
cc = chunk;
}
}
/* Insert */
cc = (address)(mpools + MA_NP);
for (chunk = mpools [MA_NP]; chunk != NULL; cc = chunk,
chunk = m_nextp (chunk))
if (m_size (chunk) >= m_size (ch))
break;
m_setnextp (ch, chunk);
m_setnextp (cc, ch);
m_magic (ch) = 0xdeaf;
}
void initializer (address *a) {
mpools = a;
}
void freeer (address a) {
qfree (a);
}
void secondfreer (address a) {
// To prevent inline compilation (for clarity)
qfree (a + 2);
}
extract.o: file format elf32-msp430
Disassembly of section .text:
00000000 <qfree>:
qfree():
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:15
0: 1a 15 pushm #2, r10 ;16-bit words
00000002 <.LCFI0>:
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:23
2: 1b 42 00 00 mov &0x0000,r11 ;0x0000
00000006 <.LVL1>:
// ===============================================
// PG: initializing chunk for the first loop (r14)
// ===============================================
6: 2e 4b mov @r11, r14 ;
00000008 <.LVL2>:
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:25
8: 0a 4b mov r11, r10 ;
a: 0d 4e mov r14, r13 ;
0000000c <.L2>:
c: 0d 93 cmp #0, r13 ;r3 As==00
// ==============================================================
// PG: this exits the first loop and enters the second one at .L6
// ==============================================================
e: 00 24 jz $+2 ;abs 0x10
00000010 <.Loc.26.1>:
10: 1f 4d fe ff mov -2(r13),r15 ;
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:25 (discriminator 1)
14: 1f 53 inc r15 ;
16: 0f 5f rla r15 ;
18: 0f 5d add r13, r15 ;
1a: 29 4d mov @r13, r9 ;
// =============
// PG: r12 is ch
// =============
1c: 0c 9f cmp r15, r12 ;
1e: 00 20 jnz $+2 ;abs 0x20
00000020 <.Loc.28.1>:
20: 8a 49 00 00 mov r9, 0(r10) ;
00000024 <.Loc.29.1>:
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:26
24: 1c 4c fe ff mov -2(r12),r12 ;
00000028 <.LVL4>:
28: 1c 5d fe ff add -2(r13),r12 ;
2c: 1c 53 inc r12 ;
2e: 8d 4c fe ff mov r12, -2(r13) ; 0xfffe
00000032 <.LVL5>:
32: 0c 4d mov r13, r12 ;
34: 30 40 00 00 br #0x0000 ;
00000038 <.L3>:
38: 1f 4c fe ff mov -2(r12),r15 ;
3c: 1f 53 inc r15 ;
3e: 0f 5f rla r15 ;
40: 0f 5c add r12, r15 ;
42: 0d 9f cmp r15, r13 ;
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:28
44: 00 20 jnz $+2 ;abs 0x46
00000046 <.Loc.33.1>:
46: 8a 49 00 00 mov r9, 0(r10) ;
0000004a <.Loc.34.1>:
4a: 1f 4c fe ff mov -2(r12),r15 ;
4e: 1f 5d fe ff add -2(r13),r15 ;
52: 1f 53 inc r15 ;
54: 8c 4f fe ff mov r15, -2(r12) ; 0xfffe
58: 30 40 00 00 br #0x0000 ;
0000005c <.L9>:
5c: 0a 4d mov r13, r10 ;
0000005e <.L4>:
5e: 2d 4d mov @r13, r13 ;
60: 30 40 00 00 br #0x0000 ;
00000064 <.L8>:
// ==========================================
// PG: if (m_size (chunk) >= m_size (ch)) ...
// ==========================================
64: 9e 9c fe ff cmp -2(r12),-2(r14) ; 0xfffe
68: fe ff
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:29
6a: 00 2c jc $+2 ;abs 0x6c
0000006c <.LVL10>:
// ===================================================================
// PG: What is in r14 now??? It is used here as chunk, but it is never
// initialized for the second loop!!!
// ===================================================================
6c: 0b 4e mov r14, r11 ;
6e: 2e 4e mov @r14, r14 ;
00000070 <.L6>:
// ======================================================================
// PG: Here is actually where the second loop is entered with r14 left as
// it was at the end of the first loop!
// ======================================================================
70: 0e 93 cmp #0, r14 ;r3 As==00
72: 00 20 jnz $+2 ;abs 0x74
00000074 <.L7>:
74: 8c 4e 00 00 mov r14, 0(r12) ;
00000078 <.Loc.49.1>:
78: 8b 4c 00 00 mov r12, 0(r11) ;
0000007c <.Loc.50.1>:
7c: bc 40 af de mov #57007, 2(r12) ;#0xdeaf
80: 02 00
00000082 <.Loc.52.1>:
82: 19 17 popm #2, r10 ;16-bit words
84: 30 41 ret
// ============================================================================
// ============================================================================
// ============================================================================
00000086 <initializer>:
initializer():
86: 82 4c 00 00 mov r12, &0x0000 ;
0000008a <.Loc.56.1>:
8a: 30 41 ret
0000008c <freeer>:
8c: b0 12 00 00 call #0 ;
00000090 <.LVL14>:
90: 30 41 ret
00000092 <secondfreer>:
92: 2c 52 add #4, r12 ;r2 As==10
00000094 <.LVL16>:
94: b0 12 00 00 call #0 ;
00000098 <.LVL17>:
98: 30 41 ret
Disassembly of section .bss:
00000000 <mpools>:
...
Disassembly of section .debug_frame:
00000000 <.debug_frame>:
qfree():
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:15
0: 10 00 bra @r0+ ;
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:23
2: 00 00 beq
4: ff ff .word 0xffff; ????
6: ff ff .word 0xffff; ????
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:25
8: 03 00 mova @r0, r3 ;
a: 01 7e subc r14, r1 ;
c: 00 0c bra @r12 ;
e: 01 02 mova @r2, r1 ;
10: 80 01 00 00 mova #65536, r0 ;0x10000
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:25 (discriminator 1)
14: 18 00 mova @r0+, r8 ;
...
22: 00 00 beq
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:26
24: 04 00 mova @r0, r4 ;
26: 00 00 beq
28: 00 0e bra @r14 ;
2a: 06 8a sub r10, r6 ;
2c: 02 89 sub r9, r2 ;
2e: 03 00 mova @r0, r3 ;
30: 0c 00 mova @r0, r12 ;
...
3e: 00 00 beq
40: 0c 00 mova @r0, r12 ;
...
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:28
4e: 00 00 beq
50: 0c 00 mova @r0, r12 ;
...
Disassembly of section .debug_info:
00000000 <.debug_info>:
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:15
0: 28 01 00 00 mova &65536, r8 ;0x10000
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:23
4: 04 00 mova @r0, r4 ;
6: 00 00 beq
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:25
8: 00 00 beq
a: 04 01 mova @r1, r4 ;
c: 00 00 beq
e: 00 00 beq
10: 0c 00 mova @r0, r12 ;
...
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:25 (discriminator 1)
22: 00 00 beq
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:26
24: 00 02 bra @r2 ;
26: 00 00 beq
28: 00 00 beq
2a: 01 01 mova @r1, r1 ;
2c: 30 00 00 00 bra 0(r0) ;
30: 03 02 mova @r2, r3 ;
32: 07 00 mova @r0, r7 ;
34: 00 00 beq
36: 00 02 bra @r2 ;
38: 00 00 beq
3a: 00 00 beq
3c: 01 02 mova @r2, r1 ;
3e: 42 00 rrcm.a #1, r2 ;
40: 00 00 beq
42: 04 02 mova @r2, r4 ;
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:28
44: 25 00 00 00 mova &0, r5 ;
48: 05 00 mova @r0, r5 ;
4a: 00 00 beq
4c: 00 01 bra @r1 ;
4e: 0f 00 mova @r0, r15 ;
50: 00 00 beq
52: 00 00 beq
54: 00 00 beq
56: 00 01 bra @r1 ;
58: 9c 89 00 00 sub 0(r9), 1536(r12); 0x0600
5c: 00 06
5e: 63 68 .word 0x6863; ????
60: 00 01 bra @r1 ;
62: 0f 37 jge $-480 ;abs 0xfffffe82
64: 00 00 beq
66: 00 00 beq
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:29
68: 00 00 beq
6a: 00 07 bra @r7 ;
6c: 00 00 beq
6e: 00 00 beq
70: 01 15 pushm #1, r1 ;16-bit words
72: 37 00 00 00 mova 0(r0), r7 ;
76: 00 00 beq
78: 00 00 beq
7a: 08 63 adc r8 ;
7c: 63 00 01 15 mova r0, &201985 ; 0x31501
80: 37 00 00 00 mova 0(r0), r7 ;
84: 00 00 beq
initializer():
86: 00 00 beq
88: 00 09 bra @r9 ;
8a: 00 00 beq
8c: 00 00 beq
8e: 01 36 jge $-1020 ;abs 0xfffffc92
...
98: 01 9c cmp r12, r1 ;
9a: aa 00 00 00 adda #0, r10 ;
9e: 0a 61 addc r1, r10 ;
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:31
a0: 00 01 bra @r1 ;
a2: 36 aa dadd @r10+, r6 ;
a4: 00 00 beq
a6: 00 01 bra @r1 ;
a8: 5c 00 rrcm #1, r12 ;
aa: 04 02 mova @r2, r4 ;
ac: 37 00 00 00 mova 0(r0), r7 ;
b0: 09 00 mova @r0, r9 ;
b2: 00 00 beq
b4: 00 01 bra @r1 ;
b6: 3a 00 00 00 mova 0(r0), r10 ;
ba: 00 00 beq
bc: 00 00 beq
be: 00 01 bra @r1 ;
c0: 9c e4 00 00 xor 0(r4), 1536(r12); 0x0600
c4: 00 06
c6: 61 00 01 3a mova r0, &80385 ; 0x13a01
ca: 37 00 00 00 mova 0(r0), r7 ;
ce: 00 00 beq
d0: 00 00 beq
d2: 0b 00 mova @r0, r11 ;
d4: 00 00 beq
d6: 00 48 br r8 ;
d8: 00 00 beq
da: 00 0c bra @r12 ;
dc: 01 5c add r12, r1 ;
de: 03 f3 .word 0xf303; ????
e0: 01 5c add r12, r1 ;
e2: 00 00 beq
e4: 09 00 mova @r0, r9 ;
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:33
e6: 00 00 beq
e8: 00 01 bra @r1 ;
ea: 3e 00 00 00 mova 0(r0), r14 ;
ee: 00 00 beq
f0: 00 00 beq
f2: 00 01 bra @r1 ;
f4: 9c 1a 01 00 rpt r12 { movax @r0, r1 ;
f8: 00 06 bra @r6 ;
fa: 61 00 01 3e mova r0, &81409 ; 0x13e01
fe: 37 00 00 00 mova 0(r0), r7 ;
102: 00 00 beq
104: 00 00 beq
106: 0b 00 mova @r0, r11 ;
108: 00 00 beq
10a: 00 48 br r8 ;
10c: 00 00 beq
10e: 00 0c bra @r12 ;
110: 01 5c add r12, r1 ;
112: 05 f3 and #0, r5 ;r3 As==00
114: 01 5c add r12, r1 ;
116: 23 04 00 00 mova &262144,r3 ;0x40000
11a: 0d 00 mova @r0, r13 ;
11c: 00 00 beq
11e: 00 01 bra @r1 ;
120: 04 aa dadd r10, r4 ;
122: 00 00 beq
124: 00 05 bra @r5 ;
126: 03 00 mova @r0, r3 ;
128: 00 00 beq
...
Disassembly of section .debug_abbrev:
00000000 <.debug_abbrev>:
qfree():
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:15
0: 01 11 rra r1 ;
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:23
2: 01 25 jz $+516 ;abs 0x206
4: 0e 13 reti ;return from interupt
6: 0b 03 mova @r3, r11 ;
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:25
8: 0e 1b 0e 11 rpt #15 { rrax.? r14 ; Reserved use of A/L and B/W bits detected
c: 01 12 push r1 ;
e: 06 10 rrc r6 ;
10: 17 00 mova @r0+, r7 ;
12: 00 02 bra @r2 ;
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:25 (discriminator 1)
14: 16 00 mova @r0+, r6 ;
16: 03 0e mova @r14, r3 ;
18: 3a 0b 3b 0b mova 2875(r11),r10 ;0x00b3b
1c: 49 13 calla r9 ;
1e: 00 00 beq
20: 03 24 jz $+8 ;abs 0x28
22: 00 0b bra @r11 ;
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:26
24: 0b 3e jmp $-1000 ;abs 0xfffffc3c
26: 0b 03 mova @r3, r11 ;
28: 0e 00 mova @r0, r14 ;
2a: 00 04 bra @r4 ;
2c: 0f 00 mova @r0, r15 ;
2e: 0b 0b mova @r11, r11 ;
30: 49 13 calla r9 ;
32: 00 00 beq
34: 05 2e jc $-1012 ;abs 0xfffffc40
36: 01 03 mova @r3, r1 ;
38: 0e 3a jl $-994 ;abs 0xfffffc56
3a: 0b 3b jl $-488 ;abs 0xfffffe52
3c: 0b 27 jz $-488 ;abs 0xfffffe54
3e: 19 11 01 12 rra 4609(r9) ;01201
42: 06 40 mov r0, r6 ;
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:28
44: 18 97 42 19 cmp 6466(r7),r8 ;0x01942
48: 01 13 reti ;return from interupt
4a: 00 00 beq
4c: 06 05 mova @r5, r6 ;
4e: 00 03 bra @r3 ;
50: 08 3a jl $-1006 ;abs 0xfffffc62
52: 0b 3b jl $-488 ;abs 0xfffffe6a
54: 0b 49 mov r9, r11 ;
56: 13 02 mova @r2+, r3 ;
58: 17 00 mova @r0+, r7 ;
5a: 00 07 bra @r7 ;
5c: 34 00 03 0e mova 3587(r0),r4 ;PC rel. 0x00e61
60: 3a 0b 3b 0b mova 2875(r11),r10 ;0x00b3b
64: 49 13 calla r9 ;
66: 02 17 popm #1, r2 ;16-bit words
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:29
68: 00 00 beq
6a: 08 34 jge $+18 ;abs 0x7c
6c: 00 03 bra @r3 ;
6e: 08 3a jl $-1006 ;abs 0xfffffc80
70: 0b 3b jl $-488 ;abs 0xfffffe88
72: 0b 49 mov r9, r11 ;
74: 13 02 mova @r2+, r3 ;
76: 17 00 mova @r0+, r7 ;
78: 00 09 bra @r9 ;
7a: 2e 01 3f 19 mova &71999, r14 ;0x1193f
7e: 03 0e mova @r14, r3 ;
80: 3a 0b 3b 0b mova 2875(r11),r10 ;0x00b3b
84: 27 19 11 01 rpt #8 { movax @r1+, r1 ;
initializer():
88: 12 06 mova @r6+, r2 ;
8a: 40 18 97 42 movx.w &0x00119,19(r7) ; 0x00013
8e: 19 01 13 00
92: 00 0a bra @r10 ;
94: 05 00 mova @r0, r5 ;
96: 03 08 mova @r8, r3 ;
98: 3a 0b 3b 0b mova 2875(r11),r10 ;0x00b3b
9c: 49 13 calla r9 ;
9e: 02 18 00 00 rpt #3 { beqx
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:31
a2: 0b 89 sub r9, r11 ;
a4: 82 01 01 11 mova #69889, r2 ;0x11101
a8: 01 31 jn $+516 ;abs 0x2ac
aa: 13 00 mova @r0+, r3 ;
ac: 00 0c bra @r12 ;
ae: 8a 82 01 00 sub r2, 1(r10) ;
b2: 02 18 91 42 movx.? &0x00018,134400(r1); Reserved use of A/L and B/W bits detected
b6: 18 00 00 0d
ba: 34 00 03 0e mova 3587(r0),r4 ;PC rel. 0x00ebf
be: 3a 0b 3b 0b mova 2875(r11),r10 ;0x00b3b
c2: 49 13 calla r9 ;
c4: 02 18 00 00 rpt #3 { beqx
...
Disassembly of section .debug_loc:
00000000 <.debug_loc>:
...
qfree():
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:25
8: 01 00 mova @r0, r1 ;
a: 5c 00 rrcm #1, r12 ;
c: 00 00 beq
e: 00 00 beq
10: 00 00 beq
12: 00 01 bra @r1 ;
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:25 (discriminator 1)
14: 00 5d add r13, r0 ;
...
1e: 01 00 mova @r0, r1 ;
20: 5c 00 rrcm #1, r12 ;
...
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:26
2e: 00 00 beq
30: 00 01 bra @r1 ;
32: 00 5e add r14, r0 ;
...
3c: 01 00 mova @r0, r1 ;
3e: 5d 00 rrcm #1, r13 ;
40: 00 00 beq
42: 00 00 beq
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:28
44: 00 00 beq
46: 00 01 bra @r1 ;
48: 00 5e add r14, r0 ;
...
52: 02 00 mova @r0, r2 ;
54: 7e 00 00 00 mova r0, 0(r14) ;
58: 00 00 beq
5a: 00 00 beq
5c: 00 00 beq
5e: 01 00 mova @r0, r1 ;
60: 5e 00 rrcm #1, r14 ;
...
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:29
6e: 00 00 beq
70: 00 01 bra @r1 ;
72: 00 5b add r11, r0 ;
...
7c: 01 00 mova @r0, r1 ;
7e: 5a 00 rrcm #1, r10 ;
80: 00 00 beq
82: 00 00 beq
84: 00 00 beq
initializer():
86: 00 01 bra @r1 ;
88: 00 5b add r11, r0 ;
...
92: 01 00 mova @r0, r1 ;
94: 5e 00 rrcm #1, r14 ;
96: 00 00 beq
98: 00 00 beq
9a: 00 00 beq
9c: 00 01 bra @r1 ;
9e: 00 5b add r11, r0 ;
...
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:31
b0: 01 00 mova @r0, r1 ;
b2: 5c 00 rrcm #1, r12 ;
b4: 00 00 beq
b6: 00 00 beq
b8: 00 00 beq
ba: 00 04 bra @r4 ;
bc: 00 f3 and #0, r0 ;r3 As==00
be: 01 5c add r12, r1 ;
c0: 9f 00 00 00 cmpa #0, r15 ;
...
d0: 00 01 bra @r1 ;
d2: 00 5c add r12, r0 ;
...
dc: 03 00 mova @r0, r3 ;
de: 7c 7c subc.b @r12+, r12 ;
e0: 9f 00 00 00 cmpa #0, r15 ;
e4: 00 00 beq
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:33
e6: 00 00 beq
e8: 00 04 bra @r4 ;
ea: 00 f3 and #0, r0 ;r3 As==00
ec: 01 5c add r12, r1 ;
ee: 9f 00 00 00 cmpa #0, r15 ;
f2: 00 00 beq
f4: 00 00 beq
...
Disassembly of section .debug_aranges:
00000000 <.debug_aranges>:
qfree():
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:15
0: 1c 00 mova @r0+, r12 ;
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:23
2: 00 00 beq
4: 02 00 mova @r0, r2 ;
6: 00 00 beq
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:25
8: 00 00 beq
a: 04 00 mova @r0, r4 ;
...
Disassembly of section .debug_line:
00000000 <L0>:
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:15
0: e0 00 adda r0, r0 ;
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:23
2: 00 00 beq
4: 02 00 mova @r0, r2 ;
6: 20 00 00 00 bra &0 ;
0000000a <L0>:
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:25
a: 01 01 mova @r1, r1 ;
c: fb 0e suba r14, r11 ;
e: 0d 00 mova @r0, r13 ;
10: 01 01 mova @r1, r1 ;
12: 01 01 mova @r1, r1 ;
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:25 (discriminator 1)
14: 00 00 beq
16: 00 01 bra @r1 ;
18: 00 00 beq
1a: 01 00 mova @r0, r1 ;
1c: 65 78 subc.b @r8, r5 ;
1e: 74 72 subc.b #8, r4 ;r2 As==11
20: 61 63 addc.b #2, r1 ;r3 As==10
22: 74 2e jc $-790 ;abs 0xfffffd0c
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:26
24: 63 00 00 00 mova r0, &196608 ; 0x30000
28: 00 00 beq
2a: 00 05 bra @r5 ;
2c: 02 00 mova @r0, r2 ;
2e: 00 00 beq
30: 00 03 bra @r3 ;
32: 0e 01 mova @r1, r14 ;
34: 03 08 mova @r8, r3 ;
36: 09 00 mova @r0, r9 ;
38: 00 01 bra @r1 ;
3a: 03 02 mova @r2, r3 ;
3c: 09 00 mova @r0, r9 ;
3e: 00 01 bra @r1 ;
40: 00 02 bra @r2 ;
42: 04 01 mova @r1, r4 ;
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:28
44: 06 03 mova @r3, r6 ;
46: 00 09 bra @r9 ;
48: 00 00 beq
4a: 01 06 mova @r6, r1 ;
4c: 03 01 mova @r1, r3 ;
4e: 09 00 mova @r0, r9 ;
50: 00 01 bra @r1 ;
52: 03 02 mova @r2, r3 ;
54: 09 00 mova @r0, r9 ;
56: 00 01 bra @r1 ;
58: 03 01 mova @r1, r3 ;
5a: 09 00 mova @r0, r9 ;
5c: 00 01 bra @r1 ;
5e: 03 02 mova @r2, r3 ;
60: 09 00 mova @r0, r9 ;
62: 00 01 bra @r1 ;
64: 03 02 mova @r2, r3 ;
66: 09 00 mova @r0, r9 ;
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:29
68: 00 01 bra @r1 ;
6a: 03 01 mova @r1, r3 ;
6c: 09 00 mova @r0, r9 ;
6e: 00 01 bra @r1 ;
70: 00 02 bra @r2 ;
72: 04 02 mova @r2, r4 ;
74: 03 77 .word 0x7703; ????
76: 09 00 mova @r0, r9 ;
78: 00 01 bra @r1 ;
7a: 03 14 pushm.a #1, r3 ;20-bit words
7c: 09 00 mova @r0, r9 ;
7e: 00 01 bra @r1 ;
80: 03 7f .word 0x7f03; ????
82: 09 00 mova @r0, r9 ;
84: 00 01 bra @r1 ;
initializer():
86: 00 02 bra @r2 ;
88: 04 01 mova @r1, r4 ;
8a: 03 7f .word 0x7f03; ????
8c: 09 00 mova @r0, r9 ;
8e: 00 01 bra @r1 ;
90: 03 05 mova @r5, r3 ;
92: 09 00 mova @r0, r9 ;
94: 00 01 bra @r1 ;
96: 03 01 mova @r1, r3 ;
98: 09 00 mova @r0, r9 ;
9a: 00 01 bra @r1 ;
9c: 03 01 mova @r1, r3 ;
9e: 09 00 mova @r0, r9 ;
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:31
a0: 00 01 bra @r1 ;
a2: 03 02 mova @r2, r3 ;
a4: 09 00 mova @r0, r9 ;
a6: 00 01 bra @r1 ;
a8: 03 02 mova @r2, r3 ;
aa: 09 00 mova @r0, r9 ;
ac: 00 01 bra @r1 ;
ae: 03 01 mova @r1, r3 ;
b0: 09 00 mova @r0, r9 ;
b2: 00 01 bra @r1 ;
b4: 03 01 mova @r1, r3 ;
b6: 09 00 mova @r0, r9 ;
b8: 00 01 bra @r1 ;
ba: 03 02 mova @r2, r3 ;
bc: 09 00 mova @r0, r9 ;
be: 00 01 bra @r1 ;
c0: 03 01 mova @r1, r3 ;
c2: 09 00 mova @r0, r9 ;
c4: 00 01 bra @r1 ;
c6: 03 01 mova @r1, r3 ;
c8: 09 00 mova @r0, r9 ;
ca: 00 01 bra @r1 ;
cc: 03 02 mova @r2, r3 ;
ce: 09 00 mova @r0, r9 ;
d0: 00 01 bra @r1 ;
d2: 03 02 mova @r2, r3 ;
d4: 09 00 mova @r0, r9 ;
d6: 00 01 bra @r1 ;
d8: 03 01 mova @r1, r3 ;
da: 09 00 mova @r0, r9 ;
dc: 00 01 bra @r1 ;
de: 09 02 mova @r2, r9 ;
e0: 00 00 beq
e2: 01 01 mova @r1, r1 ;
Disassembly of section .debug_str:
00000000 <.debug_str>:
qfree():
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:15
0: 65 78 subc.b @r8, r5 ;
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:23
2: 74 72 subc.b #8, r4 ;r2 As==11
4: 61 63 addc.b #2, r1 ;r3 As==10
6: 74 2e jc $-790 ;abs 0xfffffcf0
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:25
8: 63 00 75 6e mova r0, &224885 ; 0x36e75
c: 73 69 .word 0x6973; ????
e: 67 6e addc.b @r14, r7 ;
10: 65 64 addc.b @r4, r5 ;
12: 20 69 addc @r9, r0 ;
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:25 (discriminator 1)
14: 6e 74 subc.b @r4, r14 ;
16: 00 63 adc r0 ;
18: 68 75 subc.b @r5, r8 ;
1a: 6e 6b addc.b @r11, r14 ;
1c: 00 47 br r7 ;
1e: 4e 55 add.b r5, r14 ;
20: 20 43 br #2 ;r3 As==10
22: 31 31 jn $+612 ;abs 0x286
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:26
24: 20 35 jge $+578 ;abs 0x266
26: 2e 33 jn $-418 ;abs 0xfffffe84
28: 2e 30 jn $+94 ;abs 0x86
2a: 20 2d jc $+578 ;abs 0x26c
2c: 67 20 jnz $+208 ;abs 0xfc
2e: 2d 4f mov @r15, r13 ;
30: 73 00 71 66 mova r0, 26225(r3); 0x06671
34: 72 65 addc.b @r5+, r2 ;
36: 65 00 77 6f mova r0, &356215 ; 0x56f77
3a: 72 64 addc.b @r4+, r2 ;
3c: 00 69 addc r9, r0 ;
3e: 6e 69 addc.b @r9, r14 ;
40: 74 69 addc.b @r9+, r4 ;
42: 61 6c addc.b @r12, r1 ;
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:28
44: 69 7a subc.b @r10, r9 ;
46: 65 72 subc.b #4, r5 ;r2 As==10
48: 00 6d addc r13, r0 ;
4a: 70 6f addc.b @r15+, r0 ;
4c: 6f 6c addc.b @r12, r15 ;
4e: 73 00 61 64 mova r0, 25697(r3); 0x06461
52: 64 72 subc.b #4, r4 ;r2 As==10
54: 65 73 subc.b #2, r5 ;r3 As==10
56: 73 00 73 65 mova r0, 25971(r3); 0x06573
5a: 63 6f .word 0x6f63; ????
5c: 6e 64 addc.b @r4, r14 ;
5e: 66 72 subc.b #4, r6 ;r2 As==10
60: 65 65 addc.b @r5, r5 ;
62: 72 00 66 72 mova r0, 29286(r2); 0x07266
66: 65 65 addc.b @r5, r5 ;
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:29
68: 65 72 subc.b #4, r5 ;r2 As==10
6a: 00 43 clr r0 ;
6c: 3a 5c add @r12+, r10 ;
6e: 63 79 .word 0x7963; ????
70: 67 77 subc.b @r7, r7 ;
72: 69 6e addc.b @r14, r9 ;
74: 36 34 jge $+110 ;abs 0xe2
76: 5c 68 6f 6d addc.b 28015(r8),r12 ;0x06d6f
7a: 65 5c add.b @r12, r5 ;
7c: 6e 72 subc.b #4, r14 ;r2 As==10
7e: 69 70 subc.b @r0, r9 ;
80: 67 5c add.b @r12, r7 ;
82: 53 4f .word 0x4f53; ????
84: 46 54 add.b r4, r6 ;
initializer():
86: 57 41 52 45 mov.b 17746(r1),r7 ;0x04552
8a: 5c 57 4f 52 add.b 21071(r7),r12 ;0x0524f
8e: 4b 49 mov.b r9, r11 ;
90: 4e 47 mov.b r7, r14 ;
...
Disassembly of section .comment:
00000000 <.comment>:
qfree():
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:15
0: 00 47 br r7 ;
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:23
2: 43 43 clr.b r3 ;
4: 3a 20 jnz $+118 ;abs 0x7a
6: 28 53 incd r8 ;
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:25
8: 4f 4d mov.b r13, r15 ;
a: 4e 49 mov.b r9, r14 ;
c: 55 4d 20 54 mov.b 21536(r13),r5 ;0x05420
10: 65 63 addc.b #2, r5 ;r3 As==10
12: 68 6e addc.b @r14, r8 ;
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:25 (discriminator 1)
14: 6f 6c addc.b @r12, r15 ;
16: 6f 67 addc.b @r7, r15 ;
18: 69 65 addc.b @r5, r9 ;
1a: 73 20 jnz $+232 ;abs 0x102
1c: 4c 69 addc.b r9, r12 ;
1e: 6d 69 addc.b @r9, r13 ;
20: 74 65 addc.b @r5+, r4 ;
22: 64 20 jnz $+202 ;abs 0xec
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:26
24: 2d 20 jnz $+92 ;abs 0x80
26: 6d 73 subc.b #2, r13 ;r3 As==10
28: 70 34 jge $+226 ;abs 0x10a
2a: 33 30 jn $+104 ;abs 0x92
2c: 2d 67 addc @r7, r13 ;
2e: 63 63 .word 0x6363; ????
30: 20 35 jge $+578 ;abs 0x272
32: 2e 33 jn $-418 ;abs 0xfffffe90
34: 2e 30 jn $+94 ;abs 0x92
36: 2e 32 jn $-930 ;abs 0xfffffc94
38: 31 39 jl $+612 ;abs 0x29c
3a: 29 20 jnz $+84 ;abs 0x8e
3c: 35 2e jc $-916 ;abs 0xfffffca8
3e: 33 2e jc $-920 ;abs 0xfffffca6
40: 30 00 00 00 Address 0x00000042 is out of bounds.
bra -1(r0) ;PC rel. 0x00041
Disassembly of section .MSP430.attributes:
00000000 <.MSP430.attributes>:
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:15
0: 41 16 popm.a #5, r5 ;20-bit words
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:23
2: 00 00 beq
4: 00 6d addc r13, r0 ;
6: 73 70 .word 0x7073; ????
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:25
8: 61 62 addc.b #4, r1 ;r2 As==10
a: 69 00 01 0b mova r0, &592641 ; 0x90b01
e: 00 00 beq
10: 00 04 bra @r4 ;
12: 02 06 mova @r6, r2 ;
C:\cygwin64\home\nripg\SOFTWARE\WORKING/extract.c:25 (discriminator 1)
14: 01 08 mova @r8, r1 ;
16: 01 00 Address 0x00000016 is out of bounds.
.word 0xffff; ????