From 47f363829678a02111423cd5d374e6739d8ea500 Mon Sep 17 00:00:00 2001 From: Pixel <> Date: Mon, 16 Apr 2001 14:25:48 +0000 Subject: Linker + bugfixes --- src/linker.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 src/linker.c (limited to 'src/linker.c') diff --git a/src/linker.c b/src/linker.c new file mode 100644 index 0000000..61301de --- /dev/null +++ b/src/linker.c @@ -0,0 +1,61 @@ +#include +#include +#include +#include +#include "config.h" +#include "exceptions.h" +#include "linker.h" + +typedef void (*sighandler_t)(int); + +void invite(void) { + fprintf(stderr, _("Linker v1.0\n\n")); +} + +void usage(void) { + fprintf(stderr, _("Usage: linker obj1 [obj2 [obj3 [...]]] binary\n")); + exit(0); +} + +void init_all(int n) { + fprintf(stderr, _(" o Initialising the linker... ")); + + init(n); + fprintf(stderr, _(" Done!\n")); +} + +void flush_all(void) { + flush(); +} + +void segfaulthand(int i) { + exception(1, _("Signal received: segfault")); +} + +int main(int argc, char ** argv) { + int i; + + invite(); + + signal(SIGSEGV, segfaulthand); + + if (argc < 3) usage(); + + fprintf(stderr, _("\nPerforming initialisation...\n\n")); + init_all(argc - 2); + + fprintf(stderr, _("Linking files...\n")); + + for (i = 1; i < argc - 1; i++) { + addfile(argv[i]); + } + + fprintf(stderr, _("Generating output file...\n")); + dumpfile(argv[i]); + + fprintf(stderr, _("\nPerforming shutdown...\n\n")); + flush_all(); + + fprintf(stderr, _("Exitting, bye!\n")); + return 0; +} -- cgit v1.2.3