2006-10-16 06:18:19

by Ingo Molnar

[permalink] [raw]
Subject: [build bug] x86_64, -git: Error: unknown pseudo-op: `.cfi_signal_frame'


using latest -git i'm getting this build bug on gcc 3.4:

arch/x86_64/kernel/entry.S: Assembler messages:
arch/x86_64/kernel/entry.S:157: Error: unknown pseudo-op: `.cfi_signal_frame'
arch/x86_64/kernel/entry.S:215: Error: unknown pseudo-op: `.cfi_signal_frame'
arch/x86_64/kernel/entry.S:333: Error: unknown pseudo-op: `.cfi_signal_frame'
arch/x86_64/kernel/entry.S:548: Error: unknown pseudo-op: `.cfi_signal_frame'

gcc version 3.4.0 20040129 (Red Hat Linux 3.4.0-0.3)

using gcc 4.1 it doesnt happen

gcc version 4.1.1 20060525 (Red Hat 4.1.1-1)

this is caused by the following commit:

commit adf1423698f00d00b267f7dca8231340ce7d65ef
Author: Jan Beulich <[email protected]>
Date: Tue Sep 26 10:52:41 2006 +0200

reverting that patch solves the build problem and the resulting kernel
builds and boots fine.

Ingo


2006-10-16 06:34:00

by Andrew Morton

[permalink] [raw]
Subject: Re: [build bug] x86_64, -git: Error: unknown pseudo-op: `.cfi_signal_frame'

On Mon, 16 Oct 2006 08:10:37 +0200
Ingo Molnar <[email protected]> wrote:

>
> using latest -git i'm getting this build bug on gcc 3.4:
>
> arch/x86_64/kernel/entry.S: Assembler messages:
> arch/x86_64/kernel/entry.S:157: Error: unknown pseudo-op: `.cfi_signal_frame'
> arch/x86_64/kernel/entry.S:215: Error: unknown pseudo-op: `.cfi_signal_frame'
> arch/x86_64/kernel/entry.S:333: Error: unknown pseudo-op: `.cfi_signal_frame'
> arch/x86_64/kernel/entry.S:548: Error: unknown pseudo-op: `.cfi_signal_frame'
>
> gcc version 3.4.0 20040129 (Red Hat Linux 3.4.0-0.3)
>
> using gcc 4.1 it doesnt happen
>
> gcc version 4.1.1 20060525 (Red Hat 4.1.1-1)
>
> this is caused by the following commit:
>
> commit adf1423698f00d00b267f7dca8231340ce7d65ef
> Author: Jan Beulich <[email protected]>
> Date: Tue Sep 26 10:52:41 2006 +0200
>
> reverting that patch solves the build problem and the resulting kernel
> builds and boots fine.
>

That patch has obvious copy-n-paste errors:

i386:

cflags-y += $(call as-instr,.cfi_startproc\n.cfi_endproc,-DCONFIG_AS_CFI=1,)
AFLAGS += $(call as-instr,.cfi_startproc\n.cfi_endproc,-DCONFIG_AS_CFI=1,)

+# is .cfi_signal_frame supported too?
+cflags-y += $(call as-instr,.cfi_startproc\n.cfi_endproc,-DCONFIG_AS_CFI=1,)
+AFLAGS += $(call as-instr,.cfi_startproc\n.cfi_endproc,-DCONFIG_AS_CFI=1,)

So that won't work.

x86_64 appears to get it right:

cflags-y += $(call as-instr,.cfi_startproc\n.cfi_endproc,-DCONFIG_AS_CFI=1,)
AFLAGS += $(call as-instr,.cfi_startproc\n.cfi_endproc,-DCONFIG_AS_CFI=1,)

+# is .cfi_signal_frame supported too?
+cflags-y += $(call as-instr,.cfi_startproc\n.cfi_signal_frame\n.cfi_endproc,-DCONFIG_AS_CFI_SIGNAL_FRAME=1,)
+AFLAGS += $(call as-instr,.cfi_startproc\n.cfi_signal_frame\n.cfi_endproc,-DCONFIG_AS_CFI_SIGNAL_FRAME=1,)

Later,

+#ifdef CONFIG_AS_CFI_SIGNAL_FRAME
+#define CFI_SIGNAL_FRAME .cfi_signal_frame
+#else
+#define CFI_SIGNAL_FRAME
+#endif

but it's obviously not working. Wanna debug it a bit?

2006-10-16 06:36:47

by Nicholas Miell

[permalink] [raw]
Subject: Re: [build bug] x86_64, -git: Error: unknown pseudo-op: `.cfi_signal_frame'

On Mon, 2006-10-16 at 08:10 +0200, Ingo Molnar wrote:
> using latest -git i'm getting this build bug on gcc 3.4:
>
> arch/x86_64/kernel/entry.S: Assembler messages:
> arch/x86_64/kernel/entry.S:157: Error: unknown pseudo-op: `.cfi_signal_frame'
> arch/x86_64/kernel/entry.S:215: Error: unknown pseudo-op: `.cfi_signal_frame'
> arch/x86_64/kernel/entry.S:333: Error: unknown pseudo-op: `.cfi_signal_frame'
> arch/x86_64/kernel/entry.S:548: Error: unknown pseudo-op: `.cfi_signal_frame'
>
> gcc version 3.4.0 20040129 (Red Hat Linux 3.4.0-0.3)
>
> using gcc 4.1 it doesnt happen
>
> gcc version 4.1.1 20060525 (Red Hat 4.1.1-1)
>
> this is caused by the following commit:
>
> commit adf1423698f00d00b267f7dca8231340ce7d65ef
> Author: Jan Beulich <[email protected]>
> Date: Tue Sep 26 10:52:41 2006 +0200
>
> reverting that patch solves the build problem and the resulting kernel
> builds and boots fine.
>
> Ingo

This is a binutils/gas feature; gcc has nothing to do with it. I take it
the gcc 4.1 system is FC5 with binutils 2.16.91.0.6-5 and the gcc 3.4
system is something older?

The kernel build system is supposed to detect gas support
for .cfi_signal_frame -- and while the i386 test is obviously broken
(the i386 test for the directive doesn't actually use the directive),
the AMD64 test looks like it should work (assuming as-instr works).

--
Nicholas Miell <[email protected]>

2006-10-16 06:43:43

by Ingo Molnar

[permalink] [raw]
Subject: Re: [build bug] x86_64, -git: Error: unknown pseudo-op: `.cfi_signal_frame'


* Nicholas Miell <[email protected]> wrote:

> The kernel build system is supposed to detect gas support for
> .cfi_signal_frame -- and while the i386 test is obviously broken (the
> i386 test for the directive doesn't actually use the directive), the
> AMD64 test looks like it should work (assuming as-instr works).

the broken one is:

GNU assembler 2.14.90.0.8 20040114

the working one is:

GNU assembler 2.16.91.0.6 20060212

i guess i found the reason for the breakage: i was using a
cross-compiling setup via the following script:

make -j165 bzImage ARCH=x86_64 CC='distcc /opt/crosstool/gcc-4.0.2-glibc-2.3.6/x86_64-unknown-linux-gnu/bin/x86_64-unknown-linux-gnu-gcc'

Note that i override 'CC' instead of specifying a 'CROSS' prefix. I
suspect this means as-instr does not switch over to the
cross-environment and thus mis-detected the gas version?

Ingo

2006-10-16 06:50:40

by Ingo Molnar

[permalink] [raw]
Subject: Re: [build bug] x86_64, -git: Error: unknown pseudo-op: `.cfi_signal_frame'


* Ingo Molnar <[email protected]> wrote:

> Note that i override 'CC' instead of specifying a 'CROSS' prefix. I
> suspect this means as-instr does not switch over to the
> cross-environment and thus mis-detected the gas version?

this did not solve it either - it seems if both CROSS and CC are set
then CC overrides it and CROSS is ignored? Removing the CC override
solved the problem. But how do i insert the 'distcc' that way? Seems
like a Kbuild breakage to me.

Ingo

2006-10-16 06:58:56

by Jan Beulich

[permalink] [raw]
Subject: Re: [build bug] x86_64, -git: Error: unknown pseudo-op: `.cfi_signal_frame'

>>>> Andrew Morton <[email protected]> 16.10.06 08:33 >>>
>On Mon, 16 Oct 2006 08:10:37 +0200
>Ingo Molnar <[email protected]> wrote:
>
>>
>> using latest -git i'm getting this build bug on gcc 3.4:
>>
>> arch/x86_64/kernel/entry.S: Assembler messages:
>> arch/x86_64/kernel/entry.S:157: Error: unknown pseudo-op: `.cfi_signal_frame'
>> arch/x86_64/kernel/entry.S:215: Error: unknown pseudo-op: `.cfi_signal_frame'
>> arch/x86_64/kernel/entry.S:333: Error: unknown pseudo-op: `.cfi_signal_frame'
>> arch/x86_64/kernel/entry.S:548: Error: unknown pseudo-op: `.cfi_signal_frame'
>>
>> gcc version 3.4.0 20040129 (Red Hat Linux 3.4.0-0.3)
>>
>> using gcc 4.1 it doesnt happen
>>
>> gcc version 4.1.1 20060525 (Red Hat 4.1.1-1)
>>
>> this is caused by the following commit:
>>
>> commit adf1423698f00d00b267f7dca8231340ce7d65ef
>> Author: Jan Beulich <[email protected]>
>> Date: Tue Sep 26 10:52:41 2006 +0200
>>
>> reverting that patch solves the build problem and the resulting kernel
>> builds and boots fine.
>>
>
>That patch has obvious copy-n-paste errors:
>
>i386:
>
> cflags-y += $(call as-instr,.cfi_startproc\n.cfi_endproc,-DCONFIG_AS_CFI=1,)
> AFLAGS += $(call as-instr,.cfi_startproc\n.cfi_endproc,-DCONFIG_AS_CFI=1,)
>
>+# is .cfi_signal_frame supported too?
>+cflags-y += $(call as-instr,.cfi_startproc\n.cfi_endproc,-DCONFIG_AS_CFI=1,)
>+AFLAGS += $(call as-instr,.cfi_startproc\n.cfi_endproc,-DCONFIG_AS_CFI=1,)
>
>So that won't work.
>
>x86_64 appears to get it right:
>
> cflags-y += $(call as-instr,.cfi_startproc\n.cfi_endproc,-DCONFIG_AS_CFI=1,)
> AFLAGS += $(call as-instr,.cfi_startproc\n.cfi_endproc,-DCONFIG_AS_CFI=1,)
>
>+# is .cfi_signal_frame supported too?
>+cflags-y += $(call as-instr,.cfi_startproc\n.cfi_signal_frame\n.cfi_endproc,-DCONFIG_AS_CFI_SIGNAL_FRAME=1,)
>+AFLAGS += $(call as-instr,.cfi_startproc\n.cfi_signal_frame\n.cfi_endproc,-DCONFIG_AS_CFI_SIGNAL_FRAME=1,)
>
>Later,
>
>+#ifdef CONFIG_AS_CFI_SIGNAL_FRAME
>+#define CFI_SIGNAL_FRAME .cfi_signal_frame
>+#else
>+#define CFI_SIGNAL_FRAME
>+#endif
>
>but it's obviously not working. Wanna debug it a bit?

That is nothing I added, I suppose Andi did. But the fix is obvious and trivial.

Jan

2006-10-16 20:06:10

by Sam Ravnborg

[permalink] [raw]
Subject: Re: [build bug] x86_64, -git: Error: unknown pseudo-op: `.cfi_signal_frame'

On Mon, Oct 16, 2006 at 08:43:00AM +0200, Ingo Molnar wrote:
>
> * Ingo Molnar <[email protected]> wrote:
>
> > Note that i override 'CC' instead of specifying a 'CROSS' prefix. I
> > suspect this means as-instr does not switch over to the
> > cross-environment and thus mis-detected the gas version?
>
> this did not solve it either - it seems if both CROSS and CC are set
> then CC overrides it and CROSS is ignored? Removing the CC override
> solved the problem. But how do i insert the 'distcc' that way? Seems
> like a Kbuild breakage to me.

I will try to take a look when I'm back from vacation.
In few hours I'm leaving of for France for 8 days with the family.
If someone else beats me why I'm away it would be fine!

Sam

2006-10-17 09:37:48

by Oleg Verych

[permalink] [raw]
Subject: Re: [build bug] x86_64, -git: Error: unknown pseudo-op: `.cfi_signal_frame'

Hallo.

On 2006-10-16, Ingo Molnar wrote:
>
> * Ingo Molnar <[email protected]> wrote:
>
>> Note that i override 'CC' instead of specifying a 'CROSS' prefix. I
>> suspect this means as-instr does not switch over to the
>> cross-environment and thus mis-detected the gas version?

Do you mean 'CROSS_COMPILE' ?

> this did not solve it either - it seems if both CROSS and CC are set
> then CC overrides it and CROSS is ignored? Removing the CC override
> solved the problem. But how do i insert the 'distcc' that way? Seems
> like a Kbuild breakage to me.

CC with friends is set like this:

+--[linux/Makefile]
|[...]
|AS = $(CROSS_COMPILE)as
|LD = $(CROSS_COMPILE)ld
|CC = $(CROSS_COMPILE)gcc
|CPP = $(CC) -E
|[...]
+--

So, i think, you must set 'CROSS_COMPILE' first and then 'CC' like this:
(exporing PATH in shell, of course)
+--
$ make CROSS_COMPILE=x86_64-pc-linux- 'CC=distcc $(CROSS_COMPILE)gcc'
+--

(BTW, it's funny to see arch-*unknown*-linux...
Like something is deeply hidden and is a very big secret ;)
____