summaryrefslogtreecommitdiff
path: root/linkers/rld-rap.h
diff options
context:
space:
mode:
Diffstat (limited to 'linkers/rld-rap.h')
-rw-r--r--linkers/rld-rap.h97
1 files changed, 97 insertions, 0 deletions
diff --git a/linkers/rld-rap.h b/linkers/rld-rap.h
new file mode 100644
index 0000000..19969e3
--- /dev/null
+++ b/linkers/rld-rap.h
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2012, Chris Johns <chrisj@rtems.org>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+/**
+ * @file
+ *
+ * @ingroup rtems-ld
+ *
+ * @brief RTEMS Linker RTEMS Application (RAP) Format management.
+ *
+ */
+
+#if !defined (_RLD_RAP_H_)
+#define _RLD_RAP_H_
+
+#include <rld-files.h>
+
+namespace rld
+{
+ namespace rap
+ {
+ /**
+ * Output details or not.
+ */
+ extern bool add_obj_details;
+
+ /**
+ * Store the path of object files.
+ */
+ extern std::string rpath;
+
+ /**
+ * The RAP relocation bit masks.
+ */
+ #define RAP_RELOC_RELA (1UL << 31)
+ #define RAP_RELOC_STRING (1UL << 31)
+ #define RAP_RELOC_STRING_EMBED (1UL << 30)
+
+ /**
+ * The sections of interest in a RAP file.
+ */
+ enum sections
+ {
+ rap_text = 0,
+ rap_const = 1,
+ rap_ctor = 2,
+ rap_dtor = 3,
+ rap_data = 4,
+ rap_bss = 5,
+ rap_secs = 6
+ };
+
+ /**
+ * Return the name of a section.
+ */
+ const char* section_name (int sec);
+
+ /**
+ * Write a RAP format file.
+ *
+ * The symbol table is provided to allow incremental linking at some point
+ * in the future. I suspect this will also require extra options being
+ * added to control symbol visibility in the RAP file. For example an
+ * "application" may be self contained and does not need to export any
+ * symbols therefore no symbols are added and the only ones are part of the
+ * relocation records to bind to base image symbols. Another case is the
+ * need for an application to export symbols because it is using dlopen to
+ * load modules. Here the symbols maybe 'all' or it could be a user
+ * maintained list that are exported.
+ *
+ * @param app The application image to write too.
+ * @param init The application's initialisation entry point.
+ * @param fini The application's finish entry point .
+ * @param objects The list of object files in the application.
+ * @param symbols The symbol table used to create the application.
+ */
+ void write (files::image& app,
+ const std::string& init,
+ const std::string& fini,
+ const files::object_list& objects,
+ const symbols::table& symbols);
+ }
+}
+
+#endif