summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/PORTING26
1 files changed, 15 insertions, 11 deletions
diff --git a/docs/PORTING b/docs/PORTING
index 1c58c0ca3..a4c01423c 100644
--- a/docs/PORTING
+++ b/docs/PORTING
@@ -1,20 +1,22 @@
-Some notes to help future porters. Replace 'ARCH' with whatever arch
+Some notes to help future porters. Replace 'ARCH' with whatever arch
you are hacking on.
====================
=== Config Files ===
====================
- create extra/Configs/Config.ARCH
- See the other arch files for some good examples. powerpc/sparc/alpha
+ See the other arch files for some good examples. powerpc/sparc/alpha
should be pretty simple templates.
- add ARCH to the 'Target Architecture' list in extra/Configs/Config.in
-- for now, disable shared libraries
- add HAVE_NO_SHARED and ARCH_HAS_NO_LDSO to Config.ARCH's HAVE_ELF
+- Initially you will want to disable shared libraries, since making
+ the shared library loader work requires you first have basic architecture
+ support working. Thus you should add HAVE_NO_SHARED and ARCH_HAS_NO_LDSO
+ to Config.ARCH's HAVE_ELF
====================
=== libc sysdeps ===
====================
-(note: if glibc has already been ported to your arch, you can usually just
+(note: if glibc has already been ported to your arch, you can usually just
copy a lot of files from them rather than coding from scratch)
- create libc/sysdeps/linux/ARCH
- copy Makefile and Makefile.arch from libc/sysdeps/linux/i386/
@@ -24,9 +26,9 @@ you are hacking on.
to clear the frame pointer to make gdb happy, and then you will want to call
the funcion __uClibc_main() which takes these parameters:
__uClibc_main(main(), argc, argv, _init(), _fini())
- for now, you can disable the UCLIBC_CTOR_DTOR option and just set those two
- arguments to NULL
- glibc stores this function in libc/sysdeps/ARCH/elf/start.S
+ Initially if you wish to make things easier on yourself, you can disable the
+ UCLIBC_CTOR_DTOR option and just set those two arguments to NULL
+ glibc generally stores this function in libc/sysdeps/ARCH/elf/start.S
- create these additional files in ARCH/bits/
@@ -38,13 +40,15 @@ you are hacking on.
copy linux asm-ARCH/stat.h to bits/kernel_stat.h
create syscalls.h based upon linux's unistd.h / glibc's sysdeps.h ... really
- you just want to define the _syscall[0-6] macros
+ you just want to define the _syscall[0-6] macros. It is important that
+ these syscalls should be PIC safe (or you should provide a PIC and non-PIC
+ version) if you wish to properly support shared libraries.
- at this point, you should have enough to generate a working HELLO WORLD
static binary (see test/silly/*.c files)
- if you want UCLIBC_CTOR_DTOR support, you will need to create crti.S and
- crtn.S files which define function prologues/epilogues
+ crtn.S files which define function prologues/epilogues.
- for a more stable static port, you will need to create these files (and
update the Makefile.arch values accordingly)
@@ -62,7 +66,7 @@ TODO: nptl / linuxthreads / linuxthreads.old
=== ldso sysdeps ===
====================
- enable ldso/shared options in your extra/Configs/Config.ARCH file
-- you'll need to create these files in ldso/ldso/ARCH/
+- you will need to create the following files in ldso/ldso/ARCH/
dl-debug.h dl-startup.h dl-syscalls.h dl-sysdep.h elfinterp.c resolve.S
- dl-debug.h: define string versions of all the relocations of your arch in the