From d869a6b0c3315de350799f4f1fdd4bc3538b0855 Mon Sep 17 00:00:00 2001 From: Ian Moffett Date: Thu, 10 Apr 2025 00:57:43 -0400 Subject: core: Add core impl Signed-off-by: Ian Moffett --- src/include/ldo/ldo.h | 58 +++++++++++++++++++++++++++++++++++ src/include/ldo/object.h | 80 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 138 insertions(+) create mode 100644 src/include/ldo/ldo.h create mode 100644 src/include/ldo/object.h (limited to 'src/include') diff --git a/src/include/ldo/ldo.h b/src/include/ldo/ldo.h new file mode 100644 index 0000000..e7618f7 --- /dev/null +++ b/src/include/ldo/ldo.h @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2025 Ian Marco Moffett and the Osmora Team. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of Hyra nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef LDO_H_ +#define LDO_H_ + +#include +#include + +/* Machine types */ +#define LDO_X86_64 0x0000 +#define LDO_AARCH64 0x0001 +#define LDO_PPC64 0x0002 +#define LDO_UNKNOWN 0x0003 + +#define LDO_F_VERBOSE (1 << 0) + +/* Verbose log */ +#define vlog(...) do { \ + if ((ldo_rtflags() & LDO_F_VERBOSE) != 0) { \ + printf(__VA_ARGS__); \ + } \ + } while (0); + +typedef uint16_t ldo_flags_t; +typedef uint8_t ldo_mach_t; + +ldo_flags_t ldo_rtflags(void); +void ldo_load(const char *pathname); +int ldo_init(void); + +#endif /* !LDO_H_ */ diff --git a/src/include/ldo/object.h b/src/include/ldo/object.h new file mode 100644 index 0000000..773bafe --- /dev/null +++ b/src/include/ldo/object.h @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2025 Ian Marco Moffett and the Osmora Team. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of Hyra nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef OBJECT_H_ +#define OBJECT_H_ + +#include +#include + +/* Pin it here, can be adjusted (XXX: careful!) */ +#define OBJQ_MAXCAP 1024 + +/* Default cap */ +#define OBJQ_CAP 512 + +/* + * Represents "static array" objects to be + * queued up before being injected into its + * resulting file's .static_array section. + * + * @pathname: Object file pathname. + * @cdata: Compressed data buffer. + * @size: Size of compressed data. + * @real_size: Size of data when decompressed. + */ +struct sarry_obj { + const char *name; + const char *cdata; + size_t size; + size_t real_size; + TAILQ_ENTRY(sarry_obj) link; +}; + +/* + * Represents a "static array" object queue + * which holds one or more "static array" + * objects. Once filled, all compressed objects + * are injected into a final ELF. + * + * @q: TAILQ head. + * @count: Number of objects. + * @cap: Object queue capacity. + */ +struct sarry_objq { + TAILQ_HEAD(, sarry_obj) q; + size_t count; + size_t cap; +}; + +int sarry_init_objq(struct sarry_objq *qp, size_t cap); +int sarry_objq_in(struct sarry_objq *qp, struct sarry_obj *op); +int sarry_objq_flush(struct sarry_objq *qp, struct sarry_obj *op); + +#endif /* !OBJECT_H_ */ -- cgit v1.2.3