Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Re: "Alignment" von Funktionen

1 view
Skip to first unread message

Stefan Reuther

unread,
Nov 27, 2008, 12:50:28 PM11/27/08
to
Philipp Pichler wrote:
>> Weder noch. 'gcc' ist der 'compiler driver' und soetwas wie 'einen
>> loader' der Adressen anders als durch Addition einer
>> Laufzeitbasisadresse aendern koennte, gibt es nicht. Aber die
>> Dokumentation Deines Linkers koennte Dir weiterhelfen. Fuer den
>> Gnu-Linker sollte das meiner Erinnerung nach durch Benutzung eines
>> 'linker scripts' moeglich sein.
>
> Danke fuer Deine Antwort. Sowas hab ich mir eh gedacht, dass man in dem
> linker Script die einzelnen Bereiche der einzelnen Section angeben
> koennte. Das Problem ist nur, dass bei mir beide Funktionen in der
> gleichen Section (.text) abgelegt sind.

Beim gcc lässt sich das mit dem Attribut 'section' ändern. Eine portable
Möglichkeit gibt es nicht (bei anderen Compilern ist das z.B. ein
#pragma). Daher hab ich mal ein F'up nach de.comp.gnu gesetzt.


Stefan

Philipp Pichler

unread,
Nov 28, 2008, 6:39:44 AM11/28/08
to
Hi nochmals,

Versuch grad mal ein sehr, sehr einfaches linker_script
zusammenzustellen. Dabei moechte ich eigentlich nur die
Addressen fuer ein paar Sektions angeben, wie auch immer wenn
ich folgendes Script verwende:

SECTIONS
{
. = 0x10000;
.text : { *(.text) }
. = 0x8000000;
.data : { *(.data) }
.bss : { *(.bss) }

}

Und dann in die Bash eingebe: gcc -Wl,-T linker_script.ld -o test example.c

Erhalte ich die folgende Fehlermeldung:

/usr/bin/ld: warning: ld-linux.so.2, needed by /lib/libc.so.6, not found
(try using -rpath or -rpath-link)
/usr/lib/libc_nonshared.a(elf-init.oS)(.text+0x1c): In function
`__libc_csu_init':
: undefined reference to `__init_array_end'
/usr/lib/libc_nonshared.a(elf-init.oS)(.text+0x22): In function
`__libc_csu_init':
: undefined reference to `__init_array_start'
/usr/lib/libc_nonshared.a(elf-init.oS)(.text+0x68): In function
....
/usr/bin/ld: test: hidden symbol `__fini_array_end' isn't defined
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2: ld returned 1 exit status

Ich denke, mein Linkerscript ist zu einfach :D. Weiss hier vielleicht
jemand wo ich eine "Scriptvorlage" finden kann die ich dann entsprechend
anpassen kann (x86, fuer Redhat Linux)

Stefan Reuther

unread,
Nov 28, 2008, 5:24:42 PM11/28/08
to
Philipp Pichler wrote:
> Ich denke, mein Linkerscript ist zu einfach :D. Weiss hier vielleicht
> jemand wo ich eine "Scriptvorlage" finden kann die ich dann entsprechend
> anpassen kann (x86, fuer Redhat Linux)

Bei mir (Debian) gibt's sowas unter /usr/lib/ldscripts.


Stefan

0 new messages