diff options
| author | davem <davem@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-04-03 02:39:18 +0000 |
|---|---|---|
| committer | davem <davem@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-04-03 02:39:18 +0000 |
| commit | 90b895095bf82f912149ec2fd73ff0ad50e1db1e (patch) | |
| tree | 68aca795501a576d4749fa76dbcc23fa71139b97 | |
| parent | 4cd21437ecdbd71876af3548167aefe9c928956b (diff) | |
| download | ppe42-gcc-90b895095bf82f912149ec2fd73ff0ad50e1db1e.tar.gz ppe42-gcc-90b895095bf82f912149ec2fd73ff0ad50e1db1e.zip | |
2002-04-02 David S. Miller <davem@redhat.com>
* gcc.c-torture/execute/20020402-3.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@51781 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
| -rw-r--r-- | gcc/testsuite/gcc.c-torture/execute/20020402-3.c | 81 |
2 files changed, 85 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b8c6d504ace..9d1be4981f6 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2002-04-02 David S. Miller <davem@redhat.com> + + * gcc.c-torture/execute/20020402-3.c: New test. + 2002-04-03 Hans-Peter Nilsson <hp@bitrange.com> * g77.dg/bprob/bprob.exp: Skip for mmix-*-* and cris-*-*. diff --git a/gcc/testsuite/gcc.c-torture/execute/20020402-3.c b/gcc/testsuite/gcc.c-torture/execute/20020402-3.c new file mode 100644 index 00000000000..eef27409327 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/20020402-3.c @@ -0,0 +1,81 @@ +/* extracted from gdb sources */ + +typedef unsigned long long CORE_ADDR; + +struct blockvector; + +struct symtab { + struct blockvector *blockvector; +}; + +struct sec { + void *unused; +}; + +struct symbol { + int len; + char *name; +}; + +struct block { + CORE_ADDR startaddr, endaddr; + struct symbol *function; + struct block *superblock; + unsigned char gcc_compile_flag; + int nsyms; + struct symbol syms[1]; +}; + +struct blockvector { + int nblocks; + struct block *block[2]; +}; + +struct blockvector *blockvector_for_pc_sect(register CORE_ADDR pc, + struct symtab *symtab) +{ + register struct block *b; + register int bot, top, half; + struct blockvector *bl; + + bl = symtab->blockvector; + b = bl->block[0]; + + bot = 0; + top = bl->nblocks; + + while (top - bot > 1) + { + half = (top - bot + 1) >> 1; + b = bl->block[bot + half]; + if (b->startaddr <= pc) + bot += half; + else + top = bot + half; + } + + while (bot >= 0) + { + b = bl->block[bot]; + if (b->endaddr > pc) + { + return bl; + } + bot--; + } + return 0; +} + +int main(void) +{ + struct block a = { 0, 0x10000, 0, 0, 1, 20 }; + struct block b = { 0x10000, 0x20000, 0, 0, 1, 20 }; + struct blockvector bv = { 2, { &a, &b } }; + struct symtab s = { &bv }; + + struct blockvector *ret; + + ret = blockvector_for_pc_sect(0x500, &s); + + return 0; +} |

