Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Module info storage / parser fix
  • Loading branch information
djphoenix committed Nov 3, 2016
1 parent 0c9b192 commit 676922b
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 20 deletions.
3 changes: 3 additions & 0 deletions ld/module.ld
Expand Up @@ -29,6 +29,9 @@ SECTIONS
*(.init_array*)
*(.rodata .rodata.* .rdata .rdata.*)
}
.module BLOCK(1) : ALIGN(1) {
*(.module*)
}
.data BLOCK(1) : ALIGN(1) {
*(.data .data.*)
*(.xdata .xdata.* .pdata .pdata.*)
Expand Down
16 changes: 11 additions & 5 deletions modules/hello/hello.cpp
Expand Up @@ -14,11 +14,17 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.

const char* module_name = "Test/Hello";
const char* module_version = "1.0";
const char* module_description = "Prints \"Hello, world\" text";
const char* module_requirements = "";
const char* module_developer = "PhoeniX";
#define MODDESC(k, v) \
extern const char \
__attribute__((section(".module"))) \
__attribute__((aligned(1))) \
module_ ## k[] = v; \

MODDESC(name, "Test/Hello");
MODDESC(version, "1.0");
MODDESC(description, "Prints \"Hello, world\" text");
MODDESC(requirements, "");
MODDESC(developer, "PhoeniX");

extern "C" { void module(); }

Expand Down
23 changes: 8 additions & 15 deletions src/modules.cpp
Expand Up @@ -20,22 +20,15 @@
bool ModuleManager::parseModuleInfo(MODULEINFO *info, Process *process) {
struct {
uintptr_t entry, name, version, desc, reqs, dev;
} symbols = { process->getSymbolByName("module"), process->getSymbolByName(
"module_name"),
process->getSymbolByName("module_version"), process
->getSymbolByName("module_description"),
process->getSymbolByName("module_requirements"), process
->getSymbolByName("module_developer") };
} symbols = {
process->getSymbolByName("module"),
process->getSymbolByName("module_name"),
process->getSymbolByName("module_version"),
process->getSymbolByName("module_description"),
process->getSymbolByName("module_requirements"),
process->getSymbolByName("module_developer")
};
MODULEINFO mod = { 0, 0, 0, 0, 0 };
if ((symbols.entry == 0) || (symbols.name == 0) || (symbols.version == 0)
|| (symbols.desc == 0) || (symbols.reqs == 0) || (symbols.dev == 0))
return false;

process->readData(&symbols.name, symbols.name, sizeof(uintptr_t));
process->readData(&symbols.version, symbols.version, sizeof(uintptr_t));
process->readData(&symbols.desc, symbols.desc, sizeof(uintptr_t));
process->readData(&symbols.reqs, symbols.reqs, sizeof(uintptr_t));
process->readData(&symbols.dev, symbols.dev, sizeof(uintptr_t));

if ((symbols.entry == 0) || (symbols.name == 0) || (symbols.version == 0)
|| (symbols.desc == 0) || (symbols.reqs == 0) || (symbols.dev == 0))
Expand Down

0 comments on commit 676922b

Please sign in to comment.