* Another gcc 3.4 fix
@ 2004-05-12 5:27 Mathieu Chouquet-Stringer
2004-05-12 18:32 ` David S. Miller
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: Mathieu Chouquet-Stringer @ 2004-05-12 5:27 UTC (permalink / raw)
To: sparclinux
Ok, one more problem while using gcc 3.4.0. It has a "nice" feature called
"unit-at-a-time compilation", basically files are better "optimized" than
before (you can read more about it here:
http://gcc.gnu.org/gcc-3.4/changes.html).
In our case, the end result is some asm volatile statement gets whacked and
the linking then fails:
arch/sparc64/kernel/built-in.o(__ex_table+0x3c4): undefined reference to `kernel_unaligned_trap_fault'
arch/sparc64/kernel/built-in.o(__ex_table+0x3cc): undefined reference to `kernel_unaligned_trap_fault'
arch/sparc64/kernel/built-in.o(__ex_table+0x3d4): undefined reference to `kernel_unaligned_trap_fault'
arch/sparc64/kernel/built-in.o(__ex_table+0x3dc): undefined reference to `kernel_unaligned_trap_fault'
arch/sparc64/kernel/built-in.o(__ex_table+0x3e4): undefined reference to `kernel_unaligned_trap_fault'
arch/sparc64/kernel/built-in.o(__ex_table+0x3ec): more undefined references to `kernel_unaligned_trap_fault' follow
I checked the output of gcc 3.4.0 for unaligned.c and here's what I had:
U
U
U
U __bzero
0000000000000140 t compute_effective_address
U current_thread_info_reg
U data_access_exception
U die_if_kernel
U do_fpother
U do_privact
0000000000000000 t fetch_reg
00000000000000c0 t fetch_reg_addr
U __flushw_user
0000000000000d80 T handle_lddfmna
00000000000008a0 T handle_ldf_stq
0000000000000c40 T handle_ld_nf
0000000000000700 T handle_popc
0000000000000f80 T handle_stdfmna
0000000000000260 T kernel_mna_trap_fault
0000000000000360 T kernel_unaligned_trap
U kernel_unaligned_trap_fault
U __memcpy
U panic
0000000000000000 d popc_helper
U printk
U search_extables_range
U VISenter
See how kernel_unaligned_trap_fault is undefined? Obviously it
shouldn't...
I was trying to fix this but couldn't get the whole file to compile at all.
At the same time, I checked the output of gcc 3.3.3 (which is known to
work) and realized another function was missing: unaligned_panic.
This one was easy, I just added __attribute_used__ to the function
declaration. To my surprise, it also solved the kernel_unaligned_trap_fault
issue, which I don't get: does it mean the first part of
"if (!ok_for_kernel(insn) || dir = both) {"
in function kernel_unaligned_trap was removed too???
So with the patch attached, here's the correct output:
U
U
U
U __bzero
0000000000000140 t compute_effective_address
U current_thread_info_reg
U data_access_exception
U die_if_kernel
U do_fpother
U do_privact
0000000000000000 t fetch_reg
00000000000000c0 t fetch_reg_addr
U __flushw_user
0000000000000dc0 T handle_lddfmna
00000000000008e0 T handle_ldf_stq
0000000000000c80 T handle_ld_nf
0000000000000740 T handle_popc
0000000000000fc0 T handle_stdfmna
0000000000000280 T kernel_mna_trap_fault
0000000000000380 T kernel_unaligned_trap
0000000000000544 t kernel_unaligned_trap_fault
U __memcpy
U panic
0000000000000000 d popc_helper
U printk
U search_extables_range
0000000000000260 t unaligned_panic
U VISenter
Now the kernel links but I still have some problems with the modules. I'll
take a look tomorrow.
--- arch/sparc64/kernel/unaligned.c.orig 2004-05-11 22:38:33.000000000 -0400
+++ arch/sparc64/kernel/unaligned.c 2004-05-12 00:53:11.000000000 -0400
@@ -175,7 +175,7 @@
}
/* This is just to make gcc think die_if_kernel does return... */
-static void unaligned_panic(char *str, struct pt_regs *regs)
+static void __attribute_used__ unaligned_panic(char *str, struct pt_regs *regs)
{
die_if_kernel(str, regs);
}
--
Mathieu Chouquet-Stringer E-Mail: mchouque@online.fr
Never attribute to malice that which can be adequately
explained by stupidity.
-- Hanlon's Razor --
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Another gcc 3.4 fix
2004-05-12 5:27 Another gcc 3.4 fix Mathieu Chouquet-Stringer
@ 2004-05-12 18:32 ` David S. Miller
2004-05-12 18:51 ` Mathieu Chouquet-Stringer
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: David S. Miller @ 2004-05-12 18:32 UTC (permalink / raw)
To: sparclinux
On Wed, 12 May 2004 01:27:44 -0400
Mathieu Chouquet-Stringer <mchouque@online.fr> wrote:
> Ok, one more problem while using gcc 3.4.0. It has a "nice" feature called
> "unit-at-a-time compilation", basically files are better "optimized" than
> before (you can read more about it here:
> http://gcc.gnu.org/gcc-3.4/changes.html).
Well, what seems to be happening is that GCC believes that
kernel_unaligned_trap() is not invoked so it does not emit
the code for that function.
As a consequence, unaligned_panic() can also not be emitted since
it is only invoked from kernel_unaligned_trap().
Is gcc-3.4 emitting kernel_unaligned_trap() into the unaligned.s file?
If not, that's a bug since it is invoked, at a minimum, from
arch/sparc64/kernel/traps.c and also arch/sparc64/kernel/entry.S
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Another gcc 3.4 fix
2004-05-12 5:27 Another gcc 3.4 fix Mathieu Chouquet-Stringer
2004-05-12 18:32 ` David S. Miller
@ 2004-05-12 18:51 ` Mathieu Chouquet-Stringer
2004-05-12 19:15 ` David S. Miller
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Mathieu Chouquet-Stringer @ 2004-05-12 18:51 UTC (permalink / raw)
To: sparclinux
On Wed, May 12, 2004 at 11:32:28AM -0700, David S. Miller wrote:
> Well, what seems to be happening is that GCC believes that
> kernel_unaligned_trap() is not invoked so it does not emit
> the code for that function.
You meant kernel_unaligned_trap_fault, right? If not, why would
kernel_unaligned_trap function be defined in the .o file then? Only
kernel_unaligned_trap_fault is undefined (and unaligned_panic is simply
missing):
0000000000000360 T kernel_unaligned_trap
U kernel_unaligned_trap_fault
> As a consequence, unaligned_panic() can also not be emitted since
> it is only invoked from kernel_unaligned_trap().
>
> Is gcc-3.4 emitting kernel_unaligned_trap() into the unaligned.s file?
It is (at this stage the patch doesn't make any difference, the output
being the same with or without it):
.global kernel_unaligned_trap
.type kernel_unaligned_trap, #function
.proc 020
kernel_unaligned_trap:
.register %g7, #scratch
!#PROLOGUE# 0
save %sp, -208, %sp
!#PROLOGUE# 1
--
Mathieu Chouquet-Stringer E-Mail: mchouque@online.fr
Never attribute to malice that which can be adequately
explained by stupidity.
-- Hanlon's Razor --
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Another gcc 3.4 fix
2004-05-12 5:27 Another gcc 3.4 fix Mathieu Chouquet-Stringer
2004-05-12 18:32 ` David S. Miller
2004-05-12 18:51 ` Mathieu Chouquet-Stringer
@ 2004-05-12 19:15 ` David S. Miller
2004-05-12 19:45 ` Mathieu Chouquet-Stringer
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: David S. Miller @ 2004-05-12 19:15 UTC (permalink / raw)
To: sparclinux
On Wed, 12 May 2004 14:51:14 -0400
Mathieu Chouquet-Stringer <mchouque@online.fr> wrote:
> It is (at this stage the patch doesn't make any difference, the output
> being the same with or without it):
>
> .global kernel_unaligned_trap
> .type kernel_unaligned_trap, #function
> .proc 020
> kernel_unaligned_trap:
> .register %g7, #scratch
> !#PROLOGUE# 0
> save %sp, -208, %sp
> !#PROLOGUE# 1
It can't be the same in both cases, because something is
making kernel_unaligned_trap_fault underfined right? One
way is for it not to get emitted at all, and that's what
I thought was occurring with gcc-3.4 builds.
Meanwhile, I've put your workaround in for the time being.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Another gcc 3.4 fix
2004-05-12 5:27 Another gcc 3.4 fix Mathieu Chouquet-Stringer
` (2 preceding siblings ...)
2004-05-12 19:15 ` David S. Miller
@ 2004-05-12 19:45 ` Mathieu Chouquet-Stringer
2004-05-12 19:50 ` David S. Miller
2004-05-12 19:59 ` Mathieu Chouquet-Stringer
5 siblings, 0 replies; 7+ messages in thread
From: Mathieu Chouquet-Stringer @ 2004-05-12 19:45 UTC (permalink / raw)
To: sparclinux
On Wed, May 12, 2004 at 12:15:18PM -0700, David S. Miller wrote:
> It can't be the same in both cases, because something is
> making kernel_unaligned_trap_fault underfined right?
My bad, I had the -fno-unit-at-a-time option on the command line.
So with the original version of unaligned.c, there's a
kernel_unaligned_trap in the .s file but no kernel_unaligned_trap_fault
(only references to it) and no unaligned_panic. (am I making myself clear
here?)
That's why I was saying I don't get it: why forcing gcc to generate code
for unaligned_panic make it build kernel_unaligned_trap_fault?
> One way is for it not to get emitted at all, and that's what
> I thought was occurring with gcc-3.4 builds.
>
> Meanwhile, I've put your workaround in for the time being.
Ok.
--
Mathieu Chouquet-Stringer E-Mail: mchouque@online.fr
Never attribute to malice that which can be adequately
explained by stupidity.
-- Hanlon's Razor --
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Another gcc 3.4 fix
2004-05-12 5:27 Another gcc 3.4 fix Mathieu Chouquet-Stringer
` (3 preceding siblings ...)
2004-05-12 19:45 ` Mathieu Chouquet-Stringer
@ 2004-05-12 19:50 ` David S. Miller
2004-05-12 19:59 ` Mathieu Chouquet-Stringer
5 siblings, 0 replies; 7+ messages in thread
From: David S. Miller @ 2004-05-12 19:50 UTC (permalink / raw)
To: sparclinux
On Wed, 12 May 2004 15:45:11 -0400
Mathieu Chouquet-Stringer <mchouque@online.fr> wrote:
> My bad, I had the -fno-unit-at-a-time option on the command line.
Please send the full output gcc-3.4 gives for kernel_unaligned_trap().
There is no way it can delete that whole asm statement that has
the kernel_unaligned_trap_fault definition, the asm is marked
volatile afterall.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Another gcc 3.4 fix
2004-05-12 5:27 Another gcc 3.4 fix Mathieu Chouquet-Stringer
` (4 preceding siblings ...)
2004-05-12 19:50 ` David S. Miller
@ 2004-05-12 19:59 ` Mathieu Chouquet-Stringer
5 siblings, 0 replies; 7+ messages in thread
From: Mathieu Chouquet-Stringer @ 2004-05-12 19:59 UTC (permalink / raw)
To: sparclinux
On Wed, May 12, 2004 at 12:50:11PM -0700, David S. Miller wrote:
> Please send the full output gcc-3.4 gives for kernel_unaligned_trap().
> There is no way it can delete that whole asm statement that has
> the kernel_unaligned_trap_fault definition, the asm is marked
> volatile afterall.
I hope I cut at the right places:
.section ".text"
.align 4
.align 32
.global kernel_unaligned_trap
.type kernel_unaligned_trap, #function
.proc 020
kernel_unaligned_trap:
.register %g7, #scratch
!#PROLOGUE# 0
save %sp, -208, %sp
!#PROLOGUE# 1
srl %i1, 21, %g1
mov 0, %l2
and %g1, 1, %g1
brz,pt %g1, .LL69
srl %i1, 19, %g5
and %g5, 15, %g1
mov 2, %l2
cmp %g1, 15
movne %icc, 1, %l2
.LL69:
and %g5, 15, %g2
xor %g2, 11, %g1
xor %g2, 14, %g2
subcc %g0, %g1, %g0
subx %g0, -1, %g3
subcc %g0, %g2, %g0
subx %g0, -1, %g1
orcc %g3, %g1, %g0
bne,pt %icc, .LL75
mov 8, %l4
andcc %g5, 3, %g2
bne,pt %icc, .LL113
mov 4, %l4
.LL75:
srl %i1, 24, %g1
andcc %g1, 1, %g0
bne,pn %xcc, .LL83
mov %l4, %l0
cmp %l2, 2
bne,pn %icc, .LL82
srl %i1, 25, %g1
.LL83:
ldx [%i0+136], %o1
sethi %hi(.LLC8), %o0
call printk, 0
or %o0, %lo(.LLC8), %o0
sethi %hi(.LLC9), %o0
mov %i0, %o1
call die_if_kernel, 0
or %o0, %lo(.LLC9), %o0
.LL113:
cmp %g2, 3
be,pn %icc, .LL75
mov 16, %l4
cmp %g2, 2
be,pt %icc, .LL75
mov 2, %l4
srl %i1, 0, %o1
sethi %hi(.LLC6), %o0
call printk, 0
or %o0, %lo(.LLC6), %o0
sethi %hi(.LLC7), %o0
ldx [%g6+40], %o1
call die_if_kernel, 0
or %o0, %lo(.LLC7), %o0
.LL82:
mov %i0, %o0
srl %i1, 0, %o1
and %g1, 31, %l1
srl %l1, 0, %l3
call compute_effective_address, 0
mov %l3, %o2
cmp %l2, 0
be,pn %icc, .LL89
mov %o0, %l5
cmp %l2, 1
bne,pn %icc, .LL114
cmp %l0, 16
stx %g0, [%fp+2023]
be,pn %icc, .LL115
add %fp, 2023, %l4
cmp %l1, 0
bne,a,pn %icc, .LL116
mov %l3, %o0
.LL100:
srl %i1, 23, %g1
andcc %g1, 1, %g0
be,pt %xcc, .LL104
mov 128, %g3
srl %i1, 5, %g1
srl %i1, 13, %g2
andcc %g2, 1, %g0
be,pt %xcc, .LL104
and %g1, 0xff, %g3
ldub [%i0+132], %g3
.LL104:
wr %g3, 0, %asi
ldx [%l4], %l1
cmp %l0, 2
be,pn %icc, 2f
cmp %l0, 4
be,pt %icc, 1f
srlx %l1, 24, %l2
srlx %l1, 56, %g1
srlx %l1, 48, %g7
4: stba %g1, [%l5] %asi
srlx %l1, 40, %g1
5: stba %g7, [%l5 + 1] %asi
srlx %l1, 32, %g7
6: stba %g1, [%l5 + 2] %asi
7: stba %g7, [%l5 + 3] %asi
srlx %l1, 16, %g1
8: stba %l2, [%l5 + 4] %asi
srlx %l1, 8, %g7
9: stba %g1, [%l5 + 5] %asi
10: stba %g7, [%l5 + 6] %asi
ba,pt %xcc, 0f
11: stba %l1, [%l5 + 7] %asi
1: srl %l1, 16, %g7
12: stba %l2, [%l5] %asi
srl %l1, 8, %l2
13: stba %g7, [%l5 + 1] %asi
14: stba %l2, [%l5 + 2] %asi
ba,pt %xcc, 0f
15: stba %l1, [%l5 + 3] %asi
2: srl %l1, 8, %l2
16: stba %l2, [%l5] %asi
17: stba %l1, [%l5 + 1] %asi
0:
wr %g0, 17, %asi
.section __ex_table
.word 4b, kernel_unaligned_trap_fault
.word 5b, kernel_unaligned_trap_fault
.word 6b, kernel_unaligned_trap_fault
.word 7b, kernel_unaligned_trap_fault
.word 8b, kernel_unaligned_trap_fault
.word 9b, kernel_unaligned_trap_fault
.word 10b, kernel_unaligned_trap_fault
.word 11b, kernel_unaligned_trap_fault
.word 12b, kernel_unaligned_trap_fault
.word 13b, kernel_unaligned_trap_fault
.word 14b, kernel_unaligned_trap_fault
.word 15b, kernel_unaligned_trap_fault
.word 16b, kernel_unaligned_trap_fault
.word 17b, kernel_unaligned_trap_fault
.previous
ldx [%i0+144], %g3
.LL118:
stx %g3, [%i0+136]
add %g3, 4, %g2
stx %g2, [%i0+144]
ldx [%g6+8], %g1
andcc %g1, 128, %g0
be,pt %xcc, .LL67
mov -1, %g1
srlx %g1, 32, %g1
and %g2, %g1, %g2
and %g3, %g1, %g1
stx %g2, [%i0+144]
ba,pt %xcc, .LL67
stx %g1, [%i0+136]
.LL89:
mov %l3, %o0
call fetch_reg_addr, 0
mov %i0, %o1
srl %i1, 23, %g2
sethi %hi(4194304), %g1
and %i1, %g1, %g5
andcc %g2, 1, %g0
be,pt %xcc, .LL93
mov 128, %g3
srl %i1, 5, %g1
srl %i1, 13, %g2
andcc %g2, 1, %g0
be,pt %xcc, .LL93
and %g1, 0xff, %g3
ldub [%i0+132], %g3
.LL93:
wr %g3, 0, %asi
cmp %l4, 8
bge,pn %icc, 9f
cmp %l4, 4
be,pt %icc, 6f
4: lduba [%l5] %asi, %l1
5: lduba [%l5 + 1] %asi, %l2
sll %l1, 8, %l1
brz,pt %g5, 3f
add %l1, %l2, %l1
sllx %l1, 48, %l1
srax %l1, 48, %l1
3: ba,pt %xcc, 0f
stx %l1, [%o0]
6: lduba [%l5 + 1] %asi, %l2
sll %l1, 24, %l1
7: lduba [%l5 + 2] %asi, %g7
sll %l2, 16, %l2
8: lduba [%l5 + 3] %asi, %g1
sll %g7, 8, %g7
or %l1, %l2, %l1
or %g7, %g1, %g7
or %l1, %g7, %l1
brnz,a,pt %g5, 3f
sra %l1, 0, %l1
3: ba,pt %xcc, 0f
stx %l1, [%o0]
9: lduba [%l5] %asi, %l1
10: lduba [%l5 + 1] %asi, %l2
sllx %l1, 56, %l1
11: lduba [%l5 + 2] %asi, %g7
sllx %l2, 48, %l2
12: lduba [%l5 + 3] %asi, %g1
sllx %g7, 40, %g7
sllx %g1, 32, %g1
or %l1, %l2, %l1
or %g7, %g1, %g7
13: lduba [%l5 + 4] %asi, %l2
or %l1, %g7, %g7
14: lduba [%l5 + 5] %asi, %g1
sllx %l2, 24, %l2
15: lduba [%l5 + 6] %asi, %l1
sllx %g1, 16, %g1
or %g7, %l2, %g7
16: lduba [%l5 + 7] %asi, %l2
sllx %l1, 8, %l1
or %g7, %g1, %g7
or %l1, %l2, %l1
or %g7, %l1, %g7
cmp %l4, 8
be,a,pt %icc, 0f
stx %g7, [%o0]
srlx %g7, 32, %l1
sra %g7, 0, %g7
stx %l1, [%o0]
stx %g7, [%o0 + 8]
0:
wr %g0, 17, %asi
.section __ex_table
.word 4b, kernel_unaligned_trap_fault
.word 5b, kernel_unaligned_trap_fault
.word 6b, kernel_unaligned_trap_fault
.word 7b, kernel_unaligned_trap_fault
.word 8b, kernel_unaligned_trap_fault
.word 9b, kernel_unaligned_trap_fault
.word 10b, kernel_unaligned_trap_fault
.word 11b, kernel_unaligned_trap_fault
.word 12b, kernel_unaligned_trap_fault
.word 13b, kernel_unaligned_trap_fault
.word 14b, kernel_unaligned_trap_fault
.word 15b, kernel_unaligned_trap_fault
.word 16b, kernel_unaligned_trap_fault
.previous
ba,pt %xcc, .LL118
ldx [%i0+144], %g3
.LL116:
call fetch_reg_addr, 0
mov %i0, %o1
ba,pt %xcc, .LL100
mov %o0, %l4
.LL115:
add %l1, 1, %o0
mov %i0, %o1
and %o0, 63, %o0
call fetch_reg, 0
mov 8, %l0
srl %o0, 0, %l2
cmp %l1, 0
bne,pn %icc, .LL117
mov %l2, %o0
ba,pt %xcc, .LL100
stx %o0, [%fp+2023]
.LL117:
mov %l3, %o0
call fetch_reg, 0
mov %i0, %o1
sllx %o0, 32, %o0
or %o0, %l2, %o0
ba,pt %xcc, .LL100
stx %o0, [%fp+2023]
.LL114:
sethi %hi(.LLC10), %o0
call panic, 0
or %o0, %lo(.LLC10), %o0
.LL67:
nop
return %i7+8
nop
.size kernel_unaligned_trap, .-kernel_unaligned_trap
--
Mathieu Chouquet-Stringer E-Mail: mchouque@online.fr
Never attribute to malice that which can be adequately
explained by stupidity.
-- Hanlon's Razor --
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2004-05-12 19:59 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-05-12 5:27 Another gcc 3.4 fix Mathieu Chouquet-Stringer
2004-05-12 18:32 ` David S. Miller
2004-05-12 18:51 ` Mathieu Chouquet-Stringer
2004-05-12 19:15 ` David S. Miller
2004-05-12 19:45 ` Mathieu Chouquet-Stringer
2004-05-12 19:50 ` David S. Miller
2004-05-12 19:59 ` Mathieu Chouquet-Stringer
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.