[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Tinycc-devel] unrecognized filetype / link error
From: |
Peter \"Firefly\" Lund |
Subject: |
Re: [Tinycc-devel] unrecognized filetype / link error |
Date: |
Fri, 2 May 2003 23:31:01 +0200 (MEST) |
On Fri, 2 May 2003, Jens Arm wrote:
> address@hidden tinycc]$ cat /usr/lib/libc.so
> /* GNU ld script
> Use the shared library, but some functions are only in
> the static library, so try that secondarily. */
> OUTPUT_FORMAT(elf32-i386)
> GROUP ( /lib/libc.so.6 /usr/lib/libc_nonshared.a )
OUTPUT_FORMAT is the culprit.
This is the function that loads a linker script:
/* interpret a subset of GNU ldscripts to handle the dummy libc.so
files */
static int tcc_load_ldscript(TCCState *s1)
{
char cmd[64];
char filename[1024];
int t;
ch = file->buf_ptr[0];
ch = handle_eob();
for(;;) {
t = ld_next(s1, cmd, sizeof(cmd));
if (t == LD_TOK_EOF)
return 0;
else if (t != LD_TOK_NAME)
return -1;
if (!strcmp(cmd, "INPUT") ||
!strcmp(cmd, "GROUP")) {
t = ld_next(s1, cmd, sizeof(cmd));
if (t != '(')
expect("(");
t = ld_next(s1, filename, sizeof(filename));
for(;;) {
if (t == LD_TOK_EOF) {
error_noabort("unexpected end of file");
return -1;
} else if (t == ')') {
break;
} else if (t != LD_TOK_NAME) {
error_noabort("filename expected");
return -1;
}
tcc_add_file(s1, filename);
t = ld_next(s1, filename, sizeof(filename));
if (t == ',') {
t = ld_next(s1, filename, sizeof(filename));
}
}
} else {
return -1;
}
}
return 0;
}
I guess adding an if (!strcmp(cmd, "OUTPUT_FORMAT")) would help:
for(;;) {
...
if (!strcmp(cmd, "OUTPUT_FORMAT")) {
t = ld_next(s1, cmd, sizeof(cmd));
if (t != '(')
expect("(");
t = ld_next(s1, cmd, sizeof(cmd)); /* dummy - should be elf32-i386 */
t = ld_next(s1, cmd, sizeof(cmd));
if (t != ')')
expect(")");
} else if (!strcmp(...)
...
}
-Peter
"Of course, I'm not unbiased, but in my humble opinion, I've
gotten close to something that I can be really proud of."
-- Knuth on The Art of Computer Programming.