h8300-elf test case

Paul paulc@senet.com.au
Wed Jul 2 12:37:00 GMT 2003


Test code for h8300-elf relax file r.c

extern unsigned char eightbitaddressable;    // in range 0xFFFF00 - 0xFFFFFF
extern  unsigned char sixteenbitaddressable; // in range 0x0 - 0x7FFF
                                             // or 0xFF8000 - 0xFFFFFF
extern  unsigned char maxbitaddressable;     //  in range 0x8000 - 0xFF7FFF

// test the relaxing at line ?? of elf32-h8300,c

void line934 (void)
{
    asm volatile (" beq _skip10");
    asm volatile (" jmp @_line934\n_skip10:");
}

void line956 (void)
{
    asm volatile (" beq _skip21");
    asm volatile (" jsr @_line956\n_skip21:");
}

void line1021 (void)
{
    asm volatile (" beq _skip31:16");
    asm volatile (" jsr @_line1021\n_skip31:");
}

int line1084 (void)
{
  char x;
  int y;
  asm volatile (" mov.b %1:16,%0l":"=g"(x) : "m" (eightbitaddressable) );  
  asm volatile (" mov.b r0l,%0:16": "=m" (eightbitaddressable) );
  asm volatile (" mov.b %1:16,%0l":"=g"(x) : "m" (sixteenbitaddressable) 
);  
  asm volatile (" mov.b r0l,%0:16": "=m" (sixteenbitaddressable) );
  asm volatile (" mov.b %1:16,%0l":"=g"(x) : "m" (maxbitaddressable) );  
  asm volatile (" mov.b r0l,%0:16": "=m" (maxbitaddressable) );
  // word access
  asm volatile (" mov.w %1:24,%0":"=g"(y) : "m" (eightbitaddressable) );  
  asm volatile (" mov.w r0,%0:24": "=m" (eightbitaddressable):"r" (y) );
  asm volatile (" mov.w %1:24,%0":"=g"(y) : "m" (sixteenbitaddressable) 
);  
  asm volatile (" mov.w r0,%0:24": "=m" (sixteenbitaddressable):"r" (y) );
  asm volatile (" mov.w %1:24,%0":"=g"(y) : "m" (maxbitaddressable) );  
  asm volatile (" mov.w r0,%0:24": "=m" (maxbitaddressable):"r" (y) );
return (int) x;
}

int line1161 (void)
{
  char x;
  asm volatile ("mov.b %1:24,%0l":"=g"(x):"m"(eightbitaddressable) ); // 
68 28
  asm volatile ("mov.b r0l,%0:24": "=m" (eightbitaddressable) ); // 68 
a8 ...
  asm volatile ("mov.b %1:24,%0l":"=g"(x):"m"(sixteenbitaddressable)); 
// 68 28
  asm volatile ("mov.b r0l,%0:24": "=m" (sixteenbitaddressable) ); // 68 
a8 ...
  asm volatile ("mov.b %1:24,%0l":"=g"(x):"m"(maxbitaddressable) ); // 68 28
  asm volatile ("mov.b r0l,%0:24": "=m" (maxbitaddressable) ); // 68 a8 ...
  return (int) x;
}

int line1202 (void)
{
  int x;
  asm volatile ("mov.w %1:32,%0":"=r"(x):"m"(sixteenbitaddressable)); // 
68 28
  asm volatile ("mov.w r0,%0:32": "=m" (sixteenbitaddressable) ); // 68 
a8 ...
  return (int) x;
}

int main (void)
{
  (void) line934();
  (void) line956();
  (void) line1021(); 
  (void) line1084();
  (void) line1161(); 
  (void) line1202();
  return 1;
}
void start (void)
{
  main();
}

create a linker file called rom.lnk with the following added

>  
> SECTIONS
> {
>   _eightbitaddressable = 0xFFFF00;
>   _sixteenbitaddressable = 0x007FFF;
>   _maxbitaddressable = 0x008000;


Without patch

h8300-elf-gcc -Wall -nostartfiles -O3 -fno-inline -ms 
-fomit-frame-pointer   -c -o r.o r.c
h8300-elf-gcc -Wall -nostartfiles -O3 -fno-inline -ms 
-fomit-frame-pointer -g -ms -Wl,--relax -Trom.lnk -Xlinker -Map -Xlinker 
rom.map -o relax.out r.o -lm
/usr/local/lib/gcc-lib/h8300-elf/3.3/../../../../h8300-elf/bin/ld: BFD 
2.14.90 20030702 internal error, aborting at 
../../binutils-latest/bfd/elf32-h8300.c line 1060 in elf32_h8_relax_section

/usr/local/lib/gcc-lib/h8300-elf/3.3/../../../../h8300-elf/bin/ld: 
Please report this bug.

collect2: ld returned 1 exit status




More information about the Binutils mailing list