9fans - fans of the OS Plan 9 from Bell Labs
 help / color / mirror / Atom feed
* [9fans] zero length arrays in gcc
@ 2009-09-22 18:49 Fernan Bolando
  2009-09-22 19:19 ` Bakul Shah
  0 siblings, 1 reply; 5+ messages in thread
From: Fernan Bolando @ 2009-09-22 18:49 UTC (permalink / raw)
  To: 9fans

Hi all

nhc98 uses a few of

static unsigned startLabel[]={};

which is a zero length array. It appears that it uses this as
reference to calculate the correct pointer for a bytecode.

pcc does not allow this since zero lenth array is another gcc
extension. I tried declaring it as

static unsigned startLabel[];

The resulting bytecode can then be compiled however it will only
crash. I traced it a pointer that tries to read an unallocated section
in memory.

Is it possible emulate zero pointer in pcc??

--
http://www.fernski.com



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [9fans] zero length arrays in gcc
  2009-09-22 18:49 [9fans] zero length arrays in gcc Fernan Bolando
@ 2009-09-22 19:19 ` Bakul Shah
  2009-09-25  8:14   ` Fernan Bolando
  0 siblings, 1 reply; 5+ messages in thread
From: Bakul Shah @ 2009-09-22 19:19 UTC (permalink / raw)
  To: fernanbolando, Fans of the OS Plan 9 from Bell Labs

On Wed, 23 Sep 2009 02:49:44 +0800 Fernan Bolando <fernanbolando@mailc.net>  wrote:
> Hi all
>
> nhc98 uses a few of
>
> static unsigned startLabel[]={};
>
> which is a zero length array. It appears that it uses this as
> reference to calculate the correct pointer for a bytecode.
>
> pcc does not allow this since zero lenth array is another gcc
> extension. I tried declaring it as
>
> static unsigned startLabel[];
>
> The resulting bytecode can then be compiled however it will only
> crash. I traced it a pointer that tries to read an unallocated section
> in memory.
>
> Is it possible emulate zero pointer in pcc??

Would something like this work?

unsigned foo[1];
#define startLabel (&foo[1])



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [9fans] zero length arrays in gcc
  2009-09-22 19:19 ` Bakul Shah
@ 2009-09-25  8:14   ` Fernan Bolando
  2009-09-27 17:01     ` Russ Cox
  0 siblings, 1 reply; 5+ messages in thread
From: Fernan Bolando @ 2009-09-25  8:14 UTC (permalink / raw)
  To: Fans of the OS Plan 9 from Bell Labs

Hi all

both option did not solve my lost pointer problem. I am still
verifying if it is due to something unrelated to zero length arrays

option1
 unsigned foo[1];
 #define startLabel (&foo[1])

option 2
static unsigned startLabel0;
static unsigned startLabel[] = &startLabel0

thanks
fernan

--
http://www.fernski.com



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [9fans] zero length arrays in gcc
  2009-09-25  8:14   ` Fernan Bolando
@ 2009-09-27 17:01     ` Russ Cox
  0 siblings, 0 replies; 5+ messages in thread
From: Russ Cox @ 2009-09-27 17:01 UTC (permalink / raw)
  To: fernanbolando, Fans of the OS Plan 9 from Bell Labs

Assuming there are not many of these, the
easiest thing to do is fix the nhc98 code.
Figure out what the field after the label is
and take that address instead.

Alternately, you can use a Plan 9 extension
to defeat the gcc extension.  Wherever it says

struct Foo{
    ...
    uchar startLabel[];
    int field1;
    char field2;
    double field 3;
    uchar endLabel[];
    ...
}

you can replace it with

typedef struct insideFoo insideFoo;
struct insideFoo {
    int field1
    char field2;
    double field3;
}

struct Foo {
    ...
    insideFoo;
    ...
}

and then when it says something like

    p = x.startLabel;
    q = x.endLabel;
    memmove(&data, &x.startLabel, x.endLabel - x.startLabel);

you can write

    p = (char*)&x.insideFoo;
    q = (char*)(&x.insideFoo+1);
    memmove(&data, &x.insideFoo, sizeof x.insideFoo);

Russ


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [9fans] zero length arrays in gcc
       [not found] <<1d5d51400909221149u32faccd7ue23a538afa523a23@mail.gmail.com>
@ 2009-09-22 18:58 ` erik quanstrom
  0 siblings, 0 replies; 5+ messages in thread
From: erik quanstrom @ 2009-09-22 18:58 UTC (permalink / raw)
  To: fernanbolando, 9fans

> pcc does not allow this since zero lenth array is another gcc
> extension. I tried declaring it as
>
> static unsigned startLabel[];
>
> The resulting bytecode can then be compiled however it will only
> crash. I traced it a pointer that tries to read an unallocated section
> in memory.

the only thing that makes sense is

static unsigned startLabel0;
static unsigned startLabel[] = &startLabel0

this might not work.  one can't rule out deep and dark
magic with gcc.

- erik



^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2009-09-27 17:01 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-09-22 18:49 [9fans] zero length arrays in gcc Fernan Bolando
2009-09-22 19:19 ` Bakul Shah
2009-09-25  8:14   ` Fernan Bolando
2009-09-27 17:01     ` Russ Cox
     [not found] <<1d5d51400909221149u32faccd7ue23a538afa523a23@mail.gmail.com>
2009-09-22 18:58 ` erik quanstrom

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).