99 lines
1.1 KiB
ArmAsm
99 lines
1.1 KiB
ArmAsm
/ nlist -- extract values from name list
|
|
/
|
|
|
|
/ nlist(file, list);
|
|
/
|
|
.globl _nlist
|
|
|
|
_nlist:
|
|
mov r5,-(sp)
|
|
mov sp,r5
|
|
mov 4(r5),0f
|
|
mov 6(r5),r1
|
|
mov r2,-(sp)
|
|
|
|
mov r1,r0
|
|
1:
|
|
tst (r0)
|
|
beq 1f
|
|
add $8.,r0
|
|
clr (r0)+
|
|
clr (r0)+ / initialize to undefined
|
|
br 1b
|
|
1:
|
|
sys 0; 9f
|
|
.data
|
|
9:
|
|
sys open; 0:..; 0
|
|
.text
|
|
bes done
|
|
mov r0,r2
|
|
sys read; buf; 20
|
|
cmp r0,$20
|
|
bne cdone
|
|
mov buf+4,count / assume older a.out
|
|
mov buf+2,0f
|
|
cmp buf,$405
|
|
beq 1f
|
|
mov buf+8.,count / now assume newer
|
|
mov buf+2,r0 / txt
|
|
add buf+4,r0 / data
|
|
cmp buf+16,$1 / relocation?
|
|
beq 4f
|
|
asl r0 / txt+data reloc
|
|
4:
|
|
add $20,r0 / header
|
|
mov r0,0f
|
|
cmp buf,$411
|
|
beq 1f
|
|
cmp buf,$410
|
|
beq 1f
|
|
cmp buf,$407
|
|
bne cdone
|
|
1:
|
|
mov r2,r0
|
|
sys 0; 9f
|
|
.data
|
|
9:
|
|
sys seek; 0:..; 0
|
|
.text
|
|
|
|
1:
|
|
sub $12.,count
|
|
blt cdone
|
|
mov r2,r0
|
|
sys read; buf; 12.
|
|
cmp r0,$12.
|
|
bne cdone
|
|
mov r1,r0
|
|
|
|
2:
|
|
tst (r0)
|
|
beq 1b
|
|
cmp (r0),buf
|
|
bne 1f
|
|
cmp 2(r0),buf+2
|
|
bne 1f
|
|
cmp 4(r0),buf+4
|
|
bne 1f
|
|
cmp 6(r0),buf+6
|
|
bne 1f
|
|
mov buf+8.,8.(r0)
|
|
mov buf+10.,10.(r0)
|
|
1:
|
|
add $12.,r0
|
|
br 2b
|
|
|
|
cdone:
|
|
mov r2,r0
|
|
sys close
|
|
|
|
done:
|
|
mov (sp)+,r2
|
|
mov (sp)+,r5
|
|
rts pc
|
|
|
|
.bss
|
|
buf: .=.+20
|
|
count: .=.+2
|