From mboxrd@z Thu Jan 1 00:00:00 1970 From: Albert ARIBAUD Date: Wed, 11 Nov 2015 00:04:53 +0100 Subject: [U-Boot] [PATCH] Fix board init code to use a valid C runtime environment In-Reply-To: References: <1447114831-18627-1-git-send-email-albert.u.boot@aribaud.net> Message-ID: <20151111000453.0949228b@lilith> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hello Simon, On Tue, 10 Nov 2015 13:04:50 -0700, Simon Glass wrote: > I'm hoping we don't have to bring back this assembler. What we need in ASM is just the part that actually alters the stack (i.e., changes the SP of the architecture) so that no C function has to do it. > Do we really need to put everything in separate functions? We need the (non-C) allocation code to be told the size to allocate and to pass the base address of the allocated space, so that makes two calls per allocated space, and there's GD and malloc, so four calls. Now, I created one function per call, but there are ways to use less than four functions. I could have specified the allocations sizes directly in crt0.S, but I agree that all we can do in C should be done in C, so I kept the size calculations in C functions. We could also reduce the score to one function for GD and one for malloc as follows: instead of calling one ulong(*)(void) to get the size and one void(*)(void*) to initialize the allocated space, we could call one ulong(*)(void*) twice, first with the void* equal to NULL (and the function then returns the size it needs allocated) and second with the void* equal to the base address of the allocated space (and the function can then initialize it). We could even reduce this to one single ulong(int chunk_id, void*) where chunk_id would be either CHUNK_GD or CHUNK_MALLOC), and the function would return the right size or do the right initializations for the chunk considered. Plus, if a new type of chunk should be allocated in addition to GD and the malloc arena, this could be handled by adding a new chunk_id and adding cases in the alloc function for size computation and chunk initialization. > Perhaps you could add a bit more detail in the commit message as to > what problem this solves? Will do in v3. > Regards, > Simon Amicalement, -- Albert.