* [U-Boot] Try to fix Board eb_cpux9k2
@ 2010-11-29 19:58 Jens Scharsig
2010-11-30 7:06 ` [U-Boot] [PATCH RFC 0/3] chenages to arm relocation Andreas Bießmann
` (2 more replies)
0 siblings, 3 replies; 22+ messages in thread
From: Jens Scharsig @ 2010-11-29 19:58 UTC (permalink / raw)
To: u-boot
Dear Albert ARIBAUD,
I have tried to start update the eb_cpux9k2 board. I can compile
board without errors from current tree. But the board hangs on
NAND detection. If I disable NAND support, the board starts and
I can also start Linux.
A second problem, the board does not restart (reset command).
I find out that a NULL pointer used by reset code, was also
relocated.
I have currently no access to a BDI2000. But I think, this problems
are not board specific. It is possible, there are problems with
vector tables or memory protection
Any suggestions?
The board use 920t on at91rm9200 soc
regard
Jens Scharsig
^ permalink raw reply [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH RFC 0/3] chenages to arm relocation
2010-11-29 19:58 [U-Boot] Try to fix Board eb_cpux9k2 Jens Scharsig
@ 2010-11-30 7:06 ` Andreas Bießmann
2010-11-30 7:06 ` [U-Boot] [PATCH RFC 1/3] arm920t: do not set register useless Andreas Bießmann
` (2 more replies)
2010-11-30 8:37 ` [U-Boot] Try to fix Board eb_cpux9k2 Albert ARIBAUD
2010-12-01 6:44 ` Albert ARIBAUD
2 siblings, 3 replies; 22+ messages in thread
From: Andreas Bießmann @ 2010-11-30 7:06 UTC (permalink / raw)
To: u-boot
Dear Jens Scharsig and Albert ARIBAUD,
please see following RFC for the mentioned issues with NULL pointer
relocation and some other points on current relocation.
Andreas Bie?mann (3):
arm920t: do not set register useless
arm920t: do not use r8 for relocation
arm920t: do not relocate NULL pointer
arch/arm/cpu/arm920t/start.S | 32 ++++++++++++++++++--------------
1 files changed, 18 insertions(+), 14 deletions(-)
--
1.7.3.2
^ permalink raw reply [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH RFC 1/3] arm920t: do not set register useless
2010-11-30 7:06 ` [U-Boot] [PATCH RFC 0/3] chenages to arm relocation Andreas Bießmann
@ 2010-11-30 7:06 ` Andreas Bießmann
2010-11-30 8:07 ` Albert ARIBAUD
2010-11-30 7:06 ` [U-Boot] [PATCH RFC 2/3] arm920t: do not use r8 for relocation Andreas Bießmann
2010-11-30 7:06 ` [U-Boot] [PATCH RFC 3/3] arm920t: do not relocate NULL pointer Andreas Bießmann
2 siblings, 1 reply; 22+ messages in thread
From: Andreas Bießmann @ 2010-11-30 7:06 UTC (permalink / raw)
To: u-boot
in case we are still at relocation target address before relocation we
do not need to load the registers needed for relocation. We should
instead skip the whole relocation part and jump over to clear_bss.
Also prepare to not use target address twice. When we use a scratch
register here r6 is unchanged and can be used later on.
Signed-off-by: Andreas Bie?mann <andreas.devel@googlemail.com>
---
arch/arm/cpu/arm920t/start.S | 7 ++++---
1 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/arch/arm/cpu/arm920t/start.S b/arch/arm/cpu/arm920t/start.S
index 01edb9b..71de373 100644
--- a/arch/arm/cpu/arm920t/start.S
+++ b/arch/arm/cpu/arm920t/start.S
@@ -208,15 +208,16 @@ stack_setup:
mov sp, r4
adr r0, _start
+ cmp r0, r6
+ beq clear_bss /* skip relocation */
+ mov r1, r6
ldr r2, _TEXT_BASE
ldr r3, _bss_start_ofs
add r2, r0, r3 /* r2 <- source end address */
- cmp r0, r6
- beq clear_bss
copy_loop:
ldmia r0!, {r9-r10} /* copy from source address [r0] */
- stmia r6!, {r9-r10} /* copy to target address [r1] */
+ stmia r1!, {r9-r10} /* copy to target address [r1] */
cmp r0, r2 /* until source end address [r2] */
blo copy_loop
--
1.7.3.2
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH RFC 2/3] arm920t: do not use r8 for relocation
2010-11-30 7:06 ` [U-Boot] [PATCH RFC 0/3] chenages to arm relocation Andreas Bießmann
2010-11-30 7:06 ` [U-Boot] [PATCH RFC 1/3] arm920t: do not set register useless Andreas Bießmann
@ 2010-11-30 7:06 ` Andreas Bießmann
2010-11-30 8:22 ` Albert ARIBAUD
2010-11-30 7:06 ` [U-Boot] [PATCH RFC 3/3] arm920t: do not relocate NULL pointer Andreas Bießmann
2 siblings, 1 reply; 22+ messages in thread
From: Andreas Bießmann @ 2010-11-30 7:06 UTC (permalink / raw)
To: u-boot
r8 is used for gd and should therefore be left alone
Signed-off-by: Andreas Bie?mann <andreas.devel@googlemail.com>
---
I don't know if this is really needed, but we use --fixed-r8 compiler
flag for all arm boards. Albert, can you shed some light on that?
arch/arm/cpu/arm920t/start.S | 21 ++++++++++-----------
1 files changed, 10 insertions(+), 11 deletions(-)
diff --git a/arch/arm/cpu/arm920t/start.S b/arch/arm/cpu/arm920t/start.S
index 71de373..629be3f 100644
--- a/arch/arm/cpu/arm920t/start.S
+++ b/arch/arm/cpu/arm920t/start.S
@@ -201,7 +201,6 @@ relocate_code:
mov r4, r0 /* save addr_sp */
mov r5, r1 /* save addr of gd */
mov r6, r2 /* save addr of destination */
- mov r7, r2 /* save addr of destination */
/* Set up the stack */
stack_setup:
@@ -226,7 +225,7 @@ copy_loop:
* fix .rel.dyn relocations
*/
ldr r0, _TEXT_BASE /* r0 <- Text base */
- sub r9, r7, r0 /* r9 <- relocation offset */
+ sub r9, r6, r0 /* r9 <- relocation offset */
ldr r10, _dynsym_start_ofs /* r10 <- sym table ofs */
add r10, r10, r0 /* r10 <- sym table in FLASH */
ldr r2, _rel_dyn_start_ofs /* r2 <- rel dyn start ofs */
@@ -237,10 +236,10 @@ fixloop:
ldr r0, [r2] /* r0 <- location to fix up, IN FLASH! */
add r0, r0, r9 /* r0 <- location to fix up in RAM */
ldr r1, [r2, #4]
- and r8, r1, #0xff
- cmp r8, #23 /* relative fixup? */
+ and r7, r1, #0xff
+ cmp r7, #23 /* relative fixup? */
beq fixrel
- cmp r8, #2 /* absolute fixup? */
+ cmp r7, #2 /* absolute fixup? */
beq fixabs
/* ignore unknown type of fixup */
b fixnext
@@ -253,10 +252,10 @@ fixabs:
b fixnext
fixrel:
/* relative fix: increase location by offset */
- ldr r1, [r0]
- add r1, r1, r9
+ ldr r1, [r0] /* r1 <- address of symbol */
+ add r1, r1, r9 /* r1 <- relocated address of symbol */
fixnext:
- str r1, [r0]
+ str r1, [r0] /* store back content of r1 */
add r2, r2, #8 /* each rel.dyn entry is 8 bytes */
cmp r2, r3
blo fixloop
@@ -267,7 +266,7 @@ clear_bss:
ldr r0, _bss_start_ofs
ldr r1, _bss_end_ofs
ldr r3, _TEXT_BASE /* Text base */
- mov r4, r7 /* reloc addr */
+ mov r4, r6 /* reloc addr */
add r0, r0, r4
add r1, r1, r4
mov r2, #0x00000000 /* clear */
@@ -295,10 +294,10 @@ _nand_boot_ofs:
ldr r0, _board_init_r_ofs
adr r1, _start
add lr, r0, r1
- add lr, lr, r9
+ add lr, lr, r9 /* position from board_init_r in RAM */
/* setup parameters for board_init_r */
mov r0, r5 /* gd_t */
- mov r1, r7 /* dest_addr */
+ mov r1, r6 /* dest_addr */
/* jump to it ... */
mov pc, lr
--
1.7.3.2
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH RFC 3/3] arm920t: do not relocate NULL pointer
2010-11-30 7:06 ` [U-Boot] [PATCH RFC 0/3] chenages to arm relocation Andreas Bießmann
2010-11-30 7:06 ` [U-Boot] [PATCH RFC 1/3] arm920t: do not set register useless Andreas Bießmann
2010-11-30 7:06 ` [U-Boot] [PATCH RFC 2/3] arm920t: do not use r8 for relocation Andreas Bießmann
@ 2010-11-30 7:06 ` Andreas Bießmann
2010-11-30 8:32 ` Albert ARIBAUD
2 siblings, 1 reply; 22+ messages in thread
From: Andreas Bießmann @ 2010-11-30 7:06 UTC (permalink / raw)
To: u-boot
Signed-off-by: Andreas Bie?mann <andreas.devel@googlemail.com>
---
arch/arm/cpu/arm920t/start.S | 4 ++++
1 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/arch/arm/cpu/arm920t/start.S b/arch/arm/cpu/arm920t/start.S
index 629be3f..e3f9cdb 100644
--- a/arch/arm/cpu/arm920t/start.S
+++ b/arch/arm/cpu/arm920t/start.S
@@ -248,11 +248,15 @@ fixabs:
mov r1, r1, LSR #4 /* r1 <- symbol index in .dynsym */
add r1, r10, r1 /* r1 <- address of symbol in table */
ldr r1, [r1, #4] /* r1 <- symbol value */
+ cmp r1, #0 /* symbol == NULL ? */
+ beq fixnext
add r1, r9 /* r1 <- relocated sym addr */
b fixnext
fixrel:
/* relative fix: increase location by offset */
ldr r1, [r0] /* r1 <- address of symbol */
+ cmp r1, #0 /* symbol == NULL ? */
+ beq fixnext
add r1, r1, r9 /* r1 <- relocated address of symbol */
fixnext:
str r1, [r0] /* store back content of r1 */
--
1.7.3.2
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH RFC 1/3] arm920t: do not set register useless
2010-11-30 7:06 ` [U-Boot] [PATCH RFC 1/3] arm920t: do not set register useless Andreas Bießmann
@ 2010-11-30 8:07 ` Albert ARIBAUD
2010-11-30 8:28 ` Andreas Bießmann
0 siblings, 1 reply; 22+ messages in thread
From: Albert ARIBAUD @ 2010-11-30 8:07 UTC (permalink / raw)
To: u-boot
Hi Andreas,
Le 30/11/2010 08:06, Andreas Bie?mann a ?crit :
> diff --git a/arch/arm/cpu/arm920t/start.S b/arch/arm/cpu/arm920t/start.S
> index 01edb9b..71de373 100644
> --- a/arch/arm/cpu/arm920t/start.S
> +++ b/arch/arm/cpu/arm920t/start.S
> @@ -208,15 +208,16 @@ stack_setup:
> mov sp, r4
>
> adr r0, _start
> + cmp r0, r6
> + beq clear_bss /* skip relocation */
> + mov r1, r6
Why use r1?
> ldr r2, _TEXT_BASE
> ldr r3, _bss_start_ofs
> add r2, r0, r3 /* r2<- source end address */
> - cmp r0, r6
> - beq clear_bss
>
> copy_loop:
> ldmia r0!, {r9-r10} /* copy from source address [r0] */
> - stmia r6!, {r9-r10} /* copy to target address [r1] */
> + stmia r1!, {r9-r10} /* copy to target address [r1] */
Ditto.
> cmp r0, r2 /* until source end address [r2] */
> blo copy_loop
Amicalement,
--
Albert.
^ permalink raw reply [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH RFC 2/3] arm920t: do not use r8 for relocation
2010-11-30 7:06 ` [U-Boot] [PATCH RFC 2/3] arm920t: do not use r8 for relocation Andreas Bießmann
@ 2010-11-30 8:22 ` Albert ARIBAUD
2010-11-30 8:35 ` Andreas Bießmann
0 siblings, 1 reply; 22+ messages in thread
From: Albert ARIBAUD @ 2010-11-30 8:22 UTC (permalink / raw)
To: u-boot
Le 30/11/2010 08:06, Andreas Bie?mann a ?crit :
> r8 is used for gd and should therefore be left alone
I'm surprised that this did not break things so far... Whatever value r8
ended with was used as the address of GD.
After a quick look I haven't found out where r8 is *set* to GD,
though... Will have to look this up tonight.
> Signed-off-by: Andreas Bie?mann<andreas.devel@googlemail.com>
> ---
>
> I don't know if this is really needed, but we use --fixed-r8 compiler
> flag for all arm boards. Albert, can you shed some light on that?
ffixed-r8 is for the C compiler. The assembler cannot honor ffixed-r8
since register usage is decided by the programmer in each instruction.
> arch/arm/cpu/arm920t/start.S | 21 ++++++++++-----------
> 1 files changed, 10 insertions(+), 11 deletions(-)
>
> diff --git a/arch/arm/cpu/arm920t/start.S b/arch/arm/cpu/arm920t/start.S
> index 71de373..629be3f 100644
> --- a/arch/arm/cpu/arm920t/start.S
> +++ b/arch/arm/cpu/arm920t/start.S
> @@ -201,7 +201,6 @@ relocate_code:
> mov r4, r0 /* save addr_sp */
> mov r5, r1 /* save addr of gd */
> mov r6, r2 /* save addr of destination */
> - mov r7, r2 /* save addr of destination */
>
> /* Set up the stack */
> stack_setup:
> @@ -226,7 +225,7 @@ copy_loop:
> * fix .rel.dyn relocations
> */
> ldr r0, _TEXT_BASE /* r0<- Text base */
> - sub r9, r7, r0 /* r9<- relocation offset */
> + sub r9, r6, r0 /* r9<- relocation offset */
> ldr r10, _dynsym_start_ofs /* r10<- sym table ofs */
> add r10, r10, r0 /* r10<- sym table in FLASH */
> ldr r2, _rel_dyn_start_ofs /* r2<- rel dyn start ofs */
> @@ -237,10 +236,10 @@ fixloop:
> ldr r0, [r2] /* r0<- location to fix up, IN FLASH! */
> add r0, r0, r9 /* r0<- location to fix up in RAM */
> ldr r1, [r2, #4]
> - and r8, r1, #0xff
> - cmp r8, #23 /* relative fixup? */
> + and r7, r1, #0xff
> + cmp r7, #23 /* relative fixup? */
> beq fixrel
> - cmp r8, #2 /* absolute fixup? */
> + cmp r7, #2 /* absolute fixup? */
> beq fixabs
> /* ignore unknown type of fixup */
> b fixnext
> @@ -253,10 +252,10 @@ fixabs:
> b fixnext
> fixrel:
> /* relative fix: increase location by offset */
> - ldr r1, [r0]
> - add r1, r1, r9
> + ldr r1, [r0] /* r1<- address of symbol */
> + add r1, r1, r9 /* r1<- relocated address of symbol */
I'd like to see a less ambiguous comment here, but I'm not sure what's
best. Any suggestions?
> fixnext:
> - str r1, [r0]
> + str r1, [r0] /* store back content of r1 */
Nak. This comment paraphrases the instruction.
> add r2, r2, #8 /* each rel.dyn entry is 8 bytes */
> cmp r2, r3
> blo fixloop
> @@ -267,7 +266,7 @@ clear_bss:
> ldr r0, _bss_start_ofs
> ldr r1, _bss_end_ofs
> ldr r3, _TEXT_BASE /* Text base */
> - mov r4, r7 /* reloc addr */
> + mov r4, r6 /* reloc addr */
> add r0, r0, r4
> add r1, r1, r4
> mov r2, #0x00000000 /* clear */
> @@ -295,10 +294,10 @@ _nand_boot_ofs:
> ldr r0, _board_init_r_ofs
> adr r1, _start
> add lr, r0, r1
> - add lr, lr, r9
> + add lr, lr, r9 /* position from board_init_r in RAM */
> /* setup parameters for board_init_r */
> mov r0, r5 /* gd_t */
> - mov r1, r7 /* dest_addr */
> + mov r1, r6 /* dest_addr */
> /* jump to it ... */
> mov pc, lr
>
Amicalement,
--
Albert.
^ permalink raw reply [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH RFC 1/3] arm920t: do not set register useless
2010-11-30 8:07 ` Albert ARIBAUD
@ 2010-11-30 8:28 ` Andreas Bießmann
2010-11-30 9:25 ` Albert ARIBAUD
0 siblings, 1 reply; 22+ messages in thread
From: Andreas Bießmann @ 2010-11-30 8:28 UTC (permalink / raw)
To: u-boot
Dear Albert ARIBAUD,
Am 30.11.2010 09:07, schrieb Albert ARIBAUD:
> Hi Andreas,
>
> Le 30/11/2010 08:06, Andreas Bie?mann a ?crit :
>
>> diff --git a/arch/arm/cpu/arm920t/start.S b/arch/arm/cpu/arm920t/start.S
>> index 01edb9b..71de373 100644
>> --- a/arch/arm/cpu/arm920t/start.S
>> +++ b/arch/arm/cpu/arm920t/start.S
>> @@ -208,15 +208,16 @@ stack_setup:
>> mov sp, r4
>>
>> adr r0, _start
>> + cmp r0, r6
>> + beq clear_bss /* skip relocation */
>> + mov r1, r6
>
> Why use r1?
Use a scratch register here cause stmia Rn! does increment Rn.
>
>> ldr r2, _TEXT_BASE
>> ldr r3, _bss_start_ofs
>> add r2, r0, r3 /* r2<- source end address */
>> - cmp r0, r6
>> - beq clear_bss
>>
>> copy_loop:
>> ldmia r0!, {r9-r10} /* copy from source address
>> [r0] */
>> - stmia r6!, {r9-r10} /* copy to target address [r1] */
>> + stmia r1!, {r9-r10} /* copy to target address [r1] */
Therefore usage of r6 here would destroy the saved 'addr of
destination'. Cause that fact we have saved the 'addr of destination' @
beginning of relocate_code twice, once to r6 and once to r7. This is
obviously not needed iv we change the register in copy_loop (which was
already used in comment .. if you saw that on the end of the line).
I doubt if this a 'speed up' but we can have a cleaner interface. We
have r4, r5, r6 as storage of input values to relocate_code. We do only
use scratch registers for copy_loop, fixloop for relocation, clear_bss
later on. We do decide if we need fixloop for relocation or if we can
skip that and then setup the relevant scratch registers.
Well this is only an RFC. I found that plus the NULL pointer stuff worth
to mention. It is not that important to get this special patch in cause
the current implementation do also work.
regards
Andreas Bie?mann
^ permalink raw reply [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH RFC 3/3] arm920t: do not relocate NULL pointer
2010-11-30 7:06 ` [U-Boot] [PATCH RFC 3/3] arm920t: do not relocate NULL pointer Andreas Bießmann
@ 2010-11-30 8:32 ` Albert ARIBAUD
2010-11-30 8:47 ` Joakim Tjernlund
0 siblings, 1 reply; 22+ messages in thread
From: Albert ARIBAUD @ 2010-11-30 8:32 UTC (permalink / raw)
To: u-boot
Le 30/11/2010 08:06, Andreas Bie?mann a ?crit :
> Signed-off-by: Andreas Bie?mann<andreas.devel@googlemail.com>
> + cmp r1, #0 /* symbol == NULL ? */
> + beq fixnext
Nak. Don't hide a null pointer. NULL pointers are *not* relocated, since
they are a constant. If a NULL ends up in relocation tables, that is
because of a corruption *or* because it was to be relocated, and should
thus never be ignored.
Amicalement,
--
Albert.
^ permalink raw reply [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH RFC 2/3] arm920t: do not use r8 for relocation
2010-11-30 8:22 ` Albert ARIBAUD
@ 2010-11-30 8:35 ` Andreas Bießmann
2010-11-30 8:58 ` Albert ARIBAUD
0 siblings, 1 reply; 22+ messages in thread
From: Andreas Bießmann @ 2010-11-30 8:35 UTC (permalink / raw)
To: u-boot
Dear Albert ARIBAUD,
Am 30.11.2010 09:22, schrieb Albert ARIBAUD:
> Le 30/11/2010 08:06, Andreas Bie?mann a ?crit :
>> r8 is used for gd and should therefore be left alone
>
> I'm surprised that this did not break things so far... Whatever value r8
> ended with was used as the address of GD.
Well r8 is set in arch/arm/include/asm/global_data.h
---8<---
#define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("r8")
--->8---
The GD is then later on allocated in board_init_f
---8<---
/* Pointer is writable since we allocated a register for it */
gd = (gd_t *) (CONFIG_SYS_INIT_SP_ADDR);
/* compiler optimization barrier needed for GCC >= 3.4 */
__asm__ __volatile__("": : :"memory");
memset ((void*)gd, 0, sizeof (gd_t));
--->8---
Therefore r8 is free, when we use it in relocate_code, isn't it?
> After a quick look I haven't found out where r8 is *set* to GD,
> though... Will have to look this up tonight.
>
>> Signed-off-by: Andreas Bie?mann<andreas.devel@googlemail.com>
>> ---
>>
>> I don't know if this is really needed, but we use --fixed-r8 compiler
>> flag for all arm boards. Albert, can you shed some light on that?
>
> ffixed-r8 is for the C compiler. The assembler cannot honor ffixed-r8
> since register usage is decided by the programmer in each instruction.
I do know that. Therefore this patch to do _not_ use r8 in assembler.
>> /* relative fix: increase location by offset */
>> - ldr r1, [r0]
>> - add r1, r1, r9
>> + ldr r1, [r0] /* r1<- address of symbol */
>> + add r1, r1, r9 /* r1<- relocated address of symbol */
>
> I'd like to see a less ambiguous comment here, but I'm not sure what's
> best. Any suggestions?
Not currently, this was just slipped in by fast preperation of that patch.
>> fixnext:
>> - str r1, [r0]
>> + str r1, [r0] /* store back content of r1 */
>
> Nak. This comment paraphrases the instruction.
dito
regards
Andreas Bie?mann
^ permalink raw reply [flat|nested] 22+ messages in thread
* [U-Boot] Try to fix Board eb_cpux9k2
2010-11-29 19:58 [U-Boot] Try to fix Board eb_cpux9k2 Jens Scharsig
2010-11-30 7:06 ` [U-Boot] [PATCH RFC 0/3] chenages to arm relocation Andreas Bießmann
@ 2010-11-30 8:37 ` Albert ARIBAUD
2010-12-02 20:27 ` Jens Scharsig
2010-12-01 6:44 ` Albert ARIBAUD
2 siblings, 1 reply; 22+ messages in thread
From: Albert ARIBAUD @ 2010-11-30 8:37 UTC (permalink / raw)
To: u-boot
Le 29/11/2010 20:58, Jens Scharsig a ?crit :
> Dear Albert ARIBAUD,
>
> I have tried to start update the eb_cpux9k2 board. I can compile
> board without errors from current tree. But the board hangs on
> NAND detection. If I disable NAND support, the board starts and
> I can also start Linux.
We've had issues in the past with boards that did not detect NAND. Can
you look up the u-boot archives for this?
> A second problem, the board does not restart (reset command).
> I find out that a NULL pointer used by reset code, was also
> relocated.
How did you come to this conclusion? NULL pointers are constants and
thus are *not* relocated.
> I have currently no access to a BDI2000. But I think, this problems
> are not board specific. It is possible, there are problems with
> vector tables or memory protection
>
> Any suggestions?
I suggest visually running through all (board or cpu-specific) code that
runs as part of execution board_init_f() and checking that no global is
ever used -- BSS or initialized.
> The board use 920t on at91rm9200 soc
>
> regard
> Jens Scharsig
Amicalement,
--
Albert.
^ permalink raw reply [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH RFC 3/3] arm920t: do not relocate NULL pointer
2010-11-30 8:32 ` Albert ARIBAUD
@ 2010-11-30 8:47 ` Joakim Tjernlund
2010-11-30 8:50 ` Andreas Bießmann
2010-11-30 9:02 ` Albert ARIBAUD
0 siblings, 2 replies; 22+ messages in thread
From: Joakim Tjernlund @ 2010-11-30 8:47 UTC (permalink / raw)
To: u-boot
>
> Le 30/11/2010 08:06, Andreas Bie?mann a ?crit :
> > Signed-off-by: Andreas Bie?mann<andreas.devel@googlemail.com>
>
> > + cmp r1, #0 /* symbol == NULL ? */
> > + beq fixnext
>
> Nak. Don't hide a null pointer. NULL pointers are *not* relocated, since
> they are a constant. If a NULL ends up in relocation tables, that is
> because of a corruption *or* because it was to be relocated, and should
> thus never be ignored.
Depends, if the same routine is used for relocating fixups you need
this test. Undefined weaks will generate a NULL fixup entry.
Jocke
^ permalink raw reply [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH RFC 3/3] arm920t: do not relocate NULL pointer
2010-11-30 8:47 ` Joakim Tjernlund
@ 2010-11-30 8:50 ` Andreas Bießmann
2010-11-30 9:02 ` Albert ARIBAUD
1 sibling, 0 replies; 22+ messages in thread
From: Andreas Bießmann @ 2010-11-30 8:50 UTC (permalink / raw)
To: u-boot
Dear All,
Am 30.11.2010 09:47, schrieb Joakim Tjernlund:
>>
>> Le 30/11/2010 08:06, Andreas Bie?mann a ?crit :
>>> Signed-off-by: Andreas Bie?mann<andreas.devel@googlemail.com>
>>
>>> + cmp r1, #0 /* symbol == NULL ? */
>>> + beq fixnext
>>
>> Nak. Don't hide a null pointer. NULL pointers are *not* relocated, since
>> they are a constant. If a NULL ends up in relocation tables, that is
>> because of a corruption *or* because it was to be relocated, and should
>> thus never be ignored.
>
> Depends, if the same routine is used for relocating fixups you need
> this test.
> Undefined weaks will generate a NULL fixup entry.
As mentioned by Jens and one other some time ago. Albert, please build
e.g. at91rm9200ek boards and search for board_reset(), defined in
arch/arm/cpu/arm920t/at91/reset.c
regards
Andreas Bie?mann
^ permalink raw reply [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH RFC 2/3] arm920t: do not use r8 for relocation
2010-11-30 8:35 ` Andreas Bießmann
@ 2010-11-30 8:58 ` Albert ARIBAUD
0 siblings, 0 replies; 22+ messages in thread
From: Albert ARIBAUD @ 2010-11-30 8:58 UTC (permalink / raw)
To: u-boot
Le 30/11/2010 09:35, Andreas Bie?mann a ?crit :
> Dear Albert ARIBAUD,
>
> Am 30.11.2010 09:22, schrieb Albert ARIBAUD:
>> Le 30/11/2010 08:06, Andreas Bie?mann a ?crit :
>>> r8 is used for gd and should therefore be left alone
>>
>> I'm surprised that this did not break things so far... Whatever value r8
>> ended with was used as the address of GD.
>
> Well r8 is set in arch/arm/include/asm/global_data.h
>
> ---8<---
> #define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("r8")
> --->8---
>
> The GD is then later on allocated in board_init_f
>
> ---8<---
> /* Pointer is writable since we allocated a register for it */
> gd = (gd_t *) (CONFIG_SYS_INIT_SP_ADDR);
> /* compiler optimization barrier needed for GCC>= 3.4 */
> __asm__ __volatile__("": : :"memory");
>
> memset ((void*)gd, 0, sizeof (gd_t));
> --->8---
... which is why I could not find "r8" allocation :) ... Thanks. So yes,
we need to keep r8, and yes, we were lucky that the start.S code did run
at all with a corrupted r8 -- fixing that may remove some weird
behaviors we could see,
Can you do a pass on other ARM archs which must be fixed too?
>> I'd like to see a less ambiguous comment here, but I'm not sure what's
>> best. Any suggestions?
>
> Not currently, this was just slipped in by fast preperation of that patch.
>
>>> fixnext:
>>> - str r1, [r0]
>>> + str r1, [r0] /* store back content of r1 */
>>
>> Nak. This comment paraphrases the instruction.
>
> dito
I'd rather have no comment than a paraphrase of the code, but I'd rather
have an imperfect yet at least partly helpful comment than no comment at
all for assembly language code.
> regards
>
> Andreas Bie?mann
Amicalement,
--
Albert.
^ permalink raw reply [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH RFC 3/3] arm920t: do not relocate NULL pointer
2010-11-30 8:47 ` Joakim Tjernlund
2010-11-30 8:50 ` Andreas Bießmann
@ 2010-11-30 9:02 ` Albert ARIBAUD
2010-11-30 9:41 ` Joakim Tjernlund
1 sibling, 1 reply; 22+ messages in thread
From: Albert ARIBAUD @ 2010-11-30 9:02 UTC (permalink / raw)
To: u-boot
Le 30/11/2010 09:47, Joakim Tjernlund a ?crit :
>>
>> Le 30/11/2010 08:06, Andreas Bie?mann a ?crit :
>>> Signed-off-by: Andreas Bie?mann<andreas.devel@googlemail.com>
>>
>>> + cmp r1, #0 /* symbol == NULL ? */
>>> + beq fixnext
>>
>> Nak. Don't hide a null pointer. NULL pointers are *not* relocated, since
>> they are a constant. If a NULL ends up in relocation tables, that is
>> because of a corruption *or* because it was to be relocated, and should
>> thus never be ignored.
>
> Depends, if the same routine is used for relocating fixups you need
> this test. Undefined weaks will generate a NULL fixup entry.
Understood.
Weren't there an effort to not use weak symbols any more?
If not, then a comment *must* be added to indicate that weak symbols can
cause zero-filled reloc entries (I would suggest saying 'zero-filled'
rather than 'NULL', because obviously readers will think of stdio's NULL).
We could possibly even send out a diagnostic message, but that'll be
when the relocation code is turned to C language; I don't want to see
asm code that calls printf.
> Jocke
Amicalement,
--
Albert.
^ permalink raw reply [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH RFC 1/3] arm920t: do not set register useless
2010-11-30 8:28 ` Andreas Bießmann
@ 2010-11-30 9:25 ` Albert ARIBAUD
0 siblings, 0 replies; 22+ messages in thread
From: Albert ARIBAUD @ 2010-11-30 9:25 UTC (permalink / raw)
To: u-boot
Le 30/11/2010 09:28, Andreas Bie?mann a ?crit :
>>> + beq clear_bss /* skip relocation */
>>> + mov r1, r6
>>
>> Why use r1?
>
> Use a scratch register here cause stmia Rn! does increment Rn.
> Therefore usage of r6 here would destroy the saved 'addr of
> destination'. Cause that fact we have saved the 'addr of destination' @
> beginning of relocate_code twice, once to r6 and once to r7. This is
> obviously not needed iv we change the register in copy_loop (which was
> already used in comment .. if you saw that on the end of the line).
Understood.
> I doubt if this a 'speed up' but we can have a cleaner interface. We
> have r4, r5, r6 as storage of input values to relocate_code. We do only
> use scratch registers for copy_loop, fixloop for relocation, clear_bss
> later on. We do decide if we need fixloop for relocation or if we can
> skip that and then setup the relevant scratch registers.
>
> Well this is only an RFC. I found that plus the NULL pointer stuff worth
> to mention. It is not that important to get this special patch in cause
> the current implementation do also work.
The r8 issue and the zero-filled reloc entry issue are important to pull
in as they can cause all sorts of time-wasting issues.
> regards
>
> Andreas Bie?mann
Amicalement,
--
Albert.
^ permalink raw reply [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH RFC 3/3] arm920t: do not relocate NULL pointer
2010-11-30 9:02 ` Albert ARIBAUD
@ 2010-11-30 9:41 ` Joakim Tjernlund
2010-11-30 11:48 ` Andreas Bießmann
0 siblings, 1 reply; 22+ messages in thread
From: Joakim Tjernlund @ 2010-11-30 9:41 UTC (permalink / raw)
To: u-boot
Albert ARIBAUD <albert@aribaud.net> wrote on 2010/11/30 10:02:45:
>
> Le 30/11/2010 09:47, Joakim Tjernlund a ?crit :
> >>
> >> Le 30/11/2010 08:06, Andreas Bie?mann a ?crit :
> >>> Signed-off-by: Andreas Bie?mann<andreas.devel@googlemail.com>
> >>
> >>> + cmp r1, #0 /* symbol == NULL ? */
> >>> + beq fixnext
> >>
> >> Nak. Don't hide a null pointer. NULL pointers are *not* relocated, since
> >> they are a constant. If a NULL ends up in relocation tables, that is
> >> because of a corruption *or* because it was to be relocated, and should
> >> thus never be ignored.
> >
> > Depends, if the same routine is used for relocating fixups you need
> > this test. Undefined weaks will generate a NULL fixup entry.
>
> Understood.
note that I don't know how this routine is used so if just
relocates the GOT you don't need to test for NULL.
>
> Weren't there an effort to not use weak symbols any more?
ehh, not what I am aware of. Just that we should not use(ATM)
undefined weaks.
>
> If not, then a comment *must* be added to indicate that weak symbols can
> cause zero-filled reloc entries (I would suggest saying 'zero-filled'
> rather than 'NULL', because obviously readers will think of stdio's NULL).
zero-filled/NULL fixup entries. The GOT never holds NULL
>
> We could possibly even send out a diagnostic message, but that'll be
> when the relocation code is turned to C language; I don't want to see
> asm code that calls printf.
No need really.
^ permalink raw reply [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH RFC 3/3] arm920t: do not relocate NULL pointer
2010-11-30 9:41 ` Joakim Tjernlund
@ 2010-11-30 11:48 ` Andreas Bießmann
2010-11-30 11:56 ` Joakim Tjernlund
0 siblings, 1 reply; 22+ messages in thread
From: Andreas Bießmann @ 2010-11-30 11:48 UTC (permalink / raw)
To: u-boot
Dear Joakim Tjernlund,
Dear Albert ARIBAUD,
Am 30.11.2010 10:41, schrieb Joakim Tjernlund:
> Albert ARIBAUD <albert@aribaud.net> wrote on 2010/11/30 10:02:45:
>>
>> Le 30/11/2010 09:47, Joakim Tjernlund a ?crit :
>>>>
>>>> Le 30/11/2010 08:06, Andreas Bie?mann a ?crit :
>>>>> Signed-off-by: Andreas Bie?mann<andreas.devel@googlemail.com>
>>>>
>>>>> + cmp r1, #0 /* symbol == NULL ? */
>>>>> + beq fixnext
>>>>
>>>> Nak. Don't hide a null pointer. NULL pointers are *not* relocated, since
>>>> they are a constant. If a NULL ends up in relocation tables, that is
>>>> because of a corruption *or* because it was to be relocated, and should
>>>> thus never be ignored.
>>>
>>> Depends, if the same routine is used for relocating fixups you need
>>> this test. Undefined weaks will generate a NULL fixup entry.
>>
>> Understood.
>
> note that I don't know how this routine is used so if just
> relocates the GOT you don't need to test for NULL.
>
>>
>> Weren't there an effort to not use weak symbols any more?
>
> ehh, not what I am aware of. Just that we should not use(ATM)
> undefined weaks.
Ok, I did forget to investigate that as mentioned in
http://thread.gmane.org/gmane.comp.boot-loaders.u-boot/88024/focus=88324
Here are the results:
Currently arm920/at91 devices have one undefined weak symbol in .dynsym:
---8<---
Symbol table '.dynsym' contains 11 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 00000000 0 NOTYPE LOCAL DEFAULT UND <corrupt>
1: 10000000 0 SECTION LOCAL DEFAULT 1 <corrupt>
2: 10028a28 0 SECTION LOCAL DEFAULT 6 <corrupt>
3: 10029ff8 0 NOTYPE GLOBAL DEFAULT 9 <corrupt>
4: 100299f4 0 NOTYPE GLOBAL DEFAULT ABS <corrupt>
5: 00000000 0 NOTYPE WEAK DEFAULT UND <corrupt>
6: 10029ff8 0 NOTYPE GLOBAL DEFAULT ABS <corrupt>
7: 10029ff8 0 NOTYPE GLOBAL DEFAULT 11 <corrupt>
8: 1002edf0 0 NOTYPE GLOBAL DEFAULT 10 <corrupt>
9: 100701c0 0 NOTYPE GLOBAL DEFAULT 11 <corrupt>
10: 1002edf0 0 NOTYPE GLOBAL DEFAULT 9 <corrupt>
--->8---
---8<---
Hex dump of section '.dynsym':
0x1002edf0 00000000 00000000 00000000 00000000 ................
0x1002ee00 00000000 00000010 00000000 03000100 ................
0x1002ee10 00000000 288a0210 00000000 03000600 ....(...........
0x1002ee20 25000000 f89f0210 00000000 10000900 %...............
0x1002ee30 01000000 f4990210 00000000 1000f1ff ................
0x1002ee40 5e000000 00000000 00000000 20000000 ^........... ...
0x1002ee50 14000000 f89f0210 00000000 1000f1ff ................
0x1002ee60 52000000 f89f0210 00000000 10000b00 R...............
0x1002ee70 43000000 f0ed0210 00000000 10000a00 C...............
0x1002ee80 20000000 c0010710 00000000 10000b00 ...............
0x1002ee90 35000000 f0ed0210 00000000 10000900 5...............
--->8---
So there are two options here.
First is to apply '[PATCH v2 1/2] arm920t/at91/reset.c: fix weak
reset_board()' second (and safer) is to apply (maybe modified) '[PATCH
RFC 3/3] arm920t: do not relocate NULL pointer'.
which one is preferred? Or should we do both?
regards
Andreas Bie?mann
^ permalink raw reply [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH RFC 3/3] arm920t: do not relocate NULL pointer
2010-11-30 11:48 ` Andreas Bießmann
@ 2010-11-30 11:56 ` Joakim Tjernlund
0 siblings, 0 replies; 22+ messages in thread
From: Joakim Tjernlund @ 2010-11-30 11:56 UTC (permalink / raw)
To: u-boot
"Andreas Bie?mann" <andreas.devel@googlemail.com> wrote on 2010/11/30 12:48:41:
>
> Dear Joakim Tjernlund,
> Dear Albert ARIBAUD,
>
> Am 30.11.2010 10:41, schrieb Joakim Tjernlund:
> > Albert ARIBAUD <albert@aribaud.net> wrote on 2010/11/30 10:02:45:
> >>
> >> Le 30/11/2010 09:47, Joakim Tjernlund a ?crit :
> >>>>
> >>>> Le 30/11/2010 08:06, Andreas Bie?mann a ?crit :
> >>>>> Signed-off-by: Andreas Bie?mann<andreas.devel@googlemail.com>
> >>>>
> >>>>> + cmp r1, #0 /* symbol == NULL ? */
> >>>>> + beq fixnext
> >>>>
> >>>> Nak. Don't hide a null pointer. NULL pointers are *not* relocated, since
> >>>> they are a constant. If a NULL ends up in relocation tables, that is
> >>>> because of a corruption *or* because it was to be relocated, and should
> >>>> thus never be ignored.
> >>>
> >>> Depends, if the same routine is used for relocating fixups you need
> >>> this test. Undefined weaks will generate a NULL fixup entry.
> >>
> >> Understood.
> >
> > note that I don't know how this routine is used so if just
> > relocates the GOT you don't need to test for NULL.
> >
> >>
> >> Weren't there an effort to not use weak symbols any more?
> >
> > ehh, not what I am aware of. Just that we should not use(ATM)
> > undefined weaks.
>
> Ok, I did forget to investigate that as mentioned in
> http://thread.gmane.org/gmane.comp.boot-loaders.u-boot/88024/focus=88324
>
> Here are the results:
>
> Currently arm920/at91 devices have one undefined weak symbol in .dynsym:
>
> ---8<---
> Symbol table '.dynsym' contains 11 entries:
> Num: Value Size Type Bind Vis Ndx Name
> 0: 00000000 0 NOTYPE LOCAL DEFAULT UND <corrupt>
> 1: 10000000 0 SECTION LOCAL DEFAULT 1 <corrupt>
> 2: 10028a28 0 SECTION LOCAL DEFAULT 6 <corrupt>
> 3: 10029ff8 0 NOTYPE GLOBAL DEFAULT 9 <corrupt>
> 4: 100299f4 0 NOTYPE GLOBAL DEFAULT ABS <corrupt>
> 5: 00000000 0 NOTYPE WEAK DEFAULT UND <corrupt>
> 6: 10029ff8 0 NOTYPE GLOBAL DEFAULT ABS <corrupt>
> 7: 10029ff8 0 NOTYPE GLOBAL DEFAULT 11 <corrupt>
> 8: 1002edf0 0 NOTYPE GLOBAL DEFAULT 10 <corrupt>
> 9: 100701c0 0 NOTYPE GLOBAL DEFAULT 11 <corrupt>
> 10: 1002edf0 0 NOTYPE GLOBAL DEFAULT 9 <corrupt>
> --->8---
>
> ---8<---
> Hex dump of section '.dynsym':
> 0x1002edf0 00000000 00000000 00000000 00000000 ................
> 0x1002ee00 00000000 00000010 00000000 03000100 ................
> 0x1002ee10 00000000 288a0210 00000000 03000600 ....(...........
> 0x1002ee20 25000000 f89f0210 00000000 10000900 %...............
> 0x1002ee30 01000000 f4990210 00000000 1000f1ff ................
> 0x1002ee40 5e000000 00000000 00000000 20000000 ^........... ...
> 0x1002ee50 14000000 f89f0210 00000000 1000f1ff ................
> 0x1002ee60 52000000 f89f0210 00000000 10000b00 R...............
> 0x1002ee70 43000000 f0ed0210 00000000 10000a00 C...............
> 0x1002ee80 20000000 c0010710 00000000 10000b00 ...............
> 0x1002ee90 35000000 f0ed0210 00000000 10000900 5...............
> --->8---
>
> So there are two options here.
>
> First is to apply '[PATCH v2 1/2] arm920t/at91/reset.c: fix weak
> reset_board()' second (and safer) is to apply (maybe modified) '[PATCH
> RFC 3/3] arm920t: do not relocate NULL pointer'.
>
> which one is preferred? Or should we do both?
Both, you don't know what the future will be and perhaps someone
wants to use undef weaks in board code.
Jocke
^ permalink raw reply [flat|nested] 22+ messages in thread
* [U-Boot] Try to fix Board eb_cpux9k2
2010-11-29 19:58 [U-Boot] Try to fix Board eb_cpux9k2 Jens Scharsig
2010-11-30 7:06 ` [U-Boot] [PATCH RFC 0/3] chenages to arm relocation Andreas Bießmann
2010-11-30 8:37 ` [U-Boot] Try to fix Board eb_cpux9k2 Albert ARIBAUD
@ 2010-12-01 6:44 ` Albert ARIBAUD
2 siblings, 0 replies; 22+ messages in thread
From: Albert ARIBAUD @ 2010-12-01 6:44 UTC (permalink / raw)
To: u-boot
(not sure I've answered you... sorry if I did already)
Le 29/11/2010 20:58, Jens Scharsig a ?crit :
> Dear Albert ARIBAUD,
>
> I have tried to start update the eb_cpux9k2 board. I can compile
> board without errors from current tree. But the board hangs on
> NAND detection. If I disable NAND support, the board starts and
> I can also start Linux.
> A second problem, the board does not restart (reset command).
> I find out that a NULL pointer used by reset code, was also
> relocated.
Does any code executed directly or indirectly by biard_init_f() have
global (BSS) variables? If so, you should fix this by moving those
globals to the GD structure: BSS does not exist before relocation.
Amicalement,
--
Albert.
^ permalink raw reply [flat|nested] 22+ messages in thread
* [U-Boot] Try to fix Board eb_cpux9k2
2010-11-30 8:37 ` [U-Boot] Try to fix Board eb_cpux9k2 Albert ARIBAUD
@ 2010-12-02 20:27 ` Jens Scharsig
2010-12-02 20:49 ` Albert ARIBAUD
0 siblings, 1 reply; 22+ messages in thread
From: Jens Scharsig @ 2010-12-02 20:27 UTC (permalink / raw)
To: u-boot
Dear Albert ARIBAUD,
>
>> A second problem, the board does not restart (reset command).
>> I find out that a NULL pointer used by reset code, was also
>> relocated.
>
> How did you come to this conclusion? NULL pointers are constants and
> thus are *not* relocated.
This problem will be gone with Andreas Bie?mann patch
arm920t/at91/reset: board_reset: define weak symbol reset
>
>> I have currently no access to a BDI2000. But I think, this problems
>> are not board specific. It is possible, there are problems with
>> vector tables or memory protection
>>
>> Any suggestions?
>
> I suggest visually running through all (board or cpu-specific) code that
> runs as part of execution board_init_f() and checking that no global is
> ever used -- BSS or initialized.
Andreas mirror BSS check says OK, But the board hangs on write access to
nand memory space (0x40000000) without any error message.
>
>> The board use 920t on at91rm9200 soc
>>
regards Jens
^ permalink raw reply [flat|nested] 22+ messages in thread
* [U-Boot] Try to fix Board eb_cpux9k2
2010-12-02 20:27 ` Jens Scharsig
@ 2010-12-02 20:49 ` Albert ARIBAUD
0 siblings, 0 replies; 22+ messages in thread
From: Albert ARIBAUD @ 2010-12-02 20:49 UTC (permalink / raw)
To: u-boot
Le 02/12/2010 21:27, Jens Scharsig a ?crit :
>> I suggest visually running through all (board or cpu-specific) code that
>> runs as part of execution board_init_f() and checking that no global is
>> ever used -- BSS or initialized.
>
> Andreas mirror BSS check says OK, But the board hangs on write access to
> nand memory space (0x40000000) without any error message.
Did you also apply Andreas's fix to not use r8 in start.S? Thats's
<http://patchwork.ozlabs.org/patch/73685/>.
Amicalement,
--
Albert.
^ permalink raw reply [flat|nested] 22+ messages in thread
end of thread, other threads:[~2010-12-02 20:49 UTC | newest]
Thread overview: 22+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-11-29 19:58 [U-Boot] Try to fix Board eb_cpux9k2 Jens Scharsig
2010-11-30 7:06 ` [U-Boot] [PATCH RFC 0/3] chenages to arm relocation Andreas Bießmann
2010-11-30 7:06 ` [U-Boot] [PATCH RFC 1/3] arm920t: do not set register useless Andreas Bießmann
2010-11-30 8:07 ` Albert ARIBAUD
2010-11-30 8:28 ` Andreas Bießmann
2010-11-30 9:25 ` Albert ARIBAUD
2010-11-30 7:06 ` [U-Boot] [PATCH RFC 2/3] arm920t: do not use r8 for relocation Andreas Bießmann
2010-11-30 8:22 ` Albert ARIBAUD
2010-11-30 8:35 ` Andreas Bießmann
2010-11-30 8:58 ` Albert ARIBAUD
2010-11-30 7:06 ` [U-Boot] [PATCH RFC 3/3] arm920t: do not relocate NULL pointer Andreas Bießmann
2010-11-30 8:32 ` Albert ARIBAUD
2010-11-30 8:47 ` Joakim Tjernlund
2010-11-30 8:50 ` Andreas Bießmann
2010-11-30 9:02 ` Albert ARIBAUD
2010-11-30 9:41 ` Joakim Tjernlund
2010-11-30 11:48 ` Andreas Bießmann
2010-11-30 11:56 ` Joakim Tjernlund
2010-11-30 8:37 ` [U-Boot] Try to fix Board eb_cpux9k2 Albert ARIBAUD
2010-12-02 20:27 ` Jens Scharsig
2010-12-02 20:49 ` Albert ARIBAUD
2010-12-01 6:44 ` Albert ARIBAUD
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox