This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
h8300-elf test case
- From: Paul <paulc at senet dot com dot au>
- To: binutils at sources dot redhat dot com, Richard Sandiford <rsandifo at redhat dot com>
- Date: Wed, 02 Jul 2003 22:03:13 +0930
- Subject: h8300-elf test case
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