From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16526 invoked by alias); 18 Nov 2015 07:43:08 -0000 Mailing-List: contact ecos-discuss-help@ecos.sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: ecos-discuss-owner@ecos.sourceware.org Received: (qmail 16514 invoked by uid 89); 18 Nov 2015 07:43:08 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=1.2 required=5.0 tests=AWL,BAYES_50,FREEMAIL_FROM,KAM_ASCII_DIVIDERS,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=no version=3.3.2 X-HELO: mail-yk0-f171.google.com Received: from mail-yk0-f171.google.com (HELO mail-yk0-f171.google.com) (209.85.160.171) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Wed, 18 Nov 2015 07:43:06 +0000 Received: by ykdr82 with SMTP id r82so49829396ykd.3 for ; Tue, 17 Nov 2015 23:43:04 -0800 (PST) MIME-Version: 1.0 X-Received: by 10.129.131.151 with SMTP id t145mr96717ywf.266.1447832584577; Tue, 17 Nov 2015 23:43:04 -0800 (PST) Received: by 10.31.94.141 with HTTP; Tue, 17 Nov 2015 23:43:04 -0800 (PST) Date: Wed, 18 Nov 2015 07:43:00 -0000 Message-ID: From: Robert H To: ecos-discuss@ecos.sourceware.org Content-Type: text/plain; charset=UTF-8 X-IsSubscribed: yes Subject: [ECOS] Re: ecos hal symbol table creation mechanism X-SW-Source: 2015-11/txt/msg00005.txt.bz2 2015-11-17 17:23 GMT+01:00 Sergei Gavrikov : > On Mon, 16 Nov 2015, Robert H wrote: > >> Hello all, >> >> I have some questions concerning the ecos hal symbol table creation in >> hal_tables.h >> >> How is it possible to export a symbol which is in the ecos image into >> some object file for it being able to call it? >> >> I know that test_mods.c uses some defines the object file - that the >> application programer wants to load - uses some defines: >> e.g. >> CYG_LDR_TABLE_ENTRY(cyg_alarm_create_entry,"cyg_alarm_create",cyg_alarm_create); >> >> which then gets replaced by >> >> cyg_ldr_table_entry __name CYG_HAL_TABLE_ENTRY(ldr_table) = { >> __symbol_name, __handler }; // line 141 in objelf.h >> // with __name being a struct of >> // { char *__symbol_name , void *__handler }; >> // where is the definition of ldr_table? I can't seem to find it anywhere >> >> and then again gets replaced by >> >> cyg_ldr_table_entry __name >> __attribute__((section(".ecos.table.ldr_table.data")) = { >> __symbol_name , __handler }; >> // line 103 in hal_tables.h >> >> Does the section attribute here tell the compiler to put a struct >> cyg_ldr_tables_entry entry (in this example: {"cyg_alarm_create" , >> cyg_alarm_create} ) >> into the ecos image's section .ecos.table.ldr_table.data? > > Correct. Look on HAL arch. linker script(s). E.g. for ARM architecture > > https://sourceware.org/viewvc/ecos/packages/hal/arm/arch/current/src/arm.ld?revision=1.23&view=markup#l329 > >> Then again, I wonder then how the ecos is able to get the adress of >> the function/symbol cyg_alarm_create into the handler >> cyg_alarm_create. >> >> I would be very pleased to know more about how the mechanism to get >> ecos symbols works in hal_tables.h > > Generally and particularly (objloader case) the table boundaries are > known > > https://sourceware.org/viewvc/ecos/packages/services/objloader/current/src/objelf.c?view=markup#l62 > > Look up example, objelf.c:cyg_ldr_external_address(): > > https://sourceware.org/viewvc/ecos/packages/services/objloader/current/src/objelf.c?view=markup#l219 > > > Sergei Thank you very much Sergei! I probably still don't get it by looking at the source code how entry->handler gets filled with the address of the symbol_name in the ecos image. cyg_ldr_external_address is for accessing the symbol table in that section until the entry-pointer reached the cyg_ldr_table_end-pointer, but to me that still doesn't explain how entry->handler gets filled by the right address. the application programmer maybe specifying the function he needs but still I'm dunno how ecos achieves the address of a function from the ecos image. Robert PS.: I tried to illustrate the array of type struct cyg_ldr_table_entry inside the section .ecos.table.ldr_table.data : cyg_ldr_table cyg_ldr_table_end | | | | /--------------------\ /--------------------\ | sym_name 1 | | sym_name n | |--------------------| .......... |--------------------| | handler 1 | | handler n | \--------------------/ \--------------------/ | | entry ++ ----> -- Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss