Hi Eric
Please find attached some simple test cases.
These were compiled using the following
./romcc -O -fno-eliminate-inefectual-code
-I../../../../../src/arch/i386/include/ -o testdef3.inc testdef3.c
if you look at testdef2.c, testdef2.inc you can see that a C++ comment
has caused one line to be missed, no comment or a C comment are fine. I
checked no comments, C comments and C++ comments on both the #if and
#else lines. The one thing I did not check was a C++ comment on the
#endif to see if the following line was missed.
I may be missing needed options for romcc, but I have tried similar
tests in a proper build, with the same results.
regards
Ben
> Stefan Reinauer <[EMAIL PROTECTED]> writes:
>
>
>> Hi,
>>
>> since the romcc builtin preprocessor silently eats lines of code,
>> can we just use the gcc preprocessor (cpp) before calling romcc as
>> a workaround?
>>
>
> I'd love to see a reproducer of that problem. I don't have a good feel
> that it has been root caused. The parser is fairly straight forward
> so if we can reproduce this problem it shouldn't be hard to fix.
>
> I'm not convinced the problem is actually isolated to just the c pre
> processor.
>
>
>> Is there a reason romcc has its own preprocessor?
>>
>
> A couple of reasons.
> - It was comparatively easy.
> - It makes the dependencies much easier to get right.
> - We don't have to worry about gcc polluting the compile with #defines
> that are not correct for the romcc environment.
> - There are several C features that you cannot implement properly unless
> you implement some level of c preprocessor.
>
> All of that said you can look back into the history to when romcc did not have
> a preprocessor and can probably make that work. I'd much rather fix
> the stupid parsing bug.
>
> Eric
>
>
>
#include <arch/io.h>
#ifndef TEST_DEF
#define TEST_DEF 0
#endif
void main(void)
{
outb(10,100);
#if TEST_DEF
outb(11,200);
outb(12,200);
#else // this shouldnt work
outb(11,100);
outb(12,100);
#endif
outb(15,100);
}
.section ".rom.data"
.balign 16
L1:
.int 0xff, 0, 0, 0
L2:
.int 0xffff, 0, 0, 0
.section ".rom.text"
/* ,(null):0.0 */
L1001:
L1002:
/* outb,io.h:14.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6f
.byte 0x75
.byte 0x74
.byte 0x62
.byte 0x00
.section ".rom.text"
/* outw,io.h:19.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6f
.byte 0x75
.byte 0x74
.byte 0x77
.byte 0x00
.section ".rom.text"
/* outl,io.h:24.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6f
.byte 0x75
.byte 0x74
.byte 0x6c
.byte 0x00
.section ".rom.text"
/* inb,io.h:30.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x69
.byte 0x6e
.byte 0x62
.byte 0x00
.section ".rom.text"
/* inw,io.h:36.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x69
.byte 0x6e
.byte 0x77
.byte 0x00
.section ".rom.text"
/* inl,io.h:41.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x69
.byte 0x6e
.byte 0x6c
.byte 0x00
.section ".rom.text"
/* outsb,io.h:85.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6f
.byte 0x75
.byte 0x74
.byte 0x73
.byte 0x62
.byte 0x00
.section ".rom.text"
/* outsw,io.h:94.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6f
.byte 0x75
.byte 0x74
.byte 0x73
.byte 0x77
.byte 0x00
.section ".rom.text"
/* outsl,io.h:103.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6f
.byte 0x75
.byte 0x74
.byte 0x73
.byte 0x6c
.byte 0x00
.section ".rom.text"
/* insb,io.h:113.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x69
.byte 0x6e
.byte 0x73
.byte 0x62
.byte 0x00
.section ".rom.text"
/* insw,io.h:122.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x69
.byte 0x6e
.byte 0x73
.byte 0x77
.byte 0x00
.section ".rom.text"
/* insl,io.h:131.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x69
.byte 0x6e
.byte 0x73
.byte 0x6c
.byte 0x00
.section ".rom.text"
/* writeb,io.h:140.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x77
.byte 0x72
.byte 0x69
.byte 0x74
.byte 0x65
.byte 0x62
.byte 0x00
.section ".rom.text"
/* writew,io.h:145.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x77
.byte 0x72
.byte 0x69
.byte 0x74
.byte 0x65
.byte 0x77
.byte 0x00
.section ".rom.text"
/* writel,io.h:150.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x77
.byte 0x72
.byte 0x69
.byte 0x74
.byte 0x65
.byte 0x6c
.byte 0x00
.section ".rom.text"
/* readb,io.h:155.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x72
.byte 0x65
.byte 0x61
.byte 0x64
.byte 0x62
.byte 0x00
.section ".rom.text"
/* readw,io.h:160.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x72
.byte 0x65
.byte 0x61
.byte 0x64
.byte 0x77
.byte 0x00
.section ".rom.text"
/* readl,io.h:165.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x72
.byte 0x65
.byte 0x61
.byte 0x64
.byte 0x6c
.byte 0x00
.section ".rom.text"
/* main,testdef.c:12.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6d
.byte 0x61
.byte 0x69
.byte 0x6e
.byte 0x00
.section ".rom.text"
/* ,(null):0.0 */
/* ,:0.0 */
#ASM
#NOT ASM
/* main,testdef.c:12.1 */
/* main,testdef.c:14.16 */
/* main,testdef.c:14.20 */
/* ,:0.0 */
/*
* outb,io.h:14.1
* main,testdef.c:14.13
*/
/*
* __builtin_outb,<built-in>:1.0
* outb,io.h:15.23
* main,testdef.c:14.13
*/
mov $10 , %al
outb %al, $100
/*
* outb,io.h:14.1
* main,testdef.c:14.13
*/
/* main,testdef.c:20.16 */
/* main,testdef.c:20.20 */
/* ,:0.0 */
/*
* outb,io.h:14.1
* main,testdef.c:20.13
*/
/*
* __builtin_outb,<built-in>:1.0
* outb,io.h:15.23
* main,testdef.c:20.13
*/
mov $11 , %al
outb %al, $100
/*
* outb,io.h:14.1
* main,testdef.c:20.13
*/
/* main,testdef.c:21.16 */
/* main,testdef.c:21.20 */
/* ,:0.0 */
/*
* outb,io.h:14.1
* main,testdef.c:21.13
*/
/*
* __builtin_outb,<built-in>:1.0
* outb,io.h:15.23
* main,testdef.c:21.13
*/
mov $12 , %al
outb %al, $100
/*
* outb,io.h:14.1
* main,testdef.c:21.13
*/
/* main,testdef.c:25.16 */
/* main,testdef.c:25.20 */
/* ,:0.0 */
/*
* outb,io.h:14.1
* main,testdef.c:25.13
*/
/*
* __builtin_outb,<built-in>:1.0
* outb,io.h:15.23
* main,testdef.c:25.13
*/
mov $15 , %al
outb %al, $100
/*
* outb,io.h:14.1
* main,testdef.c:25.13
*/
/* main,testdef.c:12.1 */
/* ,:0.0 */
/* unknown %eax */
/* unknown %ebx */
/* unknown %ecx */
/* unknown %edx */
#ASM
#NOT ASM
/* max inline depth 3 */
#include <arch/io.h>
#ifndef TEST_DEF
#define TEST_DEF 0
#endif
void main(void)
{
outb(10,100);
#if TEST_DEF
outb(11,200);
outb(12,200);
#else // this shouldnt work
outb(11,100);
outb(12,100);
#endif
outb(15,100);
}
.section ".rom.data"
.balign 16
L1:
.int 0xff, 0, 0, 0
L2:
.int 0xffff, 0, 0, 0
.section ".rom.text"
/* ,(null):0.0 */
L1001:
L1002:
/* outb,io.h:14.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6f
.byte 0x75
.byte 0x74
.byte 0x62
.byte 0x00
.section ".rom.text"
/* outw,io.h:19.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6f
.byte 0x75
.byte 0x74
.byte 0x77
.byte 0x00
.section ".rom.text"
/* outl,io.h:24.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6f
.byte 0x75
.byte 0x74
.byte 0x6c
.byte 0x00
.section ".rom.text"
/* inb,io.h:30.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x69
.byte 0x6e
.byte 0x62
.byte 0x00
.section ".rom.text"
/* inw,io.h:36.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x69
.byte 0x6e
.byte 0x77
.byte 0x00
.section ".rom.text"
/* inl,io.h:41.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x69
.byte 0x6e
.byte 0x6c
.byte 0x00
.section ".rom.text"
/* outsb,io.h:85.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6f
.byte 0x75
.byte 0x74
.byte 0x73
.byte 0x62
.byte 0x00
.section ".rom.text"
/* outsw,io.h:94.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6f
.byte 0x75
.byte 0x74
.byte 0x73
.byte 0x77
.byte 0x00
.section ".rom.text"
/* outsl,io.h:103.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6f
.byte 0x75
.byte 0x74
.byte 0x73
.byte 0x6c
.byte 0x00
.section ".rom.text"
/* insb,io.h:113.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x69
.byte 0x6e
.byte 0x73
.byte 0x62
.byte 0x00
.section ".rom.text"
/* insw,io.h:122.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x69
.byte 0x6e
.byte 0x73
.byte 0x77
.byte 0x00
.section ".rom.text"
/* insl,io.h:131.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x69
.byte 0x6e
.byte 0x73
.byte 0x6c
.byte 0x00
.section ".rom.text"
/* writeb,io.h:140.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x77
.byte 0x72
.byte 0x69
.byte 0x74
.byte 0x65
.byte 0x62
.byte 0x00
.section ".rom.text"
/* writew,io.h:145.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x77
.byte 0x72
.byte 0x69
.byte 0x74
.byte 0x65
.byte 0x77
.byte 0x00
.section ".rom.text"
/* writel,io.h:150.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x77
.byte 0x72
.byte 0x69
.byte 0x74
.byte 0x65
.byte 0x6c
.byte 0x00
.section ".rom.text"
/* readb,io.h:155.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x72
.byte 0x65
.byte 0x61
.byte 0x64
.byte 0x62
.byte 0x00
.section ".rom.text"
/* readw,io.h:160.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x72
.byte 0x65
.byte 0x61
.byte 0x64
.byte 0x77
.byte 0x00
.section ".rom.text"
/* readl,io.h:165.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x72
.byte 0x65
.byte 0x61
.byte 0x64
.byte 0x6c
.byte 0x00
.section ".rom.text"
/* main,testdef.c:12.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6d
.byte 0x61
.byte 0x69
.byte 0x6e
.byte 0x00
.section ".rom.text"
/* ,(null):0.0 */
/* ,:0.0 */
#ASM
#NOT ASM
/* main,testdef.c:12.1 */
/* main,testdef.c:14.16 */
/* main,testdef.c:14.20 */
/* ,:0.0 */
/*
* outb,io.h:14.1
* main,testdef.c:14.13
*/
/*
* __builtin_outb,<built-in>:1.0
* outb,io.h:15.23
* main,testdef.c:14.13
*/
mov $10 , %al
outb %al, $100
/*
* outb,io.h:14.1
* main,testdef.c:14.13
*/
/* main,testdef.c:21.16 */
/* main,testdef.c:21.20 */
/* ,:0.0 */
/*
* outb,io.h:14.1
* main,testdef.c:21.13
*/
/*
* __builtin_outb,<built-in>:1.0
* outb,io.h:15.23
* main,testdef.c:21.13
*/
mov $12 , %al
outb %al, $100
/*
* outb,io.h:14.1
* main,testdef.c:21.13
*/
/* main,testdef.c:25.16 */
/* main,testdef.c:25.20 */
/* ,:0.0 */
/*
* outb,io.h:14.1
* main,testdef.c:25.13
*/
/*
* __builtin_outb,<built-in>:1.0
* outb,io.h:15.23
* main,testdef.c:25.13
*/
mov $15 , %al
outb %al, $100
/*
* outb,io.h:14.1
* main,testdef.c:25.13
*/
/* main,testdef.c:12.1 */
/* ,:0.0 */
/* unknown %eax */
/* unknown %ebx */
/* unknown %ecx */
/* unknown %edx */
#ASM
#NOT ASM
/* max inline depth 3 */
#include <arch/io.h>
#ifndef TEST_DEF
#define TEST_DEF 0
#endif
void main(void)
{
outb(10,100);
#if TEST_DEF
outb(11,200);
outb(12,200);
#else /* this does work */
outb(11,100);
outb(12,100);
#endif
outb(15,100);
}
.section ".rom.data"
.balign 16
L1:
.int 0xff, 0, 0, 0
L2:
.int 0xffff, 0, 0, 0
.section ".rom.text"
/* ,(null):0.0 */
L1001:
L1002:
/* outb,io.h:14.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6f
.byte 0x75
.byte 0x74
.byte 0x62
.byte 0x00
.section ".rom.text"
/* outw,io.h:19.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6f
.byte 0x75
.byte 0x74
.byte 0x77
.byte 0x00
.section ".rom.text"
/* outl,io.h:24.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6f
.byte 0x75
.byte 0x74
.byte 0x6c
.byte 0x00
.section ".rom.text"
/* inb,io.h:30.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x69
.byte 0x6e
.byte 0x62
.byte 0x00
.section ".rom.text"
/* inw,io.h:36.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x69
.byte 0x6e
.byte 0x77
.byte 0x00
.section ".rom.text"
/* inl,io.h:41.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x69
.byte 0x6e
.byte 0x6c
.byte 0x00
.section ".rom.text"
/* outsb,io.h:85.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6f
.byte 0x75
.byte 0x74
.byte 0x73
.byte 0x62
.byte 0x00
.section ".rom.text"
/* outsw,io.h:94.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6f
.byte 0x75
.byte 0x74
.byte 0x73
.byte 0x77
.byte 0x00
.section ".rom.text"
/* outsl,io.h:103.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6f
.byte 0x75
.byte 0x74
.byte 0x73
.byte 0x6c
.byte 0x00
.section ".rom.text"
/* insb,io.h:113.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x69
.byte 0x6e
.byte 0x73
.byte 0x62
.byte 0x00
.section ".rom.text"
/* insw,io.h:122.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x69
.byte 0x6e
.byte 0x73
.byte 0x77
.byte 0x00
.section ".rom.text"
/* insl,io.h:131.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x69
.byte 0x6e
.byte 0x73
.byte 0x6c
.byte 0x00
.section ".rom.text"
/* writeb,io.h:140.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x77
.byte 0x72
.byte 0x69
.byte 0x74
.byte 0x65
.byte 0x62
.byte 0x00
.section ".rom.text"
/* writew,io.h:145.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x77
.byte 0x72
.byte 0x69
.byte 0x74
.byte 0x65
.byte 0x77
.byte 0x00
.section ".rom.text"
/* writel,io.h:150.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x77
.byte 0x72
.byte 0x69
.byte 0x74
.byte 0x65
.byte 0x6c
.byte 0x00
.section ".rom.text"
/* readb,io.h:155.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x72
.byte 0x65
.byte 0x61
.byte 0x64
.byte 0x62
.byte 0x00
.section ".rom.text"
/* readw,io.h:160.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x72
.byte 0x65
.byte 0x61
.byte 0x64
.byte 0x77
.byte 0x00
.section ".rom.text"
/* readl,io.h:165.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x72
.byte 0x65
.byte 0x61
.byte 0x64
.byte 0x6c
.byte 0x00
.section ".rom.text"
/* main,testdef3.c:12.1 */
.section ".rom.data"
.balign 1
L0:
.byte 0x6d
.byte 0x61
.byte 0x69
.byte 0x6e
.byte 0x00
.section ".rom.text"
/* ,(null):0.0 */
/* ,:0.0 */
#ASM
#NOT ASM
/* main,testdef3.c:12.1 */
/* main,testdef3.c:14.16 */
/* main,testdef3.c:14.20 */
/* ,:0.0 */
/*
* outb,io.h:14.1
* main,testdef3.c:14.13
*/
/*
* __builtin_outb,<built-in>:1.0
* outb,io.h:15.23
* main,testdef3.c:14.13
*/
mov $10 , %al
outb %al, $100
/*
* outb,io.h:14.1
* main,testdef3.c:14.13
*/
/* main,testdef3.c:20.16 */
/* main,testdef3.c:20.20 */
/* ,:0.0 */
/*
* outb,io.h:14.1
* main,testdef3.c:20.13
*/
/*
* __builtin_outb,<built-in>:1.0
* outb,io.h:15.23
* main,testdef3.c:20.13
*/
mov $11 , %al
outb %al, $100
/*
* outb,io.h:14.1
* main,testdef3.c:20.13
*/
/* main,testdef3.c:21.16 */
/* main,testdef3.c:21.20 */
/* ,:0.0 */
/*
* outb,io.h:14.1
* main,testdef3.c:21.13
*/
/*
* __builtin_outb,<built-in>:1.0
* outb,io.h:15.23
* main,testdef3.c:21.13
*/
mov $12 , %al
outb %al, $100
/*
* outb,io.h:14.1
* main,testdef3.c:21.13
*/
/* main,testdef3.c:25.16 */
/* main,testdef3.c:25.20 */
/* ,:0.0 */
/*
* outb,io.h:14.1
* main,testdef3.c:25.13
*/
/*
* __builtin_outb,<built-in>:1.0
* outb,io.h:15.23
* main,testdef3.c:25.13
*/
mov $15 , %al
outb %al, $100
/*
* outb,io.h:14.1
* main,testdef3.c:25.13
*/
/* main,testdef3.c:12.1 */
/* ,:0.0 */
/* unknown %eax */
/* unknown %ebx */
/* unknown %ecx */
/* unknown %edx */
#ASM
#NOT ASM
/* max inline depth 3 */
--
linuxbios mailing list
[email protected]
http://www.openbios.org/mailman/listinfo/linuxbios