2001-11-28 10:49:40

by Mike Black

[permalink] [raw]
Subject: 2.4.16 Compiler warning

This appears to be a non-fatal warning....does this need to be cleaned up?
gcc 2.95.3

gcc -D__KERNEL__ -I/usr/src/linux/include -Wall -Wstrict-prototypes -Wno-tri
graphs -O2 -fomit-frame-pointer -fno-strict-aliasing -fn
o-common -pipe -mpreferred-stack-boundary=2 -march=i686 -c -o pci-pc.o
pci-pc.c
{standard input}: Assembler messages:
{standard input}:1107: Warning: indirect lcall without `*'
{standard input}:1192: Warning: indirect lcall without `*'
{standard input}:1279: Warning: indirect lcall without `*'
{standard input}:1361: Warning: indirect lcall without `*'
{standard input}:1372: Warning: indirect lcall without `*'
{standard input}:1383: Warning: indirect lcall without `*'
{standard input}:1470: Warning: indirect lcall without `*'
{standard input}:1482: Warning: indirect lcall without `*'
{standard input}:1494: Warning: indirect lcall without `*'
{standard input}:1975: Warning: indirect lcall without `*'
{standard input}:2068: Warning: indirect lcall without `*'

Here's all the lcall's in pci-pc.c:
__asm__("lcall (%%edi); cld"
"lcall (%%edi); cld\n\t"
__asm__("lcall (%%edi); cld\n\t"
__asm__("lcall (%%esi); cld\n\t"
__asm__("lcall (%%esi); cld\n\t"
__asm__("lcall (%%esi); cld\n\t"
__asm__("lcall (%%esi); cld\n\t"
__asm__("lcall (%%esi); cld\n\t"
__asm__("lcall (%%esi); cld\n\t"
"lcall (%%esi); cld\n\t"
__asm__("lcall (%%esi); cld\n\t"


________________________________________
Michael D. Black Principal Engineer
[email protected] 321-676-2923,x203
http://www.csihq.com Computer Science Innovations
http://www.csihq.com/~mike My home page
FAX 321-676-2355


2001-11-28 15:20:40

by Kai Germaschewski

[permalink] [raw]
Subject: Re: 2.4.16 Compiler warning


On Wed, 28 Nov 2001, Mike Black wrote:

> This appears to be a non-fatal warning....does this need to be cleaned up?
> [...]
> {standard input}: Assembler messages:
> {standard input}:1107: Warning: indirect lcall without `*'
> {standard input}:1192: Warning: indirect lcall without `*'
> [...]

I believe this cannot be cleaned up in 2.4 because it breaks older
binutils. However, what about the appended patch for 2.5?

diff -X excl -urN linux-2.5.1-pre2.patches/arch/i386/boot/setup.S linux-2.5.1-pre2.work/arch/i386/boot/setup.S
--- linux-2.5.1-pre2.patches/arch/i386/boot/setup.S Fri Nov 9 22:58:02 2001
+++ linux-2.5.1-pre2.work/arch/i386/boot/setup.S Wed Nov 28 15:09:44 2001
@@ -539,7 +539,7 @@
cmpw $0, %cs:realmode_swtch
jz rmodeswtch_normal

- lcall %cs:realmode_swtch
+ lcall *%cs:realmode_swtch

jmp rmodeswtch_end

diff -X excl -urN linux-2.5.1-pre2.patches/arch/i386/kernel/apm.c linux-2.5.1-pre2.work/arch/i386/kernel/apm.c
--- linux-2.5.1-pre2.patches/arch/i386/kernel/apm.c Fri Nov 9 22:58:02 2001
+++ linux-2.5.1-pre2.work/arch/i386/kernel/apm.c Wed Nov 28 15:04:20 2001
@@ -526,7 +526,7 @@
__asm__ __volatile__(APM_DO_ZERO_SEGS
"pushl %%edi\n\t"
"pushl %%ebp\n\t"
- "lcall %%cs:" SYMBOL_NAME_STR(apm_bios_entry) "\n\t"
+ "lcall *%%cs:" SYMBOL_NAME_STR(apm_bios_entry) "\n\t"
"setc %%al\n\t"
"popl %%ebp\n\t"
"popl %%edi\n\t"
@@ -573,7 +573,7 @@
__asm__ __volatile__(APM_DO_ZERO_SEGS
"pushl %%edi\n\t"
"pushl %%ebp\n\t"
- "lcall %%cs:" SYMBOL_NAME_STR(apm_bios_entry) "\n\t"
+ "lcall *%%cs:" SYMBOL_NAME_STR(apm_bios_entry) "\n\t"
"setc %%bl\n\t"
"popl %%ebp\n\t"
"popl %%edi\n\t"
diff -X excl -urN linux-2.5.1-pre2.patches/arch/i386/kernel/pci-pc.c linux-2.5.1-pre2.work/arch/i386/kernel/pci-pc.c
--- linux-2.5.1-pre2.patches/arch/i386/kernel/pci-pc.c Fri Nov 9 22:58:02 2001
+++ linux-2.5.1-pre2.work/arch/i386/kernel/pci-pc.c Wed Nov 28 15:04:47 2001
@@ -458,7 +458,7 @@
unsigned long flags;

__save_flags(flags); __cli();
- __asm__("lcall (%%edi); cld"
+ __asm__("lcall *(%%edi); cld"
: "=a" (return_code),
"=b" (address),
"=c" (length),
@@ -499,7 +499,7 @@

__save_flags(flags); __cli();
__asm__(
- "lcall (%%edi); cld\n\t"
+ "lcall *(%%edi); cld\n\t"
"jc 1f\n\t"
"xor %%ah, %%ah\n"
"1:"
@@ -544,7 +544,7 @@
unsigned short bx;
unsigned short ret;

- __asm__("lcall (%%edi); cld\n\t"
+ __asm__("lcall *(%%edi); cld\n\t"
"jc 1f\n\t"
"xor %%ah, %%ah\n"
"1:"
@@ -573,7 +573,7 @@

switch (len) {
case 1:
- __asm__("lcall (%%esi); cld\n\t"
+ __asm__("lcall *(%%esi); cld\n\t"
"jc 1f\n\t"
"xor %%ah, %%ah\n"
"1:"
@@ -585,7 +585,7 @@
"S" (&pci_indirect));
break;
case 2:
- __asm__("lcall (%%esi); cld\n\t"
+ __asm__("lcall *(%%esi); cld\n\t"
"jc 1f\n\t"
"xor %%ah, %%ah\n"
"1:"
@@ -597,7 +597,7 @@
"S" (&pci_indirect));
break;
case 4:
- __asm__("lcall (%%esi); cld\n\t"
+ __asm__("lcall *(%%esi); cld\n\t"
"jc 1f\n\t"
"xor %%ah, %%ah\n"
"1:"
@@ -628,7 +628,7 @@

switch (len) {
case 1:
- __asm__("lcall (%%esi); cld\n\t"
+ __asm__("lcall *(%%esi); cld\n\t"
"jc 1f\n\t"
"xor %%ah, %%ah\n"
"1:"
@@ -640,7 +640,7 @@
"S" (&pci_indirect));
break;
case 2:
- __asm__("lcall (%%esi); cld\n\t"
+ __asm__("lcall *(%%esi); cld\n\t"
"jc 1f\n\t"
"xor %%ah, %%ah\n"
"1:"
@@ -652,7 +652,7 @@
"S" (&pci_indirect));
break;
case 4:
- __asm__("lcall (%%esi); cld\n\t"
+ __asm__("lcall *(%%esi); cld\n\t"
"jc 1f\n\t"
"xor %%ah, %%ah\n"
"1:"
@@ -875,7 +875,7 @@
__asm__("push %%es\n\t"
"push %%ds\n\t"
"pop %%es\n\t"
- "lcall (%%esi); cld\n\t"
+ "lcall *(%%esi); cld\n\t"
"pop %%es\n\t"
"jc 1f\n\t"
"xor %%ah, %%ah\n"
@@ -908,7 +908,7 @@
{
int ret;

- __asm__("lcall (%%esi); cld\n\t"
+ __asm__("lcall *(%%esi); cld\n\t"
"jc 1f\n\t"
"xor %%ah, %%ah\n"
"1:"

2001-11-28 22:02:49

by Mikael Pettersson

[permalink] [raw]
Subject: Re: 2.4.16 Compiler warning

On Wed, 28 Nov 2001 16:19:35 +0100 (CET), Kai Germaschewski wrote:
>On Wed, 28 Nov 2001, Mike Black wrote:
>
>> This appears to be a non-fatal warning....does this need to be cleaned up?
>> [...]
>> {standard input}: Assembler messages:
>> {standard input}:1107: Warning: indirect lcall without `*'
>> {standard input}:1192: Warning: indirect lcall without `*'
>> [...]
>
>I believe this cannot be cleaned up in 2.4 because it breaks older
>binutils. However, what about the appended patch for 2.5?

Kai's patch is almost identical to what I've been applying to every 2.3/2.4
kernel for the last year, ever since RedHat included a newer binutils
which printed these "indirect lcall without `*'" warnings.
My patch kit also fixes an occurrence in bootsect.S -- see below.

This really ought to go into 2.5 ASAP, IMHO.

/Mikael

--- linux-2.4.17-pre1/arch/i386/boot/bootsect.S.~1~ Fri Nov 23 22:40:14 2001
+++ linux-2.4.17-pre1/arch/i386/boot/bootsect.S Wed Nov 28 20:33:06 2001
@@ -236,7 +236,7 @@
rp_read:
#ifdef __BIG_KERNEL__ # look in setup.S for bootsect_kludge
bootsect_kludge = 0x220 # 0x200 + 0x20 which is the size of the
- lcall bootsect_kludge # bootsector + bootsect_kludge offset
+ lcall *bootsect_kludge # bootsector + bootsect_kludge offset
#else
movw %es, %ax
subw $SYSSEG, %ax

Subject: Re: 2.4.16 Compiler warning

> >> This appears to be a non-fatal warning....does this need to be
cleaned up?
> >> [...]
> >> {standard input}: Assembler messages:
> >> {standard input}:1107: Warning: indirect lcall without `*'
> >> {standard input}:1192: Warning: indirect lcall without `*'

IIRC I've had them since 2.0.33 I started dealing with Linux...