1.1 --- a/lib/payload.c Fri Oct 26 20:51:25 2018 +0200
1.2 +++ b/lib/payload.c Fri Oct 26 22:27:46 2018 +0200
1.3 @@ -19,11 +19,19 @@
1.4
1.5 #include <stdint.h>
1.6
1.7 +extern uint8_t _data_original, _data;
1.8 +
1.9 +/* This is defined using SIZEOF and its table entry contains the actual value.
1.10 + Its "address" provided by the table is therefore the value! */
1.11 +
1.12 +extern uint32_t _data_size;
1.13 +
1.14 /* Relocate the .data section's contents to initialise mutable structures. */
1.15
1.16 -void relocate_data(uint8_t *original, uint8_t *current, uint32_t size)
1.17 +void relocate_data(void)
1.18 {
1.19 - uint8_t *limit = original + size;
1.20 + uint8_t *original = &_data_original, *current = &_data,
1.21 + *limit = original + (uint32_t) &_data_size;
1.22
1.23 /* Copy data from program memory to the relocated data area in RAM. */
1.24
2.1 --- a/lib/start.S Fri Oct 26 20:51:25 2018 +0200
2.2 +++ b/lib/start.S Fri Oct 26 22:27:46 2018 +0200
2.3 @@ -45,9 +45,6 @@
2.4
2.5 .globl _start
2.6 .extern relocate_data
2.7 -.extern _data_original
2.8 -.extern _data
2.9 -.extern _data_size
2.10 .extern main
2.11
2.12 _start:
2.13 @@ -77,11 +74,6 @@
2.14
2.15 /* Relocate mutable data and then jump to the main program. */
2.16
2.17 - la $a0, _data_original
2.18 - la $a1, _data
2.19 - la $a2, _data_size
2.20 - lw $a2, 0($a2)
2.21 -
2.22 la $t9, relocate_data
2.23 jal $t9
2.24 nop