jiffies保存
11504 ワード
本にはjiffiesがjiffiesだと書かれていますが.64の32ビット低いですが、リンクスクリプトの書き方に重点を置いて、自分でテストしました.
ここでは、テストのためだけにリンクスクリプトを簡略化します.
ここでは、テストのためだけにリンクスクリプトを簡略化します.
/* link.lds */
1 ENTRY(_start)
2
3 jiffies = jiffies_64;
4
5 SECTIONS
6 {
7
8 . = 0x0;
9
10 . = ALIGN(4);
11 .text :
12 {
13 test.o (.text)
14 *(.text)
15 }
16
17 . = ALIGN(4);
18 .rodata : { *(.rodata) }
19
20 . = ALIGN(4);
21 .data : { *(.data) }
22
23 . = ALIGN(4);
24 .got : { *(.got) }
25
26 . = ALIGN(4);
27 __bss_start = .;
28 .bss : { *(.bss) }
29 _end = .;
30 }
#Makefile
1 CROPROSS_COMPILER = arm-none-linux-gnueabi-
2 LD := ${CROPROSS_COMPILER}ld
3 AS := ${CROPROSS_COMPILER}as
4 GCC := ${CROPROSS_COMPILER}gcc
5
6 mytest: test.o main.o
7 ${LD} -T link.lds $^ -o $@
8
9 test.o: test.S
10 ${AS} $^ -o $@
11
12 main.o : main.c
13 ${GCC} -c $^ -o $@
14
15 .PHONY: clean
16
17 clean:
18 @rm -f -r mytest test.o main.o
#test.S
1 .text
2 .global _start
3 _start:
4 b 1f
5 1:
6 mov r0, r0
7 2:
8 mov r0, r0
9 3:
10 mov r0, r0
11 1:
12 b main
//main.c
1 unsigned long long jiffies_64 = -300 * 250;
2
3 extern int jiffies;
4
5 int main(void)
6 {
7
8 jiffies_64 += 1;
9 jiffies += 3;
10
11 return 0;
12 }
# ,
1 00000000 <_start>:
2 0: b 4 <_start+0x4>
3 4: nop
4 8: nop
5 c: nop
6 10: b 14 <main>
7
8 00000014 <main>:
9
10 1c: ldr r3, [pc, #64] ; jiffies_64
11
12 20: ldm r3, {r1, r2}
13 24: mov r3, #1 ; 0x1 ; jiffies_64 1
14 28: mov r4, #0 ; 0x0 ; jiffies_64 0
15 2c: adds r3, r3, r1
16 30: adc r4, r4, r2
17 34: ldr r2, [pc, #40] ; jiffies_64
18 38: stm r2, {r3, r4} ; jiffies_64 + 1 jiffies_64
19
20 3c: ldr r3, [pc, #36] ; jiffies
21
22 40: ldr r3, [r3]
23 44: add r2, r3, #3 ; jiffies 3
24 48: ldr r3, [pc, #24] ; jiffies
25 4c: str r2, [r3] ; jiffies + 3 jiffies
26
27
28 64: .word 0x00000070 ; jiffies_64
29 68: .word 0x00000070 ; jiffies
30 Disassembly of section .data:
31
32 00000070 <jiffies>:
33 70: .word 0xfffedb08
34 74: .word 0xffffffff